@oomkapwn/enquire-mcp 2.13.0 → 2.15.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.
- package/CHANGELOG.md +135 -0
- package/README.md +4 -2
- package/dist/http-transport.d.ts +52 -1
- package/dist/http-transport.d.ts.map +1 -1
- package/dist/http-transport.js +183 -25
- package/dist/http-transport.js.map +1 -1
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +89 -11
- package/dist/index.js.map +1 -1
- package/docs/api.md +4 -0
- package/docs/http-transport.md +2 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,141 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
4
|
|
|
5
|
+
## [2.15.0] — 2026-05-09
|
|
6
|
+
|
|
7
|
+
**Sprint 15 — late-chunking-style context windowing on embeddings.** When `--late-chunk-context <chars>` is set, embeddings are computed against `[doc: title]\n\n[breadcrumb]\n\n… [prev-chunk-tail]\n\n[this-chunk]\n\n[next-chunk-head] …` instead of just `[breadcrumb]\n\n[this-chunk]`. Per Chroma 2024 + Jina AI's late-chunking research: typical **+2-5 NDCG@10** retrieval boost at zero new dep cost.
|
|
8
|
+
|
|
9
|
+
### Why this matters
|
|
10
|
+
|
|
11
|
+
Short standalone chunks ("Use Adam β=0.9, β=0.999") embed near-identically across documents because they lack surrounding context. Adding ~50-200 chars of neighbor text + the doc title + heading breadcrumb gives the bi-encoder enough signal to keep cross-document semantic separation. This is the same effect that's made "late chunking" a hot research topic in IR — we use the simpler context-windowing form (vs full whole-document re-pooling) because it's:
|
|
12
|
+
- Pure code, no new deps
|
|
13
|
+
- Compatible with our existing 384-dim multilingual embedder budget (128 token context)
|
|
14
|
+
- Word-boundary-trimmed at neighbor slices so we don't feed half-words to the tokenizer
|
|
15
|
+
|
|
16
|
+
### Added — `--late-chunk-context <chars>` flag on `serve` + `build-embeddings`
|
|
17
|
+
|
|
18
|
+
Default 0 (off; matches v2.1.0+ breadcrumb-only behavior). Common values: 100-200 chars per side.
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
enquire-mcp build-embeddings --vault ~/Obsidian --late-chunk-context 200
|
|
22
|
+
# or pass on serve so the persistent-cache rebuild path uses it too:
|
|
23
|
+
enquire-mcp serve --vault ~/Obsidian --persistent-index --late-chunk-context 150
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Implementation
|
|
27
|
+
|
|
28
|
+
`buildEmbedText(chunks, i, opts)` (exported from `src/index.ts` for tests) constructs the embedding text from:
|
|
29
|
+
|
|
30
|
+
1. `[doc: <title>]` — vault-relative basename or `frontmatter.title` for markdown; `.pdf`-stripped basename for PDFs.
|
|
31
|
+
2. `<breadcrumb>` — heading hierarchy, same as v2.1.0.
|
|
32
|
+
3. `… <prev-chunk-tail>` — last `contextChars` chars of `chunks[i-1].text`, word-boundary-trimmed via `replace(/^\S*\s/, "")` so partial leading words are dropped.
|
|
33
|
+
4. `<this-chunk>` — the chunk being embedded.
|
|
34
|
+
5. `<next-chunk-head> …` — first `contextChars` chars of `chunks[i+1].text`, word-boundary-trimmed via `replace(/\s\S*$/, "")` so partial trailing words are dropped.
|
|
35
|
+
|
|
36
|
+
When `contextChars=0` returns the legacy v2.1.0 form (`[breadcrumb]\n\n[chunk]` or just `[chunk]`), bit-identical to prior behavior.
|
|
37
|
+
|
|
38
|
+
`syncEmbedDb` and `syncPdfEmbedDb` accept the new `opts.lateChunkContext` parameter (default 0). Both are wired through the `build-embeddings --late-chunk-context` and `serve --late-chunk-context` flags.
|
|
39
|
+
|
|
40
|
+
### Tests
|
|
41
|
+
|
|
42
|
+
576 unit tests pass (was 568 in v2.14.0, +8 new):
|
|
43
|
+
- **buildEmbedText (8):** legacy form when contextChars=0, omits breadcrumb when none, includes title+breadcrumb+neighbor tails when contextChars>0, first chunk has no prev, last chunk has no next, word-boundary trim drops half-words, ignores undefined docTitle, returns empty for out-of-range index.
|
|
44
|
+
|
|
45
|
+
### Migration
|
|
46
|
+
|
|
47
|
+
**No-op for default users.** Existing embed-db rows stay valid (we don't bump the schema — the embeddings represent more context but still occupy the same 384-dim Float32 cells). To benefit, users opt in with `--late-chunk-context <n>` on either `serve` or a manual `build-embeddings` re-run; the next sync re-embeds chunks whose source mtime changed (or all chunks if you `clear-embeddings` first).
|
|
48
|
+
|
|
49
|
+
### Strategic position
|
|
50
|
+
|
|
51
|
+
v2.15.0 closes the "embedding quality" half of the v3.0 roadmap (HNSW persistence and int8 quantization remain). Combined with v2.0-v2.14, **enquire-mcp now has every retrieval-quality + scaling lever the IR-research community has documented for bi-encoder vector search**:
|
|
52
|
+
- Hybrid RRF (BM25 + TF-IDF + ML embeddings) — v2.0
|
|
53
|
+
- Wikilink graph-boost as retrieval signal — v2.3
|
|
54
|
+
- Heading breadcrumbs in chunks — v2.1
|
|
55
|
+
- Multilingual semantic search — v2.0
|
|
56
|
+
- PDFs blended into hybrid — v2.8
|
|
57
|
+
- OCR for scanned PDFs — v2.10
|
|
58
|
+
- Cross-encoder reranker on top of RRF — v2.9
|
|
59
|
+
- HNSW vector index — v2.13
|
|
60
|
+
- **Context-windowed embeddings (late-chunking-style)** — v2.15
|
|
61
|
+
|
|
62
|
+
### Roadmap remaining
|
|
63
|
+
|
|
64
|
+
- v2.16+: HNSW persistence (sidecar `.hnsw.bin` with `.embed.db`-hash staleness check)
|
|
65
|
+
- v2.17+: int8 vector quantization (4× storage reduction, ~1-2% recall loss)
|
|
66
|
+
- v3.0.0: stable channel promotion bundling all v2.x retrieval improvements
|
|
67
|
+
|
|
68
|
+
## [2.14.0] — 2026-05-09
|
|
69
|
+
|
|
70
|
+
**Sprint 14 — stateful HTTP sessions for `serve-http`.** Closes the explicitly-deferred item from v2.6.0 release notes. The HTTP transport now runs in two modes: stateless (default, v2.6.0 behavior — fresh `McpServer` + transport per request) and **stateful** (new — sessions keyed by `Mcp-Session-Id` header, persistent SSE for server-initiated notifications, DELETE for explicit termination). Required for ChatGPT custom GPT actions and any client that expects persistent state across requests.
|
|
71
|
+
|
|
72
|
+
### Added — `--stateful` flag on `serve-http`
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
enquire-mcp serve-http --vault ~/Obsidian \
|
|
76
|
+
--bearer-token-env ENQUIRE_TOKEN \
|
|
77
|
+
--stateful \
|
|
78
|
+
--max-sessions 100 \
|
|
79
|
+
--session-idle-timeout-ms 1800000 # 30 min
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
When `--stateful` is set, the transport handles three flows:
|
|
83
|
+
|
|
84
|
+
1. **POST /mcp** — first request without `Mcp-Session-Id` is the `initialize` handshake; the SDK assigns a new 16-byte hex session id (returned via the `Mcp-Session-Id` response header). Subsequent POSTs with that header are routed to the same `McpServer` + `StreamableHTTPServerTransport` pair, which retains conversation state across requests.
|
|
85
|
+
2. **GET /mcp** — long-lived SSE stream for server-initiated notifications (the SDK's `sendLoggingMessage` and similar). Requires `Mcp-Session-Id` header from a prior `initialize`.
|
|
86
|
+
3. **DELETE /mcp** — explicit session termination. Idempotent (returns 204 if the session is already gone). Frees both transport and server resources immediately.
|
|
87
|
+
|
|
88
|
+
### Lifecycle controls
|
|
89
|
+
|
|
90
|
+
- **`--session-idle-timeout-ms <n>`** — sweep idle sessions older than this many ms. Default 1,800,000 (30 min). Sweep runs lazily on every request — no separate timer thread.
|
|
91
|
+
- **`--max-sessions <n>`** — concurrent-session cap. Default 100. New `initialize` requests beyond the cap return **503 + `Retry-After: 60`**, protecting against memory exhaustion under adversarial create-and-abandon traffic.
|
|
92
|
+
- **Session cleanup on transport close** — wired via `transport.onclose`, so client disconnects mid-stream don't leak entries.
|
|
93
|
+
|
|
94
|
+
### Architecture
|
|
95
|
+
|
|
96
|
+
`createSessionRegistry(idleTimeoutMs)` returns a registry with:
|
|
97
|
+
- `sessions: Map<string, StatefulSession>` — keyed by SDK-assigned id
|
|
98
|
+
- `sweepIdle(nowMs?)` — evicts entries with `lastActivityMs < nowMs - idleTimeoutMs`, calls `transport.close()` + `server.close()` per evicted entry, returns evicted count
|
|
99
|
+
- `size()` — for max-cap checks
|
|
100
|
+
|
|
101
|
+
The handler in `createHttpHandler` branches on `opts.stateful`:
|
|
102
|
+
- **Stateless** (default) — extracted into `handleStatelessRequest()` to keep the v2.6.0 path bit-identical. Same fresh-server-per-request flow.
|
|
103
|
+
- **Stateful** — runs `registry.sweepIdle()` first (bounded O(|sessions|) work, cheap timestamp compare per entry), then dispatches by method:
|
|
104
|
+
- DELETE without `Mcp-Session-Id` → 400; with unknown id → 204 (idempotent); with valid id → transport handles + we drop the entry.
|
|
105
|
+
- GET without id → 400; with unknown id → 404; with valid id → transport handles SSE.
|
|
106
|
+
- POST with id → route to the existing transport (404 if id is unknown — likely expired).
|
|
107
|
+
- POST without id → must be `initialize`; if `registry.size() >= maxSessions` → 503 + Retry-After; else allocate a new server+transport pair, register on `onsessioninitialized`, run `transport.handleRequest(req, res, body)`.
|
|
108
|
+
|
|
109
|
+
### Tests
|
|
110
|
+
|
|
111
|
+
568 unit tests pass (was 555 in v2.13.0, +13 new):
|
|
112
|
+
- **SessionRegistry (3):** starts empty, `sweepIdle` evicts entries older than `idleTimeoutMs`, idempotent on a clean registry.
|
|
113
|
+
- **Stateful end-to-end (10):**
|
|
114
|
+
- Initialize allocates a `Mcp-Session-Id` response header
|
|
115
|
+
- Subsequent POST with same session id reuses the transport
|
|
116
|
+
- POST with unknown session id → 404
|
|
117
|
+
- DELETE with unknown session id → 204 (idempotent)
|
|
118
|
+
- DELETE without session id → 400
|
|
119
|
+
- DELETE on a real session terminates it; subsequent POST → 404
|
|
120
|
+
- GET without session id → 400
|
|
121
|
+
- GET with unknown session id → 404
|
|
122
|
+
- Max-sessions cap rejects new initialize with 503 + `Retry-After`
|
|
123
|
+
- Stateless mode is unchanged (no `Mcp-Session-Id` on init response)
|
|
124
|
+
|
|
125
|
+
### Migration
|
|
126
|
+
|
|
127
|
+
**No-op for default users.** The HTTP transport stays stateless by default (matches v2.6.0 - v2.13.0 behavior). Opt-in to stateful via `--stateful`. Existing claude.ai / Cursor HTTP / Khoj clients keep working unchanged.
|
|
128
|
+
|
|
129
|
+
### Strategic position
|
|
130
|
+
|
|
131
|
+
v2.14.0 unblocks the **ChatGPT custom GPT actions** use case, which requires persistent session state across the actions' OAuth + tool-invocation lifecycle. Combined with v2.6.0's bearer auth + rate-limit + CORS hardening, enquire-mcp now supports the full set of remote-MCP client expectations.
|
|
132
|
+
|
|
133
|
+
### Roadmap remaining
|
|
134
|
+
|
|
135
|
+
- v2.15+: Late chunking (whole-document context-prefixed embeddings, +2-5 NDCG@10)
|
|
136
|
+
- v2.16+: HNSW persistence (writeIndex/readIndex with `.embed.db`-hash staleness check)
|
|
137
|
+
- v2.17+: int8 vector quantization (4× storage reduction, ~1-2% recall loss)
|
|
138
|
+
- v3.0.0: stable channel promotion bundling all v2.x retrieval improvements
|
|
139
|
+
|
|
5
140
|
## [2.13.0] — 2026-05-09
|
|
6
141
|
|
|
7
142
|
**Sprint 13 — HNSW vector index for sub-10ms semantic retrieval at scale.** Closes the "brute-force semantic search doesn't scale" gap. The existing `EmbedDb.search()` runs O(n) cosine over every embedded chunk per query (~5ms at 8K chunks, ~30ms at 50K, ~300ms at 500K, ~3s at 5M). HNSW is the IR-standard graph-based index that achieves O(log n) approximate nearest neighbor lookups — **sub-10ms even at million-chunk scale**, with recall@K ≥ 95% at default parameters.
|
package/README.md
CHANGED
|
@@ -65,6 +65,8 @@ enquire-mcp doctor --vault <path> # color-coded ✓/⚠/✗ health check
|
|
|
65
65
|
- ✅ **OCR for scanned / image-only PDFs** (Tesseract.js, multilingual) — `v2.10.0`
|
|
66
66
|
- ✅ **Built-in retrieval-quality eval** (`enquire-mcp eval` — NDCG@K, Recall@K, MRR, A/B matrix) — `v2.12.0`
|
|
67
67
|
- ✅ **HNSW vector index** (sub-10ms semantic retrieval at million-chunk scale) — `v2.13.0`
|
|
68
|
+
- ✅ **Stateful HTTP sessions** (Mcp-Session-Id + persistent SSE — for ChatGPT custom GPT actions) — `v2.14.0`
|
|
69
|
+
- ✅ **Late-chunking-style context-windowed embeddings** (+2-5 NDCG@10) — `v2.15.0`
|
|
68
70
|
- ✅ **Wikilink graph-boost** as a retrieval signal (1-step personalised PageRank seeded by RRF top-K)
|
|
69
71
|
- ✅ **Remote MCP** over HTTP with bearer auth + rate-limit + CORS — `v2.6.0`
|
|
70
72
|
- ✅ **Multilingual** semantic search (50+ languages, runs on CPU, free)
|
|
@@ -128,7 +130,7 @@ graph LR
|
|
|
128
130
|
| Standalone (no Obsidian plugin) | varies | ❌ requires Obsidian | ✅ direct vault read |
|
|
129
131
|
| MCP-native (any agent) | varies | ❌ Obsidian-only | ✅ stdio + HTTP |
|
|
130
132
|
| SLSA-3 release provenance | ❌ | n/a | ✅ |
|
|
131
|
-
| Test suite | rare | n/a | ✅
|
|
133
|
+
| Test suite | rare | n/a | ✅ 576 unit tests |
|
|
132
134
|
|
|
133
135
|
> **Strategic claim:** enquire is the open-source backend for [Karpathy-style LLM Wikis](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) on top of your existing Obsidian vault. The `vault_synth` / `vault_wiki_compile` / `vault_lint_extended` prompts implement the ingest → query → lint → compile workflow natively over `.md` + `[[wikilinks]]`. Knowledge that compounds, traceable to sources.
|
|
134
136
|
|
|
@@ -209,7 +211,7 @@ enquire-mcp serve-http \
|
|
|
209
211
|
|
|
210
212
|
| Surface | Posture |
|
|
211
213
|
|---|---|
|
|
212
|
-
| Tests |
|
|
214
|
+
| Tests | 576 unit tests across 29 files, 8 required CI gates per PR |
|
|
213
215
|
| Coverage | Lines ≥86%, statements ≥82%, functions ≥75%, branches ≥73% (gated) |
|
|
214
216
|
| Audit | `npm audit --audit-level=moderate` for prod; high for dev |
|
|
215
217
|
| CI | Ubuntu × {Node 20, 22, 24} required + macOS advisory job |
|
package/dist/http-transport.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Server as HttpServer, type IncomingMessage, type ServerResponse } from "node:http";
|
|
2
|
-
import {
|
|
2
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
3
|
+
import { buildMcpServer, type ServeOptions, type ServerDeps } from "./index.js";
|
|
3
4
|
/**
|
|
4
5
|
* Configuration for the HTTP transport. Extends ServeOptions so every
|
|
5
6
|
* stdio-mode flag (--enable-write, --persistent-index, --watch, etc.) is
|
|
@@ -33,6 +34,30 @@ export interface HttpServeOptions extends ServeOptions {
|
|
|
33
34
|
corsOrigins?: string[];
|
|
34
35
|
/** Optional path-prefix to match a /health probe under (e.g. for Tailscale). Default `/health`. */
|
|
35
36
|
healthPath?: string;
|
|
37
|
+
/**
|
|
38
|
+
* v2.14.0 — when `true`, the HTTP transport runs in stateful mode:
|
|
39
|
+
* sessions are keyed by the `Mcp-Session-Id` header, each session has
|
|
40
|
+
* its own `McpServer` + `StreamableHTTPServerTransport` pair, and
|
|
41
|
+
* server-initiated notifications stream over a long-lived `GET /mcp`
|
|
42
|
+
* SSE connection. Required for ChatGPT custom GPT actions and other
|
|
43
|
+
* clients that expect persistent state across requests. Off by default
|
|
44
|
+
* (stateless mode is the right choice for short-running tools and
|
|
45
|
+
* minimizes attack surface).
|
|
46
|
+
*/
|
|
47
|
+
stateful?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* v2.14.0 — when stateful, evict sessions idle longer than this many
|
|
50
|
+
* milliseconds. Default 30 minutes. Sweep runs lazily on every
|
|
51
|
+
* request (no separate timer). Idle = time since the last
|
|
52
|
+
* `handleRequest` for that session.
|
|
53
|
+
*/
|
|
54
|
+
sessionIdleTimeoutMs?: number;
|
|
55
|
+
/**
|
|
56
|
+
* v2.14.0 — max concurrent sessions. New sessions beyond this cap are
|
|
57
|
+
* rejected with 503 + `Retry-After`. Default 100; protects against
|
|
58
|
+
* memory exhaustion under adversarial create-and-abandon traffic.
|
|
59
|
+
*/
|
|
60
|
+
maxSessions?: number;
|
|
36
61
|
/**
|
|
37
62
|
* When `true` (default), registers SIGINT/SIGTERM/beforeExit listeners
|
|
38
63
|
* for graceful shutdown of the HTTP server, vault, FTS5 index, watcher,
|
|
@@ -77,6 +102,32 @@ declare function readJsonBody(req: IncomingMessage, maxBytes: number): Promise<u
|
|
|
77
102
|
* Build the request handler. Factored out of the listener-creation path
|
|
78
103
|
* so tests can drive it without binding a TCP port.
|
|
79
104
|
*/
|
|
105
|
+
/**
|
|
106
|
+
* v2.14.0 — one entry in the stateful-session map. Each session pairs an
|
|
107
|
+
* `McpServer` instance with a `StreamableHTTPServerTransport` (in
|
|
108
|
+
* stateful mode the SDK keys requests by the session id we assign at
|
|
109
|
+
* `initialize` time) and tracks the last activity timestamp for
|
|
110
|
+
* idle-eviction.
|
|
111
|
+
*/
|
|
112
|
+
interface StatefulSession {
|
|
113
|
+
server: ReturnType<typeof buildMcpServer>;
|
|
114
|
+
transport: InstanceType<typeof StreamableHTTPServerTransport>;
|
|
115
|
+
/** Epoch-ms of the last `handleRequest` for this session. */
|
|
116
|
+
lastActivityMs: number;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* v2.14.0 — exported for tests so they can poke at the session map
|
|
120
|
+
* directly (idle eviction, max-cap, etc.) without spinning up a real
|
|
121
|
+
* HTTP server.
|
|
122
|
+
*/
|
|
123
|
+
export interface SessionRegistry {
|
|
124
|
+
readonly sessions: Map<string, StatefulSession>;
|
|
125
|
+
/** Sweep idle sessions older than `idleTimeoutMs`. Returns evicted count. */
|
|
126
|
+
sweepIdle(nowMs?: number): number;
|
|
127
|
+
/** Total sessions currently tracked. */
|
|
128
|
+
size(): number;
|
|
129
|
+
}
|
|
130
|
+
export declare function createSessionRegistry(idleTimeoutMs: number): SessionRegistry;
|
|
80
131
|
export declare function createHttpHandler(deps: ServerDeps, opts: HttpServeOptions): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
|
|
81
132
|
/**
|
|
82
133
|
* Generate a fresh 32-byte base64url bearer token. Used by the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../src/http-transport.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAgB,KAAK,MAAM,IAAI,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../src/http-transport.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAgB,KAAK,MAAM,IAAI,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAC/G,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,cAAc,EAAwC,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtH;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAE3C,SAAS,EAAE,MAAM;IAI7B,6DAA6D;IAC7D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,OAAO;IAiB7D,oCAAoC;IACpC,KAAK,IAAI,IAAI;CAGd;AAED;;;;;;;;;GASG;AACH,iBAAS,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa1F;AAED,8EAA8E;AAC9E,iBAAe,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcpF;AAwED;;;GAGG;AACH;;;;;;GAMG;AACH,UAAU,eAAe;IACvB,MAAM,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IAC1C,SAAS,EAAE,YAAY,CAAC,OAAO,6BAA6B,CAAC,CAAC;IAC9D,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,6EAA6E;IAC7E,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,wCAAwC;IACxC,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,eAAe,CAoB5E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,gBAAgB,GACrB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAkO9D;AAwCD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoFjF;AAGD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/http-transport.js
CHANGED
|
@@ -183,16 +183,38 @@ function applyCors(req, res, allowOrigins) {
|
|
|
183
183
|
res.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Mcp-Session-Id, Last-Event-ID");
|
|
184
184
|
res.setHeader("Access-Control-Max-Age", "600");
|
|
185
185
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
export function createSessionRegistry(idleTimeoutMs) {
|
|
187
|
+
const sessions = new Map();
|
|
188
|
+
return {
|
|
189
|
+
sessions,
|
|
190
|
+
sweepIdle(nowMs = Date.now()) {
|
|
191
|
+
const cutoff = nowMs - idleTimeoutMs;
|
|
192
|
+
let evicted = 0;
|
|
193
|
+
for (const [sid, session] of sessions) {
|
|
194
|
+
if (session.lastActivityMs < cutoff) {
|
|
195
|
+
// Best-effort cleanup — don't block on slow close.
|
|
196
|
+
void session.transport.close().catch(() => { });
|
|
197
|
+
void session.server.close().catch(() => { });
|
|
198
|
+
sessions.delete(sid);
|
|
199
|
+
evicted += 1;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return evicted;
|
|
203
|
+
},
|
|
204
|
+
size: () => sessions.size
|
|
205
|
+
};
|
|
206
|
+
}
|
|
190
207
|
export function createHttpHandler(deps, opts) {
|
|
191
208
|
const mcpPath = opts.mcpPath ?? "/mcp";
|
|
192
209
|
const healthPath = opts.healthPath ?? "/health";
|
|
193
210
|
const corsOrigins = opts.corsOrigins ?? [];
|
|
194
211
|
const limiter = new RateLimiter(opts.rateLimitPerMinute ?? 120);
|
|
195
212
|
const maxBodyBytes = 4 * 1024 * 1024; // 4MB — generous for tools/list with 36 tools
|
|
213
|
+
// v2.14.0 stateful-mode state.
|
|
214
|
+
const stateful = opts.stateful === true;
|
|
215
|
+
const idleTimeoutMs = opts.sessionIdleTimeoutMs ?? 30 * 60 * 1000; // 30 min default
|
|
216
|
+
const maxSessions = opts.maxSessions ?? 100;
|
|
217
|
+
const registry = stateful ? createSessionRegistry(idleTimeoutMs) : null;
|
|
196
218
|
return async (req, res) => {
|
|
197
219
|
try {
|
|
198
220
|
applyCors(req, res, corsOrigins);
|
|
@@ -236,14 +258,78 @@ export function createHttpHandler(deps, opts) {
|
|
|
236
258
|
res.end(JSON.stringify({ error: "rate limit exceeded" }));
|
|
237
259
|
return;
|
|
238
260
|
}
|
|
239
|
-
//
|
|
240
|
-
//
|
|
241
|
-
|
|
242
|
-
|
|
261
|
+
// Stateless mode (default) — POST only; fresh server+transport
|
|
262
|
+
// per request. Same path as v2.6.0.
|
|
263
|
+
if (!stateful || !registry) {
|
|
264
|
+
if (req.method !== "POST") {
|
|
265
|
+
sendJsonRpcError(res, 405, -32000, `Method ${req.method} not allowed for ${mcpPath}`);
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
await handleStatelessRequest(req, res, deps, opts, maxBodyBytes);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
// ─── v2.14.0 stateful mode ─────────────────────────────────────────
|
|
272
|
+
// Lazy idle-sweep on every request. Bounded work — at most O(|sessions|)
|
|
273
|
+
// and cheap (Date compare per entry).
|
|
274
|
+
registry.sweepIdle();
|
|
275
|
+
const sessionIdHeader = req.headers["mcp-session-id"];
|
|
276
|
+
const sessionId = typeof sessionIdHeader === "string" ? sessionIdHeader : undefined;
|
|
277
|
+
// DELETE /mcp — explicit session termination. SDK's transport
|
|
278
|
+
// handles the protocol-level details; we just route it.
|
|
279
|
+
if (req.method === "DELETE") {
|
|
280
|
+
if (!sessionId) {
|
|
281
|
+
sendJsonRpcError(res, 400, -32000, "DELETE requires Mcp-Session-Id header");
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
const session = registry.sessions.get(sessionId);
|
|
285
|
+
if (!session) {
|
|
286
|
+
// Idempotent — if the session is already gone, treat as success.
|
|
287
|
+
res.statusCode = 204;
|
|
288
|
+
res.end();
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// Let the transport's handleRequest run the protocol shutdown,
|
|
292
|
+
// then drop our entry.
|
|
293
|
+
try {
|
|
294
|
+
await session.transport.handleRequest(req, res);
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
/* shutdown errors don't matter — we're killing the session anyway */
|
|
298
|
+
}
|
|
299
|
+
void session.transport.close().catch(() => { });
|
|
300
|
+
void session.server.close().catch(() => { });
|
|
301
|
+
registry.sessions.delete(sessionId);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
// GET /mcp — long-lived SSE stream for server-initiated
|
|
305
|
+
// notifications. The transport handles the SSE framing; we just
|
|
306
|
+
// route the request to the right session.
|
|
307
|
+
if (req.method === "GET") {
|
|
308
|
+
if (!sessionId) {
|
|
309
|
+
sendJsonRpcError(res, 400, -32000, "GET requires Mcp-Session-Id header (initialize first)");
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
const session = registry.sessions.get(sessionId);
|
|
313
|
+
if (!session) {
|
|
314
|
+
sendJsonRpcError(res, 404, -32000, `Unknown session ${sessionId}`);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
session.lastActivityMs = Date.now();
|
|
318
|
+
try {
|
|
319
|
+
await session.transport.handleRequest(req, res);
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
process.stderr.write(`enquire http: SSE error — ${err instanceof Error ? err.message : String(err)}\n`);
|
|
323
|
+
}
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
243
326
|
if (req.method !== "POST") {
|
|
244
327
|
sendJsonRpcError(res, 405, -32000, `Method ${req.method} not allowed for ${mcpPath}`);
|
|
245
328
|
return;
|
|
246
329
|
}
|
|
330
|
+
// POST /mcp — either an existing session (Mcp-Session-Id header)
|
|
331
|
+
// or a new initialize. Read the body once; we'll need it to
|
|
332
|
+
// detect initialize and to feed handleRequest.
|
|
247
333
|
let body;
|
|
248
334
|
try {
|
|
249
335
|
body = await readJsonBody(req, maxBodyBytes);
|
|
@@ -252,29 +338,68 @@ export function createHttpHandler(deps, opts) {
|
|
|
252
338
|
sendJsonRpcError(res, 400, -32700, err instanceof Error ? err.message : "Parse error");
|
|
253
339
|
return;
|
|
254
340
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
341
|
+
if (sessionId) {
|
|
342
|
+
// Existing session — route to its transport.
|
|
343
|
+
const session = registry.sessions.get(sessionId);
|
|
344
|
+
if (!session) {
|
|
345
|
+
sendJsonRpcError(res, 404, -32000, `Unknown session ${sessionId} (it may have expired)`);
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
session.lastActivityMs = Date.now();
|
|
349
|
+
try {
|
|
350
|
+
await session.transport.handleRequest(req, res, body);
|
|
351
|
+
}
|
|
352
|
+
catch (err) {
|
|
353
|
+
process.stderr.write(`enquire http: stateful transport error — ${err instanceof Error ? err.message : String(err)}\n`);
|
|
354
|
+
if (!res.headersSent) {
|
|
355
|
+
sendJsonRpcError(res, 500, -32603, "Internal server error");
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
// No session id — must be a fresh `initialize`. Cap before allocating.
|
|
361
|
+
if (registry.size() >= maxSessions) {
|
|
362
|
+
res.statusCode = 503;
|
|
363
|
+
res.setHeader("Retry-After", "60");
|
|
364
|
+
res.setHeader("Content-Type", "application/json");
|
|
365
|
+
res.end(JSON.stringify({
|
|
366
|
+
error: "max sessions reached",
|
|
367
|
+
current: registry.size(),
|
|
368
|
+
max: maxSessions
|
|
369
|
+
}));
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
// Allocate session: server + transport with a fresh session id.
|
|
373
|
+
// The SDK's `sessionIdGenerator` returns a UUID; the transport
|
|
374
|
+
// sets the `Mcp-Session-Id` response header automatically on
|
|
375
|
+
// initialize.
|
|
260
376
|
const server = buildMcpServer(deps, opts);
|
|
261
|
-
const transport = new StreamableHTTPServerTransport({
|
|
377
|
+
const transport = new StreamableHTTPServerTransport({
|
|
378
|
+
sessionIdGenerator: () => randomBytes(16).toString("hex"),
|
|
379
|
+
onsessioninitialized: (sid) => {
|
|
380
|
+
// The SDK guarantees this fires before initialize's response
|
|
381
|
+
// ships, so the entry exists when subsequent requests arrive.
|
|
382
|
+
registry.sessions.set(sid, { server, transport, lastActivityMs: Date.now() });
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
// Wire up cleanup on transport close (e.g. client disconnect mid-stream).
|
|
386
|
+
transport.onclose = () => {
|
|
387
|
+
const sid = transport.sessionId;
|
|
388
|
+
if (sid)
|
|
389
|
+
registry.sessions.delete(sid);
|
|
390
|
+
};
|
|
262
391
|
try {
|
|
263
392
|
await server.connect(transport);
|
|
264
|
-
// Wire up cleanup so we never leak a transport on early
|
|
265
|
-
// client-disconnect. Both server and transport are per-request
|
|
266
|
-
// disposable — `server.close()` releases the connection, the
|
|
267
|
-
// transport's `close()` flushes any pending stream.
|
|
268
|
-
const cleanup = () => {
|
|
269
|
-
void transport.close();
|
|
270
|
-
void server.close();
|
|
271
|
-
};
|
|
272
|
-
res.on("close", cleanup);
|
|
273
393
|
await transport.handleRequest(req, res, body);
|
|
274
394
|
}
|
|
275
395
|
catch (err) {
|
|
276
|
-
process.stderr.write(`enquire http:
|
|
277
|
-
|
|
396
|
+
process.stderr.write(`enquire http: stateful initialize error — ${err instanceof Error ? err.message : String(err)}\n`);
|
|
397
|
+
// Best-effort: free resources we allocated.
|
|
398
|
+
void transport.close().catch(() => { });
|
|
399
|
+
void server.close().catch(() => { });
|
|
400
|
+
if (!res.headersSent) {
|
|
401
|
+
sendJsonRpcError(res, 500, -32603, "Internal server error");
|
|
402
|
+
}
|
|
278
403
|
}
|
|
279
404
|
}
|
|
280
405
|
catch (err) {
|
|
@@ -287,6 +412,39 @@ export function createHttpHandler(deps, opts) {
|
|
|
287
412
|
}
|
|
288
413
|
};
|
|
289
414
|
}
|
|
415
|
+
/**
|
|
416
|
+
* Stateless POST handler — extracted from createHttpHandler so the
|
|
417
|
+
* stateful path can keep using fresh server+transport per non-session
|
|
418
|
+
* request when we want to (we don't currently). Identical to the
|
|
419
|
+
* v2.6.0 default flow.
|
|
420
|
+
*/
|
|
421
|
+
async function handleStatelessRequest(req, res, deps, opts, maxBodyBytes) {
|
|
422
|
+
let body;
|
|
423
|
+
try {
|
|
424
|
+
body = await readJsonBody(req, maxBodyBytes);
|
|
425
|
+
}
|
|
426
|
+
catch (err) {
|
|
427
|
+
sendJsonRpcError(res, 400, -32700, err instanceof Error ? err.message : "Parse error");
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
const server = buildMcpServer(deps, opts);
|
|
431
|
+
const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
|
|
432
|
+
try {
|
|
433
|
+
await server.connect(transport);
|
|
434
|
+
const cleanup = () => {
|
|
435
|
+
void transport.close();
|
|
436
|
+
void server.close();
|
|
437
|
+
};
|
|
438
|
+
res.on("close", cleanup);
|
|
439
|
+
await transport.handleRequest(req, res, body);
|
|
440
|
+
}
|
|
441
|
+
catch (err) {
|
|
442
|
+
process.stderr.write(`enquire http: transport error — ${err instanceof Error ? err.message : String(err)}\n`);
|
|
443
|
+
if (!res.headersSent) {
|
|
444
|
+
sendJsonRpcError(res, 500, -32603, "Internal server error");
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
290
448
|
/**
|
|
291
449
|
* Generate a fresh 32-byte base64url bearer token. Used by the
|
|
292
450
|
* `enquire-mcp gen-token` subcommand.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../src/http-transport.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,6DAA6D;AAC7D,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,yEAAyE;AACzE,uEAAuE;AACvE,0EAA0E;AAC1E,sEAAsE;AACtE,kEAAkE;AAClE,uEAAuE;AACvE,sEAAsE;AACtE,yDAAyD;AACzD,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,kEAAkE;AAClE,sEAAsE;AACtE,oEAAoE;AACpE,sEAAsE;AACtE,+CAA+C;AAC/C,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,sEAAsE;AACtE,sEAAsE;AAEtE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAwE,MAAM,WAAW,CAAC;AAC/G,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAsC,MAAM,YAAY,CAAC;AA8CtH;;;;;;;GAOG;AACH,MAAM,WAAW;IACE,SAAS,CAAS;IAClB,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEvD,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,6DAA6D;IAC7D,OAAO,CAAC,OAAe,EAAE,QAAgB,IAAI,CAAC,GAAG,EAAE;QACjD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,WAAW;QACjD,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;QAC9B,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACxC,CAAC;QACD,sEAAsE;QACtE,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;YAC9D,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACtD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oCAAoC;IACpC,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,SAAS,YAAY,CAAC,UAA8B,EAAE,aAAqB;IACzE,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,0EAA0E;IAC1E,yEAAyE;IACzE,2EAA2E;IAC3E,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;IACzE,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IACtE,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,oEAAoE;IACpE,+DAA+D;IAC/D,OAAO,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,8EAA8E;AAC9E,KAAK,UAAU,YAAY,CAAC,GAAoB,EAAE,QAAgB;IAChE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC;QACpB,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,QAAQ,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,uEAAuE;AACvE,SAAS,gBAAgB,CAAC,GAAmB,EAAE,UAAkB,EAAE,IAAY,EAAE,OAAe;IAC9F,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO;IAC5B,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;IAC5B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAClD,GAAG,CAAC,GAAG,CACL,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QACxB,EAAE,EAAE,IAAI;KACT,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAS,SAAS,CAAC,GAAoB,EAAE,GAAmB,EAAE,YAAsB;IAClF,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IACzC,IAAI,OAAO,aAAa,KAAK,QAAQ;QAAE,OAAO;IAC9C,uEAAuE;IACvE,yEAAyE;IACzE,uEAAuE;IACvE,yEAAyE;IACzE,kEAAkE;IAClE,oEAAoE;IACpE,mEAAmE;IACnE,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,aAAa,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClF,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,eAAe;QAAE,OAAO;IAC5D,qEAAqE;IACrE,qEAAqE;IACrE,sEAAsE;IACtE,qEAAqE;IACrE,8BAA8B;IAC9B,IAAI,eAAe,EAAE,CAAC;QACpB,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;SAAM,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,aAAa,CAAC,CAAC;QAC5D,GAAG,CAAC,SAAS,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IACD,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,4BAA4B,CAAC,CAAC;IAC5E,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,4DAA4D,CAAC,CAAC;IAC5G,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAgB,EAChB,IAAsB;IAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,kBAAkB,IAAI,GAAG,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,8CAA8C;IAEpF,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;YAEjC,mCAAmC;YACnC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;YAEjF,4DAA4D;YAC5D,6DAA6D;YAC7D,+CAA+C;YAC/C,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACxD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;gBAC5C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YAED,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC7B,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;gBAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACpE,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;YAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACzG,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,4BAA4B,CAAC,CAAC;gBAChE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;gBAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YAED,wBAAwB;YACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBACnC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;gBAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YAED,4DAA4D;YAC5D,gEAAgE;YAChE,kEAAkE;YAClE,gCAAgC;YAChC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1B,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,CAAC,MAAM,oBAAoB,OAAO,EAAE,CAAC,CAAC;gBACtF,OAAO;YACT,CAAC;YAED,IAAI,IAAa,CAAC;YAClB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;gBACvF,OAAO;YACT,CAAC;YAED,4DAA4D;YAC5D,8DAA8D;YAC9D,kEAAkE;YAClE,+DAA+D;YAC/D,UAAU;YACV,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAChC,wDAAwD;gBACxD,+DAA+D;gBAC/D,6DAA6D;gBAC7D,oDAAoD;gBACpD,MAAM,OAAO,GAAG,GAAG,EAAE;oBACnB,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;oBACvB,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBACtB,CAAC,CAAC;gBACF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzB,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC9G,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gEAAgE;YAChE,wDAAwD;YACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CACrG,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAsB;IAC1D,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,wEAAwE;YACtE,0CAA0C,CAC7C,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,KAAK,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,oEAAoE;IACpE,yDAAyD;IACzD,qEAAqE;IACrE,yDAAyD;IACzD,IAAI,IAAI,CAAC,qBAAqB,KAAK,KAAK,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;YACtC,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;gBACvB,IAAI,MAAM,IAAI,KAAK;oBAAE,OAAO;gBAC5B,MAAM,GAAG,IAAI,CAAC;gBACd,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;oBACjC,KAAK,GAAG,IAAI,CAAC;gBACf,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC9G,CAAC;wBAAS,CAAC;oBACT,MAAM,GAAG,KAAK,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;gBAC1B,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;gBAC3B,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;oBAAE,KAAK,KAAK,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACtC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAClC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QACD,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE;gBACpB,8CAA8C;YAChD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;YAC3C,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3C,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,KAAK,GACT,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAC9B,CAAC,CAAC,UAAU,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE;QACtE,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvG,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,kBAAkB,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACnH,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,iBAAiB,CAAC,IAAI,CAAC,2BAA2B,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,SAAS,GAAG,SAAS,KAAK,CACjH,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,oDAAoD;AACpD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../src/http-transport.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ export interface ServeOptions {
|
|
|
37
37
|
useHnsw?: boolean;
|
|
38
38
|
/** v2.13.0 — HNSW search-time beam width (default 100; ≥k). */
|
|
39
39
|
hnswEf?: string;
|
|
40
|
+
/** v2.15.0 — late-chunking context windowing for embeddings (default 0 chars). */
|
|
41
|
+
lateChunkContext?: string;
|
|
40
42
|
}
|
|
41
43
|
declare function main(): Promise<void>;
|
|
42
44
|
/**
|
|
@@ -100,6 +102,31 @@ declare function startServer(opts: ServeOptions): Promise<void>;
|
|
|
100
102
|
* suffix is appended by the caller.
|
|
101
103
|
*/
|
|
102
104
|
export declare function formatReadyBanner(deps: ServerDeps): string;
|
|
105
|
+
/**
|
|
106
|
+
* v2.15.0 — context-prefixed embedding text builder ("late-chunking-style"
|
|
107
|
+
* context windowing). Pre-pends the document title + heading breadcrumb,
|
|
108
|
+
* then includes a tail of the previous chunk + the chunk itself + a head
|
|
109
|
+
* of the next chunk, all bounded so the multilingual model's 128-token
|
|
110
|
+
* context budget isn't blown.
|
|
111
|
+
*
|
|
112
|
+
* Why: short standalone chunks ("Use Adam β=0.9, β=0.999") embed
|
|
113
|
+
* identically across documents, losing the surrounding context that
|
|
114
|
+
* disambiguates them. Adding ~50-100 chars of neighbor text + the
|
|
115
|
+
* doc title + breadcrumb gives the bi-encoder enough signal to keep
|
|
116
|
+
* cross-document semantic separation. Per Chroma 2024 + Jina AI's late
|
|
117
|
+
* chunking blog: +2-5 NDCG@10 typical at zero new dep cost.
|
|
118
|
+
*
|
|
119
|
+
* Returns the concatenated text. When `contextChars` ≤ 0, returns the
|
|
120
|
+
* legacy v2.1.0 form (just breadcrumb + chunk text), preserving
|
|
121
|
+
* bit-for-bit behavior for users who don't opt in.
|
|
122
|
+
*/
|
|
123
|
+
export declare function buildEmbedText(chunks: ReadonlyArray<{
|
|
124
|
+
text: string;
|
|
125
|
+
breadcrumb?: string;
|
|
126
|
+
}>, i: number, opts: {
|
|
127
|
+
docTitle?: string;
|
|
128
|
+
contextChars: number;
|
|
129
|
+
}): string;
|
|
103
130
|
declare function parsePositiveInt(raw: string, flag: string): number;
|
|
104
131
|
export { main, parsePositiveInt, startServer };
|
|
105
132
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAMtF,OAAO,EAAkC,QAAQ,EAAE,MAAM,WAAW,CAAC;AAyCrE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAW5C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;mCAE+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;8EAC0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;+BAG2B;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|