token-goat 2.9.28 → 2.9.30

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 (134) hide show
  1. package/README.md +36 -40
  2. package/SECURITY.md +28 -10
  3. package/THIRD_PARTY_NOTICES.md +40 -3
  4. package/dist/native/linux-arm64/tg-hook +0 -0
  5. package/dist/native/linux-x64/tg-hook +0 -0
  6. package/dist/ort-wasm-simd-threaded.mjs +59 -0
  7. package/dist/token-goat-chunk-3CHUNJ2O.mjs +53 -0
  8. package/dist/token-goat-chunk-3Z5S4KGM.mjs +918 -0
  9. package/dist/token-goat-chunk-4FVIAHSI.mjs +211 -0
  10. package/dist/{token-goat-chunk-66LODAUT.mjs → token-goat-chunk-4JJS54TR.mjs} +4 -3
  11. package/dist/token-goat-chunk-4LCCNRTG.mjs +313 -0
  12. package/dist/token-goat-chunk-54K3EUV3.mjs +35 -0
  13. package/dist/token-goat-chunk-56EIMS3E.mjs +159 -0
  14. package/dist/token-goat-chunk-5BCIJXMO.mjs +609 -0
  15. package/dist/token-goat-chunk-5KDMCMF2.mjs +362 -0
  16. package/dist/token-goat-chunk-5RG5SBL6.mjs +221 -0
  17. package/dist/{token-goat-chunk-RRNZMM3A.mjs → token-goat-chunk-5Y6ZYL6U.mjs} +21 -2
  18. package/dist/{token-goat-chunk-NILVK7XM.mjs → token-goat-chunk-64FBPDTK.mjs} +12 -6
  19. package/dist/{token-goat-chunk-LEG3JNJ6.mjs → token-goat-chunk-664RTTUV.mjs} +31 -15
  20. package/dist/token-goat-chunk-67TQJ76B.mjs +57 -0
  21. package/dist/token-goat-chunk-6QMAS7AB.mjs +42 -0
  22. package/dist/token-goat-chunk-7BXSNBY5.mjs +253 -0
  23. package/dist/{token-goat-chunk-F7QZRIWM.mjs → token-goat-chunk-7F2UBPD3.mjs} +42 -35
  24. package/dist/{token-goat-chunk-CC2PYJM7.mjs → token-goat-chunk-7IN2MKDS.mjs} +718 -595
  25. package/dist/token-goat-chunk-7NADEDKJ.mjs +124 -0
  26. package/dist/{token-goat-chunk-6SGLIPQB.mjs → token-goat-chunk-A3CK6N5Z.mjs} +621 -72
  27. package/dist/{token-goat-chunk-HXNAC4ZF.mjs → token-goat-chunk-AFLYLHDH.mjs} +48 -33
  28. package/dist/token-goat-chunk-AM5V6GSX.mjs +367 -0
  29. package/dist/{token-goat-chunk-I7CB3X4K.mjs → token-goat-chunk-APGZXSPS.mjs} +44 -148
  30. package/dist/{token-goat-chunk-BJBRGPBX.mjs → token-goat-chunk-ARDNEC2U.mjs} +11 -7
  31. package/dist/token-goat-chunk-ATCPY7EQ.mjs +134 -0
  32. package/dist/token-goat-chunk-B2RZZCSS.mjs +354 -0
  33. package/dist/{token-goat-chunk-QM76S6YS.mjs → token-goat-chunk-B45VMIIH.mjs} +6 -5
  34. package/dist/token-goat-chunk-BPGCUMR7.mjs +30 -0
  35. package/dist/{token-goat-chunk-GGLEE35R.mjs → token-goat-chunk-C63JQV5K.mjs} +49 -10
  36. package/dist/{token-goat-chunk-RJH64KQH.mjs → token-goat-chunk-COBQGL5S.mjs} +2661 -2440
  37. package/dist/token-goat-chunk-COTXZHTS.mjs +39 -0
  38. package/dist/token-goat-chunk-CYCEYAEO.mjs +265 -0
  39. package/dist/token-goat-chunk-CZ3LUXYZ.mjs +4115 -0
  40. package/dist/token-goat-chunk-DZX2YDPT.mjs +15 -0
  41. package/dist/token-goat-chunk-E3OQX2XT.mjs +824 -0
  42. package/dist/token-goat-chunk-EFHMMIGP.mjs +68 -0
  43. package/dist/token-goat-chunk-ETBHVDB6.mjs +328 -0
  44. package/dist/token-goat-chunk-EVMZJ27Z.mjs +147 -0
  45. package/dist/token-goat-chunk-EXKGNHEG.mjs +2096 -0
  46. package/dist/{token-goat-chunk-6Z5ULNE5.mjs → token-goat-chunk-FBNQNSJK.mjs} +2490 -4957
  47. package/dist/{token-goat-chunk-NMTKNYGF.mjs → token-goat-chunk-FNFBKLRD.mjs} +74 -9
  48. package/dist/{token-goat-chunk-XI2VFAV6.mjs → token-goat-chunk-FZ3NEW5O.mjs} +33 -19
  49. package/dist/token-goat-chunk-G5PJ7AGM.mjs +36 -0
  50. package/dist/{token-goat-chunk-VE27HPIF.mjs → token-goat-chunk-GFBSN7BD.mjs} +30 -398
  51. package/dist/{token-goat-chunk-L45ZQRT7.mjs → token-goat-chunk-GOLEOXZP.mjs} +780 -786
  52. package/dist/token-goat-chunk-H2K3QP6H.mjs +24 -0
  53. package/dist/token-goat-chunk-H2PHHGM5.mjs +188 -0
  54. package/dist/token-goat-chunk-HAVAOB3S.mjs +87 -0
  55. package/dist/token-goat-chunk-HG45AF2B.mjs +2228 -0
  56. package/dist/{token-goat-chunk-CBMY2FGI.mjs → token-goat-chunk-HOJLCGDP.mjs} +17113 -15554
  57. package/dist/{token-goat-chunk-HUDC5GS5.mjs → token-goat-chunk-HYBFA5X3.mjs} +120 -19
  58. package/dist/token-goat-chunk-IVALLT3S.mjs +48 -0
  59. package/dist/token-goat-chunk-IVE6U7KV.mjs +53 -0
  60. package/dist/{token-goat-chunk-UBUKHVYW.mjs → token-goat-chunk-IVKIZWAB.mjs} +3 -3
  61. package/dist/{token-goat-chunk-4JMWPWCS.mjs → token-goat-chunk-JB6QN6VF.mjs} +6 -4
  62. package/dist/{token-goat-chunk-Q4S3UQGO.mjs → token-goat-chunk-JDHE26RP.mjs} +10 -3
  63. package/dist/{token-goat-chunk-7R2XYKC5.mjs → token-goat-chunk-JDU3EXSU.mjs} +14 -10
  64. package/dist/token-goat-chunk-JDWCRD6M.mjs +253 -0
  65. package/dist/{token-goat-chunk-XBESNWEX.mjs → token-goat-chunk-JN4XMLSD.mjs} +7 -4
  66. package/dist/token-goat-chunk-JTQQGXZH.mjs +733 -0
  67. package/dist/token-goat-chunk-KKUFXAPD.mjs +25 -0
  68. package/dist/token-goat-chunk-KQNZDCBD.mjs +47 -0
  69. package/dist/{token-goat-chunk-4RN64ZND.mjs → token-goat-chunk-KWPNJBDH.mjs} +28 -3
  70. package/dist/token-goat-chunk-LOBGHXPB.mjs +242 -0
  71. package/dist/token-goat-chunk-MKPF4CL5.mjs +37 -0
  72. package/dist/token-goat-chunk-MNWKPRAL.mjs +13 -0
  73. package/dist/{token-goat-chunk-YWSP6IU7.mjs → token-goat-chunk-N2NMER56.mjs} +25 -15
  74. package/dist/token-goat-chunk-NYKZLXMK.mjs +218 -0
  75. package/dist/token-goat-chunk-OJBNYTJP.mjs +3087 -0
  76. package/dist/token-goat-chunk-P4QMM4WK.mjs +295 -0
  77. package/dist/token-goat-chunk-PD5VKH46.mjs +184 -0
  78. package/dist/token-goat-chunk-PEPTHRFF.mjs +129 -0
  79. package/dist/{token-goat-chunk-VWZKZPSR.mjs → token-goat-chunk-PU7V3FD6.mjs} +8752 -11098
  80. package/dist/token-goat-chunk-PY533T7F.mjs +46 -0
  81. package/dist/token-goat-chunk-Q5VTGRH7.mjs +761 -0
  82. package/dist/{token-goat-chunk-IHKZ3QNA.mjs → token-goat-chunk-QCLDAQTS.mjs} +33 -19
  83. package/dist/{token-goat-chunk-LKSXAMJB.mjs → token-goat-chunk-QSBRTGM2.mjs} +9 -2
  84. package/dist/{token-goat-chunk-4STDIGYC.mjs → token-goat-chunk-RC35RBUL.mjs} +7 -5
  85. package/dist/{token-goat-chunk-D5ICEPSB.mjs → token-goat-chunk-RHXKCZX3.mjs} +887 -507
  86. package/dist/{token-goat-chunk-RSS3TLXU.mjs → token-goat-chunk-RZRTDST7.mjs} +17 -7
  87. package/dist/{token-goat-chunk-MAMQPC43.mjs → token-goat-chunk-SJHWVNDQ.mjs} +15 -21
  88. package/dist/token-goat-chunk-SMVRN2HU.mjs +188 -0
  89. package/dist/{token-goat-chunk-EL7M26WP.mjs → token-goat-chunk-SQSSNQPE.mjs} +2100 -1442
  90. package/dist/{token-goat-chunk-OZRSREKR.mjs → token-goat-chunk-T4FK7VOV.mjs} +3 -3
  91. package/dist/token-goat-chunk-U4N3BN2W.mjs +92 -0
  92. package/dist/token-goat-chunk-UA5V6P3P.mjs +122 -0
  93. package/dist/{token-goat-chunk-XKY4VKJ4.mjs → token-goat-chunk-UQ5UK2T7.mjs} +15 -4
  94. package/dist/token-goat-chunk-USILZ3T3.mjs +53 -0
  95. package/dist/token-goat-chunk-VES7EL7O.mjs +205 -0
  96. package/dist/{token-goat-chunk-M56BWPBN.mjs → token-goat-chunk-VL3YIFHZ.mjs} +550 -49
  97. package/dist/{token-goat-chunk-IZXKVT4A.mjs → token-goat-chunk-VPBBTSJR.mjs} +362 -128
  98. package/dist/{token-goat-chunk-F2ARFHLJ.mjs → token-goat-chunk-W3QCJS6G.mjs} +10 -2
  99. package/dist/{token-goat-chunk-FSTWAOW6.mjs → token-goat-chunk-WY3L4DVT.mjs} +11 -5
  100. package/dist/{token-goat-chunk-OSUFN2FV.mjs → token-goat-chunk-XB5KKOCG.mjs} +5 -25
  101. package/dist/token-goat-chunk-XKI4SEMX.mjs +66 -0
  102. package/dist/token-goat-chunk-XU4P6Z24.mjs +133 -0
  103. package/dist/{token-goat-chunk-6CCQDAYY.mjs → token-goat-chunk-Y776AENC.mjs} +138 -33
  104. package/dist/token-goat-chunk-YARZFCZS.mjs +359 -0
  105. package/dist/{token-goat-chunk-EEIDFMEM.mjs → token-goat-chunk-YZAAZU2S.mjs} +12 -3
  106. package/dist/{token-goat-chunk-E3K3BTEQ.mjs → token-goat-chunk-Z44YO3QZ.mjs} +12 -6
  107. package/dist/token-goat-chunk-Z57YODA2.mjs +35 -0
  108. package/dist/{token-goat-chunk-DA43OE7L.mjs → token-goat-chunk-ZCDTCVIS.mjs} +49 -30
  109. package/dist/token-goat-chunk-ZEJVMUQH.mjs +48 -0
  110. package/dist/{token-goat-chunk-BGHSSJUA.mjs → token-goat-chunk-ZFOBKUWH.mjs} +1 -1
  111. package/dist/token-goat-chunk-ZMBL6UVV.mjs +110 -0
  112. package/dist/{token-goat-chunk-SJEKA7Y2.mjs → token-goat-chunk-ZQSJMO2R.mjs} +381 -201
  113. package/dist/token-goat-hook-client.cjs +539 -0
  114. package/dist/token-goat-hook-client.mjs +26 -0
  115. package/dist/token-goat-hook.mjs +48 -28
  116. package/dist/token-goat.core.mjs +10 -45
  117. package/docs/C4_RUNTIME_ARCHITECTURE.md +3 -3
  118. package/docs/cli.md +82 -47
  119. package/docs/install.md +58 -23
  120. package/docs/security.md +7 -7
  121. package/package.json +17 -7
  122. package/scripts/verify-native-dist.mjs +386 -0
  123. package/dist/token-goat-chunk-4JJBFT7V.mjs +0 -20
  124. package/dist/token-goat-chunk-5NNYIUGV.mjs +0 -143
  125. package/dist/token-goat-chunk-6DQNNFJ6.mjs +0 -294
  126. package/dist/token-goat-chunk-7MAFDRVR.mjs +0 -47
  127. package/dist/token-goat-chunk-BCN2YQC6.mjs +0 -32
  128. package/dist/token-goat-chunk-D7GHQKQD.mjs +0 -30
  129. package/dist/token-goat-chunk-GMOUBOX4.mjs +0 -386
  130. package/dist/token-goat-chunk-IFORDBGC.mjs +0 -192
  131. package/dist/token-goat-chunk-JXK2HQXS.mjs +0 -318
  132. package/dist/token-goat-chunk-L7SDVGBT.mjs +0 -430
  133. package/dist/token-goat-chunk-MMLMALWK.mjs +0 -1381
  134. package/dist/token-goat-chunk-MVSWBNMD.mjs +0 -1985
@@ -0,0 +1,39 @@
1
+ import { createRequire as __cjsRequire } from 'node:module';
2
+ const require = __cjsRequire(import.meta.url);
3
+ import {
4
+ DownloadCooldownError,
5
+ DownloadFailedError,
6
+ MODEL_DOWNLOAD_HOST,
7
+ RUNTIME_DOWNLOAD_HOST,
8
+ activeDownloadCooldown,
9
+ clearDownloadFailure,
10
+ describeCause,
11
+ downloadFailureRecordPath,
12
+ downloadHoldMs,
13
+ failedAtOf,
14
+ isExplicitDownload,
15
+ lastDownloadFailure,
16
+ recordDownloadFailure,
17
+ withExplicitDownload
18
+ } from "./token-goat-chunk-SMVRN2HU.mjs";
19
+ import "./token-goat-chunk-GOLEOXZP.mjs";
20
+ import "./token-goat-chunk-AM5V6GSX.mjs";
21
+ import "./token-goat-chunk-FNFBKLRD.mjs";
22
+ import "./token-goat-chunk-VES7EL7O.mjs";
23
+ import "./token-goat-chunk-A37V4PBF.mjs";
24
+ export {
25
+ DownloadCooldownError,
26
+ DownloadFailedError,
27
+ MODEL_DOWNLOAD_HOST,
28
+ RUNTIME_DOWNLOAD_HOST,
29
+ activeDownloadCooldown,
30
+ clearDownloadFailure,
31
+ describeCause,
32
+ downloadFailureRecordPath,
33
+ downloadHoldMs,
34
+ failedAtOf,
35
+ isExplicitDownload,
36
+ lastDownloadFailure,
37
+ recordDownloadFailure,
38
+ withExplicitDownload
39
+ };
@@ -0,0 +1,265 @@
1
+ import { createRequire as __cjsRequire } from 'node:module';
2
+ const require = __cjsRequire(import.meta.url);
3
+ import {
4
+ PROTOCOL_VERSION,
5
+ SERVER_SLOTS,
6
+ configStamp,
7
+ encodeFrame,
8
+ endpointFor,
9
+ envSnapshot,
10
+ frameFits,
11
+ launcherPath,
12
+ mac,
13
+ macMatches,
14
+ markerAgeMs,
15
+ nonce,
16
+ readFrames,
17
+ readMarker,
18
+ readServerKey,
19
+ touchMarker,
20
+ writeFrame
21
+ } from "./token-goat-chunk-LOBGHXPB.mjs";
22
+ import {
23
+ envBool
24
+ } from "./token-goat-chunk-IVE6U7KV.mjs";
25
+ import {
26
+ init_define_import_meta_env
27
+ } from "./token-goat-chunk-A37V4PBF.mjs";
28
+
29
+ // src/hook_client.ts
30
+ init_define_import_meta_env();
31
+ import { spawn } from "node:child_process";
32
+ import * as fs from "node:fs";
33
+ import * as net from "node:net";
34
+ import * as os from "node:os";
35
+ var HANDSHAKE_TIMEOUT_MS = 150;
36
+ var FIND_BUDGET_MS = 300;
37
+ var HEDGE_MS = 40;
38
+ var RESPONSE_TIMEOUT_MS = 12e4;
39
+ var CONTROL_WAIT_MS = 1e4;
40
+ var SPAWN_RETRY_MS = 3e4;
41
+ var DISABLED_MARKER_TTL_MS = 10 * 6e4;
42
+ function attempt(slot, key, request, handshakeMs, dir, race) {
43
+ return new Promise((resolve) => {
44
+ const socket = net.connect(endpointFor(slot, dir));
45
+ const nc = nonce();
46
+ let dispatched = false;
47
+ let settled = false;
48
+ const finish = (outcome) => {
49
+ if (settled) return;
50
+ settled = true;
51
+ clearTimeout(timer);
52
+ socket.destroy();
53
+ resolve(outcome);
54
+ };
55
+ let timer = setTimeout(() => finish({ kind: "busy" }), handshakeMs);
56
+ const cancel = () => {
57
+ if (!dispatched) finish({ kind: "busy" });
58
+ };
59
+ race?.onCancel(cancel);
60
+ socket.on("error", (e) => {
61
+ if (dispatched) finish({ kind: "lost" });
62
+ else finish({ kind: e.code === "ENOENT" || e.code === "ECONNREFUSED" ? "absent" : "refused" });
63
+ });
64
+ socket.on("close", () => finish({ kind: dispatched ? "lost" : "refused" }));
65
+ const control = request.kind === "status" || request.kind === "stop";
66
+ socket.on("connect", () => writeFrame(socket, { t: "hello", v: PROTOCOL_VERSION, nc, ...control ? { ctl: true } : {} }));
67
+ let ns = "";
68
+ readFrames(
69
+ socket,
70
+ (msg) => {
71
+ if (msg["t"] === "busy") return finish({ kind: "busy" });
72
+ if (msg["t"] === "stale") return finish({ kind: "stale" });
73
+ if (msg["t"] === "challenge" && !dispatched) {
74
+ ns = typeof msg["ns"] === "string" ? msg["ns"] : "";
75
+ if (ns === "" || msg["v"] !== PROTOCOL_VERSION || !macMatches(mac(key, "S", nc, ns), msg["mac"])) return finish({ kind: "refused" });
76
+ const body = JSON.stringify(request);
77
+ const frame = encodeFrame({ t: "req", mac: mac(key, "C", nc, ns, body), body });
78
+ if (!frameFits(frame)) return finish({ kind: "oversize" });
79
+ if (race !== void 0 && !race.claim(cancel)) return finish({ kind: "busy" });
80
+ dispatched = true;
81
+ clearTimeout(timer);
82
+ if (request.kind !== "cli") timer = setTimeout(() => finish({ kind: "lost" }), RESPONSE_TIMEOUT_MS);
83
+ socket.write(frame);
84
+ return;
85
+ }
86
+ if (msg["t"] === "res" && dispatched) {
87
+ const body = msg["body"];
88
+ if (typeof body !== "string" || !macMatches(mac(key, "R", nc, ns, body), msg["mac"])) return finish({ kind: "lost" });
89
+ try {
90
+ return finish({ kind: "served", reply: JSON.parse(body) });
91
+ } catch {
92
+ return finish({ kind: "lost" });
93
+ }
94
+ }
95
+ finish({ kind: dispatched ? "lost" : "refused" });
96
+ },
97
+ () => finish({ kind: dispatched ? "lost" : "refused" })
98
+ );
99
+ });
100
+ }
101
+ function startServer(slot) {
102
+ const launcher = launcherPath();
103
+ const disabled = markerAgeMs("disabled") < DISABLED_MARKER_TTL_MS && readMarker("disabled") === configStamp();
104
+ if (disabled || markerAgeMs(`spawn-${slot}`) < SPAWN_RETRY_MS || !fs.existsSync(launcher)) return;
105
+ touchMarker(`spawn-${slot}`);
106
+ try {
107
+ const child = spawn(process.execPath, [launcher, "hook-server", "run", "--slot", String(slot)], { cwd: os.tmpdir(), detached: true, stdio: "ignore", windowsHide: true });
108
+ child.on("error", () => void 0);
109
+ child.unref();
110
+ } catch {
111
+ }
112
+ }
113
+ function serverEnabled() {
114
+ return envBool("TOKEN_GOAT_HOOK_SERVER", true);
115
+ }
116
+ async function callServer(request, opts = {}) {
117
+ if (!serverEnabled()) return void 0;
118
+ const autostart = opts.autostart !== false;
119
+ const key = readServerKey();
120
+ if (key === void 0) {
121
+ if (autostart) startServer(0);
122
+ return void 0;
123
+ }
124
+ const deadline = Date.now() + FIND_BUDGET_MS;
125
+ const handshakeMs = opts.handshakeMs ?? HANDSHAKE_TIMEOUT_MS;
126
+ return new Promise((resolve) => {
127
+ let claimed = false;
128
+ let settled = false;
129
+ let exhausted = false;
130
+ let next = 0;
131
+ let pending = 0;
132
+ let hedge;
133
+ const cancels = [];
134
+ const settle = (value) => {
135
+ if (settled) return;
136
+ settled = true;
137
+ clearTimeout(hedge);
138
+ for (const cancel of cancels) cancel();
139
+ resolve(value);
140
+ };
141
+ const race = {
142
+ claim: (self) => {
143
+ if (claimed || settled) return false;
144
+ claimed = true;
145
+ clearTimeout(hedge);
146
+ for (const cancel of cancels) if (cancel !== self) cancel();
147
+ return true;
148
+ },
149
+ onCancel: (cancel) => cancels.push(cancel)
150
+ };
151
+ const askNext = () => {
152
+ clearTimeout(hedge);
153
+ if (settled || claimed || exhausted || next >= SERVER_SLOTS || Date.now() >= deadline) {
154
+ if (pending === 0 && !claimed) settle(void 0);
155
+ return;
156
+ }
157
+ const slot = next++;
158
+ pending++;
159
+ void attempt(slot, key, request, handshakeMs, void 0, race).then((outcome) => {
160
+ pending--;
161
+ if (outcome.kind === "served") return settle(outcome.reply);
162
+ if (outcome.kind === "lost") return settle("lost");
163
+ if (claimed) return;
164
+ if (outcome.kind === "stale" || outcome.kind === "oversize") return settle(void 0);
165
+ if (outcome.kind === "absent") {
166
+ if (autostart) startServer(slot);
167
+ exhausted = true;
168
+ }
169
+ askNext();
170
+ });
171
+ if (next < SERVER_SLOTS) hedge = setTimeout(askNext, HEDGE_MS);
172
+ };
173
+ askNext();
174
+ });
175
+ }
176
+ async function relayViaServer(event, input, harnessWaitMs) {
177
+ try {
178
+ const request = {
179
+ kind: "hook",
180
+ event,
181
+ input: typeof input === "string" ? input : JSON.stringify(input),
182
+ elapsedMs: performance.now(),
183
+ env: envSnapshot(),
184
+ cwd: process.cwd()
185
+ };
186
+ if (harnessWaitMs !== void 0) request.harnessWaitMs = harnessWaitMs;
187
+ const reply = await callServer(request);
188
+ if (reply === void 0) return void 0;
189
+ if (reply === "lost" || !reply.ok || !("stdout" in reply)) return "{}";
190
+ return reply.stdout;
191
+ } catch {
192
+ return void 0;
193
+ }
194
+ }
195
+ var WARM_CLI_COMMANDS = /* @__PURE__ */ new Set([
196
+ "answer",
197
+ "brief",
198
+ "call-chain",
199
+ "callers",
200
+ "changed",
201
+ "context-for",
202
+ "dead",
203
+ "deps",
204
+ "exports",
205
+ "find",
206
+ "impact",
207
+ "imports",
208
+ "locate",
209
+ "map",
210
+ "outline",
211
+ "read",
212
+ "refs",
213
+ "scope",
214
+ "section",
215
+ "semantic",
216
+ "similar",
217
+ "skeleton",
218
+ "symbol",
219
+ "test-for",
220
+ "types"
221
+ ]);
222
+ function warmCliEligible(argv) {
223
+ const command = argv[2];
224
+ if (command === void 0 || !WARM_CLI_COMMANDS.has(command) || process.stdout.isTTY === true) return false;
225
+ return !argv.slice(3).some((a) => a === "-" || a === "--stdin" || a === "--help" || a === "-h");
226
+ }
227
+ async function runCliViaServer(argv) {
228
+ if (!warmCliEligible(argv)) return false;
229
+ try {
230
+ const reply = await callServer({ kind: "cli", argv: argv.slice(2), env: envSnapshot(), cwd: process.cwd() });
231
+ if (reply === void 0 || reply === "lost" || !reply.ok || !("stdout" in reply)) return false;
232
+ if (reply.stdout !== "") process.stdout.write(reply.stdout);
233
+ if (reply.stderr !== void 0 && reply.stderr !== "") process.stderr.write(reply.stderr);
234
+ process.exitCode = reply.status ?? 0;
235
+ return true;
236
+ } catch {
237
+ return false;
238
+ }
239
+ }
240
+ async function serverStatuses(dir) {
241
+ return (await queryServers("status", dir)).flatMap(({ reply }) => reply.ok && "info" in reply ? [reply.info] : []);
242
+ }
243
+ async function queryServers(kind, dir) {
244
+ const key = readServerKey(dir);
245
+ if (key === void 0) return [];
246
+ const deadline = Date.now() + CONTROL_WAIT_MS;
247
+ const answered = [];
248
+ for (let slot = 0; slot < SERVER_SLOTS; slot++) {
249
+ let outcome = await attempt(slot, key, { kind }, 2e3, dir);
250
+ while (outcome.kind === "busy" && Date.now() < deadline) outcome = await attempt(slot, key, { kind }, 2e3, dir);
251
+ if (outcome.kind === "served") answered.push({ slot, reply: outcome.reply });
252
+ }
253
+ return answered;
254
+ }
255
+
256
+ export {
257
+ serverEnabled,
258
+ callServer,
259
+ relayViaServer,
260
+ WARM_CLI_COMMANDS,
261
+ warmCliEligible,
262
+ runCliViaServer,
263
+ serverStatuses,
264
+ queryServers
265
+ };