token-goat 2.9.30 → 2.9.31

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 (172) hide show
  1. package/README.md +24 -7
  2. package/SECURITY.md +10 -2
  3. package/THIRD_PARTY_NOTICES.md +1 -1
  4. package/dist/native/linux-arm64/tg-hook +0 -0
  5. package/dist/native/linux-x64/tg-hook +0 -0
  6. package/dist/native/win32-arm64/tg-hook.exe +0 -0
  7. package/dist/native/win32-x64/tg-hook.exe +0 -0
  8. package/dist/{token-goat-chunk-QSBRTGM2.mjs → token-goat-chunk-25TRAWET.mjs} +17 -7
  9. package/dist/token-goat-chunk-2KXO6V2B.mjs +203 -0
  10. package/dist/{token-goat-chunk-IVKIZWAB.mjs → token-goat-chunk-2M7E4PF7.mjs} +41 -12
  11. package/dist/{token-goat-chunk-SMVRN2HU.mjs → token-goat-chunk-2UPZGKKY.mjs} +2 -2
  12. package/dist/token-goat-chunk-2WLPWKHV.mjs +135 -0
  13. package/dist/token-goat-chunk-2XBMMDBD.mjs +126 -0
  14. package/dist/token-goat-chunk-32ZOY4N5.mjs +23 -0
  15. package/dist/token-goat-chunk-3EZRNKTK.mjs +188 -0
  16. package/dist/token-goat-chunk-4ADZHI7J.mjs +63 -0
  17. package/dist/token-goat-chunk-4GBVPH3D.mjs +242 -0
  18. package/dist/{token-goat-chunk-KWPNJBDH.mjs → token-goat-chunk-4GILLLWY.mjs} +7 -4
  19. package/dist/{token-goat-chunk-67TQJ76B.mjs → token-goat-chunk-4NAPX7BA.mjs} +36 -3
  20. package/dist/{token-goat-chunk-PU7V3FD6.mjs → token-goat-chunk-4SC7UJYV.mjs} +3354 -2553
  21. package/dist/token-goat-chunk-4SMRO4TO.mjs +366 -0
  22. package/dist/{token-goat-chunk-AFLYLHDH.mjs → token-goat-chunk-4ZBFWLXF.mjs} +283 -427
  23. package/dist/{token-goat-chunk-JDWCRD6M.mjs → token-goat-chunk-57BIAXJL.mjs} +73 -40
  24. package/dist/token-goat-chunk-5AC66HNP.mjs +115 -0
  25. package/dist/token-goat-chunk-5IMLKSOP.mjs +145 -0
  26. package/dist/token-goat-chunk-646E6U44.mjs +398 -0
  27. package/dist/token-goat-chunk-65N4RHP4.mjs +33 -0
  28. package/dist/{token-goat-chunk-JN4XMLSD.mjs → token-goat-chunk-6DG6HWP3.mjs} +8 -2
  29. package/dist/token-goat-chunk-6ENQSNRZ.mjs +573 -0
  30. package/dist/token-goat-chunk-6ZY4GNF2.mjs +91 -0
  31. package/dist/{token-goat-chunk-VPBBTSJR.mjs → token-goat-chunk-76FGDLRO.mjs} +262 -255
  32. package/dist/{token-goat-chunk-7IN2MKDS.mjs → token-goat-chunk-7EZTZOMC.mjs} +121 -289
  33. package/dist/{token-goat-chunk-OJBNYTJP.mjs → token-goat-chunk-7MAOA6X4.mjs} +640 -80
  34. package/dist/token-goat-chunk-7R2ZVVAX.mjs +218 -0
  35. package/dist/{token-goat-chunk-PD5VKH46.mjs → token-goat-chunk-AUNGYYQX.mjs} +2 -2
  36. package/dist/{token-goat-chunk-HG45AF2B.mjs → token-goat-chunk-AUQYRMMH.mjs} +794 -37
  37. package/dist/token-goat-chunk-B3PEKBYG.mjs +128 -0
  38. package/dist/{token-goat-chunk-A3CK6N5Z.mjs → token-goat-chunk-BA4HI6BW.mjs} +1309 -110
  39. package/dist/{token-goat-chunk-JB6QN6VF.mjs → token-goat-chunk-BFCWY73P.mjs} +59 -23
  40. package/dist/{token-goat-chunk-B45VMIIH.mjs → token-goat-chunk-BWGFUZZE.mjs} +7 -5
  41. package/dist/{token-goat-chunk-P4QMM4WK.mjs → token-goat-chunk-C75NA7PL.mjs} +50 -23
  42. package/dist/token-goat-chunk-CBIQ7WTD.mjs +87 -0
  43. package/dist/token-goat-chunk-CETM74KC.mjs +307 -0
  44. package/dist/{token-goat-chunk-H2PHHGM5.mjs → token-goat-chunk-CIMQ2BB3.mjs} +57 -12
  45. package/dist/{token-goat-chunk-N2NMER56.mjs → token-goat-chunk-CJLS3CDL.mjs} +46 -4
  46. package/dist/{token-goat-chunk-VES7EL7O.mjs → token-goat-chunk-CO3UYX6G.mjs} +1 -1
  47. package/dist/token-goat-chunk-COPNXRJM.mjs +154 -0
  48. package/dist/token-goat-chunk-CSJ5L3NL.mjs +479 -0
  49. package/dist/{token-goat-chunk-4LCCNRTG.mjs → token-goat-chunk-CVCEVUGK.mjs} +8 -6
  50. package/dist/{token-goat-chunk-B2RZZCSS.mjs → token-goat-chunk-CXHOFN7R.mjs} +37 -20
  51. package/dist/token-goat-chunk-D735C4QM.mjs +603 -0
  52. package/dist/{token-goat-chunk-APGZXSPS.mjs → token-goat-chunk-DGS2LVNA.mjs} +47 -30
  53. package/dist/{token-goat-chunk-54K3EUV3.mjs → token-goat-chunk-DOWRSMWO.mjs} +1 -1
  54. package/dist/token-goat-chunk-E45INMY3.mjs +71 -0
  55. package/dist/token-goat-chunk-EC5F37F4.mjs +244 -0
  56. package/dist/{token-goat-chunk-XTQAOTSO.mjs → token-goat-chunk-EDBDRVH5.mjs} +4 -1
  57. package/dist/{token-goat-chunk-5BCIJXMO.mjs → token-goat-chunk-EELTBKDM.mjs} +14 -10
  58. package/dist/{token-goat-chunk-W3QCJS6G.mjs → token-goat-chunk-F4HYL64R.mjs} +8 -6
  59. package/dist/token-goat-chunk-F6PAUIEK.mjs +624 -0
  60. package/dist/token-goat-chunk-FDSREWLX.mjs +692 -0
  61. package/dist/token-goat-chunk-GGGG7RWB.mjs +236 -0
  62. package/dist/{token-goat-chunk-C63JQV5K.mjs → token-goat-chunk-GL3ETKSC.mjs} +233 -15
  63. package/dist/token-goat-chunk-GVB2MUST.mjs +1298 -0
  64. package/dist/token-goat-chunk-GWFLAUMQ.mjs +307 -0
  65. package/dist/{token-goat-chunk-ZEJVMUQH.mjs → token-goat-chunk-HLPW63A7.mjs} +2 -2
  66. package/dist/{token-goat-chunk-GOLEOXZP.mjs → token-goat-chunk-HU4TORC5.mjs} +44 -26
  67. package/dist/{token-goat-chunk-Z57YODA2.mjs → token-goat-chunk-I7VKZZAW.mjs} +2 -2
  68. package/dist/{token-goat-chunk-NYKZLXMK.mjs → token-goat-chunk-IA6XSPE3.mjs} +6 -6
  69. package/dist/{token-goat-chunk-E3OQX2XT.mjs → token-goat-chunk-IAGXMHIK.mjs} +81 -42
  70. package/dist/{token-goat-chunk-HYBFA5X3.mjs → token-goat-chunk-IK2DRMFX.mjs} +24 -68
  71. package/dist/{token-goat-chunk-COBQGL5S.mjs → token-goat-chunk-INNPTRUX.mjs} +249 -299
  72. package/dist/{token-goat-chunk-7NADEDKJ.mjs → token-goat-chunk-JJ5BX4F4.mjs} +6 -1
  73. package/dist/{token-goat-chunk-PEPTHRFF.mjs → token-goat-chunk-JVFSHVFJ.mjs} +6 -6
  74. package/dist/token-goat-chunk-KGEFFSHD.mjs +50 -0
  75. package/dist/token-goat-chunk-KQBLRPBN.mjs +433 -0
  76. package/dist/{token-goat-chunk-Q5VTGRH7.mjs → token-goat-chunk-LCNQ2CNN.mjs} +55 -319
  77. package/dist/token-goat-chunk-M3LFJDPU.mjs +58 -0
  78. package/dist/token-goat-chunk-M52KPT3C.mjs +87 -0
  79. package/dist/token-goat-chunk-MBEG42H7.mjs +150 -0
  80. package/dist/{token-goat-chunk-EVC4TOLE.mjs → token-goat-chunk-METECDOH.mjs} +3 -12
  81. package/dist/{token-goat-chunk-T4FK7VOV.mjs → token-goat-chunk-MHX7XCC3.mjs} +2 -1
  82. package/dist/token-goat-chunk-N5LSOVSU.mjs +137 -0
  83. package/dist/{token-goat-chunk-LOBGHXPB.mjs → token-goat-chunk-N5MMR2IW.mjs} +1 -1
  84. package/dist/token-goat-chunk-N7B3JQ2C.mjs +160 -0
  85. package/dist/{token-goat-chunk-RHXKCZX3.mjs → token-goat-chunk-NISNMD7T.mjs} +2182 -2959
  86. package/dist/token-goat-chunk-NMD42SFQ.mjs +434 -0
  87. package/dist/token-goat-chunk-NOSS5VWY.mjs +174 -0
  88. package/dist/{token-goat-chunk-KQNZDCBD.mjs → token-goat-chunk-NSNSPPBG.mjs} +25 -3
  89. package/dist/token-goat-chunk-OBOFIHKN.mjs +38 -0
  90. package/dist/token-goat-chunk-OBRFJ5O5.mjs +76 -0
  91. package/dist/{token-goat-chunk-JTQQGXZH.mjs → token-goat-chunk-ODBT2USM.mjs} +124 -57
  92. package/dist/token-goat-chunk-OS5EM5PP.mjs +107 -0
  93. package/dist/token-goat-chunk-OUKDTVNU.mjs +1178 -0
  94. package/dist/token-goat-chunk-OXFMP75N.mjs +566 -0
  95. package/dist/{token-goat-chunk-DZX2YDPT.mjs → token-goat-chunk-OYIYKDDT.mjs} +2 -2
  96. package/dist/{token-goat-chunk-QCLDAQTS.mjs → token-goat-chunk-P6HQSWQ3.mjs} +50 -53
  97. package/dist/token-goat-chunk-P6VGNTQT.mjs +71 -0
  98. package/dist/{token-goat-chunk-7BXSNBY5.mjs → token-goat-chunk-PFWIMH2E.mjs} +23 -15
  99. package/dist/token-goat-chunk-PJZXIS3G.mjs +39 -0
  100. package/dist/token-goat-chunk-PUO5INXP.mjs +606 -0
  101. package/dist/{token-goat-chunk-GFBSN7BD.mjs → token-goat-chunk-PX5PQWTY.mjs} +22 -250
  102. package/dist/token-goat-chunk-Q5QDBC6O.mjs +111 -0
  103. package/dist/token-goat-chunk-QFNQXSDT.mjs +40 -0
  104. package/dist/{token-goat-chunk-FBNQNSJK.mjs → token-goat-chunk-QH7YVYOY.mjs} +2198 -2782
  105. package/dist/{token-goat-chunk-64FBPDTK.mjs → token-goat-chunk-QLMUHEPB.mjs} +12 -9
  106. package/dist/{token-goat-chunk-RZRTDST7.mjs → token-goat-chunk-QQOJIHL3.mjs} +37 -11
  107. package/dist/{token-goat-chunk-XKI4SEMX.mjs → token-goat-chunk-QQTWJY2O.mjs} +19 -0
  108. package/dist/{token-goat-chunk-U4N3BN2W.mjs → token-goat-chunk-QYHO5CPH.mjs} +3 -2
  109. package/dist/token-goat-chunk-RELAVWAD.mjs +27 -0
  110. package/dist/{token-goat-chunk-ETBHVDB6.mjs → token-goat-chunk-RSLPOBKQ.mjs} +22 -11
  111. package/dist/token-goat-chunk-SAMFDIS2.mjs +712 -0
  112. package/dist/token-goat-chunk-SDELXLDM.mjs +48 -0
  113. package/dist/{token-goat-chunk-4JJS54TR.mjs → token-goat-chunk-SOAFZNNZ.mjs} +161 -38
  114. package/dist/{token-goat-chunk-664RTTUV.mjs → token-goat-chunk-SRTHT7KV.mjs} +21 -16
  115. package/dist/{token-goat-chunk-4FVIAHSI.mjs → token-goat-chunk-T5P5ACNQ.mjs} +7 -6
  116. package/dist/token-goat-chunk-T5YGG4V3.mjs +45 -0
  117. package/dist/token-goat-chunk-TAUZ4OFS.mjs +110 -0
  118. package/dist/{token-goat-chunk-COTXZHTS.mjs → token-goat-chunk-TM6MC754.mjs} +4 -3
  119. package/dist/token-goat-chunk-TWUKBOMP.mjs +72 -0
  120. package/dist/{token-goat-chunk-3CHUNJ2O.mjs → token-goat-chunk-U2KSB4SG.mjs} +8 -5
  121. package/dist/{token-goat-chunk-3Z5S4KGM.mjs → token-goat-chunk-U4WHMG6Y.mjs} +29 -49
  122. package/dist/{token-goat-chunk-PY533T7F.mjs → token-goat-chunk-UGJHGR5A.mjs} +21 -15
  123. package/dist/{token-goat-chunk-CYCEYAEO.mjs → token-goat-chunk-UOUDVA5U.mjs} +1 -1
  124. package/dist/{token-goat-chunk-JDHE26RP.mjs → token-goat-chunk-URRJ33GR.mjs} +16 -5
  125. package/dist/{token-goat-chunk-56EIMS3E.mjs → token-goat-chunk-UZOROKIS.mjs} +23 -17
  126. package/dist/{token-goat-chunk-CZ3LUXYZ.mjs → token-goat-chunk-VIHGGGEI.mjs} +427 -308
  127. package/dist/token-goat-chunk-VTJLAA7P.mjs +21 -0
  128. package/dist/token-goat-chunk-VWDXLT4F.mjs +678 -0
  129. package/dist/{token-goat-chunk-YARZFCZS.mjs → token-goat-chunk-VWZA2H4P.mjs} +62 -53
  130. package/dist/{token-goat-chunk-SQSSNQPE.mjs → token-goat-chunk-VXEXMJDL.mjs} +3979 -4745
  131. package/dist/token-goat-chunk-WBA5SKT4.mjs +547 -0
  132. package/dist/{token-goat-chunk-SJHWVNDQ.mjs → token-goat-chunk-WDH44VAU.mjs} +7 -4
  133. package/dist/token-goat-chunk-X2SUP3EI.mjs +107 -0
  134. package/dist/token-goat-chunk-X3BELZSJ.mjs +125 -0
  135. package/dist/{token-goat-chunk-FZ3NEW5O.mjs → token-goat-chunk-XLRBNZCC.mjs} +13 -8
  136. package/dist/{token-goat-chunk-Z44YO3QZ.mjs → token-goat-chunk-XRKUX6CM.mjs} +1 -1
  137. package/dist/token-goat-chunk-XX6O25RN.mjs +82 -0
  138. package/dist/token-goat-chunk-XZSUHBVS.mjs +65 -0
  139. package/dist/{token-goat-chunk-WY3L4DVT.mjs → token-goat-chunk-Y2ZTQOCL.mjs} +13 -8
  140. package/dist/{token-goat-chunk-UQ5UK2T7.mjs → token-goat-chunk-YB4VMGK2.mjs} +1 -1
  141. package/dist/token-goat-chunk-YBIIY3HR.mjs +51 -0
  142. package/dist/{token-goat-chunk-ZQSJMO2R.mjs → token-goat-chunk-YHVDKQBR.mjs} +105 -105
  143. package/dist/{token-goat-chunk-H2K3QP6H.mjs → token-goat-chunk-YJB5XLWI.mjs} +8 -6
  144. package/dist/{token-goat-chunk-ZCDTCVIS.mjs → token-goat-chunk-YKB6AQG3.mjs} +5 -2
  145. package/dist/token-goat-chunk-YMTG2YA5.mjs +35 -0
  146. package/dist/token-goat-chunk-YPBZYQRV.mjs +40 -0
  147. package/dist/{token-goat-chunk-HOJLCGDP.mjs → token-goat-chunk-YY6AVUFL.mjs} +2033 -2251
  148. package/dist/token-goat-chunk-Z7N5OMMP.mjs +98 -0
  149. package/dist/token-goat-chunk-ZNMNUPAZ.mjs +938 -0
  150. package/dist/token-goat-hook-client.cjs +1 -1
  151. package/dist/token-goat-hook-client.mjs +3 -3
  152. package/dist/token-goat-hook.mjs +67 -38
  153. package/dist/token-goat.core.mjs +4 -4
  154. package/docs/C4_RUNTIME_ARCHITECTURE.md +1 -1
  155. package/docs/cli.md +40 -21
  156. package/docs/install.md +19 -9
  157. package/docs/security.md +5 -3
  158. package/package.json +2 -1
  159. package/dist/token-goat-chunk-5KDMCMF2.mjs +0 -362
  160. package/dist/token-goat-chunk-6QMAS7AB.mjs +0 -42
  161. package/dist/token-goat-chunk-7F2UBPD3.mjs +0 -397
  162. package/dist/token-goat-chunk-ARDNEC2U.mjs +0 -248
  163. package/dist/token-goat-chunk-ATCPY7EQ.mjs +0 -134
  164. package/dist/token-goat-chunk-EFHMMIGP.mjs +0 -68
  165. package/dist/token-goat-chunk-IVALLT3S.mjs +0 -48
  166. package/dist/token-goat-chunk-JDU3EXSU.mjs +0 -65
  167. package/dist/token-goat-chunk-MKPF4CL5.mjs +0 -37
  168. package/dist/token-goat-chunk-RC35RBUL.mjs +0 -312
  169. package/dist/token-goat-chunk-USILZ3T3.mjs +0 -53
  170. package/dist/token-goat-chunk-VL3YIFHZ.mjs +0 -2975
  171. package/dist/token-goat-chunk-XU4P6Z24.mjs +0 -133
  172. package/dist/token-goat-chunk-Y776AENC.mjs +0 -1597
@@ -0,0 +1,573 @@
1
+ import { createRequire as __cjsRequire } from 'node:module';
2
+ const require = __cjsRequire(import.meta.url);
3
+ import {
4
+ diagnoseSqlFailure
5
+ } from "./token-goat-chunk-PX5PQWTY.mjs";
6
+ import {
7
+ SEARCH_COMMAND_RE,
8
+ classifyToolError
9
+ } from "./token-goat-chunk-JVFSHVFJ.mjs";
10
+ import {
11
+ PIPELINE_PASSTHROUGH_HEADS,
12
+ extractCommand,
13
+ pureFileReadPath,
14
+ stripCommandPrefix,
15
+ unwrapCompressCommand
16
+ } from "./token-goat-chunk-ODBT2USM.mjs";
17
+ import {
18
+ splitShellSegments,
19
+ stripLeadingAssignments
20
+ } from "./token-goat-chunk-DGS2LVNA.mjs";
21
+ import {
22
+ applyHintTracking,
23
+ settleSelfScoredHints,
24
+ uncorrelatedHint
25
+ } from "./token-goat-chunk-4SMRO4TO.mjs";
26
+ import {
27
+ sessionSidecarPath
28
+ } from "./token-goat-chunk-WBA5SKT4.mjs";
29
+ import {
30
+ registerHook,
31
+ sessionStateKey
32
+ } from "./token-goat-chunk-C75NA7PL.mjs";
33
+ import {
34
+ OUTPUT_FIRST_TOOL_RESPONSE_KEYS,
35
+ contextOutput,
36
+ estimateResultCount,
37
+ extractToolResponseField,
38
+ getFilePath,
39
+ getToolInput,
40
+ getToolName,
41
+ passOutput,
42
+ resolveEventPath,
43
+ structuredResultCount
44
+ } from "./token-goat-chunk-76FGDLRO.mjs";
45
+ import {
46
+ recordStat
47
+ } from "./token-goat-chunk-U4WHMG6Y.mjs";
48
+ import {
49
+ buildLineIndex,
50
+ offsetToLine
51
+ } from "./token-goat-chunk-OUKDTVNU.mjs";
52
+ import {
53
+ redactSecrets
54
+ } from "./token-goat-chunk-T5P5ACNQ.mjs";
55
+ import {
56
+ ensureDirSync
57
+ } from "./token-goat-chunk-HU4TORC5.mjs";
58
+ import {
59
+ displaySafeText,
60
+ hostPathOfIndexKey,
61
+ normalizePath
62
+ } from "./token-goat-chunk-FNFBKLRD.mjs";
63
+ import {
64
+ init_define_import_meta_env
65
+ } from "./token-goat-chunk-A37V4PBF.mjs";
66
+
67
+ // src/hooks_tool_failure.ts
68
+ init_define_import_meta_env();
69
+ import { createHash } from "node:crypto";
70
+ import { existsSync, readFileSync as readFileSync2, statSync, writeFileSync as writeFileSync2 } from "node:fs";
71
+ import { dirname as dirname2, relative } from "node:path";
72
+
73
+ // src/call_streak.ts
74
+ init_define_import_meta_env();
75
+ import { readFileSync, writeFileSync } from "node:fs";
76
+ import { dirname } from "node:path";
77
+ var SERIAL_GAP_MS = 1e3;
78
+ var SERIAL_READS_BEFORE_HINT = 3;
79
+ var ZERO_HIT_SEARCHES_BEFORE_BRAKE = 3;
80
+ var MAX_BATCH_HINTS_PER_SESSION = 2;
81
+ var MAX_SEARCH_BRAKES_PER_SESSION = 2;
82
+ var STREAK_SUFFIX = ".call-streak";
83
+ var TG_SEARCH_RE = /^(?:token-goat|tg)\s+(?:answer|semantic|symbol|refs|locate)\b/;
84
+ var TG_MEANING_SEARCH_RE = /^(?:token-goat|tg)\s+(?:answer|semantic)\b/;
85
+ var TG_READ_RE = /^(?:token-goat|tg)\s+(?:read|section|outline|skeleton|brief)\b/;
86
+ var WRITE_REDIRECT_RE = /\d?>>?(?!\s*(?:&\d|\/dev\/null\b))/;
87
+ function freshState() {
88
+ return { promptId: "", lastReadPostAt: 0, inFlight: false, serialRun: 0, batchShownInRun: false, batchShown: 0, batchVerdict: "none", zeroHits: 0, brakeShownInRun: false, brakeShown: 0, brakeVerdict: false };
89
+ }
90
+ function readState(target) {
91
+ const state = freshState();
92
+ try {
93
+ const parsed = JSON.parse(readFileSync(target, "utf8"));
94
+ if (parsed === null || typeof parsed !== "object") return state;
95
+ const p = parsed;
96
+ for (const key of Object.keys(state)) {
97
+ if (typeof p[key] === typeof state[key]) state[key] = p[key];
98
+ }
99
+ if (!["none", "next_turn", "second_call"].includes(state.batchVerdict)) state.batchVerdict = "none";
100
+ } catch {
101
+ }
102
+ return state;
103
+ }
104
+ function writeState(target, state) {
105
+ try {
106
+ ensureDirSync(dirname(target));
107
+ writeFileSync(target, JSON.stringify(state), "utf8");
108
+ } catch {
109
+ }
110
+ }
111
+ var MUTATING = { readOnly: false, search: false, meaningSearch: false };
112
+ function isPassThroughStage(stage) {
113
+ const head = (stage.split(/\s/, 1)[0] ?? "").replace(/^.*[/\\]/, "");
114
+ return head !== "tee" && PIPELINE_PASSTHROUGH_HEADS.has(head);
115
+ }
116
+ function bashCallKind(event) {
117
+ const raw = extractCommand(event);
118
+ if (raw === void 0) return MUTATING;
119
+ const cmd = stripCommandPrefix(unwrapCompressCommand(raw) ?? raw);
120
+ const stages = splitShellSegments(cmd).map((s) => stripLeadingAssignments(s.trim())).filter((s) => s !== "");
121
+ if (stages.length === 0 || stages.some((s) => WRITE_REDIRECT_RE.test(s))) return MUTATING;
122
+ const searches = stages.filter((s) => SEARCH_COMMAND_RE.test(s) || TG_SEARCH_RE.test(s));
123
+ const readOnly = pureFileReadPath(cmd) !== null || stages.every((s) => SEARCH_COMMAND_RE.test(s) || TG_SEARCH_RE.test(s) || TG_READ_RE.test(s) || isPassThroughStage(s));
124
+ if (!readOnly) return MUTATING;
125
+ return { readOnly, search: searches.length > 0, meaningSearch: TG_MEANING_SEARCH_RE.test(stages[0] ?? "") };
126
+ }
127
+ function callKind(event) {
128
+ switch (event.toolName) {
129
+ case "Read":
130
+ return { readOnly: true, search: false, meaningSearch: false };
131
+ case "Grep":
132
+ case "Glob":
133
+ return { readOnly: true, search: true, meaningSearch: false };
134
+ case "Bash":
135
+ return bashCallKind(event);
136
+ default:
137
+ return MUTATING;
138
+ }
139
+ }
140
+ function searchResultCount(event) {
141
+ const structured = structuredResultCount(event.raw);
142
+ if (structured !== null) return structured;
143
+ const text = extractToolResponseField(event.raw, OUTPUT_FIRST_TOOL_RESPONSE_KEYS);
144
+ if (event.toolName === "Bash") return text.trim() === "" ? 0 : 1;
145
+ return text === "" ? null : estimateResultCount(text);
146
+ }
147
+ function batchHintText(run) {
148
+ return `[token-goat] ${run} reads/searches in a row each waited a full turn. Issue independent reads and searches together in one message.`;
149
+ }
150
+ function searchBrakeText(misses) {
151
+ return `[token-goat] ${misses} searches in a row found nothing. Search by meaning instead of guessing literals: \`token-goat answer "<question>"\` or \`token-goat semantic "<description>"\`.`;
152
+ }
153
+ function trackedLine(event, category, text) {
154
+ const out = applyHintTracking(event, contextOutput(text, [sessionStateKey(event)]), uncorrelatedHint(category));
155
+ if (out.hookType !== "context") return null;
156
+ recordStat("session_hint", 0, 0);
157
+ return out.context;
158
+ }
159
+ function breakStreaks(event, state) {
160
+ if (state.batchVerdict === "second_call") {
161
+ settleSelfScoredHints("read_batch", event, false);
162
+ state.batchVerdict = "none";
163
+ }
164
+ Object.assign(state, { lastReadPostAt: 0, inFlight: false, serialRun: 0, batchShownInRun: false, zeroHits: 0, brakeShownInRun: false });
165
+ }
166
+ function onReadOnlyPre(event, state, kind, now, canSpeak) {
167
+ const serial = !state.inFlight && (state.lastReadPostAt === 0 || now - state.lastReadPostAt > SERIAL_GAP_MS);
168
+ state.inFlight = true;
169
+ if (state.batchVerdict === "second_call") {
170
+ settleSelfScoredHints("read_batch", event, !serial);
171
+ state.batchVerdict = "none";
172
+ } else if (state.batchVerdict === "next_turn" && serial) {
173
+ state.batchVerdict = "second_call";
174
+ }
175
+ if (state.brakeVerdict && kind.search && serial) {
176
+ settleSelfScoredHints("search_brake", event, kind.meaningSearch);
177
+ state.brakeVerdict = false;
178
+ }
179
+ if (!serial) {
180
+ state.serialRun = 0;
181
+ state.batchShownInRun = false;
182
+ return null;
183
+ }
184
+ state.serialRun += 1;
185
+ if (state.serialRun < SERIAL_READS_BEFORE_HINT || state.batchShownInRun || state.batchShown >= MAX_BATCH_HINTS_PER_SESSION || !canSpeak) return null;
186
+ state.batchShownInRun = true;
187
+ const line = trackedLine(event, "read_batch", batchHintText(state.serialRun));
188
+ if (line === null) return null;
189
+ state.batchShown += 1;
190
+ state.batchVerdict = "next_turn";
191
+ return line;
192
+ }
193
+ function onSearchMiss(event, state, canSpeak) {
194
+ state.zeroHits += 1;
195
+ if (state.zeroHits < ZERO_HIT_SEARCHES_BEFORE_BRAKE || state.brakeShownInRun || state.brakeShown >= MAX_SEARCH_BRAKES_PER_SESSION || !canSpeak) return null;
196
+ state.brakeShownInRun = true;
197
+ const line = trackedLine(event, "search_brake", searchBrakeText(state.zeroHits));
198
+ if (line === null) return null;
199
+ state.brakeShown += 1;
200
+ state.brakeVerdict = true;
201
+ return line;
202
+ }
203
+ function onReadOnlyPost(event, state, kind, now, canSpeak) {
204
+ state.inFlight = false;
205
+ state.lastReadPostAt = now;
206
+ if (!kind.search) return null;
207
+ const count = searchResultCount(event);
208
+ if (count === null) return null;
209
+ if (count === 0) return onSearchMiss(event, state, canSpeak);
210
+ state.zeroHits = 0;
211
+ state.brakeShownInRun = false;
212
+ return null;
213
+ }
214
+ function withStreakState(event, update) {
215
+ if (!event.sessionId) return null;
216
+ const target = sessionSidecarPath(sessionStateKey(event), STREAK_SUFFIX);
217
+ if (target === null) return null;
218
+ const state = readState(target);
219
+ const before = JSON.stringify(state);
220
+ const promptId = event.raw["prompt_id"];
221
+ if (typeof promptId === "string" && promptId !== state.promptId) {
222
+ breakStreaks(event, state);
223
+ if (state.batchVerdict !== "none") settleSelfScoredHints("read_batch", event, null);
224
+ if (state.brakeVerdict) settleSelfScoredHints("search_brake", event, null);
225
+ state.batchVerdict = "none";
226
+ state.brakeVerdict = false;
227
+ state.promptId = promptId;
228
+ }
229
+ const line = update(state);
230
+ if (JSON.stringify(state) !== before) writeState(target, state);
231
+ return line;
232
+ }
233
+ function applyCallStreak(event, output, now) {
234
+ if (event.eventName !== "pre_tool_use" && event.eventName !== "post_tool_use") return output;
235
+ if (output.hookType === "deny") return output;
236
+ try {
237
+ const canSpeak = output.hookType === "pass" || output.hookType === "context";
238
+ const kind = callKind(event);
239
+ const line = withStreakState(event, (state) => {
240
+ if (!kind.readOnly) {
241
+ breakStreaks(event, state);
242
+ return null;
243
+ }
244
+ return event.eventName === "pre_tool_use" ? onReadOnlyPre(event, state, kind, now, canSpeak) : onReadOnlyPost(event, state, kind, now, canSpeak);
245
+ });
246
+ if (line === null) return output;
247
+ return output.hookType === "context" ? { ...output, context: `${output.context}
248
+ ${line}` } : contextOutput(line);
249
+ } catch {
250
+ return output;
251
+ }
252
+ }
253
+ function callStreakAfterFailure(event, reason) {
254
+ try {
255
+ const kind = callKind(event);
256
+ const line = withStreakState(event, (state) => {
257
+ if (!kind.readOnly) {
258
+ breakStreaks(event, state);
259
+ return null;
260
+ }
261
+ state.inFlight = false;
262
+ state.lastReadPostAt = Date.now();
263
+ return reason === "search_no_match" ? onSearchMiss(event, state, true) : null;
264
+ });
265
+ return line === null ? null : contextOutput(line);
266
+ } catch {
267
+ return null;
268
+ }
269
+ }
270
+
271
+ // src/hooks_verification.ts
272
+ init_define_import_meta_env();
273
+ var VERIFICATION_WORD = /test|jest|lint|check|build|compile|verify|tsc|ruff|clippy|mypy|pyright|\bvet\b/i;
274
+ function mayBeVerificationCommand(command) {
275
+ return VERIFICATION_WORD.test(command);
276
+ }
277
+ registerHook("stop", async (event) => (await import("./token-goat-chunk-OS5EM5PP.mjs")).stopHandler(event), { advisory: true });
278
+ async function noteFailedVerificationHandler(event) {
279
+ const executed = getToolInput(event)["command"];
280
+ const command = typeof executed === "string" ? unwrapCompressCommand(executed) ?? executed : null;
281
+ if (getToolName(event)?.toLowerCase() === "bash" && command !== null && mayBeVerificationCommand(command)) {
282
+ const [failure, verification] = await Promise.all([import("./token-goat-chunk-XZSUHBVS.mjs"), import("./token-goat-chunk-QFNQXSDT.mjs")]);
283
+ const errorText = failure.extractFailureText(event.raw);
284
+ if (errorText !== "") verification.noteFailedVerificationRun(command, errorText, event.raw["is_interrupt"] === true);
285
+ }
286
+ return passOutput();
287
+ }
288
+
289
+ // src/hooks_tool_failure.ts
290
+ var FAILURE_SUFFIX = ".tool-failures";
291
+ var MAX_TRACKED_FAILURES = 64;
292
+ var SIGNATURE_ERROR_CHARS = 200;
293
+ var LEDGER_VERSION = 2;
294
+ function failureSignature(toolName, errorText) {
295
+ const tool = toolName === void 0 || toolName === "" ? "unknown" : toolName;
296
+ const normalized = errorText.replace(/\s+/g, " ").trim().slice(0, SIGNATURE_ERROR_CHARS);
297
+ return `${tool} :: ${normalized}`;
298
+ }
299
+ function extractFailureText(raw) {
300
+ for (const key of ["error", "errorMessage", "tool_error", "toolError", "message", "reason"]) {
301
+ const value = raw[key];
302
+ if (typeof value === "string" && value.trim() !== "") return value;
303
+ }
304
+ const response = raw["tool_response"] ?? raw["toolResponse"];
305
+ if (typeof response === "string" && response.trim() !== "") return response;
306
+ if (response !== null && typeof response === "object") {
307
+ const nested = response["error"];
308
+ if (typeof nested === "string" && nested.trim() !== "") return nested;
309
+ }
310
+ return "";
311
+ }
312
+ function ledgerPath(sessionId) {
313
+ return sessionSidecarPath(sessionId, FAILURE_SUFFIX);
314
+ }
315
+ function readLedger(target) {
316
+ try {
317
+ const parsed = JSON.parse(readFileSync2(target, "utf8"));
318
+ if (parsed !== null && typeof parsed === "object") {
319
+ if (parsed.version !== LEDGER_VERSION) return { seen: {}, order: [] };
320
+ const seen = parsed.seen;
321
+ const order = parsed.order;
322
+ if (seen !== null && typeof seen === "object" && Array.isArray(order)) {
323
+ return { seen, order: order.filter((k) => typeof k === "string") };
324
+ }
325
+ }
326
+ } catch {
327
+ }
328
+ return { seen: {}, order: [] };
329
+ }
330
+ function writeLedger(target, ledger) {
331
+ try {
332
+ ensureDirSync(dirname2(target));
333
+ writeFileSync2(target, JSON.stringify({ version: LEDGER_VERSION, ...ledger }), "utf8");
334
+ } catch {
335
+ }
336
+ }
337
+ var REPEAT_NOTICE_EXEMPT = /* @__PURE__ */ new Set([
338
+ // Refusals and stops. Claude Code never delivers a refused call to this event (a PreToolUse deny fired no PostToolUseFailure in a 2.1.281 capture), so these guard the other harnesses that route failures here.
339
+ "interrupted",
340
+ // the payload's is_interrupt flag; the census has 0 rows because an interrupt never surfaces as an is_error result
341
+ "tg_deny",
342
+ // 2,762 rows, 283 repeats, 13 with the same input: the deny names the command to run instead
343
+ "tg_content_delivered",
344
+ // a deny whose text is the content (a Skill's compact slice or heading tree, a served Read sidecar): the call did its job, so there is nothing to retry
345
+ "hook_deny",
346
+ // 5 rows: another hook's refusal, with its own instruction
347
+ "user_rejected",
348
+ // 73 rows, 21 repeats, 1 with the same input
349
+ "auto_mode_blocked",
350
+ // 1 row
351
+ // Generic wording: a repeat was a different call that failed the same way.
352
+ "search_no_match",
353
+ // 99 repeats, 0 with the same input: every empty grep prints the same bare `Exit code 1`
354
+ "command_timeout",
355
+ // 41 repeats, 0 with the same input
356
+ "subagent_limit",
357
+ // 27 repeats, 1 with the same input; the harness's own text already says not to retry
358
+ "input_validation"
359
+ // 23 repeats, 0 with the same input
360
+ ]);
361
+ function repeatFailureNotice(toolName) {
362
+ const tool = toolName === void 0 || toolName === "" ? "This tool" : displaySafeText(toolName);
363
+ return `[token-goat] ${tool} just failed with the same error as an earlier call this session. Retrying it unchanged will fail the same way -- change the arguments, the tool, or the approach.`;
364
+ }
365
+ var nearMissLib;
366
+ async function loadNearMiss() {
367
+ try {
368
+ nearMissLib ??= await import("./token-goat-chunk-5IMLKSOP.mjs");
369
+ } catch {
370
+ }
371
+ }
372
+ var MAX_EDIT_DIAGNOSE_BYTES = 10 * 1024 * 1024;
373
+ function editOldStrings(event) {
374
+ const input = event.toolInput;
375
+ const out = [];
376
+ for (const key of ["old_string", "old_str", "target", "TargetContent"]) {
377
+ const value = input[key];
378
+ if (typeof value === "string" && value !== "") {
379
+ out.push(value);
380
+ break;
381
+ }
382
+ }
383
+ const edits = input["edits"];
384
+ if (Array.isArray(edits)) {
385
+ for (const entry of edits) {
386
+ const value = entry !== null && typeof entry === "object" ? entry["old_string"] : void 0;
387
+ if (typeof value === "string" && value !== "") out.push(value);
388
+ }
389
+ }
390
+ return out;
391
+ }
392
+ function diagnoseEditFailure(event, errorText) {
393
+ const toolName = getToolName(event);
394
+ if (!toolName || !/^(edit|multiedit|str_replace_editor)$/i.test(toolName)) {
395
+ return null;
396
+ }
397
+ const isMultiple = /multiple matches|not unique|found \d+ matches|matches \d+ times|more than one match/i.test(errorText);
398
+ const isNotFound = /no match|not found|could not find|zero matches|string to replace.*not found/i.test(errorText);
399
+ if (!isMultiple && !isNotFound) {
400
+ return null;
401
+ }
402
+ const fallbackPath = ["path", "TargetFile"].map((key) => event.toolInput[key]).find((value) => typeof value === "string" && value !== "");
403
+ const filePath = getFilePath(event) ?? (fallbackPath === void 0 ? void 0 : resolveEventPath(event, fallbackPath));
404
+ if (!filePath) return null;
405
+ const oldStrings = editOldStrings(event);
406
+ if (oldStrings.length === 0) return null;
407
+ const absPath = hostPathOfIndexKey(normalizePath(filePath));
408
+ if (!existsSync(absPath)) return null;
409
+ try {
410
+ const stat = statSync(absPath);
411
+ if (stat.size > MAX_EDIT_DIAGNOSE_BYTES) return null;
412
+ const fileContent = readFileSync2(absPath, "utf8");
413
+ const oldString = oldStrings.length === 1 ? oldStrings[0] : oldStrings.find((candidate) => isNotFound ? !fileContent.includes(candidate) : fileContent.indexOf(candidate) !== fileContent.lastIndexOf(candidate));
414
+ if (oldString === void 0) return null;
415
+ const relDisplay = displaySafeText(relative(process.cwd(), absPath).replace(/\\/g, "/") || absPath);
416
+ if (isMultiple) {
417
+ const matchLines = [];
418
+ const lineIndex = buildLineIndex(fileContent);
419
+ let pos = 0;
420
+ while (pos < fileContent.length) {
421
+ const idx = fileContent.indexOf(oldString, pos);
422
+ if (idx === -1) break;
423
+ matchLines.push(offsetToLine(lineIndex, idx));
424
+ pos = idx + Math.max(1, oldString.length);
425
+ }
426
+ if (matchLines.length > 1) {
427
+ const lineList = matchLines.slice(0, 5).join(", ");
428
+ const overflow = matchLines.length > 5 ? ` (+${matchLines.length - 5} more)` : "";
429
+ return `[token-goat] Edit failed: string matched ${matchLines.length} times in ${relDisplay} on lines ${lineList}${overflow}. Include 2-3 lines of surrounding context to make old_str unique.`;
430
+ }
431
+ }
432
+ if (isNotFound) {
433
+ const normOld = oldString.replace(/\r\n/g, "\n");
434
+ const normFile = fileContent.replace(/\r\n/g, "\n");
435
+ if (normFile.includes(normOld)) {
436
+ return `[token-goat] Edit failed: string not found in ${relDisplay}, but matches with normalized line endings. Check CRLF vs LF line endings or whitespace.`;
437
+ }
438
+ const nearMiss = nearMissLib?.findNearMiss(fileContent, oldString) ?? null;
439
+ const nearAdvice = nearMiss === null ? null : nearMissLib?.describeNearMiss(fileContent, relDisplay, nearMiss) ?? null;
440
+ if (nearAdvice !== null) return nearAdvice;
441
+ const firstLine = oldString.split(/\r?\n/)[0]?.trim() ?? "";
442
+ if (firstLine.length >= 10) {
443
+ const fileLines = fileContent.split("\n");
444
+ const similarLines = [];
445
+ for (let i = 0; i < fileLines.length; i++) {
446
+ const lineText = fileLines[i];
447
+ if (lineText !== void 0 && lineText.includes(firstLine)) {
448
+ similarLines.push(i + 1);
449
+ if (similarLines.length >= 3) break;
450
+ }
451
+ }
452
+ if (similarLines.length > 0) {
453
+ return `[token-goat] Edit failed: string not found in ${relDisplay}. A similar line was found on line ${similarLines.join(", ")} \u2014 view that range to copy exact text.`;
454
+ }
455
+ }
456
+ return `[token-goat] Edit failed: string not found in ${relDisplay}. View the target lines to copy the exact current content and indentation.`;
457
+ }
458
+ } catch {
459
+ }
460
+ return null;
461
+ }
462
+ function editAdviceOutput(event, text) {
463
+ const out = contextOutput(text);
464
+ return nearMissLib?.isNearMissAdvice(text) === true ? applyHintTracking(event, out, uncorrelatedHint("edit_near_miss")) : out;
465
+ }
466
+ var RECOVERY_SKIPPED = /* @__PURE__ */ new Set(["shell_syntax_error", "sleep_blocked"]);
467
+ function newSlot() {
468
+ return { lines: [], recovery: null, pathMiss: null };
469
+ }
470
+ function withExtraLines(base, lines) {
471
+ if (lines.length === 0) return base;
472
+ const extra = lines.join("\n");
473
+ if (base.hookType === "context") return contextOutput([base.context, extra].join("\n"), base.correlators);
474
+ return base.hookType === "pass" ? contextOutput(extra) : base;
475
+ }
476
+ function postToolUseFailureHandler(event) {
477
+ return adviseOnFailure(event, newSlot());
478
+ }
479
+ async function postToolUseFailureWithExtras(event) {
480
+ const slot = newSlot();
481
+ const toolName = getToolName(event);
482
+ if (toolName !== void 0 && /^(edit|multiedit|str_replace_editor)$/i.test(toolName)) await loadNearMiss();
483
+ const base = adviseOnFailure(event, slot);
484
+ try {
485
+ if (slot.recovery !== null) {
486
+ const { recoveryAfterFailure } = await import("./token-goat-chunk-FDSREWLX.mjs");
487
+ const recovery = recoveryAfterFailure(event, { command: slot.recovery.command, errorText: slot.recovery.errorText });
488
+ if (recovery !== null) slot.lines.push(recovery);
489
+ }
490
+ if (slot.pathMiss !== null) {
491
+ const { pathMissAfterFailure } = await import("./token-goat-chunk-3EZRNKTK.mjs");
492
+ const pathMiss = pathMissAfterFailure(event, slot.pathMiss);
493
+ if (pathMiss !== null) slot.lines.push(pathMiss);
494
+ }
495
+ } catch {
496
+ }
497
+ return withExtraLines(base, slot.lines);
498
+ }
499
+ function adviseOnFailure(event, slot) {
500
+ try {
501
+ const errorText = extractFailureText(event.raw);
502
+ if (errorText === "") return passOutput();
503
+ const toolName = getToolName(event);
504
+ const executed = getToolInput(event)["command"];
505
+ const command = typeof executed === "string" ? unwrapCompressCommand(executed) ?? executed : executed;
506
+ const verdict = classifyToolError(toolName, errorText, { isInterrupt: event.raw["is_interrupt"] === true, ...typeof command === "string" ? { command } : {} });
507
+ recordStat("tool_failure", 0, 0, void 0, `tool=${(toolName ?? "unknown").replace(/\s+/g, "_")} class=${verdict.kind} reason=${verdict.reason}`);
508
+ const streakLine = callStreakAfterFailure(event, verdict.reason);
509
+ if (toolName === "Bash" && typeof command === "string" && event.raw["is_interrupt"] !== true && !REPEAT_NOTICE_EXEMPT.has(verdict.reason) && !RECOVERY_SKIPPED.has(verdict.reason)) {
510
+ slot.recovery = { toolName, errorText, command };
511
+ }
512
+ if (verdict.reason === "path_not_found" && event.raw["is_interrupt"] !== true) {
513
+ slot.pathMiss = { toolName, errorText };
514
+ }
515
+ if (REPEAT_NOTICE_EXEMPT.has(verdict.reason)) return streakLine ?? passOutput();
516
+ if (!event.sessionId) return passOutput();
517
+ const target = ledgerPath(event.sessionId);
518
+ if (target === null) return passOutput();
519
+ const signature = createHash("sha256").update(failureSignature(toolName, redactSecrets(errorText).text)).digest("hex");
520
+ const ledger = readLedger(target);
521
+ const priorState = ledger.seen[signature];
522
+ const editDiagnostic = diagnoseEditFailure(event, errorText);
523
+ const sqlDiagnostic = diagnoseSqlFailure(event, errorText);
524
+ if (priorState === void 0) {
525
+ ledger.seen[signature] = false;
526
+ ledger.order.push(signature);
527
+ while (ledger.order.length > MAX_TRACKED_FAILURES) {
528
+ const evicted = ledger.order.shift();
529
+ if (evicted !== void 0) delete ledger.seen[evicted];
530
+ }
531
+ writeLedger(target, ledger);
532
+ if (editDiagnostic !== null) {
533
+ ledger.seen[signature] = true;
534
+ writeLedger(target, ledger);
535
+ return editAdviceOutput(event, editDiagnostic);
536
+ }
537
+ if (sqlDiagnostic !== null) {
538
+ ledger.seen[signature] = true;
539
+ writeLedger(target, ledger);
540
+ return contextOutput(sqlDiagnostic);
541
+ }
542
+ return passOutput();
543
+ }
544
+ if (priorState) return passOutput();
545
+ ledger.seen[signature] = true;
546
+ writeLedger(target, ledger);
547
+ if (editDiagnostic !== null) {
548
+ return editAdviceOutput(event, editDiagnostic);
549
+ }
550
+ if (sqlDiagnostic !== null) {
551
+ return contextOutput(sqlDiagnostic);
552
+ }
553
+ return contextOutput(repeatFailureNotice(toolName));
554
+ } catch {
555
+ return passOutput();
556
+ }
557
+ }
558
+ registerHook("post_tool_use_failure", noteFailedVerificationHandler, { advisory: true });
559
+ registerHook("post_tool_use_failure", postToolUseFailureWithExtras);
560
+
561
+ export {
562
+ applyCallStreak,
563
+ MAX_TRACKED_FAILURES,
564
+ failureSignature,
565
+ extractFailureText,
566
+ REPEAT_NOTICE_EXEMPT,
567
+ repeatFailureNotice,
568
+ loadNearMiss,
569
+ diagnoseEditFailure,
570
+ postToolUseFailureHandler,
571
+ postToolUseFailureWithExtras,
572
+ mayBeVerificationCommand
573
+ };
@@ -0,0 +1,91 @@
1
+ import { createRequire as __cjsRequire } from 'node:module';
2
+ const require = __cjsRequire(import.meta.url);
3
+ import {
4
+ NATIVE_FALLBACK_ENV,
5
+ RELAY_QUEUE_WAIT_MS,
6
+ buildEvent,
7
+ nativeFallbackDetail,
8
+ relay,
9
+ relayInProcess
10
+ } from "./token-goat-chunk-VXEXMJDL.mjs";
11
+ import "./token-goat-chunk-Q5QDBC6O.mjs";
12
+ import "./token-goat-chunk-G5PJ7AGM.mjs";
13
+ import "./token-goat-chunk-5RG5SBL6.mjs";
14
+ import "./token-goat-chunk-HLPW63A7.mjs";
15
+ import "./token-goat-chunk-KKUFXAPD.mjs";
16
+ import "./token-goat-chunk-6ENQSNRZ.mjs";
17
+ import "./token-goat-chunk-PX5PQWTY.mjs";
18
+ import "./token-goat-chunk-VWDXLT4F.mjs";
19
+ import "./token-goat-chunk-DOWRSMWO.mjs";
20
+ import "./token-goat-chunk-5AC66HNP.mjs";
21
+ import "./token-goat-chunk-PUO5INXP.mjs";
22
+ import "./token-goat-chunk-2XBMMDBD.mjs";
23
+ import "./token-goat-chunk-PFWIMH2E.mjs";
24
+ import "./token-goat-chunk-Z7N5OMMP.mjs";
25
+ import "./token-goat-chunk-LCNQ2CNN.mjs";
26
+ import "./token-goat-chunk-GWFLAUMQ.mjs";
27
+ import "./token-goat-chunk-PJZXIS3G.mjs";
28
+ import "./token-goat-chunk-JVFSHVFJ.mjs";
29
+ import "./token-goat-chunk-ODBT2USM.mjs";
30
+ import "./token-goat-chunk-DGS2LVNA.mjs";
31
+ import "./token-goat-chunk-INNPTRUX.mjs";
32
+ import "./token-goat-chunk-VWZA2H4P.mjs";
33
+ import "./token-goat-chunk-N5LSOVSU.mjs";
34
+ import "./token-goat-chunk-OBOFIHKN.mjs";
35
+ import "./token-goat-chunk-QH7YVYOY.mjs";
36
+ import "./token-goat-chunk-NOSS5VWY.mjs";
37
+ import "./token-goat-chunk-NMD42SFQ.mjs";
38
+ import "./token-goat-chunk-SAMFDIS2.mjs";
39
+ import "./token-goat-chunk-4SMRO4TO.mjs";
40
+ import "./token-goat-chunk-WBA5SKT4.mjs";
41
+ import "./token-goat-chunk-MNWKPRAL.mjs";
42
+ import "./token-goat-chunk-CIMQ2BB3.mjs";
43
+ import "./token-goat-chunk-WDH44VAU.mjs";
44
+ import "./token-goat-chunk-BPGCUMR7.mjs";
45
+ import "./token-goat-chunk-KQBLRPBN.mjs";
46
+ import "./token-goat-chunk-4ZBFWLXF.mjs";
47
+ import "./token-goat-chunk-C75NA7PL.mjs";
48
+ import "./token-goat-chunk-CBIQ7WTD.mjs";
49
+ import "./token-goat-chunk-P6VGNTQT.mjs";
50
+ import "./token-goat-chunk-76FGDLRO.mjs";
51
+ import "./token-goat-chunk-GL3ETKSC.mjs";
52
+ import "./token-goat-chunk-OXFMP75N.mjs";
53
+ import "./token-goat-chunk-NISNMD7T.mjs";
54
+ import "./token-goat-chunk-EVMZJ27Z.mjs";
55
+ import "./token-goat-chunk-IK2DRMFX.mjs";
56
+ import "./token-goat-chunk-5Y6ZYL6U.mjs";
57
+ import "./token-goat-chunk-4NAPX7BA.mjs";
58
+ import "./token-goat-chunk-U4WHMG6Y.mjs";
59
+ import "./token-goat-chunk-GVB2MUST.mjs";
60
+ import "./token-goat-chunk-XB5KKOCG.mjs";
61
+ import "./token-goat-chunk-OUKDTVNU.mjs";
62
+ import "./token-goat-chunk-3BTK54F3.mjs";
63
+ import "./token-goat-chunk-4GILLLWY.mjs";
64
+ import "./token-goat-chunk-BFCWY73P.mjs";
65
+ import "./token-goat-chunk-KGEFFSHD.mjs";
66
+ import "./token-goat-chunk-XX6O25RN.mjs";
67
+ import "./token-goat-chunk-HAVAOB3S.mjs";
68
+ import "./token-goat-chunk-F6PAUIEK.mjs";
69
+ import "./token-goat-chunk-65N4RHP4.mjs";
70
+ import "./token-goat-chunk-X2SUP3EI.mjs";
71
+ import "./token-goat-chunk-T5P5ACNQ.mjs";
72
+ import "./token-goat-chunk-7EZTZOMC.mjs";
73
+ import "./token-goat-chunk-QYHO5CPH.mjs";
74
+ import "./token-goat-chunk-4GBVPH3D.mjs";
75
+ import "./token-goat-chunk-YZAAZU2S.mjs";
76
+ import "./token-goat-chunk-IVE6U7KV.mjs";
77
+ import "./token-goat-chunk-Y4AFKTHK.mjs";
78
+ import "./token-goat-chunk-HU4TORC5.mjs";
79
+ import "./token-goat-chunk-GGGG7RWB.mjs";
80
+ import "./token-goat-chunk-AM5V6GSX.mjs";
81
+ import "./token-goat-chunk-FNFBKLRD.mjs";
82
+ import "./token-goat-chunk-CO3UYX6G.mjs";
83
+ import "./token-goat-chunk-A37V4PBF.mjs";
84
+ export {
85
+ NATIVE_FALLBACK_ENV,
86
+ RELAY_QUEUE_WAIT_MS,
87
+ buildEvent,
88
+ nativeFallbackDetail,
89
+ relay,
90
+ relayInProcess
91
+ };