token-goat 2.6.31 → 2.6.33

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 (36) hide show
  1. package/README.md +21 -2
  2. package/SECURITY.md +67 -3
  3. package/dist/{token-goat-chunk-QL2743EW.mjs → token-goat-chunk-72R7M5H7.mjs} +6 -9
  4. package/dist/{token-goat-chunk-56C3XUQY.mjs → token-goat-chunk-77CX3MCN.mjs} +4 -7
  5. package/dist/token-goat-chunk-AEX54RUZ.mjs +11 -0
  6. package/dist/{token-goat-chunk-VYC34TBW.mjs → token-goat-chunk-AO2QD2AG.mjs} +0 -4
  7. package/dist/{token-goat-hook-chunk-FKZ5RBT4.mjs → token-goat-chunk-DG53MVNJ.mjs} +9 -105
  8. package/dist/{token-goat-chunk-P7I6LS5H.mjs → token-goat-chunk-FN6WLFIX.mjs} +49 -50
  9. package/dist/{token-goat-chunk-DCGBS2YZ.mjs → token-goat-chunk-G6XLWJWI.mjs} +4 -7
  10. package/dist/{token-goat-chunk-J6JTYE2B.mjs → token-goat-chunk-HPWPUBAK.mjs} +7 -7
  11. package/dist/{token-goat-chunk-PWD5XZ6C.mjs → token-goat-chunk-L6FVTDPD.mjs} +278 -204
  12. package/dist/{token-goat-chunk-OIBTYBVR.mjs → token-goat-chunk-OHQ7RBLL.mjs} +23 -24
  13. package/dist/{token-goat-chunk-XEJBPPD7.mjs → token-goat-chunk-RPOXYJWK.mjs} +3781 -3407
  14. package/dist/{token-goat-chunk-N2S7UAVU.mjs → token-goat-chunk-RQQ4SY2P.mjs} +11 -31
  15. package/dist/{token-goat-chunk-HPY7XE77.mjs → token-goat-chunk-TDYTBCT4.mjs} +1052 -1785
  16. package/dist/{token-goat-chunk-X7PIWZMB.mjs → token-goat-chunk-WFRR2DBG.mjs} +1131 -275
  17. package/dist/{token-goat-hook-chunk-3OJELLK5.mjs → token-goat-hook-chunk-26DLRODR.mjs} +4 -7
  18. package/dist/{token-goat-chunk-Q4N6SQWR.mjs → token-goat-hook-chunk-3QYSN4QV.mjs} +9 -105
  19. package/dist/{token-goat-hook-chunk-KNVHTGEX.mjs → token-goat-hook-chunk-BUOCULAM.mjs} +0 -4
  20. package/dist/{token-goat-hook-chunk-NIVRFAJ4.mjs → token-goat-hook-chunk-E6AIPKNF.mjs} +1131 -275
  21. package/dist/{token-goat-hook-chunk-K6HLYRRI.mjs → token-goat-hook-chunk-EKGDLI4D.mjs} +6 -9
  22. package/dist/{token-goat-hook-chunk-JVJUBWKT.mjs → token-goat-hook-chunk-HXHFLKEL.mjs} +11 -31
  23. package/dist/{token-goat-hook-chunk-2K7FV2ME.mjs → token-goat-hook-chunk-QD2DX2U7.mjs} +276 -203
  24. package/dist/token-goat-hook-chunk-RFRLWOQH.mjs +11 -0
  25. package/dist/{token-goat-hook-chunk-SJM4BUZQ.mjs → token-goat-hook-chunk-UWV4MTYI.mjs} +1064 -1795
  26. package/dist/{token-goat-hook-chunk-66W63A4Y.mjs → token-goat-hook-chunk-VDXQXYJK.mjs} +49 -50
  27. package/dist/{token-goat-hook-chunk-YHRJMMEF.mjs → token-goat-hook-chunk-WBBHV6TZ.mjs} +3782 -3408
  28. package/dist/token-goat-hook-chunk-XBOWDNJB.mjs +23 -0
  29. package/dist/{token-goat-hook-chunk-5AQYD2SZ.mjs → token-goat-hook-chunk-XUMIVYEN.mjs} +4 -7
  30. package/dist/{token-goat-hook-chunk-JT5RMRIY.mjs → token-goat-hook-chunk-ZT47M3IA.mjs} +23 -24
  31. package/dist/token-goat-hook.mjs +7 -12
  32. package/dist/token-goat.core.mjs +7 -10
  33. package/package.json +23 -35
  34. package/dist/token-goat-chunk-4WGVGN6W.mjs +0 -54
  35. package/dist/token-goat-hook-chunk-7WC2H3EW.mjs +0 -54
  36. package/dist/token-goat-hook-chunk-ULGSXGZK.mjs +0 -23
package/README.md CHANGED
@@ -9,6 +9,8 @@ permalink: /
9
9
 
10
10
  ![Token-Goat](assets/logo.png)
11
11
 
12
+ ***Give the model what it needs, not everything you have.***
13
+
12
14
  **85%** smaller reads · **97.4%** image compression · **180+** filter & interception rules · **94–99%** skill overhead cut · compaction memory · **prompt injection** guard · **3.7 GB** never reached the model · **1.1 Gt** tokens saved
13
15
 
14
16
  **Reduces AI token use/costs by 40–90%, and improves its focus. Fully automated, always online.**
@@ -19,7 +21,7 @@ permalink: /
19
21
 
20
22
  Token-Goat sits silently between your AI and your tools. Re-read a file? It gets a one-line hint and a narrow-slice suggestion instead of the full file again. Grab a screenshot? A 100 KB copy reaches the model instead of 10 MB. Run `pytest`, `npm install`, `docker build`, or `cargo`? The thousands of progress bars and passing-test names are stripped to the failures before the output even reaches the context window. Open a PDF, a large Markdown doc, or a CSV? The hook intercepts it — heading tree, page count, or column preview — so the model never pays for the full file. Run `gh run watch` or `next dev` a second time? Prior output is recalled rather than re-run. Compact a long session? It gets a clean structured manifest of edited files and key symbols so nothing important is forgotten. Sessions drop 40–90%+ in cost. You change nothing about how you work.
21
23
 
22
- Works with **Claude Code**, **Gemini CLI**, **Qwen Code**, **Codex CLI**, **Aider**, **Cursor**, **Cline**, **Windsurf**, **Copilot CLI**, **Grok CLI** (xAI Grok Build), and OpenCode, plus **pi** ([pi-coding-agent](https://github.com/earendil-works/pi-mono)).
24
+ Works with **Claude Code**, **Gemini CLI**, **Qwen Code**, **Codex CLI**, **Aider**, **Cursor**, **Cline**, **Windsurf**, **Copilot CLI**, **Kimi Code**, **Grok CLI** (xAI Grok Build), and OpenCode, plus **pi** ([pi-coding-agent](https://github.com/earendil-works/pi-mono)).
23
25
 
24
26
  **Ask your AI to install it fully (give it this GitHub link), or install in one command:**
25
27
 
@@ -393,6 +395,14 @@ token-goat install --qwen
393
395
 
394
396
  This writes hook entries into `~/.qwen/settings.json`. Unlike Gemini CLI (its own ancestor, with a custom `BeforeTool`/`AfterTool`/`PreCompress` event/matcher scheme), Qwen Code's hooks system diverged and now mirrors Claude Code's own natively — `PreToolUse`/`PostToolUse`/`PreCompact`/`UserPromptSubmit`/`SubagentStop` event names and snake_case stdin JSON — so token-goat wires all five events with no wire-format translation needed. Qwen Code's own tool-name taxonomy is only partially documented, so token-goat uses a catch-all matcher per event rather than an incomplete per-tool list. Image shrinking, session hints, post-edit indexing, compact assist, and bash output compression all work. This bridge was built from QwenLM/qwen-code's published docs, not dogfooded against a live Qwen Code install — if hooks aren't firing, `token-goat doctor` and the settings.json contents are the first things to check. To remove: `token-goat uninstall --qwen`.
395
397
 
398
+ ### Kimi Code users
399
+
400
+ ```
401
+ token-goat install --kimi
402
+ ```
403
+
404
+ This writes `[[hooks]]` entries into `~/.kimi-code/config.toml` (or `$KIMI_CODE_HOME/config.toml`), covering Kimi Code's `PreToolUse`, `PostToolUse`, `PreCompact`, `UserPromptSubmit`, `SubagentStop`, and `SessionStart` events. Kimi Code sends a Claude-Code-shaped snake_case payload on stdin, but it reads a different response: only a top-level `message` and `hookSpecificOutput.permissionDecision` / `permissionDecisionReason`. So the install also writes a small shim at `~/.kimi-code/hooks/token-goat-shim.js` that translates token-goat's answer into that contract, turns a hint into `message`, and writes nothing at all for a no-op. Image shrinking, session hints, post-edit indexing, compact assist, and bash output compression all work. `Notification` and `Stop` are not wired, because token-goat has no handler for them. Input and output rewriting are not wired either: Kimi Code offers no channel to replace a tool's input or its result. This bridge was built from MoonshotAI/kimi-code's own source and docs, not dogfooded against a live Kimi Code install, so if hooks are not firing, `token-goat doctor` and the `config.toml` contents are the first things to check. To remove: `token-goat uninstall --kimi`.
405
+
396
406
  ### opencode users
397
407
 
398
408
  ```
@@ -637,7 +647,7 @@ token-goat pdf-extract manual.pdf --pages 12-15 --layout --head 120
637
647
  | `token-goat hot [--limit N]` | Cross-session file frequency table: read and edit counts tallied from all stored sessions, ranked by total activity. Shows which files dominate your token spend across your entire history. `--project <dir>` filters to one project; `--json` for structured output. |
638
648
  | `token-goat note set/get/unset/list/clear` | Persistent per-project notes stored as key-value pairs. Token-goat injects them at session start and after compaction so they survive conversation rollover. Use to pin decisions, constraints, or reminders that would otherwise vanish after compaction. `note list --json` for machine-readable output; `note clear` removes everything at once. |
639
649
  | `token-goat project list` | Show all project roots indexed by token-goat with their file counts. Roots on the blocklist appear tagged `[excluded]`. `--json` for structured output. |
640
- | `token-goat project exclude <path>` | Add a project root to the blocklist so the worker never indexes it. Writes the resolved absolute path to `[worker] blocked_roots` in `config.toml`; idempotent. Remove the entry from the config to re-enable indexing. |
650
+ | `token-goat project exclude <path>` | Add a project root to the blocklist so the worker never indexes it. Writes the resolved absolute path to `[worker] blocked_roots` in `config.toml`; idempotent. It also removes anything already indexed under that path and says how many files went, so excluding a directory means its contents stop being readable through `symbol` rather than merely stopping future indexing. Remove the entry from the config to re-enable indexing, then run `token-goat index` to bring the contents back. |
641
651
  | `token-goat project prune [--dry-run]` | Remove blocked/excluded roots that no longer exist on disk. `--dry-run` previews removals without touching the config file. Useful after deleting or moving projects. |
642
652
  | `token-goat install` | Wire up hooks (and, with the harness flags below, other AI tool integrations). No `--dry-run` or `--verify` flag — run `token-goat doctor` after install to audit the result. |
643
653
  | `token-goat doctor` | Confirm everything is wired correctly. Surfaces install state, cold-import timing, cache hit rates, compaction-budget telemetry, opt-in flag status, and canonical-root sanity. A **Security** section reports the posture in one place: whether offline mode is on, whether injection scanning is on, whether the Google Drive integration is enabled, whether fetching runs against an allow list or a deny list, whether MCP reads are confined to the project root, and whether the data directory is readable by other local users. It only warns when a protection that ships on has been switched off, so a default install stays quiet. It read-only audits `~/.copilot/mcp-config.json` for globally configured Chrome DevTools or Playwright `npx` launchers, recommending project scope or removal when inactive; it never prints server configuration or secrets. On Windows, it also reports duplicate Chrome DevTools/Playwright MCP launchers and orphaned Node processes without terminating anything. Pass `--context` to show the **Context footprint** section: a fill bar with severity (ok / warn / high / URGENT), per-component breakdown (skills catalog, loaded skill bodies, CLAUDE.md+MEMORY.md, conversation estimate), session-to-session growth trend with sessions-to-URGENT projection, and tiered compaction recommendations (Tier 0–4) naming the exact commands to run. Auto-shown when fill > 40 % or any loaded skill > 2 K tokens lacks a compact. `--json` emits the check results (one entry per check, with `ok`/`warn`/`fail` status) as JSON instead of text. |
@@ -937,6 +947,15 @@ Three things follow, and they are worth knowing before you decide. It never leav
937
947
  |------|------|
938
948
  | `~/.qwen/settings.json` | Hook entries under Qwen Code's `PreToolUse`, `PostToolUse`, `PreCompact`, `UserPromptSubmit`, and `SubagentStop` events (Claude-Code-native names and payload shape, not Gemini's), using a catch-all matcher per event. Existing hooks preserved; a timestamped `.bak` is written before any change. |
939
949
 
950
+ **With `--kimi`** (Kimi Code integration)
951
+
952
+ | Path | What |
953
+ |------|------|
954
+ | `~/.kimi-code/config.toml` | `[[hooks]]` entries for Kimi Code's `PreToolUse`, `PostToolUse`, `PreCompact`, `UserPromptSubmit`, `SubagentStop`, and `SessionStart` events. Each entry carries only `event` and `command`, the keys Kimi Code's strict schema accepts. Existing hooks and other config keys preserved; a timestamped `.bak` is written before any change. |
955
+ | `~/.kimi-code/hooks/token-goat-shim.js` | The hook script those commands invoke. Rewrites a token-goat block into `hookSpecificOutput.permissionDecision` and a hint into a top-level `message`, and writes empty stdout for a no-op. Regenerated on every `install --kimi` run. |
956
+ | `~/.kimi-code/AGENTS.md` | A delimited block (`<!-- token-goat-kimi-begin -->` ... `<!-- token-goat-kimi-end -->`) with the routing guidance, adapted for Kimi Code tool names. |
957
+ | `~/.kimi-code/skills/token-goat/SKILL.md` | The same guidance as a Kimi Code skill. |
958
+
940
959
  **With `--opencode`** (opencode plugin)
941
960
 
942
961
  | Path | What |
package/SECURITY.md CHANGED
@@ -41,18 +41,31 @@ The following are not treated as security issues unless paired with a working pr
41
41
 
42
42
  ## Dependency advisories
43
43
 
44
- `npm audit --omit=dev` on the published package is not empty, and pretending otherwise would waste your review time. Every runtime advisory that remains traces to one of three packages. All three are already at their latest published version, so there is no forward patch to take: the only version npm offers as a "fix" is an older major that drops features Token-Goat uses.
44
+ `npm audit` gives three different answers for Token-Goat depending on what you scan, and the gap between them is the first thing to understand. All three numbers below are reproducible with the commands shown.
45
+
46
+ | What you scan | Command | Result |
47
+ | --- | --- | --- |
48
+ | this repository | `npm audit` | clean, development dependencies included |
49
+ | an install without optional packages | `npm install --omit=optional token-goat` then `npm audit --omit=dev --omit=optional` | clean, 46 packages |
50
+ | a default install | `npm install token-goat` then `npm audit --omit=dev` | the optional packages in the table below |
51
+
52
+ The repository is clean because [`package.json`](package.json) carries an `overrides` block that pins five transitive packages to patched versions. **npm applies `overrides` only in the root project**, so those pins do not travel to anyone who installs Token-Goat as a dependency. We are saying so plainly rather than letting a clean repository scan stand in for a clean install: if your scanner reads this repository or its lockfile it will report nothing, and that is not the whole picture.
53
+
54
+ Without the overrides a consumer resolves `protobufjs` at 6.x, which carries more advisories than the 7.x line the repository would otherwise use. Every one of those paths is optional.
45
55
 
46
56
  | Package | Advisories it carries | Where it loads | Why the advisory does not reach you through Token-Goat |
47
57
  | --- | --- | --- | --- |
48
58
  | `@xenova/transformers` | [`protobufjs`](https://github.com/advisories/GHSA-xq3m-2v4x-88gg) (critical), `onnx-proto`, `onnxruntime-web`, and its own pinned `sharp` | optional; loaded only when semantic search builds or queries embeddings | not mitigated, so it is the one to weigh. Skip it with `npm install --omit=optional`, or leave `indexing.embeddings_enabled` off, and the code never loads |
49
59
  | `exceljs` | [`uuid`](https://github.com/advisories/GHSA-w5hq-g745-h8pq) | optional; loaded only when an `xlsx-*` command opens a workbook | the advisory is a missing bounds check on a caller-supplied `buf` argument; ExcelJS never passes one |
50
- | `html-to-text` | [`deepmerge-ts`](https://github.com/advisories/GHSA-ggr8-5vv4-36mx) | required, and bundled into `dist/token-goat.mjs`; runs when a fetched page is converted to text | the advisory is stack exhaustion while merging a recursive object graph. The only object merged is the fixed options literal in `extractCleanText`; page content is never merged |
51
60
 
52
- `npm install --omit=optional` gives you an install without the first two. The `xlsx-*` commands then say ExcelJS is not installed rather than failing oddly, and `semantic` keeps working on keyword search alone: it is the embedding half that goes away, not the command.
61
+ `npm install --omit=optional` gives you an install without either of these, and `npm audit` reports it clean. Every command still starts; the ones that need a package you skipped say so. The `xlsx-*` commands report that ExcelJS is not installed rather than failing oddly, `zip-list`/`zip-read` do the same for fflate, and `semantic` keeps working on keyword search alone: it is the embedding half that goes away, not the command.
62
+
63
+ `html-to-text` used to appear in that table, carrying [`deepmerge-ts`](https://github.com/advisories/GHSA-ggr8-5vv4-36mx). It is now a development dependency instead. esbuild inlines it into `dist/token-goat.mjs` at build time and nothing in the published bundle imports it, so it was a runtime dependency in name only: moving it removes `html-to-text`, `deepmerge-ts`, `htmlparser2`, `selderee`, and `dom-serializer` from an installed copy while the HTML-to-text output stays byte-for-byte identical. That is what takes the no-optional install to zero, and it is better than the alternative we had considered, rolling `html-to-text` back to 9.x: that version pins `htmlparser2` two majors lower, and `htmlparser2` is what parses fetched pages, so it would have traded an advisory in an options merger for an older parser on the one path that handles untrusted input.
53
64
 
54
65
  Direct dependencies with a forward patch are kept current rather than pinned: `sharp` and `puppeteer-core` were both moved across a major version to clear their advisories.
55
66
 
67
+ For a scanner that ingests a bill of materials rather than a lockfile, `npm run sbom` writes CycloneDX 1.5 to stdout.
68
+
56
69
  ## Verifying what you installed
57
70
 
58
71
  Every published version is built and pushed by one workflow, [`.github/workflows/publish.yml`](.github/workflows/publish.yml), which runs only when a GitHub release is published (or manually, and then only from `main`). It publishes with npm provenance, so npm holds a signed attestation tying the tarball to the commit and workflow run that produced it. Nothing is ever published from a laptop.
@@ -70,3 +83,54 @@ Every action used by that workflow, and by CI, is pinned to a full commit SHA ra
70
83
  ## License
71
84
 
72
85
  Token-Goat is source-available under the PolyForm Noncommercial License 1.0.0. Submitting a security report does not grant the reporter any license to Token-Goat's code beyond what PolyForm Noncommercial already permits. See LICENSE for the full terms.
86
+
87
+
88
+ ## Dependency licenses
89
+
90
+ Every production dependency is permissively licensed, but a scan does not read it that way on its
91
+ own. Counted from `package-lock.json`, which lists the packages for every platform rather than only
92
+ the ones this machine installed, 22 entries need a human answer: 7 declare a license a scanner
93
+ cannot resolve, and 15 carry a copyleft term. All 22 arrive through optional dependencies. Install
94
+ with `npm install --omit=optional token-goat` and not one of them is present.
95
+
96
+ **Declarations a scanner cannot resolve.** Both are upstream mistakes, and both are the same
97
+ mistake this project made in its own manifest and fixed. `SEE LICENSE IN <file>` is npm's form for
98
+ a license that is not on the SPDX list, and `MIT OR Apache` is not a valid expression because the
99
+ identifier is `Apache-2.0`. For the second, `npm sbom` emits no `licenses` field at all rather than
100
+ an unresolvable one.
101
+
102
+ | Package | Declares | Actually grants | Reached through |
103
+ | --- | --- | --- | --- |
104
+ | `flatbuffers` | `SEE LICENSE IN LICENSE.txt` | Apache-2.0, in its own `LICENSE.txt` | `@xenova/transformers` |
105
+ | `sqlite-vec` and its 5 platform packages | `MIT OR Apache` | MIT or Apache-2.0, your choice | direct optional dependency |
106
+
107
+ **Copyleft terms.** Two families, and neither puts a copyleft obligation on Token-Goat's own code.
108
+
109
+ | Package | Declares | Why it is not a problem |
110
+ | --- | --- | --- |
111
+ | `@img/sharp-libvips-<platform>` (10 packages) | `LGPL-3.0-or-later` | libvips, shipped as a prebuilt shared library and used unmodified. LGPL asks that the library stay replaceable, and it is: it is a separate package that `sharp` loads at runtime. |
112
+ | `@img/sharp-<platform>` (4 packages) | `Apache-2.0 AND LGPL-3.0-or-later` | the Apache half is `sharp` itself, the LGPL half is the same libvips |
113
+ | `jszip` | `(MIT OR GPL-3.0-or-later)` | a choice between the two, and the MIT half is taken |
114
+
115
+ `sharp` and `jszip` are both optional: `sharp` powers image shrinking, `jszip` arrives through
116
+ `exceljs` for the `xlsx-*` commands.
117
+
118
+ **Three packages with no license at all used to be here.** `buffers@0.1.1` and `chainsaw@0.1.0`
119
+ shipped with neither a `license` field nor a license file, and `traverse@0.3.9` had the file but
120
+ not the field. No grant at all is worse for a review than a copyleft grant, because there is
121
+ nothing to apply policy to. They arrived through `exceljs`, which depends on `unzipper`, which
122
+ depended on `binary`, which depended on all three. `unzipper` dropped `binary` in 0.11, so an
123
+ override to `^0.12.5` removes the sub-chain, and the deprecated `fstream` with it. Token-goat reads
124
+ workbooks through `wb.xlsx.readFile()`, which goes through `jszip`; `unzipper` is only reachable
125
+ through the streaming reader in `exceljs`, which this code never calls.
126
+
127
+ Reproduce the whole picture:
128
+
129
+ ```bash
130
+ npm run sbom
131
+ ```
132
+
133
+ Like the advisory disclosure above, this is checked by a test rather than by review: see
134
+ [tests/guards/dependency_licenses.test.ts](tests/guards/dependency_licenses.test.ts). Any
135
+ production package that a scanner cannot resolve, or that carries a copyleft term, has to be named
136
+ here or that test fails.
@@ -25,7 +25,7 @@ import {
25
25
  runSkeleton,
26
26
  runSymbol,
27
27
  withPinnedReads
28
- } from "./token-goat-chunk-P7I6LS5H.mjs";
28
+ } from "./token-goat-chunk-FN6WLFIX.mjs";
29
29
  import {
30
30
  buildProjectMap,
31
31
  embeddingsDepsAvailable,
@@ -34,7 +34,7 @@ import {
34
34
  getProjectIndexCounts,
35
35
  isWorkerRunning,
36
36
  mapLookupBytesSaved
37
- } from "./token-goat-chunk-HPY7XE77.mjs";
37
+ } from "./token-goat-chunk-TDYTBCT4.mjs";
38
38
  import {
39
39
  VERSION,
40
40
  dataDir,
@@ -45,14 +45,11 @@ import {
45
45
  normalizePath,
46
46
  recordStat,
47
47
  resolveProjectRoot
48
- } from "./token-goat-chunk-X7PIWZMB.mjs";
49
- import "./token-goat-chunk-VYC34TBW.mjs";
50
- import {
51
- init_define_import_meta_env
52
- } from "./token-goat-chunk-4WGVGN6W.mjs";
48
+ } from "./token-goat-chunk-WFRR2DBG.mjs";
49
+ import "./token-goat-chunk-AO2QD2AG.mjs";
50
+ import "./token-goat-chunk-AEX54RUZ.mjs";
53
51
 
54
52
  // src/mcp_server.ts
55
- init_define_import_meta_env();
56
53
  import * as fs from "fs";
57
54
  import * as path from "path";
58
55
  var TOKEN_GOAT_RETRY_RE = /token-goat (\w[\w-]*) "([^"]+)"/g;
@@ -202,7 +199,7 @@ function withConfinedRead(pins, fn) {
202
199
  }
203
200
  }
204
201
  async function createMcpServer() {
205
- const [{ McpServer }, { z }] = await Promise.all([import("@modelcontextprotocol/sdk/server/mcp.js"), import("./token-goat-chunk-Q4N6SQWR.mjs")]);
202
+ const [{ McpServer }, { z }] = await Promise.all([import("@modelcontextprotocol/sdk/server/mcp.js"), import("./token-goat-chunk-DG53MVNJ.mjs")]);
206
203
  const server = new McpServer({ name: "token-goat", version: VERSION });
207
204
  const makeProjectRootField = (verb) => z.string().optional().describe(
208
205
  `absolute path to the workspace root to scope this ${verb} to; defaults to the MCP server process's cwd, which is not always the actual workspace root for MCP clients -- pass this explicitly when it might differ`
@@ -10,18 +10,15 @@ import {
10
10
  selectFilter,
11
11
  shlexSplit,
12
12
  wrappedShell
13
- } from "./token-goat-chunk-N2S7UAVU.mjs";
13
+ } from "./token-goat-chunk-RQQ4SY2P.mjs";
14
14
  import {
15
15
  loadConfig,
16
16
  recordStat
17
- } from "./token-goat-chunk-X7PIWZMB.mjs";
18
- import "./token-goat-chunk-VYC34TBW.mjs";
19
- import {
20
- init_define_import_meta_env
21
- } from "./token-goat-chunk-4WGVGN6W.mjs";
17
+ } from "./token-goat-chunk-WFRR2DBG.mjs";
18
+ import "./token-goat-chunk-AO2QD2AG.mjs";
19
+ import "./token-goat-chunk-AEX54RUZ.mjs";
22
20
 
23
21
  // src/bash_runner.ts
24
- init_define_import_meta_env();
25
22
  import { spawnSync } from "node:child_process";
26
23
  import * as os from "node:os";
27
24
  var IdentityFilter = class extends ToolFilter {
@@ -0,0 +1,11 @@
1
+ import { createRequire as __cjsRequire } from 'node:module';
2
+ const require = __cjsRequire(import.meta.url);
3
+ var __defProp = Object.defineProperty;
4
+ var __export = (target, all) => {
5
+ for (var name in all)
6
+ __defProp(target, name, { get: all[name], enumerable: true });
7
+ };
8
+
9
+ export {
10
+ __export
11
+ };
@@ -1,11 +1,7 @@
1
1
  import { createRequire as __cjsRequire } from 'node:module';
2
2
  const require = __cjsRequire(import.meta.url);
3
- import {
4
- init_define_import_meta_env
5
- } from "./token-goat-chunk-4WGVGN6W.mjs";
6
3
 
7
4
  // src/reset.ts
8
- init_define_import_meta_env();
9
5
  var _resets = [];
10
6
  function registerReset(fn) {
11
7
  _resets.push(fn);