@cyanheads/secedgar-mcp-server 0.4.4 → 0.5.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.
Files changed (50) hide show
  1. package/README.md +28 -9
  2. package/dist/config/server-config.d.ts +2 -0
  3. package/dist/config/server-config.d.ts.map +1 -1
  4. package/dist/config/server-config.js +13 -0
  5. package/dist/config/server-config.js.map +1 -1
  6. package/dist/index.js +22 -3
  7. package/dist/index.js.map +1 -1
  8. package/dist/mcp-server/tools/definitions/dataframe-describe.tool.d.ts +33 -0
  9. package/dist/mcp-server/tools/definitions/dataframe-describe.tool.d.ts.map +1 -0
  10. package/dist/mcp-server/tools/definitions/dataframe-describe.tool.js +114 -0
  11. package/dist/mcp-server/tools/definitions/dataframe-describe.tool.js.map +1 -0
  12. package/dist/mcp-server/tools/definitions/dataframe-drop.tool.d.ts +20 -0
  13. package/dist/mcp-server/tools/definitions/dataframe-drop.tool.d.ts.map +1 -0
  14. package/dist/mcp-server/tools/definitions/dataframe-drop.tool.js +48 -0
  15. package/dist/mcp-server/tools/definitions/dataframe-drop.tool.js.map +1 -0
  16. package/dist/mcp-server/tools/definitions/dataframe-query.tool.d.ts +29 -0
  17. package/dist/mcp-server/tools/definitions/dataframe-query.tool.d.ts.map +1 -0
  18. package/dist/mcp-server/tools/definitions/dataframe-query.tool.js +124 -0
  19. package/dist/mcp-server/tools/definitions/dataframe-query.tool.js.map +1 -0
  20. package/dist/mcp-server/tools/definitions/{compare-metric.tool.d.ts → fetch-frames.tool.d.ts} +25 -4
  21. package/dist/mcp-server/tools/definitions/fetch-frames.tool.d.ts.map +1 -0
  22. package/dist/mcp-server/tools/definitions/fetch-frames.tool.js +235 -0
  23. package/dist/mcp-server/tools/definitions/fetch-frames.tool.js.map +1 -0
  24. package/dist/mcp-server/tools/definitions/get-financials.tool.d.ts +5 -0
  25. package/dist/mcp-server/tools/definitions/get-financials.tool.d.ts.map +1 -1
  26. package/dist/mcp-server/tools/definitions/get-financials.tool.js +49 -0
  27. package/dist/mcp-server/tools/definitions/get-financials.tool.js.map +1 -1
  28. package/dist/mcp-server/tools/definitions/search-filings.tool.d.ts +7 -0
  29. package/dist/mcp-server/tools/definitions/search-filings.tool.d.ts.map +1 -1
  30. package/dist/mcp-server/tools/definitions/search-filings.tool.js +97 -4
  31. package/dist/mcp-server/tools/definitions/search-filings.tool.js.map +1 -1
  32. package/dist/services/canvas-bridge/canvas-bridge.d.ts +146 -0
  33. package/dist/services/canvas-bridge/canvas-bridge.d.ts.map +1 -0
  34. package/dist/services/canvas-bridge/canvas-bridge.js +270 -0
  35. package/dist/services/canvas-bridge/canvas-bridge.js.map +1 -0
  36. package/dist/services/canvas-bridge/sql-gate-extras.d.ts +15 -0
  37. package/dist/services/canvas-bridge/sql-gate-extras.d.ts.map +1 -0
  38. package/dist/services/canvas-bridge/sql-gate-extras.js +49 -0
  39. package/dist/services/canvas-bridge/sql-gate-extras.js.map +1 -0
  40. package/dist/services/edgar/edgar-api-service.d.ts +2 -0
  41. package/dist/services/edgar/edgar-api-service.d.ts.map +1 -1
  42. package/dist/services/edgar/edgar-api-service.js +11 -1
  43. package/dist/services/edgar/edgar-api-service.js.map +1 -1
  44. package/dist/services/edgar/types.d.ts +2 -0
  45. package/dist/services/edgar/types.d.ts.map +1 -1
  46. package/package.json +6 -5
  47. package/server.json +3 -3
  48. package/dist/mcp-server/tools/definitions/compare-metric.tool.d.ts.map +0 -1
  49. package/dist/mcp-server/tools/definitions/compare-metric.tool.js +0 -149
  50. package/dist/mcp-server/tools/definitions/compare-metric.tool.js.map +0 -1
@@ -4,7 +4,23 @@
4
4
  */
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ import { getCanvasBridge, toDatasetField } from '../../../services/canvas-bridge/canvas-bridge.js';
7
8
  import { getEdgarApiService } from '../../../services/edgar/edgar-api-service.js';
9
+ function eftsHitToRow(hit) {
10
+ const displayName = hit._source.display_names?.[0] || '';
11
+ return {
12
+ accession_number: hit._source.adsh || hit._id.split(':')[0] || hit._id,
13
+ form: hit._source.form ?? null,
14
+ filing_date: hit._source.file_date,
15
+ period_ending: hit._source.period_ending ?? null,
16
+ company_name: cleanCompanyName(displayName),
17
+ cik: hit._source.ciks?.[0] ?? null,
18
+ ticker: extractTicker(displayName),
19
+ file_description: hit._source.file_description ?? null,
20
+ sic: hit._source.sics?.[0] ?? null,
21
+ location: hit._source.biz_locations?.[0] ?? null,
22
+ };
23
+ }
8
24
  /**
9
25
  * EDGAR's `display_names[0]` embeds the ticker(s) and CIK in trailing parentheticals
10
26
  * (e.g., "Apple Inc. (AAPL) (CIK 0000320193)"). Strip them so consumers see a clean
@@ -13,10 +29,26 @@ import { getEdgarApiService } from '../../../services/edgar/edgar-api-service.js
13
29
  function cleanCompanyName(displayName) {
14
30
  return displayName
15
31
  .replace(/\s*\(CIK\s*\d+\)/gi, '')
16
- .replace(/\s*\([A-Z0-9,\s.]+\)\s*$/, '')
32
+ .replace(/\s*\([A-Z0-9,\s.-]+\)\s*$/, '')
17
33
  .replace(/\s+/g, ' ')
18
34
  .trim();
19
35
  }
36
+ /**
37
+ * Pull the primary ticker out of `display_names[0]`. Strips the CIK parenthetical
38
+ * first, then captures the trailing parens iff they look like ticker symbols
39
+ * (uppercase letters, digits, dots, hyphens — optionally a comma-separated list
40
+ * for multi-class issuers like BRK-A/BRK-B). Returns null when no ticker
41
+ * parenthetical is present (private filers, foreign filers, filings with no
42
+ * exchange listing).
43
+ */
44
+ function extractTicker(displayName) {
45
+ const withoutCik = displayName.replace(/\s*\(CIK\s*\d+\)/gi, '');
46
+ const match = withoutCik.match(/\(([A-Z][A-Z0-9.-]*(?:,\s*[A-Z][A-Z0-9.-]*)*)\)\s*$/);
47
+ if (!match?.[1])
48
+ return null;
49
+ const first = match[1].split(',')[0]?.trim();
50
+ return first ? first : null;
51
+ }
20
52
  /**
21
53
  * Extract entity targeting (cik: or ticker:) from a query string,
22
54
  * resolve to a CIK, and return the cleaned query + resolved CIK.
@@ -121,6 +153,10 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
121
153
  .string()
122
154
  .describe('Filing entity, with ticker/CIK parentheticals stripped.'),
123
155
  cik: z.string().describe('Filing entity CIK, zero-padded to 10 digits.'),
156
+ ticker: z
157
+ .string()
158
+ .optional()
159
+ .describe('Primary ticker symbol parsed from the EFTS display name. Absent for private filers, foreign filers without a US listing, and filings whose display name omits the ticker parenthetical. For multi-class issuers (e.g., BRK-A / BRK-B), this is the first class listed.'),
124
160
  file_description: z
125
161
  .string()
126
162
  .optional()
@@ -140,6 +176,19 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
140
176
  .record(z.string(), z.number())
141
177
  .optional()
142
178
  .describe('Count of results by form type. Helps narrow follow-up searches.'),
179
+ dataset: z
180
+ .object({
181
+ name: z
182
+ .string()
183
+ .describe('Dataframe handle (df_XXXXX_XXXXX) — pass to secedgar_dataframe_query.'),
184
+ row_count: z.number().describe('Rows materialized in the dataframe.'),
185
+ expires_at: z.string().describe('ISO 8601 expiry timestamp.'),
186
+ truncated: z
187
+ .boolean()
188
+ .describe('True when EFTS reported more text matches than the window we already fetched — additional rows exist beyond the dataframe. Page further with `offset` for the inline view; the canvas dataframe is bounded by the single response window.'),
189
+ })
190
+ .optional()
191
+ .describe('Canvas dataframe holding the hits already fetched for the inline response. Absent when total ≤ inline limit, canvas is unavailable, or materialization failed. The dataframe contains the raw EFTS results (entity-filtered when ticker:/cik: was used) — query with secedgar_dataframe_query SQL.'),
143
192
  }),
144
193
  async handler(input, ctx) {
145
194
  // Validate date range: both or neither
@@ -187,13 +236,16 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
187
236
  const sliced = hits.slice(startIdx, startIdx + input.limit);
188
237
  const results = sliced.map((hit) => {
189
238
  const accessionNumber = hit._source.adsh || hit._id.split(':')[0] || hit._id;
239
+ const displayName = hit._source.display_names?.[0] || '';
240
+ const ticker = extractTicker(displayName);
190
241
  return {
191
242
  accession_number: accessionNumber,
192
243
  form: hit._source.form ?? undefined,
193
244
  filing_date: hit._source.file_date,
194
245
  period_ending: hit._source.period_ending ?? undefined,
195
- company_name: cleanCompanyName(hit._source.display_names?.[0] || ''),
246
+ company_name: cleanCompanyName(displayName),
196
247
  cik: hit._source.ciks?.[0] || '',
248
+ ...(ticker !== null && { ticker }),
197
249
  file_description: hit._source.file_description ?? undefined,
198
250
  sic: hit._source.sics?.[0] ?? undefined,
199
251
  location: hit._source.biz_locations?.[0] ?? undefined,
@@ -219,12 +271,46 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
219
271
  formDistribution[bucket.key] = bucket.doc_count;
220
272
  }
221
273
  }
274
+ let dataset;
275
+ const bridge = getCanvasBridge();
276
+ const eftsTotal = response.hits.total.value;
277
+ // Materialize the hits we already fetched — no additional EFTS calls.
278
+ // `hits` is already entity-filtered (and sorted, where applicable) above.
279
+ // Skip when the response fits inline or when there's no canvas.
280
+ if (bridge && hits.length > input.limit) {
281
+ // Truncated when EFTS reported more text matches than the window we
282
+ // fetched. Under entity targeting, additional entity hits may exist
283
+ // beyond the window we sampled; under no targeting, more text matches
284
+ // exist past the window. Either way, the dataframe is a sample.
285
+ const truncated = eftsTotal > response.hits.hits.length;
286
+ const registered = await bridge.registerDataframe(ctx, {
287
+ rows: hits.map(eftsHitToRow),
288
+ sourceTool: 'secedgar_search_filings',
289
+ queryParams: {
290
+ query,
291
+ forms: input.forms,
292
+ start_date: input.start_date,
293
+ end_date: input.end_date,
294
+ entity_cik: entityCik,
295
+ },
296
+ truncated,
297
+ });
298
+ if (registered)
299
+ dataset = { ...toDatasetField(registered), truncated };
300
+ }
222
301
  ctx.log.info('Filing search completed', {
223
302
  query: input.query,
224
303
  total,
225
304
  resultCount: results.length,
305
+ datasetName: dataset?.name,
226
306
  });
227
- return { total, total_is_exact: totalIsExact, results, form_distribution: formDistribution };
307
+ return {
308
+ total,
309
+ total_is_exact: totalIsExact,
310
+ results,
311
+ form_distribution: formDistribution,
312
+ dataset,
313
+ };
228
314
  },
229
315
  format: (result) => {
230
316
  const exactness = result.total_is_exact ? 'exact' : 'capped at 10,000';
@@ -234,7 +320,8 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
234
320
  const desc = r.file_description ? ` — ${r.file_description}` : '';
235
321
  const sic = r.sic ? ` | SIC ${r.sic}` : '';
236
322
  const loc = r.location ? ` | ${r.location}` : '';
237
- lines.push(`- ${r.form ?? 'N/A'} ${r.filing_date}${period} — ${r.company_name} (CIK ${r.cik})${sic}${loc}${desc} [${r.accession_number}]`);
323
+ const ident = r.ticker ? `${r.ticker}, CIK ${r.cik}` : `CIK ${r.cik}`;
324
+ lines.push(`- ${r.form ?? 'N/A'} ${r.filing_date}${period} — ${r.company_name} (${ident})${sic}${loc}${desc} [${r.accession_number}]`);
238
325
  }
239
326
  if (result.form_distribution) {
240
327
  const dist = Object.entries(result.form_distribution)
@@ -242,6 +329,12 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
242
329
  .join(', ');
243
330
  lines.push(`\nForm distribution: ${dist}`);
244
331
  }
332
+ if (result.dataset) {
333
+ const truncatedNote = result.dataset.truncated
334
+ ? ' (truncated — more matches exist beyond the EFTS window)'
335
+ : '';
336
+ lines.push(`\nDataset: ${result.dataset.name} (${result.dataset.row_count} rows, expires ${result.dataset.expires_at})${truncatedNote} — query with secedgar_dataframe_query.`);
337
+ }
245
338
  return [{ type: 'text', text: lines.join('\n') }];
246
339
  },
247
340
  });
@@ -1 +1 @@
1
- {"version":3,"file":"search-filings.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-filings.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * @fileoverview Adapter between the SEC EDGAR tools and the framework
3
+ * DataCanvas primitive. Holds one shared canvas per tenant, generates
4
+ * `df_XXXXX_XXXXX` table names, derives all-nullable schemas (sparse SEC
5
+ * columns must not trip NOT NULL appender rollbacks), tracks per-table TTL +
6
+ * provenance in `ctx.state`, and lazy-sweeps expired tables on every public
7
+ * op. Best-effort: failed canvas operations log a warning and return
8
+ * `undefined`/empty so the caller's inline response remains useful.
9
+ *
10
+ * Per-table TTL is bridge-side bookkeeping; backstop for
11
+ * cyanheads/mcp-ts-core#140 until the framework exposes
12
+ * `RegisterTableOptions.ttlMs`.
13
+ * @module services/canvas-bridge/canvas-bridge
14
+ */
15
+ import type { Context } from '@cyanheads/mcp-ts-core';
16
+ import { type ColumnSchema, type DataCanvas, type QueryResult } from '@cyanheads/mcp-ts-core/canvas';
17
+ /** Per-table provenance + TTL metadata persisted in `ctx.state`. */
18
+ export interface DataframeMeta {
19
+ /** Resolved column schema (all-nullable). */
20
+ columnSchema: ColumnSchema[];
21
+ /** ISO 8601 creation timestamp. */
22
+ createdAt: string;
23
+ /** ISO 8601 expiry timestamp. Lazy-checked on every dataframe op. */
24
+ expiresAt: string;
25
+ /** Materialization cap that produced `truncated`, when applicable. */
26
+ maxRows: number | undefined;
27
+ /** Input parameters the tool was called with, for downstream interpretation. */
28
+ queryParams: Record<string, unknown>;
29
+ /** Materialized row count. */
30
+ rowCount: number;
31
+ /** Tool that produced this dataframe (e.g. `secedgar_fetch_frames`). */
32
+ sourceTool: string;
33
+ /** Canvas table name (`df_XXXXX_XXXXX`). */
34
+ tableName: string;
35
+ /**
36
+ * True when the upstream source has more rows than were materialized
37
+ * (e.g. EFTS 10k cap exceeded). False when the dataframe holds the full
38
+ * upstream result.
39
+ */
40
+ truncated: boolean;
41
+ }
42
+ /** Result of a successful `registerDataframe` call. */
43
+ export interface RegisterDataframeResult {
44
+ columnSchema: ColumnSchema[];
45
+ expiresAt: string;
46
+ rowCount: number;
47
+ tableName: string;
48
+ }
49
+ /**
50
+ * Wire shape for the `dataset` field on tool outputs. Callers spread
51
+ * additional fields (e.g. `truncated`) when applicable.
52
+ */
53
+ export declare function toDatasetField(registered: RegisterDataframeResult): {
54
+ name: string;
55
+ row_count: number;
56
+ expires_at: string;
57
+ };
58
+ /** Options accepted by {@link CanvasBridge.registerDataframe}. */
59
+ export interface RegisterDataframeOptions {
60
+ maxRows?: number;
61
+ queryParams: Record<string, unknown>;
62
+ rows: Record<string, unknown>[];
63
+ sourceTool: string;
64
+ truncated?: boolean;
65
+ }
66
+ /** Options accepted by {@link CanvasBridge.query}. */
67
+ export interface BridgeQueryOptions {
68
+ /** Inline row preview cap. */
69
+ preview?: number;
70
+ /** Query params to record as provenance if registerAs is set. */
71
+ queryParams?: Record<string, unknown>;
72
+ /** Optional new dataframe name to materialize the result under. */
73
+ registerAs?: string;
74
+ /** Hard cap on rows materialized in the response (default 10_000). */
75
+ rowLimit?: number;
76
+ /** Tool name to record as source if registerAs is set. */
77
+ sourceTool?: string;
78
+ }
79
+ /**
80
+ * Walk a sample of rows, infer column types, force every column to
81
+ * `nullable: true`. The framework's default sniffer infers NOT NULL from
82
+ * non-null samples; DuckDB rolls back the entire appender batch the first
83
+ * time a sparse SEC column (e.g. `loc`, `ticker`) carries a null on a row
84
+ * past the sample window.
85
+ */
86
+ export declare function deriveAllNullableSchema(rows: Record<string, unknown>[]): ColumnSchema[];
87
+ export declare class CanvasBridge {
88
+ private readonly canvas;
89
+ constructor(canvas: DataCanvas);
90
+ /**
91
+ * Persist a row set as `df_<id>` on the tenant's shared canvas. Returns
92
+ * `undefined` on any canvas failure so callers can surface their inline
93
+ * response without leaking infrastructure errors.
94
+ */
95
+ registerDataframe(ctx: Context, options: RegisterDataframeOptions): Promise<RegisterDataframeResult | undefined>;
96
+ /**
97
+ * List dataframes with provenance. Sweeps expired tables first so the
98
+ * listing reflects what's actually queryable.
99
+ */
100
+ describe(ctx: Context, tableName?: string): Promise<DataframeMeta[]>;
101
+ /**
102
+ * Run a SELECT against the shared canvas. Framework gate runs inside
103
+ * `canvas.query`; this method additionally rejects system-catalog access
104
+ * before handing the SQL off. Optional `registerAs` chains the result as a
105
+ * new dataframe with a fresh per-table TTL (not inherited from parents).
106
+ */
107
+ query(ctx: Context, sql: string, options?: BridgeQueryOptions): Promise<{
108
+ result: QueryResult;
109
+ meta?: DataframeMeta;
110
+ }>;
111
+ /**
112
+ * Idempotent drop. Removes the table from the canvas and the metadata
113
+ * entry from `ctx.state`. Returns true when the table was found and
114
+ * removed; false when neither side had it.
115
+ */
116
+ drop(ctx: Context, tableName: string): Promise<boolean>;
117
+ /**
118
+ * Iterate provenance entries, drop tables whose `expiresAt` is in the
119
+ * past. Best-effort: a failure to drop one table does not stop the sweep
120
+ * for others.
121
+ */
122
+ private sweepExpired;
123
+ /**
124
+ * Cursor-paged scan of metadata entries. Yields `{ key, meta }` per
125
+ * registered dataframe; consumers either collect or act + delete in-place.
126
+ */
127
+ private iterateMeta;
128
+ /**
129
+ * Acquire the tenant's shared canvas. Reuse the stored canvas ID when one
130
+ * is still live; mint a fresh canvas when the stored ID is unknown or
131
+ * expired (registry returns NotFound; `acquire(undefined)` mints a new one).
132
+ */
133
+ private acquireSharedCanvas;
134
+ /** Mint a `df_XXXXX_XXXXX` table name (14 chars, ~3.7×10^15 keyspace). */
135
+ private mintTableName;
136
+ }
137
+ /**
138
+ * Wire the canvas bridge during `setup()`. `canvas` is `undefined` when the
139
+ * framework didn't construct a DataCanvas (`CANVAS_PROVIDER_TYPE=none`,
140
+ * default, or Workers). Tools that materialize dataframes call
141
+ * {@link getCanvasBridge} and skip materialization when the bridge is absent.
142
+ */
143
+ export declare function initCanvasBridge(canvas: DataCanvas | undefined): void;
144
+ /** Return the canvas bridge, or `undefined` when canvas is unavailable. */
145
+ export declare function getCanvasBridge(): CanvasBridge | undefined;
146
+ //# sourceMappingURL=canvas-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-bridge.d.ts","sourceRoot":"","sources":["../../../src/services/canvas-bridge/canvas-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ /**
2
+ * @fileoverview Adapter between the SEC EDGAR tools and the framework
3
+ * DataCanvas primitive. Holds one shared canvas per tenant, generates
4
+ * `df_XXXXX_XXXXX` table names, derives all-nullable schemas (sparse SEC
5
+ * columns must not trip NOT NULL appender rollbacks), tracks per-table TTL +
6
+ * provenance in `ctx.state`, and lazy-sweeps expired tables on every public
7
+ * op. Best-effort: failed canvas operations log a warning and return
8
+ * `undefined`/empty so the caller's inline response remains useful.
9
+ *
10
+ * Per-table TTL is bridge-side bookkeeping; backstop for
11
+ * cyanheads/mcp-ts-core#140 until the framework exposes
12
+ * `RegisterTableOptions.ttlMs`.
13
+ * @module services/canvas-bridge/canvas-bridge
14
+ */
15
+ import { inferSchemaFromRows, } from '@cyanheads/mcp-ts-core/canvas';
16
+ import { idGenerator } from '@cyanheads/mcp-ts-core/utils';
17
+ import { getServerConfig } from '../../config/server-config.js';
18
+ import { assertNoSystemCatalogAccess } from './sql-gate-extras.js';
19
+ /**
20
+ * Wire shape for the `dataset` field on tool outputs. Callers spread
21
+ * additional fields (e.g. `truncated`) when applicable.
22
+ */
23
+ export function toDatasetField(registered) {
24
+ return {
25
+ name: registered.tableName,
26
+ row_count: registered.rowCount,
27
+ expires_at: registered.expiresAt,
28
+ };
29
+ }
30
+ const META_PREFIX = 'df-meta/';
31
+ const CANVAS_ID_KEY = 'canvas-id';
32
+ /** Token character set for `df_XXXXX_XXXXX` table names. */
33
+ const TABLE_NAME_CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
34
+ /**
35
+ * Walk a sample of rows, infer column types, force every column to
36
+ * `nullable: true`. The framework's default sniffer infers NOT NULL from
37
+ * non-null samples; DuckDB rolls back the entire appender batch the first
38
+ * time a sparse SEC column (e.g. `loc`, `ticker`) carries a null on a row
39
+ * past the sample window.
40
+ */
41
+ export function deriveAllNullableSchema(rows) {
42
+ return inferSchemaFromRows(rows).map((col) => ({ ...col, nullable: true }));
43
+ }
44
+ export class CanvasBridge {
45
+ canvas;
46
+ constructor(canvas) {
47
+ this.canvas = canvas;
48
+ }
49
+ /**
50
+ * Persist a row set as `df_<id>` on the tenant's shared canvas. Returns
51
+ * `undefined` on any canvas failure so callers can surface their inline
52
+ * response without leaking infrastructure errors.
53
+ */
54
+ async registerDataframe(ctx, options) {
55
+ if (options.rows.length === 0) {
56
+ ctx.log.debug('Skipping dataframe registration — no rows', {
57
+ sourceTool: options.sourceTool,
58
+ });
59
+ return;
60
+ }
61
+ try {
62
+ await this.sweepExpired(ctx);
63
+ const instance = await this.acquireSharedCanvas(ctx);
64
+ const tableName = this.mintTableName();
65
+ const schema = deriveAllNullableSchema(options.rows);
66
+ const result = await instance.registerTable(tableName, options.rows, { schema });
67
+ const now = Date.now();
68
+ const ttlMs = getServerConfig().datasetTtlSeconds * 1000;
69
+ const meta = {
70
+ tableName: result.tableName,
71
+ sourceTool: options.sourceTool,
72
+ queryParams: options.queryParams,
73
+ createdAt: new Date(now).toISOString(),
74
+ expiresAt: new Date(now + ttlMs).toISOString(),
75
+ rowCount: result.rowCount,
76
+ truncated: options.truncated ?? false,
77
+ maxRows: options.maxRows,
78
+ columnSchema: schema,
79
+ };
80
+ await ctx.state.set(`${META_PREFIX}${result.tableName}`, meta);
81
+ ctx.log.info('Dataframe registered', {
82
+ tableName: result.tableName,
83
+ rowCount: result.rowCount,
84
+ sourceTool: options.sourceTool,
85
+ });
86
+ return {
87
+ tableName: result.tableName,
88
+ rowCount: result.rowCount,
89
+ expiresAt: meta.expiresAt,
90
+ columnSchema: schema,
91
+ };
92
+ }
93
+ catch (error) {
94
+ ctx.log.warning('Dataframe registration failed', {
95
+ error: error instanceof Error ? error.message : String(error),
96
+ sourceTool: options.sourceTool,
97
+ });
98
+ return;
99
+ }
100
+ }
101
+ /**
102
+ * List dataframes with provenance. Sweeps expired tables first so the
103
+ * listing reflects what's actually queryable.
104
+ */
105
+ async describe(ctx, tableName) {
106
+ await this.sweepExpired(ctx);
107
+ if (tableName) {
108
+ const meta = await ctx.state.get(`${META_PREFIX}${tableName}`);
109
+ return meta ? [meta] : [];
110
+ }
111
+ const entries = [];
112
+ for await (const { meta } of this.iterateMeta(ctx))
113
+ entries.push(meta);
114
+ return entries.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
115
+ }
116
+ /**
117
+ * Run a SELECT against the shared canvas. Framework gate runs inside
118
+ * `canvas.query`; this method additionally rejects system-catalog access
119
+ * before handing the SQL off. Optional `registerAs` chains the result as a
120
+ * new dataframe with a fresh per-table TTL (not inherited from parents).
121
+ */
122
+ async query(ctx, sql, options = {}) {
123
+ assertNoSystemCatalogAccess(sql);
124
+ await this.sweepExpired(ctx);
125
+ const instance = await this.acquireSharedCanvas(ctx);
126
+ const registerAs = options.registerAs;
127
+ const result = await instance.query(sql, {
128
+ ...(options.preview !== undefined && { preview: options.preview }),
129
+ ...(options.rowLimit !== undefined && { rowLimit: options.rowLimit }),
130
+ ...(registerAs !== undefined && { registerAs }),
131
+ signal: ctx.signal,
132
+ });
133
+ let meta;
134
+ if (registerAs && result.tableName) {
135
+ const now = Date.now();
136
+ const ttlMs = getServerConfig().datasetTtlSeconds * 1000;
137
+ meta = {
138
+ tableName: result.tableName,
139
+ sourceTool: options.sourceTool ?? 'secedgar_dataframe_query',
140
+ queryParams: options.queryParams ?? { sql },
141
+ createdAt: new Date(now).toISOString(),
142
+ expiresAt: new Date(now + ttlMs).toISOString(),
143
+ rowCount: result.rowCount,
144
+ truncated: false,
145
+ maxRows: undefined,
146
+ columnSchema: result.columns.map((name) => ({
147
+ name,
148
+ type: 'VARCHAR',
149
+ nullable: true,
150
+ })),
151
+ };
152
+ await ctx.state.set(`${META_PREFIX}${result.tableName}`, meta);
153
+ }
154
+ return meta ? { result, meta } : { result };
155
+ }
156
+ /**
157
+ * Idempotent drop. Removes the table from the canvas and the metadata
158
+ * entry from `ctx.state`. Returns true when the table was found and
159
+ * removed; false when neither side had it.
160
+ */
161
+ async drop(ctx, tableName) {
162
+ await this.sweepExpired(ctx);
163
+ const metaKey = `${META_PREFIX}${tableName}`;
164
+ const hadMeta = (await ctx.state.get(metaKey)) !== null;
165
+ await ctx.state.delete(metaKey);
166
+ try {
167
+ const instance = await this.acquireSharedCanvas(ctx);
168
+ const dropped = await instance.drop(tableName);
169
+ return dropped || hadMeta;
170
+ }
171
+ catch (error) {
172
+ ctx.log.warning('Canvas drop failed', {
173
+ tableName,
174
+ error: error instanceof Error ? error.message : String(error),
175
+ });
176
+ return hadMeta;
177
+ }
178
+ }
179
+ /**
180
+ * Iterate provenance entries, drop tables whose `expiresAt` is in the
181
+ * past. Best-effort: a failure to drop one table does not stop the sweep
182
+ * for others.
183
+ */
184
+ async sweepExpired(ctx) {
185
+ const nowIso = new Date().toISOString();
186
+ let instance;
187
+ for await (const { key, meta } of this.iterateMeta(ctx)) {
188
+ if (meta.expiresAt > nowIso)
189
+ continue;
190
+ instance ??= await this.acquireSharedCanvas(ctx).catch(() => undefined);
191
+ if (instance) {
192
+ try {
193
+ await instance.drop(meta.tableName);
194
+ }
195
+ catch (error) {
196
+ ctx.log.warning('TTL sweep drop failed', {
197
+ tableName: meta.tableName,
198
+ error: error instanceof Error ? error.message : String(error),
199
+ });
200
+ }
201
+ }
202
+ await ctx.state.delete(key);
203
+ ctx.log.debug('Expired dataframe swept', {
204
+ tableName: meta.tableName,
205
+ expiredAt: meta.expiresAt,
206
+ });
207
+ }
208
+ }
209
+ /**
210
+ * Cursor-paged scan of metadata entries. Yields `{ key, meta }` per
211
+ * registered dataframe; consumers either collect or act + delete in-place.
212
+ */
213
+ async *iterateMeta(ctx) {
214
+ let cursor;
215
+ do {
216
+ const page = await ctx.state.list(META_PREFIX, {
217
+ ...(cursor !== undefined && { cursor }),
218
+ limit: 100,
219
+ });
220
+ for (const item of page.items) {
221
+ if (item.value)
222
+ yield { key: item.key, meta: item.value };
223
+ }
224
+ cursor = page.cursor;
225
+ } while (cursor);
226
+ }
227
+ /**
228
+ * Acquire the tenant's shared canvas. Reuse the stored canvas ID when one
229
+ * is still live; mint a fresh canvas when the stored ID is unknown or
230
+ * expired (registry returns NotFound; `acquire(undefined)` mints a new one).
231
+ */
232
+ async acquireSharedCanvas(ctx) {
233
+ // Cast: framework `Context` is structurally compatible with `RequestContext`
234
+ // but lacks the index signature, so a direct call won't type-check.
235
+ const reqCtx = ctx;
236
+ const stored = await ctx.state.get(CANVAS_ID_KEY);
237
+ if (stored) {
238
+ try {
239
+ return await this.canvas.acquire(stored, reqCtx);
240
+ }
241
+ catch {
242
+ await ctx.state.delete(CANVAS_ID_KEY);
243
+ }
244
+ }
245
+ const instance = await this.canvas.acquire(undefined, reqCtx);
246
+ await ctx.state.set(CANVAS_ID_KEY, instance.canvasId);
247
+ return instance;
248
+ }
249
+ /** Mint a `df_XXXXX_XXXXX` table name (14 chars, ~3.7×10^15 keyspace). */
250
+ mintTableName() {
251
+ const left = idGenerator.generateRandomString(5, TABLE_NAME_CHARSET);
252
+ const right = idGenerator.generateRandomString(5, TABLE_NAME_CHARSET);
253
+ return `df_${left}_${right}`;
254
+ }
255
+ }
256
+ let _bridge;
257
+ /**
258
+ * Wire the canvas bridge during `setup()`. `canvas` is `undefined` when the
259
+ * framework didn't construct a DataCanvas (`CANVAS_PROVIDER_TYPE=none`,
260
+ * default, or Workers). Tools that materialize dataframes call
261
+ * {@link getCanvasBridge} and skip materialization when the bridge is absent.
262
+ */
263
+ export function initCanvasBridge(canvas) {
264
+ _bridge = canvas ? new CanvasBridge(canvas) : undefined;
265
+ }
266
+ /** Return the canvas bridge, or `undefined` when canvas is unavailable. */
267
+ export function getCanvasBridge() {
268
+ return _bridge;
269
+ }
270
+ //# sourceMappingURL=canvas-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-bridge.js","sourceRoot":"","sources":["../../../src/services/canvas-bridge/canvas-bridge.ts"],"names":[],"mappings":"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"}