@cyanheads/mcp-ts-core 0.8.14 → 0.8.15
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/CLAUDE.md +3 -3
- package/README.md +1 -1
- package/changelog/0.8.x/0.8.15.md +22 -0
- package/dist/logs/combined.log +4 -4
- package/dist/logs/error.log +4 -4
- package/dist/services/canvas/{providers/duckdb → core}/schemaSniffer.d.ts +14 -8
- package/dist/services/canvas/core/schemaSniffer.d.ts.map +1 -0
- package/dist/services/canvas/{providers/duckdb → core}/schemaSniffer.js +41 -33
- package/dist/services/canvas/core/schemaSniffer.js.map +1 -0
- package/dist/services/canvas/index.d.ts +2 -0
- package/dist/services/canvas/index.d.ts.map +1 -1
- package/dist/services/canvas/index.js +2 -0
- package/dist/services/canvas/index.js.map +1 -1
- package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts.map +1 -1
- package/dist/services/canvas/providers/duckdb/DuckdbProvider.js +1 -1
- package/dist/services/canvas/providers/duckdb/DuckdbProvider.js.map +1 -1
- package/dist/services/canvas/spillover.d.ts +121 -0
- package/dist/services/canvas/spillover.d.ts.map +1 -0
- package/dist/services/canvas/spillover.js +201 -0
- package/dist/services/canvas/spillover.js.map +1 -0
- package/package.json +1 -1
- package/skills/add-tool/SKILL.md +2 -2
- package/skills/api-canvas/SKILL.md +77 -1
- package/skills/design-mcp-server/SKILL.md +2 -1
- package/templates/AGENTS.md +1 -0
- package/templates/CLAUDE.md +1 -0
- package/dist/services/canvas/providers/duckdb/schemaSniffer.d.ts.map +0 -1
- package/dist/services/canvas/providers/duckdb/schemaSniffer.js.map +0 -1
package/CLAUDE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Agent Protocol
|
|
2
2
|
|
|
3
|
-
**Package:** `@cyanheads/mcp-ts-core` · **Version:** 0.8.
|
|
3
|
+
**Package:** `@cyanheads/mcp-ts-core` · **Version:** 0.8.15
|
|
4
4
|
**npm:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) · **Docker:** [ghcr.io/cyanheads/mcp-ts-core](https://ghcr.io/cyanheads/mcp-ts-core)
|
|
5
5
|
|
|
6
6
|
> **Developer note:** Never assume. Read related files and docs before making changes. Read full file content for context. Never edit a file before reading it.
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
| `/auth` | `checkScopes` | Dynamic scope checking |
|
|
36
36
|
| `/storage` | `StorageService` | Storage abstraction |
|
|
37
37
|
| `/storage/types` | `IStorageProvider` | Provider interface |
|
|
38
|
-
| `/canvas` | `DataCanvas`, `CanvasInstance`, `CanvasRegistry`, `IDataCanvasProvider`, `DuckdbProvider`, `assertReadOnlyQuery`, `quoteIdentifier`, ... | DataCanvas primitive (Tier 3, optional peer dep `@duckdb/node-api`); SQL/analytical workspace |
|
|
38
|
+
| `/canvas` | `DataCanvas`, `CanvasInstance`, `CanvasRegistry`, `IDataCanvasProvider`, `DuckdbProvider`, `spillover`, `inferSchemaFromRows`, `assertReadOnlyQuery`, `quoteIdentifier`, ... | DataCanvas primitive (Tier 3, optional peer dep `@duckdb/node-api`); SQL/analytical workspace + source-agnostic spillover helper |
|
|
39
39
|
| `/utils` | formatting, encoding, network, pagination, logging, runtime, telemetry, token counting, parsers†, sanitization†, scheduling† | All utilities (†optional peer deps) |
|
|
40
40
|
| `/services` | `OpenRouterProvider`, `SpeechService`, `createSpeechProvider`, `ElevenLabsProvider`, `WhisperProvider`, `GraphService`, provider interfaces and types | LLM, Speech (TTS/STT), Graph services |
|
|
41
41
|
| `/linter` | `validateDefinitions`, `LintReport`, `LintDiagnostic`, `LintInput`, `LintSeverity` | Definition validation |
|
|
@@ -502,7 +502,7 @@ Each `skills/<name>/SKILL.md` carries a `metadata.version` string in its frontma
|
|
|
502
502
|
| `api-config` | `skills/api-config/SKILL.md` | AppConfig, parseConfig, env vars |
|
|
503
503
|
| `api-testing` | `skills/api-testing/SKILL.md` | createMockContext, test patterns, MockContextOptions |
|
|
504
504
|
| `api-workers` | `skills/api-workers/SKILL.md` | createWorkerHandler, CloudflareBindings, Worker runtime |
|
|
505
|
-
| `api-canvas` | `skills/api-canvas/SKILL.md` | DataCanvas primitive: acquire/register/query/export, token-sharing model, SQL gate, lifecycle |
|
|
505
|
+
| `api-canvas` | `skills/api-canvas/SKILL.md` | DataCanvas primitive: acquire/register/query/export, token-sharing model, SQL gate, lifecycle, spillover pattern |
|
|
506
506
|
| `api-linter` | `skills/api-linter/SKILL.md` | Definition lint rules (`format-parity`, `schema-*`, `name-*`, `server-json-*`, …) — look here when devcheck reports a lint diagnostic |
|
|
507
507
|
| `add-tool` | `skills/add-tool/SKILL.md` | Scaffold a new MCP tool definition |
|
|
508
508
|
| `add-app-tool` | `skills/add-app-tool/SKILL.md` | Scaffold an MCP App tool + UI resource pair |
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
<div align="center">
|
|
7
7
|
|
|
8
|
-
[](./CHANGELOG.md) [](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-11-25/changelog.mdx) [](https://modelcontextprotocol.io/) [](./LICENSE)
|
|
9
9
|
|
|
10
10
|
[](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Source-agnostic `spillover()` helper exported from /canvas (#113); engine-agnostic `inferSchemaFromRows` lifted into canvas/core; api-canvas, add-tool, design-mcp-server skills updated."
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.8.15 — 2026-05-05
|
|
7
|
+
|
|
8
|
+
`spillover()` closes the most common pattern for canvas-coupled tools: pair an inline preview with a `DataCanvas` table holding the full source, so an agent gets a sized slice plus a SQL handle for the rest in one call. Source-agnostic — anything `registerTable` accepts (arrays, sync/async iterables, paginated upstream APIs wrapped as generators) flows through.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **`spillover()`** ([#113](https://github.com/cyanheads/mcp-ts-core/issues/113)) — exported from `@cyanheads/mcp-ts-core/canvas`. Drains a tabular source up to a character budget for the inline preview, then — if the source exceeds the budget — registers the full source (preview rows + overflow sentinel + remaining tail) to a canvas table and returns a handle. Returns a discriminated union: `{ spilled: false, previewRows }` when the source fit, `{ spilled: true, previewRows, handle, truncated }` when the source overflowed. Caller controls the canvas (acquire once, spill many sources). `caps.maxRows` enforces a hard upper bound during the spill drain; `truncated` reports whether the source had more rows than the cap allowed. Best-effort `canvas.drop()` on register failure so aborted runs don't leave half-appended tables. `previewChars: 0` rejected — spillover always implies a visible preview; call `canvas.registerTable` directly for headless spills.
|
|
13
|
+
- **`inferSchemaFromRows(rows)`** — exported from `@cyanheads/mcp-ts-core/canvas`. Engine-agnostic schema inference over an in-memory row buffer. Powers `spillover()`'s default schema path; available standalone for callers that want to derive a `ColumnSchema[]` without going through `sniffSchema`'s iterable contract.
|
|
14
|
+
- **`SpilloverOptions`, `SpilloverResult`, `SpilloverFitResult`, `SpilloverSpillResult`** — types exported from `/canvas` for callers that wrap or compose the helper.
|
|
15
|
+
|
|
16
|
+
## Changed
|
|
17
|
+
|
|
18
|
+
- **`schemaSniffer` lifted from `services/canvas/providers/duckdb/` to `services/canvas/core/`.** `sniffSchema` (the iterable-buffering variant) now delegates to the new `inferSchemaFromRows` for the actual type inference. `DuckdbProvider` import path updated; engine-agnostic so future providers don't need to re-implement schema sniffing. Internal `unionToDuckdbType` renamed to `unionToColumnType` to match the engine-agnostic role.
|
|
19
|
+
- **`skills/api-canvas` (v1.1→1.2)** — new "Pattern: spillover" section with API surface, character-budget sizing table (10k tokens ≈ 40k chars, 25k ≈ 100k, 50k ≈ 200k), drain/overflow flow, schema-handling table, cancellation behavior, and "when not to use" notes.
|
|
20
|
+
- **`skills/add-tool` (v2.7→2.8)** — "Tabular working sets" bullet expanded to name `spillover()` explicitly, mention auto-register-on-overflow and the full-result distribution pattern.
|
|
21
|
+
- **`skills/design-mcp-server` (v2.9→2.10)** — new bullet under Output design ("Spill big tabular results to a queryable surface") pointing at `spillover()` for paginated APIs, streamed exports, and large query results. Reinforces computing aggregate signal across the full result, not the preview.
|
|
22
|
+
- **`AGENTS.md`/`CLAUDE.md` `/canvas` exports row** updated to list `spillover` and `inferSchemaFromRows`. `templates/AGENTS.md` and `templates/CLAUDE.md` skill table gained an `api-canvas` row so newly scaffolded servers see the helper alongside the rest of the canvas surface.
|
package/dist/logs/combined.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{"level":50,"time":
|
|
2
|
-
{"level":50,"time":
|
|
3
|
-
{"level":50,"time":
|
|
4
|
-
{"level":50,"time":
|
|
1
|
+
{"level":50,"time":1777967541162,"env":"testing","version":"0.0.0-test","pid":62868,"requestId":"0FL3P-PR4X9","timestamp":"2026-05-05T07:52:21.161Z","operation":"HandleToolRequest","critical":false,"errorCode":-32005,"originalErrorType":"McpError","finalErrorType":"McpError","sessionId":"a054ea024d91a80eff4c5aa5e6d4190a50b098c4f2d1d3345e733a05ab38aa8c","toolName":"scoped_echo","tenantId":"authz-tenant","auth":{"sub":"authz-user","scopes":["tool:other:read"],"clientId":"authz-client","tenantId":"authz-tenant"},"errorData":{"sessionId":"a054ea024d91a80eff4c5aa5e6d4190a50b098c4f2d1d3345e733a05ab38aa8c","toolName":"scoped_echo","requestId":"0FL3P-PR4X9","timestamp":"2026-05-05T07:52:21.161Z","tenantId":"authz-tenant","operation":"HandleToolRequest","auth":{"sub":"authz-user","scopes":["tool:other:read"],"clientId":"authz-client","tenantId":"authz-tenant"},"originalErrorName":"McpError","originalMessage":"Insufficient permissions.","originalStack":"McpError: Insufficient permissions.\n at forbidden (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:84:58)\n at withRequiredScopes (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/authUtils.js:61:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:133:17)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:231:34)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Insufficient permissions.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:168:26)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:231:34)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at processTicksAndRejections (native:7:39)","msg":"Error in tool:scoped_echo: Insufficient permissions."}
|
|
2
|
+
{"level":50,"time":1777967542139,"env":"testing","version":"0.8.15","pid":62874,"requestId":"NR8MT-ZACPF","timestamp":"2026-05-05T07:52:22.139Z","operation":"httpErrorHandler","critical":false,"errorCode":-32006,"originalErrorType":"McpError","finalErrorType":"McpError","path":"/mcp","method":"POST","errorData":{"path":"/mcp","method":"POST","requestId":"NR8MT-ZACPF","timestamp":"2026-05-05T07:52:22.139Z","operation":"httpErrorHandler","originalErrorName":"McpError","originalMessage":"Missing or invalid Authorization header. Bearer scheme required.","originalStack":"McpError: Missing or invalid Authorization header. Bearer scheme required.\n at unauthorized (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:86:61)\n at authMiddleware (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/authMiddleware.js:64:19)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:232:22)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at cors2 (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/middleware/cors/index.js:82:11)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Missing or invalid Authorization header. Bearer scheme required.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpErrorHandler.js:59:39)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:26:25)\n at processTicksAndRejections (native:7:39)","msg":"Error in httpTransport: Missing or invalid Authorization header. Bearer scheme required."}
|
|
3
|
+
{"level":50,"time":1777967542154,"env":"testing","version":"0.8.15","pid":62874,"requestId":"EHHRO-B8TIH","timestamp":"2026-05-05T07:52:22.154Z","operation":"httpErrorHandler","critical":false,"errorCode":-32006,"originalErrorType":"McpError","finalErrorType":"McpError","path":"/mcp","method":"POST","errorData":{"path":"/mcp","method":"POST","requestId":"EHHRO-B8TIH","timestamp":"2026-05-05T07:52:22.154Z","operation":"httpErrorHandler","originalErrorName":"McpError","originalMessage":"Token has expired.","originalStack":"McpError: Token has expired.\n at unauthorized (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:86:61)\n at handleJoseVerifyError (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/claimParser.js:56:11)\n at verify (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/strategies/jwtStrategy.js:91:13)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Token has expired.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpErrorHandler.js:59:39)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:26:25)\n at processTicksAndRejections (native:7:39)","msg":"Error in httpTransport: Token has expired."}
|
|
4
|
+
{"level":50,"time":1777967542158,"env":"testing","version":"0.8.15","pid":62874,"requestId":"YR4G7-ZSMOH","timestamp":"2026-05-05T07:52:22.158Z","operation":"httpErrorHandler","critical":false,"errorCode":-32006,"originalErrorType":"McpError","finalErrorType":"McpError","path":"/mcp","method":"GET","errorData":{"path":"/mcp","method":"GET","requestId":"YR4G7-ZSMOH","timestamp":"2026-05-05T07:52:22.158Z","operation":"httpErrorHandler","originalErrorName":"McpError","originalMessage":"Missing or invalid Authorization header. Bearer scheme required.","originalStack":"McpError: Missing or invalid Authorization header. Bearer scheme required.\n at unauthorized (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:86:61)\n at authMiddleware (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/authMiddleware.js:64:19)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:232:22)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at cors2 (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/middleware/cors/index.js:82:11)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Missing or invalid Authorization header. Bearer scheme required.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpErrorHandler.js:59:39)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:26:25)\n at processTicksAndRejections (native:7:39)","msg":"Error in httpTransport: Missing or invalid Authorization header. Bearer scheme required."}
|
package/dist/logs/error.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{"level":50,"time":
|
|
2
|
-
{"level":50,"time":
|
|
3
|
-
{"level":50,"time":
|
|
4
|
-
{"level":50,"time":
|
|
1
|
+
{"level":50,"time":1777967541162,"env":"testing","version":"0.0.0-test","pid":62868,"requestId":"0FL3P-PR4X9","timestamp":"2026-05-05T07:52:21.161Z","operation":"HandleToolRequest","critical":false,"errorCode":-32005,"originalErrorType":"McpError","finalErrorType":"McpError","sessionId":"a054ea024d91a80eff4c5aa5e6d4190a50b098c4f2d1d3345e733a05ab38aa8c","toolName":"scoped_echo","tenantId":"authz-tenant","auth":{"sub":"authz-user","scopes":["tool:other:read"],"clientId":"authz-client","tenantId":"authz-tenant"},"errorData":{"sessionId":"a054ea024d91a80eff4c5aa5e6d4190a50b098c4f2d1d3345e733a05ab38aa8c","toolName":"scoped_echo","requestId":"0FL3P-PR4X9","timestamp":"2026-05-05T07:52:21.161Z","tenantId":"authz-tenant","operation":"HandleToolRequest","auth":{"sub":"authz-user","scopes":["tool:other:read"],"clientId":"authz-client","tenantId":"authz-tenant"},"originalErrorName":"McpError","originalMessage":"Insufficient permissions.","originalStack":"McpError: Insufficient permissions.\n at forbidden (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:84:58)\n at withRequiredScopes (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/authUtils.js:61:15)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:133:17)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:231:34)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Insufficient permissions.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/tools/utils/toolHandlerFactory.js:168:26)\n at executeToolHandler (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:231:34)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js:126:43)\n at processTicksAndRejections (native:7:39)","msg":"Error in tool:scoped_echo: Insufficient permissions."}
|
|
2
|
+
{"level":50,"time":1777967542139,"env":"testing","version":"0.8.15","pid":62874,"requestId":"NR8MT-ZACPF","timestamp":"2026-05-05T07:52:22.139Z","operation":"httpErrorHandler","critical":false,"errorCode":-32006,"originalErrorType":"McpError","finalErrorType":"McpError","path":"/mcp","method":"POST","errorData":{"path":"/mcp","method":"POST","requestId":"NR8MT-ZACPF","timestamp":"2026-05-05T07:52:22.139Z","operation":"httpErrorHandler","originalErrorName":"McpError","originalMessage":"Missing or invalid Authorization header. Bearer scheme required.","originalStack":"McpError: Missing or invalid Authorization header. Bearer scheme required.\n at unauthorized (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:86:61)\n at authMiddleware (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/authMiddleware.js:64:19)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:232:22)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at cors2 (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/middleware/cors/index.js:82:11)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Missing or invalid Authorization header. Bearer scheme required.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpErrorHandler.js:59:39)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:26:25)\n at processTicksAndRejections (native:7:39)","msg":"Error in httpTransport: Missing or invalid Authorization header. Bearer scheme required."}
|
|
3
|
+
{"level":50,"time":1777967542154,"env":"testing","version":"0.8.15","pid":62874,"requestId":"EHHRO-B8TIH","timestamp":"2026-05-05T07:52:22.154Z","operation":"httpErrorHandler","critical":false,"errorCode":-32006,"originalErrorType":"McpError","finalErrorType":"McpError","path":"/mcp","method":"POST","errorData":{"path":"/mcp","method":"POST","requestId":"EHHRO-B8TIH","timestamp":"2026-05-05T07:52:22.154Z","operation":"httpErrorHandler","originalErrorName":"McpError","originalMessage":"Token has expired.","originalStack":"McpError: Token has expired.\n at unauthorized (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:86:61)\n at handleJoseVerifyError (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/lib/claimParser.js:56:11)\n at verify (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/strategies/jwtStrategy.js:91:13)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Token has expired.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpErrorHandler.js:59:39)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:26:25)\n at processTicksAndRejections (native:7:39)","msg":"Error in httpTransport: Token has expired."}
|
|
4
|
+
{"level":50,"time":1777967542158,"env":"testing","version":"0.8.15","pid":62874,"requestId":"YR4G7-ZSMOH","timestamp":"2026-05-05T07:52:22.158Z","operation":"httpErrorHandler","critical":false,"errorCode":-32006,"originalErrorType":"McpError","finalErrorType":"McpError","path":"/mcp","method":"GET","errorData":{"path":"/mcp","method":"GET","requestId":"YR4G7-ZSMOH","timestamp":"2026-05-05T07:52:22.158Z","operation":"httpErrorHandler","originalErrorName":"McpError","originalMessage":"Missing or invalid Authorization header. Bearer scheme required.","originalStack":"McpError: Missing or invalid Authorization header. Bearer scheme required.\n at unauthorized (/Users/casey/Developer/github/mcp-ts-core/dist/types-global/errors.js:86:61)\n at authMiddleware (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/auth/authMiddleware.js:64:19)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpTransport.js:232:22)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:22:23)\n at cors2 (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/middleware/cors/index.js:82:11)\n at processTicksAndRejections (native:7:39)"},"stack":"McpError: Missing or invalid Authorization header. Bearer scheme required.\n at handleError (/Users/casey/Developer/github/mcp-ts-core/dist/utils/internal/error-handler/errorHandler.js:170:23)\n at <anonymous> (/Users/casey/Developer/github/mcp-ts-core/dist/mcp-server/transports/http/httpErrorHandler.js:59:39)\n at dispatch (/Users/casey/Developer/github/mcp-ts-core/node_modules/hono/dist/compose.js:26:25)\n at processTicksAndRejections (native:7:39)","msg":"Error in httpTransport: Missing or invalid Authorization header. Bearer scheme required."}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Schema inference for
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* unions.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* @module src/services/canvas/
|
|
2
|
+
* @fileoverview Schema inference for canvas table registration. Engine-agnostic
|
|
3
|
+
* — produces `ColumnSchema[]` from observed JS values; providers map those
|
|
4
|
+
* tags to native types when needed. `VARCHAR` is the safe fallback for
|
|
5
|
+
* ambiguous unions. Used by the DuckDB provider for the no-explicit-schema
|
|
6
|
+
* sync path and by the spillover helper to infer a schema from its preview
|
|
7
|
+
* buffer when the source is async.
|
|
8
|
+
* @module src/services/canvas/core/schemaSniffer
|
|
9
9
|
*/
|
|
10
|
-
import type { ColumnSchema } from '
|
|
10
|
+
import type { ColumnSchema } from '../types.js';
|
|
11
11
|
/** Row shape — mirrors what registerTable accepts. */
|
|
12
12
|
type Row = Record<string, unknown>;
|
|
13
13
|
/**
|
|
@@ -25,6 +25,12 @@ export interface SniffedSchema {
|
|
|
25
25
|
/** Rows already consumed; append these first. */
|
|
26
26
|
sniffedRows: Row[];
|
|
27
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Infer a `ColumnSchema[]` from a set of fully-buffered rows. Column ordering
|
|
30
|
+
* follows first appearance. A column is `nullable` if any sampled row had
|
|
31
|
+
* `null`/`undefined` for it or was missing the key. Throws if `rows` is empty.
|
|
32
|
+
*/
|
|
33
|
+
export declare function inferSchemaFromRows(rows: readonly Row[]): ColumnSchema[];
|
|
28
34
|
/**
|
|
29
35
|
* Buffer up to `sniffRowCount` rows and return the inferred schema, the
|
|
30
36
|
* buffered rows, and a continuation iterator. Throws if the input is empty.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaSniffer.d.ts","sourceRoot":"","sources":["../../../../src/services/canvas/core/schemaSniffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;AAE5D,sDAAsD;AACtD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnC;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,iDAAiD;IACjD,WAAW,EAAE,GAAG,EAAE,CAAC;CACpB;AAkDD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,GAAG,YAAY,EAAE,CAgCxE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,MAAM,GAAG,aAAa,CAczF"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Schema inference for
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* unions.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* @module src/services/canvas/
|
|
2
|
+
* @fileoverview Schema inference for canvas table registration. Engine-agnostic
|
|
3
|
+
* — produces `ColumnSchema[]` from observed JS values; providers map those
|
|
4
|
+
* tags to native types when needed. `VARCHAR` is the safe fallback for
|
|
5
|
+
* ambiguous unions. Used by the DuckDB provider for the no-explicit-schema
|
|
6
|
+
* sync path and by the spillover helper to infer a schema from its preview
|
|
7
|
+
* buffer when the source is async.
|
|
8
|
+
* @module src/services/canvas/core/schemaSniffer
|
|
9
9
|
*/
|
|
10
|
-
import { validationError } from '
|
|
10
|
+
import { validationError } from '../../../types-global/errors.js';
|
|
11
11
|
function classify(value) {
|
|
12
12
|
if (value === null || value === undefined)
|
|
13
13
|
return 'null';
|
|
@@ -24,10 +24,10 @@ function classify(value) {
|
|
|
24
24
|
return 'object';
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* Pick a
|
|
27
|
+
* Pick a column type tag from the union of observed JS types. Conservative:
|
|
28
28
|
* mixed string+numeric falls back to `VARCHAR` rather than guessing.
|
|
29
29
|
*/
|
|
30
|
-
function
|
|
30
|
+
function unionToColumnType(observed) {
|
|
31
31
|
const nonNull = new Set(observed);
|
|
32
32
|
nonNull.delete('null');
|
|
33
33
|
if (nonNull.size === 0)
|
|
@@ -59,32 +59,18 @@ function unionToDuckdbType(observed) {
|
|
|
59
59
|
return 'VARCHAR';
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* Column ordering follows first appearance. A column is `nullable` if any
|
|
66
|
-
* sampled row had `null`/`undefined` for it or was missing the key.
|
|
62
|
+
* Infer a `ColumnSchema[]` from a set of fully-buffered rows. Column ordering
|
|
63
|
+
* follows first appearance. A column is `nullable` if any sampled row had
|
|
64
|
+
* `null`/`undefined` for it or was missing the key. Throws if `rows` is empty.
|
|
67
65
|
*/
|
|
68
|
-
export function
|
|
69
|
-
if (
|
|
70
|
-
throw validationError('sniffRowCount must be at least 1.', { sniffRowCount });
|
|
71
|
-
}
|
|
72
|
-
// Consume the same iterator we hand back so generators aren't re-iterated.
|
|
73
|
-
const iter = iterable[Symbol.iterator]();
|
|
74
|
-
const sniffedRows = [];
|
|
75
|
-
while (sniffedRows.length < sniffRowCount) {
|
|
76
|
-
const next = iter.next();
|
|
77
|
-
if (next.done)
|
|
78
|
-
break;
|
|
79
|
-
sniffedRows.push(next.value);
|
|
80
|
-
}
|
|
81
|
-
if (sniffedRows.length === 0) {
|
|
66
|
+
export function inferSchemaFromRows(rows) {
|
|
67
|
+
if (rows.length === 0) {
|
|
82
68
|
throw validationError('Cannot infer schema from an empty input. Provide either rows or an explicit `schema`.', { reason: 'empty_input' });
|
|
83
69
|
}
|
|
84
70
|
const observedByCol = new Map();
|
|
85
71
|
const columnOrder = [];
|
|
86
72
|
const presenceCount = new Map();
|
|
87
|
-
for (const row of
|
|
73
|
+
for (const row of rows) {
|
|
88
74
|
for (const key of Object.keys(row)) {
|
|
89
75
|
let bag = observedByCol.get(key);
|
|
90
76
|
if (!bag) {
|
|
@@ -96,13 +82,35 @@ export function sniffSchema(iterable, sniffRowCount) {
|
|
|
96
82
|
presenceCount.set(key, (presenceCount.get(key) ?? 0) + 1);
|
|
97
83
|
}
|
|
98
84
|
}
|
|
99
|
-
const total =
|
|
100
|
-
|
|
85
|
+
const total = rows.length;
|
|
86
|
+
return columnOrder.map((name) => {
|
|
101
87
|
const observed = observedByCol.get(name) ?? new Set(['null']);
|
|
102
88
|
const present = presenceCount.get(name) ?? 0;
|
|
103
89
|
const nullable = observed.has('null') || present < total;
|
|
104
|
-
return { name, type:
|
|
90
|
+
return { name, type: unionToColumnType(observed), nullable };
|
|
105
91
|
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Buffer up to `sniffRowCount` rows and return the inferred schema, the
|
|
95
|
+
* buffered rows, and a continuation iterator. Throws if the input is empty.
|
|
96
|
+
*
|
|
97
|
+
* Column ordering follows first appearance. A column is `nullable` if any
|
|
98
|
+
* sampled row had `null`/`undefined` for it or was missing the key.
|
|
99
|
+
*/
|
|
100
|
+
export function sniffSchema(iterable, sniffRowCount) {
|
|
101
|
+
if (sniffRowCount < 1) {
|
|
102
|
+
throw validationError('sniffRowCount must be at least 1.', { sniffRowCount });
|
|
103
|
+
}
|
|
104
|
+
// Consume the same iterator we hand back so generators aren't re-iterated.
|
|
105
|
+
const iter = iterable[Symbol.iterator]();
|
|
106
|
+
const sniffedRows = [];
|
|
107
|
+
while (sniffedRows.length < sniffRowCount) {
|
|
108
|
+
const next = iter.next();
|
|
109
|
+
if (next.done)
|
|
110
|
+
break;
|
|
111
|
+
sniffedRows.push(next.value);
|
|
112
|
+
}
|
|
113
|
+
const schema = inferSchemaFromRows(sniffedRows);
|
|
106
114
|
return { schema, sniffedRows, remaining: iter };
|
|
107
115
|
}
|
|
108
116
|
//# sourceMappingURL=schemaSniffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaSniffer.js","sourceRoot":"","sources":["../../../../src/services/canvas/core/schemaSniffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,9 @@ export { type AcquireResult, CanvasRegistry, type CanvasRegistryOptions, DEFAULT
|
|
|
15
15
|
export { createCanvasService } from './core/canvasFactory.js';
|
|
16
16
|
export { DataCanvas } from './core/DataCanvas.js';
|
|
17
17
|
export type { IDataCanvasProvider } from './core/IDataCanvasProvider.js';
|
|
18
|
+
export { inferSchemaFromRows } from './core/schemaSniffer.js';
|
|
18
19
|
export { ALLOWED_PLAN_OPERATORS, ALLOWED_STATEMENT_TYPES, assertNoDeniedFunctions, assertReadOnlyQuery, assertValidIdentifier, CANVAS_IDENTIFIER_REGEX, collectDisallowedOperators, collectPlanViolations, DENIED_TABLE_FUNCTIONS, type DuckdbStatementType, quoteIdentifier, SQL_GATE_REASONS, type SqlGateReason, } from './core/sqlGate.js';
|
|
19
20
|
export { DuckdbProvider, type DuckdbProviderOptions, } from './providers/duckdb/DuckdbProvider.js';
|
|
21
|
+
export { type SpilloverFitResult, type SpilloverOptions, type SpilloverResult, type SpilloverSpillResult, spillover, } from './spillover.js';
|
|
20
22
|
export type { AcquireOptions, CanvasObjectKind, ColumnSchema, ColumnType, DescribeOptions, ExportFormat, ExportOptions, ExportResult, ExportTarget, ImportFromOptions, QueryOptions, QueryResult, RegisterRows, RegisterTableOptions, RegisterTableResult, RegisterViewOptions, RegisterViewResult, TableInfo, } from './types.js';
|
|
21
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/canvas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,KAAK,aAAa,EAClB,cAAc,EACd,KAAK,qBAAqB,EAC1B,+BAA+B,GAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,eAAe,EACf,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,GACV,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/canvas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,KAAK,aAAa,EAClB,cAAc,EACd,KAAK,qBAAqB,EAC1B,+BAA+B,GAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,eAAe,EACf,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,GACV,MAAM,YAAY,CAAC"}
|
|
@@ -14,6 +14,8 @@ export { CanvasInstance } from './core/CanvasInstance.js';
|
|
|
14
14
|
export { CanvasRegistry, DEFAULT_CANVAS_REGISTRY_OPTIONS, } from './core/CanvasRegistry.js';
|
|
15
15
|
export { createCanvasService } from './core/canvasFactory.js';
|
|
16
16
|
export { DataCanvas } from './core/DataCanvas.js';
|
|
17
|
+
export { inferSchemaFromRows } from './core/schemaSniffer.js';
|
|
17
18
|
export { ALLOWED_PLAN_OPERATORS, ALLOWED_STATEMENT_TYPES, assertNoDeniedFunctions, assertReadOnlyQuery, assertValidIdentifier, CANVAS_IDENTIFIER_REGEX, collectDisallowedOperators, collectPlanViolations, DENIED_TABLE_FUNCTIONS, quoteIdentifier, SQL_GATE_REASONS, } from './core/sqlGate.js';
|
|
18
19
|
export { DuckdbProvider, } from './providers/duckdb/DuckdbProvider.js';
|
|
20
|
+
export { spillover, } from './spillover.js';
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/canvas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAEL,cAAc,EAEd,+BAA+B,GAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EAEtB,eAAe,EACf,gBAAgB,GAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,GAEf,MAAM,sCAAsC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/canvas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAEL,cAAc,EAEd,+BAA+B,GAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EAEtB,eAAe,EACf,gBAAgB,GAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,GAEf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAKL,SAAS,GACV,MAAM,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DuckdbProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/canvas/providers/duckdb/DuckdbProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,oCAAoC,CAAC;AAEhG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"DuckdbProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/canvas/providers/duckdb/DuckdbProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,9 +11,9 @@ import { databaseError, notFound, timeout, validationError } from '../../../../t
|
|
|
11
11
|
import { lazyImport } from '../../../../utils/internal/lazyImport.js';
|
|
12
12
|
import { logger } from '../../../../utils/internal/logger.js';
|
|
13
13
|
import { requestContextService } from '../../../../utils/internal/requestContext.js';
|
|
14
|
+
import { sniffSchema } from '../../core/schemaSniffer.js';
|
|
14
15
|
import { assertNoDeniedFunctions, assertPlanReadOnly, assertSelectOnly, assertValidIdentifier, quoteIdentifier, } from '../../core/sqlGate.js';
|
|
15
16
|
import { copyFormatClause, isPathTarget, pipeFileToStream, resolveExportPath, safeSizeBytes, tempFilePathFor, } from './exportWriter.js';
|
|
16
|
-
import { sniffSchema } from './schemaSniffer.js';
|
|
17
17
|
const importDuckDB = lazyImport(() => import('@duckdb/node-api'), 'Install "@duckdb/node-api" to use the DuckDB canvas provider: bun add @duckdb/node-api');
|
|
18
18
|
export class DuckdbProvider {
|
|
19
19
|
options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DuckdbProvider.js","sourceRoot":"","sources":["../../../../../src/services/canvas/providers/duckdb/DuckdbProvider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DuckdbProvider.js","sourceRoot":"","sources":["../../../../../src/services/canvas/providers/duckdb/DuckdbProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Source-agnostic spillover helper. Drains rows from any
|
|
3
|
+
* tabular source up to a character budget for the inline preview, then — if
|
|
4
|
+
* the source exceeds the budget — registers the full source (preview rows +
|
|
5
|
+
* sentinel + remaining tail) to a canvas table and returns a handle. Same
|
|
6
|
+
* input domain as {@link CanvasInstance.registerTable}: arrays, sync
|
|
7
|
+
* generators, paginated APIs wrapped as async generators, etc. The seam is
|
|
8
|
+
* the row iterable itself; everything BrAPI- or pagination-specific stays
|
|
9
|
+
* out of this layer.
|
|
10
|
+
* @module src/services/canvas/spillover
|
|
11
|
+
*/
|
|
12
|
+
import type { CanvasInstance } from './core/CanvasInstance.js';
|
|
13
|
+
import type { ColumnSchema, RegisterTableResult } from './types.js';
|
|
14
|
+
/** Row shape — mirrors what registerTable accepts. */
|
|
15
|
+
type Row = Record<string, unknown>;
|
|
16
|
+
/** Options for {@link spillover}. */
|
|
17
|
+
export interface SpilloverOptions<T extends Row> {
|
|
18
|
+
/** Pre-acquired canvas the caller already controls. */
|
|
19
|
+
canvas: CanvasInstance;
|
|
20
|
+
/** Drain caps applied to the spill phase. */
|
|
21
|
+
caps?: {
|
|
22
|
+
/**
|
|
23
|
+
* Hard upper bound on rows registered to the canvas table. When the cap
|
|
24
|
+
* is hit while the source still has more rows, the table holds exactly
|
|
25
|
+
* `maxRows` rows and the result reports `truncated: true`.
|
|
26
|
+
*/
|
|
27
|
+
maxRows?: number;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Character budget for the inline preview. The helper drains rows,
|
|
31
|
+
* accumulating `JSON.stringify(row).length` per row. The first row whose
|
|
32
|
+
* serialization pushes the running total past `previewChars` is the
|
|
33
|
+
* overflow sentinel — its existence proves the source has more rows than
|
|
34
|
+
* fit, and it is itself spilled (not previewed). Heuristic: ~4× the
|
|
35
|
+
* desired token budget (e.g. 100_000 chars ≈ 25k tokens). Must be ≥ 1.
|
|
36
|
+
*/
|
|
37
|
+
previewChars: number;
|
|
38
|
+
/**
|
|
39
|
+
* Explicit table schema. Forwarded to canvas. Auto-derived from the
|
|
40
|
+
* preview buffer when omitted.
|
|
41
|
+
*/
|
|
42
|
+
schema?: ColumnSchema[];
|
|
43
|
+
/**
|
|
44
|
+
* Cancellation. Throws on abort during drain or registration; partial
|
|
45
|
+
* canvas tables are best-effort dropped before the throw propagates.
|
|
46
|
+
*/
|
|
47
|
+
signal?: AbortSignal;
|
|
48
|
+
/** Row source. Anything DataCanvas.registerTable accepts. */
|
|
49
|
+
source: AsyncIterable<T> | Iterable<T>;
|
|
50
|
+
/**
|
|
51
|
+
* Auto-generated (e.g. `spilled_<8-hex>`) when omitted. Caller-supplied
|
|
52
|
+
* names are validated against the canvas identifier rules up-front,
|
|
53
|
+
* before any draining begins.
|
|
54
|
+
*/
|
|
55
|
+
tableName?: string;
|
|
56
|
+
}
|
|
57
|
+
/** Return value when the source fit inside the preview budget. No canvas call was made. */
|
|
58
|
+
export interface SpilloverFitResult<T> {
|
|
59
|
+
previewRows: T[];
|
|
60
|
+
spilled: false;
|
|
61
|
+
}
|
|
62
|
+
/** Return value when the source exceeded the preview budget and was spilled to a canvas table. */
|
|
63
|
+
export interface SpilloverSpillResult<T> {
|
|
64
|
+
/** Result from `canvas.registerTable` — `tableName`, `rowCount`, `columns`. */
|
|
65
|
+
handle: RegisterTableResult;
|
|
66
|
+
previewRows: T[];
|
|
67
|
+
spilled: true;
|
|
68
|
+
/**
|
|
69
|
+
* `true` when `caps.maxRows` was hit during the spill drain — the
|
|
70
|
+
* registered table holds exactly `caps.maxRows` rows but the upstream
|
|
71
|
+
* source had more. `false` when the full source was registered.
|
|
72
|
+
*/
|
|
73
|
+
truncated: boolean;
|
|
74
|
+
}
|
|
75
|
+
/** Discriminated union return for {@link spillover}. */
|
|
76
|
+
export type SpilloverResult<T> = SpilloverFitResult<T> | SpilloverSpillResult<T>;
|
|
77
|
+
/**
|
|
78
|
+
* Drain a tabular source into an inline preview slice and (if the source
|
|
79
|
+
* exceeds the budget) register the full source to a canvas table. The
|
|
80
|
+
* registered table holds every row — the preview slice plus the rows beyond
|
|
81
|
+
* it — so callers SQL the canvas table for the complete result rather than
|
|
82
|
+
* mentally unioning the preview and the table.
|
|
83
|
+
*
|
|
84
|
+
* The character budget is enforced by serializing each drained row with
|
|
85
|
+
* `JSON.stringify`. The first row that pushes the running total past
|
|
86
|
+
* `previewChars` is the overflow sentinel: its existence proves the source
|
|
87
|
+
* has more rows than fit, and it is registered on the canvas (not echoed in
|
|
88
|
+
* the preview). When the source exhausts under budget no canvas call is
|
|
89
|
+
* made.
|
|
90
|
+
*
|
|
91
|
+
* Schema is inferred from the preview buffer (plus the overflow sentinel)
|
|
92
|
+
* when no explicit schema is supplied. Pass `schema` directly when type
|
|
93
|
+
* fidelity matters more than the buffer-sized sniff window.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* async function* fetchAll(): AsyncIterable<Row> {
|
|
98
|
+
* for (let p = 0; ; p++) {
|
|
99
|
+
* const page = await fetchPage(p);
|
|
100
|
+
* yield* page.rows;
|
|
101
|
+
* if (page.last) return;
|
|
102
|
+
* }
|
|
103
|
+
* }
|
|
104
|
+
*
|
|
105
|
+
* const result = await spillover({
|
|
106
|
+
* canvas,
|
|
107
|
+
* source: fetchAll(),
|
|
108
|
+
* previewChars: 100_000, // ≈ 25k tokens
|
|
109
|
+
* caps: { maxRows: 50_000 },
|
|
110
|
+
* signal: ctx.signal,
|
|
111
|
+
* });
|
|
112
|
+
* if (result.spilled) {
|
|
113
|
+
* // result.handle.tableName, result.truncated, result.previewRows
|
|
114
|
+
* } else {
|
|
115
|
+
* // result.previewRows
|
|
116
|
+
* }
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export declare function spillover<T extends Row>(opts: SpilloverOptions<T>): Promise<SpilloverResult<T>>;
|
|
120
|
+
export {};
|
|
121
|
+
//# sourceMappingURL=spillover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spillover.d.ts","sourceRoot":"","sources":["../../../src/services/canvas/spillover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEpE,sDAAsD;AACtD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnC,qCAAqC;AACrC,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,GAAG;IAC7C,uDAAuD;IACvD,MAAM,EAAE,cAAc,CAAC;IACvB,6CAA6C;IAC7C,IAAI,CAAC,EAAE;QACL;;;;WAIG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,6DAA6D;IAC7D,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2FAA2F;AAC3F,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,WAAW,EAAE,CAAC,EAAE,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;CAChB;AAED,kGAAkG;AAClG,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,+EAA+E;IAC/E,MAAM,EAAE,mBAAmB,CAAC;IAC5B,WAAW,EAAE,CAAC,EAAE,CAAC;IACjB,OAAO,EAAE,IAAI,CAAC;IACd;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wDAAwD;AACxD,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAMjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,SAAS,CAAC,CAAC,SAAS,GAAG,EAC3C,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAyE7B"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Source-agnostic spillover helper. Drains rows from any
|
|
3
|
+
* tabular source up to a character budget for the inline preview, then — if
|
|
4
|
+
* the source exceeds the budget — registers the full source (preview rows +
|
|
5
|
+
* sentinel + remaining tail) to a canvas table and returns a handle. Same
|
|
6
|
+
* input domain as {@link CanvasInstance.registerTable}: arrays, sync
|
|
7
|
+
* generators, paginated APIs wrapped as async generators, etc. The seam is
|
|
8
|
+
* the row iterable itself; everything BrAPI- or pagination-specific stays
|
|
9
|
+
* out of this layer.
|
|
10
|
+
* @module src/services/canvas/spillover
|
|
11
|
+
*/
|
|
12
|
+
import { validationError } from '../../types-global/errors.js';
|
|
13
|
+
import { idGenerator } from '../../utils/security/idGenerator.js';
|
|
14
|
+
import { inferSchemaFromRows } from './core/schemaSniffer.js';
|
|
15
|
+
import { assertValidIdentifier } from './core/sqlGate.js';
|
|
16
|
+
const GENERATED_NAME_PREFIX = 'spilled_';
|
|
17
|
+
const GENERATED_NAME_HEX_LENGTH = 8;
|
|
18
|
+
const HEX_CHARSET = '0123456789abcdef';
|
|
19
|
+
/**
|
|
20
|
+
* Drain a tabular source into an inline preview slice and (if the source
|
|
21
|
+
* exceeds the budget) register the full source to a canvas table. The
|
|
22
|
+
* registered table holds every row — the preview slice plus the rows beyond
|
|
23
|
+
* it — so callers SQL the canvas table for the complete result rather than
|
|
24
|
+
* mentally unioning the preview and the table.
|
|
25
|
+
*
|
|
26
|
+
* The character budget is enforced by serializing each drained row with
|
|
27
|
+
* `JSON.stringify`. The first row that pushes the running total past
|
|
28
|
+
* `previewChars` is the overflow sentinel: its existence proves the source
|
|
29
|
+
* has more rows than fit, and it is registered on the canvas (not echoed in
|
|
30
|
+
* the preview). When the source exhausts under budget no canvas call is
|
|
31
|
+
* made.
|
|
32
|
+
*
|
|
33
|
+
* Schema is inferred from the preview buffer (plus the overflow sentinel)
|
|
34
|
+
* when no explicit schema is supplied. Pass `schema` directly when type
|
|
35
|
+
* fidelity matters more than the buffer-sized sniff window.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* async function* fetchAll(): AsyncIterable<Row> {
|
|
40
|
+
* for (let p = 0; ; p++) {
|
|
41
|
+
* const page = await fetchPage(p);
|
|
42
|
+
* yield* page.rows;
|
|
43
|
+
* if (page.last) return;
|
|
44
|
+
* }
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* const result = await spillover({
|
|
48
|
+
* canvas,
|
|
49
|
+
* source: fetchAll(),
|
|
50
|
+
* previewChars: 100_000, // ≈ 25k tokens
|
|
51
|
+
* caps: { maxRows: 50_000 },
|
|
52
|
+
* signal: ctx.signal,
|
|
53
|
+
* });
|
|
54
|
+
* if (result.spilled) {
|
|
55
|
+
* // result.handle.tableName, result.truncated, result.previewRows
|
|
56
|
+
* } else {
|
|
57
|
+
* // result.previewRows
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export async function spillover(opts) {
|
|
62
|
+
validatePreviewChars(opts.previewChars);
|
|
63
|
+
validateMaxRows(opts.caps?.maxRows);
|
|
64
|
+
// Validate (or generate) the table name before draining a single row —
|
|
65
|
+
// catches bad caller-supplied names without wasting a 50k-row pull.
|
|
66
|
+
const tableName = opts.tableName ?? generateTableName();
|
|
67
|
+
assertValidIdentifier(tableName, 'table');
|
|
68
|
+
opts.signal?.throwIfAborted();
|
|
69
|
+
const iter = openIterator(opts.source);
|
|
70
|
+
// ---------------- Phase 1: drain into the preview buffer ---------------
|
|
71
|
+
const previewBuffer = [];
|
|
72
|
+
let bytes = 0;
|
|
73
|
+
let overflowSentinel;
|
|
74
|
+
while (true) {
|
|
75
|
+
opts.signal?.throwIfAborted();
|
|
76
|
+
const next = await iter.next();
|
|
77
|
+
if (next.done)
|
|
78
|
+
break;
|
|
79
|
+
const row = next.value;
|
|
80
|
+
const rowChars = safeJsonLength(row);
|
|
81
|
+
if (bytes + rowChars > opts.previewChars) {
|
|
82
|
+
// This row crosses the budget — it's the overflow sentinel.
|
|
83
|
+
overflowSentinel = row;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
previewBuffer.push(row);
|
|
87
|
+
bytes += rowChars;
|
|
88
|
+
}
|
|
89
|
+
if (overflowSentinel === undefined) {
|
|
90
|
+
return { spilled: false, previewRows: previewBuffer };
|
|
91
|
+
}
|
|
92
|
+
// ---------------- Phase 2: spill the remainder to canvas ---------------
|
|
93
|
+
const schema = opts.schema ?? inferSchemaFromRows([...previewBuffer, overflowSentinel]);
|
|
94
|
+
const truncationFlag = { hit: false };
|
|
95
|
+
const merged = mergedRows({
|
|
96
|
+
bufferedRows: previewBuffer,
|
|
97
|
+
overflowSentinel,
|
|
98
|
+
remaining: iter,
|
|
99
|
+
maxRows: opts.caps?.maxRows,
|
|
100
|
+
signal: opts.signal,
|
|
101
|
+
truncationFlag,
|
|
102
|
+
});
|
|
103
|
+
let handle;
|
|
104
|
+
try {
|
|
105
|
+
handle = await opts.canvas.registerTable(tableName, merged, {
|
|
106
|
+
schema,
|
|
107
|
+
...(opts.signal !== undefined && { signal: opts.signal }),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
// Best-effort cleanup so an aborted or failed registration doesn't leave
|
|
112
|
+
// a partially-appended table on the canvas. Drop is idempotent.
|
|
113
|
+
try {
|
|
114
|
+
await opts.canvas.drop(tableName);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
/* swallow — original error wins */
|
|
118
|
+
}
|
|
119
|
+
throw err;
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
spilled: true,
|
|
123
|
+
previewRows: previewBuffer,
|
|
124
|
+
handle,
|
|
125
|
+
truncated: truncationFlag.hit,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function validatePreviewChars(value) {
|
|
129
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
130
|
+
throw validationError('previewChars must be an integer ≥ 1. Use canvas.registerTable directly for headless spills.', { reason: 'invalid_preview_chars', previewChars: value });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function validateMaxRows(value) {
|
|
134
|
+
if (value === undefined)
|
|
135
|
+
return;
|
|
136
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
137
|
+
throw validationError('caps.maxRows must be an integer ≥ 1 when supplied.', {
|
|
138
|
+
reason: 'invalid_max_rows',
|
|
139
|
+
maxRows: value,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function openIterator(source) {
|
|
144
|
+
if (typeof source[Symbol.asyncIterator] === 'function') {
|
|
145
|
+
return source[Symbol.asyncIterator]();
|
|
146
|
+
}
|
|
147
|
+
return source[Symbol.iterator]();
|
|
148
|
+
}
|
|
149
|
+
function safeJsonLength(row) {
|
|
150
|
+
try {
|
|
151
|
+
return JSON.stringify(row).length;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
/**
|
|
155
|
+
* Cyclic structures or stringify-unfriendly values would crash a
|
|
156
|
+
* downstream serializer anyway. Treat as an oversized row so it pushes
|
|
157
|
+
* past the budget and the caller sees the failure during register
|
|
158
|
+
* rather than silently in the preview.
|
|
159
|
+
*/
|
|
160
|
+
return Number.MAX_SAFE_INTEGER;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function* mergedRows(args) {
|
|
164
|
+
const cap = args.maxRows;
|
|
165
|
+
let yielded = 0;
|
|
166
|
+
const capHit = () => cap !== undefined && yielded >= cap;
|
|
167
|
+
for (const row of args.bufferedRows) {
|
|
168
|
+
args.signal?.throwIfAborted();
|
|
169
|
+
if (capHit()) {
|
|
170
|
+
args.truncationFlag.hit = true;
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
yield row;
|
|
174
|
+
yielded += 1;
|
|
175
|
+
}
|
|
176
|
+
args.signal?.throwIfAborted();
|
|
177
|
+
if (capHit()) {
|
|
178
|
+
args.truncationFlag.hit = true;
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
yield args.overflowSentinel;
|
|
182
|
+
yielded += 1;
|
|
183
|
+
while (true) {
|
|
184
|
+
args.signal?.throwIfAborted();
|
|
185
|
+
const next = await args.remaining.next();
|
|
186
|
+
if (next.done)
|
|
187
|
+
return;
|
|
188
|
+
if (capHit()) {
|
|
189
|
+
// Cap hit AND the source still had more — honest truncation.
|
|
190
|
+
args.truncationFlag.hit = true;
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
yield next.value;
|
|
194
|
+
yielded += 1;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function generateTableName() {
|
|
198
|
+
const suffix = idGenerator.generateRandomString(GENERATED_NAME_HEX_LENGTH, HEX_CHARSET);
|
|
199
|
+
return `${GENERATED_NAME_PREFIX}${suffix}`;
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=spillover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spillover.js","sourceRoot":"","sources":["../../../src/services/canvas/spillover.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/mcp-ts-core",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.15",
|
|
4
4
|
"mcpName": "io.github.cyanheads/mcp-ts-core",
|
|
5
5
|
"description": "Agent-native TypeScript framework for building MCP servers. Declarative definitions with auth, multi-backend storage, OpenTelemetry, and first-class support for Bun/Node/Cloudflare Workers.",
|
|
6
6
|
"main": "dist/core/index.js",
|
package/skills/add-tool/SKILL.md
CHANGED
|
@@ -4,7 +4,7 @@ description: >
|
|
|
4
4
|
Scaffold a new MCP tool definition. Use when the user asks to add a tool, create a new tool, or implement a new capability for the server.
|
|
5
5
|
metadata:
|
|
6
6
|
author: cyanheads
|
|
7
|
-
version: "2.
|
|
7
|
+
version: "2.8"
|
|
8
8
|
audience: external
|
|
9
9
|
type: reference
|
|
10
10
|
---
|
|
@@ -508,7 +508,7 @@ Large payloads burn the agent's context window. Default to curated summaries; of
|
|
|
508
508
|
- **Lists**: Return top N with a total count and pagination cursor, not unbounded arrays
|
|
509
509
|
- **Large objects**: Return key fields by default; accept a `fields` or `verbose` parameter for full data
|
|
510
510
|
- **Binary/blob content**: Return metadata and a reference, not the raw content
|
|
511
|
-
- **Tabular working sets**: When upstream returns more rows than fit in context, `DataCanvas` (`ctx.core.canvas?`, Tier 3 — opt-in via `CANVAS_PROVIDER_TYPE=duckdb`)
|
|
511
|
+
- **Tabular working sets**: When upstream returns more rows than fit in context, `DataCanvas` (`ctx.core.canvas?`, Tier 3 — opt-in via `CANVAS_PROVIDER_TYPE=duckdb`) lets you register the rows and return the `canvas_id` plus a preview so the agent can run SQL to slice down without a re-fetch. The `spillover()` helper (`@cyanheads/mcp-ts-core/canvas`) automates the overflow case: drain rows up to a character budget for the inline preview, auto-register the full source on overflow, return both as a discriminated union. Compute distributions or refinement hints across the full result — not the preview — so the agent gets honest aggregate signal on the rows it didn't read. See `api-canvas` for the register / query / export pattern and the spillover flow.
|
|
512
512
|
|
|
513
513
|
## Checklist
|
|
514
514
|
|
|
@@ -4,7 +4,7 @@ description: >
|
|
|
4
4
|
DataCanvas primitive reference — a Tier 3 SQL/analytical workspace for tabular MCP servers, backed by DuckDB. Use when registering tables from upstream APIs, running ad-hoc SQL across them, and exporting results. Covers the acquire → register → query → export flow, the token-sharing pattern for multi-agent collaboration, env config, and Cloudflare Workers fail-closed behavior.
|
|
5
5
|
metadata:
|
|
6
6
|
author: cyanheads
|
|
7
|
-
version: "1.
|
|
7
|
+
version: "1.2"
|
|
8
8
|
audience: external
|
|
9
9
|
type: reference
|
|
10
10
|
---
|
|
@@ -265,6 +265,82 @@ export const fetchAndStage = tool('fetch_and_stage_germplasm', {
|
|
|
265
265
|
|
|
266
266
|
---
|
|
267
267
|
|
|
268
|
+
## Pattern: spillover
|
|
269
|
+
|
|
270
|
+
A handler produces a tabular result that's too big to inline: a paginated REST call that returns 50k rows, a streamed CSV, a database cursor. Inlining everything blows the agent's context; inlining a fixed slice leaves it blind to the rest. **Spillover** is the third option — show a small preview, register the whole result on the canvas, hand back a token pointing at it. The agent reads the preview directly and reaches for SQL when it needs the rest.
|
|
271
|
+
|
|
272
|
+
### `spillover(opts)`
|
|
273
|
+
|
|
274
|
+
```ts
|
|
275
|
+
import { spillover } from '@cyanheads/mcp-ts-core/canvas';
|
|
276
|
+
|
|
277
|
+
const result = await spillover({
|
|
278
|
+
canvas: instance,
|
|
279
|
+
source: fetchAllPages(), // any AsyncIterable<Row> or Iterable<Row>
|
|
280
|
+
previewChars: 100_000, // ≈ 25k tokens of inline rows
|
|
281
|
+
caps: { maxRows: 50_000 }, // hard upper bound on registered rows
|
|
282
|
+
signal: ctx.signal,
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
if (result.spilled) {
|
|
286
|
+
// result.previewRows → inline these in the response
|
|
287
|
+
// result.handle.tableName → surface so the agent can SQL the full set
|
|
288
|
+
// result.truncated → true if caps.maxRows was hit before the source exhausted
|
|
289
|
+
} else {
|
|
290
|
+
// result.previewRows → entire source fit; no canvas table was created
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
The discriminated union narrows on `result.spilled` — no runtime checks needed.
|
|
295
|
+
|
|
296
|
+
### Sizing the preview
|
|
297
|
+
|
|
298
|
+
The budget is **characters of `JSON.stringify(row)`**, not rows. A row count is a leaky proxy: the same `50` rows is ~500 tokens for compact IDs and ~25k tokens for nested observations. A character budget gives one number that works across heterogeneous tools.
|
|
299
|
+
|
|
300
|
+
| Token budget you want | Rough `previewChars` |
|
|
301
|
+
|:---------------------|:---------------------|
|
|
302
|
+
| 10k tokens | 40_000 |
|
|
303
|
+
| 25k tokens | 100_000 |
|
|
304
|
+
| 50k tokens | 200_000 |
|
|
305
|
+
|
|
306
|
+
Heuristic: ~4 chars per token for typical JSON. Refine empirically per tool if the row shape is unusual.
|
|
307
|
+
|
|
308
|
+
### Flow
|
|
309
|
+
|
|
310
|
+
1. **Drain.** Pull rows, accumulating `JSON.stringify(row).length` per row, until the running total would exceed `previewChars` (the row that crosses the budget is the **overflow sentinel**) or the source exhausts.
|
|
311
|
+
2. **Source fit.** Drain finished under budget — return `{ spilled: false, previewRows }`. No canvas call was made.
|
|
312
|
+
3. **Source overflows.** The sentinel proves there are more rows than fit. Build a merged iterable of *(buffered preview rows + sentinel + remaining iterator)*, hand it to `canvas.registerTable`, return `{ spilled: true, previewRows, handle, truncated }`.
|
|
313
|
+
|
|
314
|
+
The merged iterable streams — the helper does not double-buffer the full source.
|
|
315
|
+
|
|
316
|
+
### Schema handling
|
|
317
|
+
|
|
318
|
+
| Source | Schema | Behavior |
|
|
319
|
+
|:-------|:-------|:---------|
|
|
320
|
+
| Sync or async | Caller-supplied | Forwarded to `registerTable` as-is |
|
|
321
|
+
| Sync or async | Omitted | Helper infers via `inferSchemaFromRows` over preview buffer + sentinel |
|
|
322
|
+
|
|
323
|
+
When the preview budget is small (single-digit rows) and the sniff window matters, pass `schema` explicitly — the helper's window is only as large as the preview budget allows.
|
|
324
|
+
|
|
325
|
+
### Cancellation and partial state
|
|
326
|
+
|
|
327
|
+
`signal.abort()` throws on the next iteration of the preview drain or the spill drain. If abort fires after `canvas.registerTable` has begun appending rows, the helper best-effort calls `canvas.drop(tableName)` before the throw propagates — the contract is "partial drain is not registered."
|
|
328
|
+
|
|
329
|
+
### When *not* to use spillover
|
|
330
|
+
|
|
331
|
+
- **Tiny known result.** If the upstream call returns ≤ 100 rows, just inline them — no canvas needed.
|
|
332
|
+
- **Headless register** (caller wants the full set on canvas with zero preview rows). Call `canvas.registerTable` directly. `previewChars` is rejected at `0`; spillover always implies a visible preview.
|
|
333
|
+
- **Workers runtime.** Canvas requires DuckDB native; spillover is a canvas-coupled helper. For Workers parity, persist via `ctx.state` instead.
|
|
334
|
+
|
|
335
|
+
### Out of scope
|
|
336
|
+
|
|
337
|
+
- **Provenance metadata** (source URI, original query). Caller stores externally — see #112 option 3.
|
|
338
|
+
- **Pagination-flavored builder.** A `paginate(fetchPage) → AsyncIterable<Row>` adapter is deferred until a second non-paginated consumer surfaces.
|
|
339
|
+
- **Token-accurate budget.** `previewTokens` (tokenizer-driven) is a future option; characters cover the common case.
|
|
340
|
+
- **`caps.maxBytes`.** Row caps cover the common case without re-doing serialization the canvas appender skips.
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
268
344
|
## Trade-offs
|
|
269
345
|
|
|
270
346
|
- **DuckDB only in v1.** Polars/SQLite/DataFusion don't fit the "agent writes ad-hoc SQL across N registered tables" shape.
|
|
@@ -4,7 +4,7 @@ description: >
|
|
|
4
4
|
Design the tool surface, resources, and service layer for a new MCP server. Use when starting a new server, planning a major feature expansion, or when the user describes a domain/API they want to expose via MCP. Produces a design doc at docs/design.md that drives implementation.
|
|
5
5
|
metadata:
|
|
6
6
|
author: cyanheads
|
|
7
|
-
version: "2.
|
|
7
|
+
version: "2.10"
|
|
8
8
|
audience: external
|
|
9
9
|
type: workflow
|
|
10
10
|
---
|
|
@@ -271,6 +271,7 @@ output: z.object({
|
|
|
271
271
|
```
|
|
272
272
|
|
|
273
273
|
- **Truncate large output with counts.** When a list exceeds a reasonable display size, show the top N and append "...and X more". Don't silently drop results.
|
|
274
|
+
- **Spill big tabular results to a queryable surface.** When a tool's row set can exceed any reasonable context budget — paginated APIs, streamed exports, big query results — pair an inline preview with a `DataCanvas` table holding the full set, returned as a token the agent can SQL. Compute distributions or refinement hints across the full result, not the preview, so aggregate signal stays honest. See `api-canvas` for the `spillover()` helper.
|
|
274
275
|
- **`format()` is the markdown twin of `structuredContent` — make both content-complete.** Different MCP clients forward different surfaces to the model: some (e.g., Claude Code) read `structuredContent` from `output`, others (e.g., Claude Desktop) read `content[]` from `format()`. Both must carry the same data so every client sees the same picture — `format()` just dresses it up with markdown. A thin `format()` that returns only a count or title leaves `content[]`-only clients blind to data that `structuredContent` clients can see. Render all fields the LLM needs, with structured markdown (headers, bold labels, lists) for readability.
|
|
275
276
|
|
|
276
277
|
#### Batch input design
|
package/templates/AGENTS.md
CHANGED
|
@@ -265,6 +265,7 @@ Available skills:
|
|
|
265
265
|
| `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
|
|
266
266
|
| `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
|
|
267
267
|
| `api-auth` | Auth modes, scopes, JWT/OAuth |
|
|
268
|
+
| `api-canvas` | DataCanvas: register tabular data, run SQL, export, plus the `spillover()` helper for big result sets — Tier 3 opt-in |
|
|
268
269
|
| `api-config` | AppConfig, parseConfig, env vars |
|
|
269
270
|
| `api-context` | Context interface, logger, state, progress |
|
|
270
271
|
| `api-errors` | McpError, JsonRpcErrorCode, error patterns |
|
package/templates/CLAUDE.md
CHANGED
|
@@ -265,6 +265,7 @@ Available skills:
|
|
|
265
265
|
| `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
|
|
266
266
|
| `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
|
|
267
267
|
| `api-auth` | Auth modes, scopes, JWT/OAuth |
|
|
268
|
+
| `api-canvas` | DataCanvas: register tabular data, run SQL, export, plus the `spillover()` helper for big result sets — Tier 3 opt-in |
|
|
268
269
|
| `api-config` | AppConfig, parseConfig, env vars |
|
|
269
270
|
| `api-context` | Context interface, logger, state, progress |
|
|
270
271
|
| `api-errors` | McpError, JsonRpcErrorCode, error patterns |
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schemaSniffer.d.ts","sourceRoot":"","sources":["../../../../../src/services/canvas/providers/duckdb/schemaSniffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAE/D,sDAAsD;AACtD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnC;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,iDAAiD;IACjD,WAAW,EAAE,GAAG,EAAE,CAAC;CACpB;AAkDD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,MAAM,GAAG,aAAa,CA6CzF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schemaSniffer.js","sourceRoot":"","sources":["../../../../../src/services/canvas/providers/duckdb/schemaSniffer.ts"],"names":[],"mappings":"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"}
|