@bendyline/docblocks-cli 2.0.0 → 2.1.1

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 (116) hide show
  1. package/README.md +11 -17
  2. package/dist/bin.d.ts +1 -0
  3. package/dist/bin.js +7463 -0
  4. package/dist/index.d.ts +133 -2
  5. package/dist/index.js +1328 -27
  6. package/package.json +23 -10
  7. package/dist/commands/build.d.ts +0 -14
  8. package/dist/commands/build.d.ts.map +0 -1
  9. package/dist/commands/build.js +0 -74
  10. package/dist/commands/build.js.map +0 -1
  11. package/dist/commands/convert.d.ts +0 -42
  12. package/dist/commands/convert.d.ts.map +0 -1
  13. package/dist/commands/convert.js +0 -339
  14. package/dist/commands/convert.js.map +0 -1
  15. package/dist/commands/init.d.ts +0 -3
  16. package/dist/commands/init.d.ts.map +0 -1
  17. package/dist/commands/init.js +0 -23
  18. package/dist/commands/init.js.map +0 -1
  19. package/dist/commands/mcp.d.ts +0 -12
  20. package/dist/commands/mcp.d.ts.map +0 -1
  21. package/dist/commands/mcp.js +0 -106
  22. package/dist/commands/mcp.js.map +0 -1
  23. package/dist/commands/parse.d.ts +0 -6
  24. package/dist/commands/parse.d.ts.map +0 -1
  25. package/dist/commands/parse.js +0 -38
  26. package/dist/commands/parse.js.map +0 -1
  27. package/dist/commands/serve.d.ts +0 -36
  28. package/dist/commands/serve.d.ts.map +0 -1
  29. package/dist/commands/serve.js +0 -347
  30. package/dist/commands/serve.js.map +0 -1
  31. package/dist/commands/themes.d.ts +0 -6
  32. package/dist/commands/themes.d.ts.map +0 -1
  33. package/dist/commands/themes.js +0 -15
  34. package/dist/commands/themes.js.map +0 -1
  35. package/dist/commands/transforms.d.ts +0 -6
  36. package/dist/commands/transforms.d.ts.map +0 -1
  37. package/dist/commands/transforms.js +0 -15
  38. package/dist/commands/transforms.js.map +0 -1
  39. package/dist/commands/video.d.ts +0 -38
  40. package/dist/commands/video.d.ts.map +0 -1
  41. package/dist/commands/video.js +0 -136
  42. package/dist/commands/video.js.map +0 -1
  43. package/dist/contained-file.d.ts +0 -8
  44. package/dist/contained-file.d.ts.map +0 -1
  45. package/dist/contained-file.js +0 -77
  46. package/dist/contained-file.js.map +0 -1
  47. package/dist/index.d.ts.map +0 -1
  48. package/dist/index.js.map +0 -1
  49. package/dist/mcp/agentic-tools.d.ts +0 -16
  50. package/dist/mcp/agentic-tools.d.ts.map +0 -1
  51. package/dist/mcp/agentic-tools.js +0 -967
  52. package/dist/mcp/agentic-tools.js.map +0 -1
  53. package/dist/mcp/artifact-store.d.ts +0 -98
  54. package/dist/mcp/artifact-store.d.ts.map +0 -1
  55. package/dist/mcp/artifact-store.js +0 -542
  56. package/dist/mcp/artifact-store.js.map +0 -1
  57. package/dist/mcp/authority.d.ts +0 -53
  58. package/dist/mcp/authority.d.ts.map +0 -1
  59. package/dist/mcp/authority.js +0 -433
  60. package/dist/mcp/authority.js.map +0 -1
  61. package/dist/mcp/conversion-service.d.ts +0 -111
  62. package/dist/mcp/conversion-service.d.ts.map +0 -1
  63. package/dist/mcp/conversion-service.js +0 -512
  64. package/dist/mcp/conversion-service.js.map +0 -1
  65. package/dist/mcp/discovery-tools.d.ts +0 -4
  66. package/dist/mcp/discovery-tools.d.ts.map +0 -1
  67. package/dist/mcp/discovery-tools.js +0 -114
  68. package/dist/mcp/discovery-tools.js.map +0 -1
  69. package/dist/mcp/document-service.d.ts +0 -47
  70. package/dist/mcp/document-service.d.ts.map +0 -1
  71. package/dist/mcp/document-service.js +0 -424
  72. package/dist/mcp/document-service.js.map +0 -1
  73. package/dist/mcp/error-result.d.ts +0 -17
  74. package/dist/mcp/error-result.d.ts.map +0 -1
  75. package/dist/mcp/error-result.js +0 -82
  76. package/dist/mcp/error-result.js.map +0 -1
  77. package/dist/mcp/intelligence.d.ts +0 -15
  78. package/dist/mcp/intelligence.d.ts.map +0 -1
  79. package/dist/mcp/intelligence.js +0 -855
  80. package/dist/mcp/intelligence.js.map +0 -1
  81. package/dist/mcp/output-bounds.d.ts +0 -13
  82. package/dist/mcp/output-bounds.d.ts.map +0 -1
  83. package/dist/mcp/output-bounds.js +0 -61
  84. package/dist/mcp/output-bounds.js.map +0 -1
  85. package/dist/mcp/preview-service.d.ts +0 -54
  86. package/dist/mcp/preview-service.d.ts.map +0 -1
  87. package/dist/mcp/preview-service.js +0 -454
  88. package/dist/mcp/preview-service.js.map +0 -1
  89. package/dist/mcp/progress.d.ts +0 -18
  90. package/dist/mcp/progress.d.ts.map +0 -1
  91. package/dist/mcp/progress.js +0 -28
  92. package/dist/mcp/progress.js.map +0 -1
  93. package/dist/mcp/prompts.d.ts +0 -4
  94. package/dist/mcp/prompts.d.ts.map +0 -1
  95. package/dist/mcp/prompts.js +0 -124
  96. package/dist/mcp/prompts.js.map +0 -1
  97. package/dist/mcp/rendered-conversion.d.ts +0 -34
  98. package/dist/mcp/rendered-conversion.d.ts.map +0 -1
  99. package/dist/mcp/rendered-conversion.js +0 -364
  100. package/dist/mcp/rendered-conversion.js.map +0 -1
  101. package/dist/mcp/server.d.ts +0 -69
  102. package/dist/mcp/server.d.ts.map +0 -1
  103. package/dist/mcp/server.js +0 -249
  104. package/dist/mcp/server.js.map +0 -1
  105. package/dist/preview-policy.d.ts +0 -8
  106. package/dist/preview-policy.d.ts.map +0 -1
  107. package/dist/preview-policy.js +0 -85
  108. package/dist/preview-policy.js.map +0 -1
  109. package/dist/render-html.d.ts +0 -17
  110. package/dist/render-html.d.ts.map +0 -1
  111. package/dist/render-html.js +0 -85
  112. package/dist/render-html.js.map +0 -1
  113. package/dist/version.d.ts +0 -6
  114. package/dist/version.d.ts.map +0 -1
  115. package/dist/version.js +0 -104
  116. package/dist/version.js.map +0 -1
@@ -1,512 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- import { DOCBLOCKS_MCP_WIRE_VERSION } from '@bendyline/docblocks/mcp';
3
- import { CapturedFrameBudgetError, MAX_CAPTURED_FRAME_BYTES, createCliRegistry, prepareConversion as prepareLinkedConversion, } from '@bendyline/squisq-cli/api';
4
- import { getDocPlaybackDuration } from '@bendyline/squisq/schemas';
5
- import { getDependencyRuntimeVersion, getPackageVersion } from '../version.js';
6
- import { MCP_ARCHIVE_LIMITS, throwIfAborted, warningDiagnostic } from './document-service.js';
7
- import { boundDiagnostics } from './intelligence.js';
8
- import { convertRenderedDocument } from './rendered-conversion.js';
9
- /** Fidelity contracts that the current conversion implementations can actually honor. */
10
- export const MCP_FORMAT_FIDELITIES = {
11
- md: ['semantic'],
12
- docx: ['semantic', 'editable-native'],
13
- pdf: ['semantic', 'rendered-fidelity', 'hybrid'],
14
- pptx: ['semantic', 'editable-native', 'rendered-fidelity', 'hybrid'],
15
- xlsx: ['semantic', 'editable-native'],
16
- csv: ['semantic'],
17
- html: ['semantic'],
18
- htmlzip: ['semantic'],
19
- epub: ['semantic'],
20
- dbk: ['semantic', 'editable-native'],
21
- mp4: ['rendered-fidelity'],
22
- gif: ['rendered-fidelity'],
23
- };
24
- export const MCP_MEDIA_RENDER_LIMITS = Object.freeze({
25
- mp4: Object.freeze({
26
- maximumFps: 60,
27
- maximumDimension: 3840,
28
- maximumPixelsPerFrame: 8294400,
29
- maximumDurationSeconds: 300,
30
- maximumFrames: 18000,
31
- maximumPixelFrames: 2200000000,
32
- maximumCapturedFrameBytes: MAX_CAPTURED_FRAME_BYTES,
33
- }),
34
- gif: Object.freeze({
35
- maximumFps: 30,
36
- maximumDimension: 1920,
37
- maximumPixelsPerFrame: 2073600,
38
- maximumDurationSeconds: 120,
39
- maximumFrames: 3600,
40
- maximumPixelFrames: 600000000,
41
- maximumCapturedFrameBytes: MAX_CAPTURED_FRAME_BYTES,
42
- }),
43
- });
44
- const COMPLETED_CONVERSION_CACHE_LIMIT = 64;
45
- const completedConversionCaches = new WeakMap();
46
- const linkedRegistry = createCliRegistry();
47
- const DEFAULT_CONVERSION_SERVICE_DEPENDENCIES = Object.freeze({
48
- prepareNativeConversion: prepareLinkedConversion,
49
- convertRenderedDocument,
50
- });
51
- /** Linked registry metadata plus DocBlocks-only exposure policy. */
52
- export const MCP_FORMAT_CAPABILITIES = Object.freeze(linkedRegistry.list().map((definition) => Object.freeze({
53
- id: definition.id,
54
- label: definition.label,
55
- mimeType: definition.mimeType,
56
- extensions: Object.freeze([...definition.extensions]),
57
- import: definition.importContainer || definition.importDoc
58
- ? Object.freeze({ supported: true, tool: 'inspect_document' })
59
- : Object.freeze({
60
- supported: false,
61
- excludedReason: 'The linked registry is export-only.',
62
- }),
63
- export: definition.exportDoc
64
- ? Object.freeze({ supported: true, tool: 'convert_document' })
65
- : Object.freeze({
66
- supported: false,
67
- excludedReason: 'The linked registry is import-only.',
68
- }),
69
- })));
70
- /** Convert one normalized document to multiple immutable artifacts. */
71
- export async function convertPreparedDocument(artifacts, prepared, request, signal, progress, dependencies = DEFAULT_CONVERSION_SERVICE_DEPENDENCIES) {
72
- if (request.targets.length < 1 || request.targets.length > 12) {
73
- throw new Error('Conversion requires between 1 and 12 targets');
74
- }
75
- const duplicate = firstDuplicate(request.targets.map((target) => target.format));
76
- if (duplicate)
77
- throw new Error(`Duplicate conversion target: ${duplicate}`);
78
- await validateRequestVocabulary(prepared, request);
79
- const results = [];
80
- const createdArtifactUris = [];
81
- const createdCacheKeys = [];
82
- const engineVersions = conversionEngineVersions();
83
- let nativePrepared;
84
- const nativePrepareOptions = {
85
- registry: linkedRegistry,
86
- themeId: request.themeId,
87
- transformStyle: request.transformId,
88
- autoTemplates: request.autoTemplates,
89
- title: request.title,
90
- signal,
91
- };
92
- let lastReportedProgress = 0;
93
- const reportProgress = (completed, message) => {
94
- const monotonic = Math.max(lastReportedProgress, Math.min(request.targets.length, Math.max(0, completed)));
95
- lastReportedProgress = monotonic;
96
- return progress?.(monotonic, request.targets.length, message);
97
- };
98
- try {
99
- for (let index = 0; index < request.targets.length; index += 1) {
100
- throwIfAborted(signal);
101
- const target = request.targets[index];
102
- const definition = linkedRegistry.get(target.format);
103
- if (!definition)
104
- throw new Error(`Unknown conversion target "${target.format}"`);
105
- if (!definition.exportDoc)
106
- throw new Error(`Format "${target.format}" is not export-capable`);
107
- const fidelity = target.fidelity ?? defaultFidelity(target.format);
108
- assertSupportedFidelity(target.format, fidelity);
109
- assertMediaRenderBudget(prepared, target);
110
- const cacheKey = createConversionCacheKey(prepared, request, target, fidelity, engineVersions);
111
- throwIfAborted(signal);
112
- const cached = await findCompletedConversion(artifacts, cacheKey);
113
- throwIfAborted(signal);
114
- if (cached) {
115
- await reportProgress(index, `Reusing cached ${target.format} artifact`);
116
- throwIfAborted(signal);
117
- results.push(cached);
118
- await reportProgress(index + 1, `Reused cached ${target.format} artifact`);
119
- throwIfAborted(signal);
120
- continue;
121
- }
122
- await reportProgress(index, `Converting to ${target.format}`);
123
- const formatOptions = {
124
- ...(target.options ?? {}),
125
- ...(target.format === 'dbk'
126
- ? { ...MCP_ARCHIVE_LIMITS, compression: 'STORE' }
127
- : {}),
128
- ...(request.themeId ? { themeId: request.themeId } : {}),
129
- onProgress: (phase, percent) => {
130
- throwIfAborted(signal);
131
- void reportProgress(index + Math.max(0, Math.min(100, percent)) / 100, `${target.format}: ${phase}`);
132
- },
133
- };
134
- const converted = usesDocumentRasterizer(target.format, fidelity)
135
- ? await dependencies.convertRenderedDocument(prepared, target.format, fidelity, target.options ?? {}, {
136
- themeId: request.themeId,
137
- transformId: request.transformId,
138
- autoTemplates: request.autoTemplates,
139
- title: request.title,
140
- }, signal, (completed, total, message) => reportProgress(index + (total > 0 ? completed / total : 0), `${target.format}: ${message}`))
141
- : await (async () => {
142
- nativePrepared ?? (nativePrepared = await dependencies.prepareNativeConversion({
143
- kind: 'markdown',
144
- markdown: prepared.markdownDoc,
145
- container: prepared.container,
146
- baseName: prepared.baseName,
147
- }, nativePrepareOptions));
148
- try {
149
- return await nativePrepared.convert(target.format, {
150
- signal,
151
- title: request.title,
152
- formatOptions: { [target.format]: formatOptions },
153
- });
154
- }
155
- catch (error) {
156
- const capturedFrameBudget = findCapturedFrameBudgetError(error);
157
- if (capturedFrameBudget && (target.format === 'mp4' || target.format === 'gif')) {
158
- throw new MediaRenderBudgetError(target.format, [
159
- `${capturedFrameBudget.capturedBytes + capturedFrameBudget.attemptedFrameBytes} ` +
160
- `captured PNG bytes`,
161
- ], MCP_MEDIA_RENDER_LIMITS[target.format]);
162
- }
163
- throw error;
164
- }
165
- })();
166
- throwIfAborted(signal);
167
- if (target.format === 'dbk') {
168
- const { zipToContainer } = await import('@bendyline/squisq-formats/container');
169
- await zipToContainer(converted.bytes, MCP_ARCHIVE_LIMITS);
170
- throwIfAborted(signal);
171
- }
172
- const appliedOptions = collectAppliedOptions(request, target);
173
- const artifact = await artifacts.put({
174
- bytes: converted.bytes,
175
- format: target.format,
176
- mimeType: converted.mimeType,
177
- sourceFormat: prepared.sourceFormat,
178
- sourceSha256: prepared.sourceSha256,
179
- suggestedFilename: converted.suggestedFilename,
180
- appliedOptions,
181
- engineVersions,
182
- }, signal);
183
- createdArtifactUris.push(artifact.uri);
184
- const diagnostics = boundDiagnostics([
185
- ...prepared.diagnostics,
186
- ...converted.warnings.map((warning) => warningDiagnostic(warning, 'convert', target.format)),
187
- ], 'convert');
188
- const result = freezeConversionResult({
189
- version: DOCBLOCKS_MCP_WIRE_VERSION,
190
- kind: 'conversion',
191
- sourceFormat: prepared.sourceFormat,
192
- targetFormat: target.format,
193
- artifact,
194
- fidelity,
195
- appliedThemeId: request.themeId ?? prepared.doc.themeId ?? null,
196
- appliedTransformId: request.transformId ?? null,
197
- sourceAssets: prepared.assets,
198
- sourceAssetCount: prepared.assets.length,
199
- diagnostics,
200
- });
201
- try {
202
- await artifacts.attachConversionReport(result);
203
- throwIfAborted(signal);
204
- }
205
- catch (caught) {
206
- await artifacts.discard(artifact.uri);
207
- throw caught;
208
- }
209
- completedConversionCache(artifacts).set(cacheKey, result);
210
- createdCacheKeys.push(cacheKey);
211
- results.push(result);
212
- await reportProgress(index + 1, `Created ${target.format} artifact`);
213
- }
214
- throwIfAborted(signal);
215
- return results;
216
- }
217
- catch (caught) {
218
- const cache = completedConversionCache(artifacts);
219
- for (const key of createdCacheKeys)
220
- cache.delete(key);
221
- await Promise.allSettled(createdArtifactUris.map((uri) => artifacts.discard(uri)));
222
- throw caught;
223
- }
224
- }
225
- /** Build the content-addressed cache key for one completed target conversion. */
226
- export function createConversionCacheKey(prepared, request, target, fidelity, engineVersions) {
227
- const canonical = canonicalJson({
228
- source: {
229
- sha256: prepared.sourceSha256,
230
- format: prepared.sourceFormat,
231
- baseName: prepared.baseName,
232
- assets: prepared.assets,
233
- diagnostics: prepared.diagnostics,
234
- },
235
- engines: engineVersions,
236
- target: {
237
- format: target.format,
238
- fidelity,
239
- options: target.options ?? {},
240
- },
241
- request: {
242
- themeId: request.themeId ?? null,
243
- transformId: request.transformId ?? null,
244
- autoTemplates: request.autoTemplates ?? null,
245
- title: request.title ?? null,
246
- },
247
- });
248
- return createHash('sha256').update(canonical).digest('hex');
249
- }
250
- async function findCompletedConversion(artifacts, key) {
251
- const cache = completedConversionCache(artifacts);
252
- const cached = cache.get(key);
253
- if (!cached)
254
- return null;
255
- try {
256
- const current = await artifacts.get(cached.artifact.uri);
257
- if (canonicalJson(current) !== canonicalJson(cached.artifact)) {
258
- cache.delete(key);
259
- return null;
260
- }
261
- return cached;
262
- }
263
- catch (caught) {
264
- if (caught instanceof Error && caught.message === 'Unknown or expired MCP artifact') {
265
- cache.delete(key);
266
- return null;
267
- }
268
- throw caught;
269
- }
270
- }
271
- function completedConversionCache(artifacts) {
272
- let cache = completedConversionCaches.get(artifacts);
273
- if (!cache) {
274
- cache = new CompletedConversionCache(COMPLETED_CONVERSION_CACHE_LIMIT);
275
- completedConversionCaches.set(artifacts, cache);
276
- }
277
- return cache;
278
- }
279
- class CompletedConversionCache {
280
- constructor(maximumEntries) {
281
- this.maximumEntries = maximumEntries;
282
- this.entries = new Map();
283
- }
284
- get(key) {
285
- const result = this.entries.get(key);
286
- if (!result)
287
- return null;
288
- this.entries.delete(key);
289
- this.entries.set(key, result);
290
- return result;
291
- }
292
- set(key, result) {
293
- this.entries.delete(key);
294
- this.entries.set(key, result);
295
- while (this.entries.size > this.maximumEntries) {
296
- const oldest = this.entries.keys().next().value;
297
- if (oldest === undefined)
298
- return;
299
- this.entries.delete(oldest);
300
- }
301
- }
302
- delete(key) {
303
- this.entries.delete(key);
304
- }
305
- }
306
- function conversionEngineVersions() {
307
- return [
308
- { name: 'docblocks', version: getPackageVersion() },
309
- {
310
- name: '@bendyline/squisq-cli',
311
- version: getDependencyRuntimeVersion('@bendyline/squisq-cli', '@bendyline/squisq-cli/api'),
312
- },
313
- {
314
- name: '@bendyline/squisq-formats',
315
- version: getDependencyRuntimeVersion('@bendyline/squisq-formats'),
316
- },
317
- {
318
- name: '@bendyline/squisq',
319
- version: getDependencyRuntimeVersion('@bendyline/squisq'),
320
- },
321
- ];
322
- }
323
- function freezeConversionResult(result) {
324
- return deepFreeze(result);
325
- }
326
- function deepFreeze(value) {
327
- if (value === null || typeof value !== 'object' || Object.isFrozen(value))
328
- return value;
329
- for (const nested of Object.values(value))
330
- deepFreeze(nested);
331
- return Object.freeze(value);
332
- }
333
- function canonicalJson(value) {
334
- if (value === null || typeof value !== 'object')
335
- return JSON.stringify(value);
336
- if (Array.isArray(value))
337
- return `[${value.map((entry) => canonicalJson(entry)).join(',')}]`;
338
- const entries = Object.entries(value).sort(([left], [right]) => left.localeCompare(right));
339
- return `{${entries
340
- .map(([key, entry]) => `${JSON.stringify(key)}:${canonicalJson(entry)}`)
341
- .join(',')}}`;
342
- }
343
- function defaultFidelity(format) {
344
- if (format === 'mp4' || format === 'gif')
345
- return 'rendered-fidelity';
346
- return format === 'docx' || format === 'pptx' ? 'editable-native' : 'semantic';
347
- }
348
- function usesDocumentRasterizer(format, fidelity) {
349
- return ((format === 'pdf' || format === 'pptx') &&
350
- (fidelity === 'rendered-fidelity' || fidelity === 'hybrid'));
351
- }
352
- /** Reject media renders before browser/frame capture can consume unbounded memory. */
353
- export function assertMediaRenderBudget(prepared, target) {
354
- if (target.format !== 'mp4' && target.format !== 'gif')
355
- return;
356
- const format = target.format;
357
- const limits = MCP_MEDIA_RENDER_LIMITS[format];
358
- const options = target.options ?? {};
359
- const orientation = options.orientation === 'portrait' ? 'portrait' : 'landscape';
360
- const defaultWidth = format === 'mp4'
361
- ? orientation === 'portrait'
362
- ? 1080
363
- : 1920
364
- : orientation === 'portrait'
365
- ? 540
366
- : 960;
367
- const defaultHeight = format === 'mp4'
368
- ? orientation === 'portrait'
369
- ? 1920
370
- : 1080
371
- : orientation === 'portrait'
372
- ? 960
373
- : 540;
374
- const width = numericOption(options.width, defaultWidth);
375
- const height = numericOption(options.height, defaultHeight);
376
- const fps = numericOption(options.fps, format === 'mp4' ? 30 : 10);
377
- const coverPreRoll = numericOption(options.coverPreRoll, 0);
378
- const duration = getDocPlaybackDuration(prepared.doc) + coverPreRoll;
379
- const frames = Math.ceil(duration * fps);
380
- const pixelsPerFrame = width * height;
381
- const pixelFrames = pixelsPerFrame * frames;
382
- const violations = [];
383
- if (width > limits.maximumDimension || height > limits.maximumDimension) {
384
- violations.push(`dimensions ${width}x${height}`);
385
- }
386
- if (fps > limits.maximumFps)
387
- violations.push(`${fps} fps`);
388
- if (pixelsPerFrame > limits.maximumPixelsPerFrame) {
389
- violations.push(`${pixelsPerFrame} pixels per frame`);
390
- }
391
- if (!Number.isFinite(duration) || duration > limits.maximumDurationSeconds) {
392
- violations.push(`${duration} seconds`);
393
- }
394
- if (!Number.isSafeInteger(frames) || frames > limits.maximumFrames) {
395
- violations.push(`${frames} frames`);
396
- }
397
- if (!Number.isSafeInteger(pixelFrames) || pixelFrames > limits.maximumPixelFrames) {
398
- violations.push(`${pixelFrames} frame-pixels`);
399
- }
400
- if (violations.length > 0)
401
- throw new MediaRenderBudgetError(format, violations, limits);
402
- }
403
- function numericOption(value, fallback) {
404
- return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
405
- }
406
- function findCapturedFrameBudgetError(error) {
407
- const seen = new Set();
408
- let current = error;
409
- for (let depth = 0; depth < 8; depth += 1) {
410
- if (current instanceof CapturedFrameBudgetError)
411
- return current;
412
- if (typeof current !== 'object' || current === null || seen.has(current))
413
- return undefined;
414
- seen.add(current);
415
- current = 'cause' in current ? current.cause : undefined;
416
- }
417
- return undefined;
418
- }
419
- export class MediaRenderBudgetError extends Error {
420
- constructor(format, violations, limits) {
421
- super(`The ${format.toUpperCase()} render exceeds MCP media budgets: ${violations.join(', ')}.`);
422
- this.format = format;
423
- this.code = 'media-budget-exceeded';
424
- this.retryable = false;
425
- this.name = 'MediaRenderBudgetError';
426
- this.hint =
427
- `Reduce duration, FPS, or dimensions. ${format.toUpperCase()} permits at most ` +
428
- `${limits.maximumDurationSeconds}s, ${limits.maximumFps} fps, ` +
429
- `${limits.maximumPixelsPerFrame} pixels/frame, ${limits.maximumPixelFrames} frame-pixels, ` +
430
- `and ${limits.maximumCapturedFrameBytes} retained captured-PNG bytes.`;
431
- }
432
- }
433
- export function supportedFidelities(format) {
434
- return MCP_FORMAT_FIDELITIES[format] ?? [];
435
- }
436
- export function assertSupportedFidelity(format, fidelity) {
437
- const supported = supportedFidelities(format);
438
- if (supported.includes(fidelity))
439
- return;
440
- throw new UnsupportedFidelityError(format, fidelity, supported);
441
- }
442
- export class UnsupportedFidelityError extends Error {
443
- constructor(format, fidelity, supported) {
444
- const choices = supported.length > 0 ? supported.join(', ') : 'none';
445
- super(`Fidelity "${fidelity}" is not supported for target "${format}".`);
446
- this.code = 'unsupported-fidelity';
447
- this.name = 'UnsupportedFidelityError';
448
- this.format = format;
449
- this.hint = `Supported fidelities for ${format}: ${choices}.`;
450
- }
451
- }
452
- export class UnknownTransformError extends Error {
453
- constructor(transformId) {
454
- super(`Unknown transform style "${transformId}".`);
455
- this.code = 'unknown-transform';
456
- this.hint = 'Choose a transform id reported by list_transform_styles.';
457
- this.name = 'UnknownTransformError';
458
- }
459
- }
460
- export class UnknownThemeError extends Error {
461
- constructor(themeId) {
462
- super(`Unknown theme "${themeId}".`);
463
- this.code = 'unknown-theme';
464
- this.hint = 'Choose a built-in id from list_themes or a custom theme embedded in the document.';
465
- this.name = 'UnknownThemeError';
466
- }
467
- }
468
- async function validateRequestVocabulary(prepared, request) {
469
- const checks = [];
470
- const transformId = request.transformId;
471
- if (transformId) {
472
- checks.push(import('@bendyline/squisq/transform').then(({ getTransformStyleIds }) => {
473
- if (!getTransformStyleIds().includes(transformId)) {
474
- throw new UnknownTransformError(transformId);
475
- }
476
- }));
477
- }
478
- const themeId = request.themeId;
479
- if (themeId) {
480
- checks.push(import('@bendyline/squisq/schemas').then(({ getAvailableThemes }) => {
481
- const custom = prepared.doc.customThemes?.some((theme) => theme.id === themeId);
482
- if (!custom && !getAvailableThemes().includes(themeId)) {
483
- throw new UnknownThemeError(themeId);
484
- }
485
- }));
486
- }
487
- await Promise.all(checks);
488
- }
489
- function collectAppliedOptions(request, target) {
490
- const values = {
491
- themeId: request.themeId,
492
- transformId: request.transformId,
493
- autoTemplates: request.autoTemplates,
494
- title: request.title,
495
- fidelity: target.fidelity ?? defaultFidelity(target.format),
496
- ...(target.options ?? {}),
497
- };
498
- return Object.entries(values)
499
- .filter((entry) => entry[1] !== undefined)
500
- .sort(([left], [right]) => left.localeCompare(right))
501
- .map(([name, value]) => ({ name, value }));
502
- }
503
- function firstDuplicate(values) {
504
- const seen = new Set();
505
- for (const value of values) {
506
- if (seen.has(value))
507
- return value;
508
- seen.add(value);
509
- }
510
- return undefined;
511
- }
512
- //# sourceMappingURL=conversion-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversion-service.js","sourceRoot":"","sources":["../../src/mcp/conversion-service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- /** Register the canonical linked-registry discovery surface (no format-specific aliases). */
3
- export declare function registerDiscoveryTools(server: McpServer): void;
4
- //# sourceMappingURL=discovery-tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discovery-tools.d.ts","sourceRoot":"","sources":["../../src/mcp/discovery-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoBzE,6FAA6F;AAC7F,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoG9D"}
@@ -1,114 +0,0 @@
1
- import { z } from 'zod';
2
- import { MCP_WIRE_LIMITS } from '@bendyline/docblocks/mcp';
3
- import { MCP_FORMAT_CAPABILITIES } from './conversion-service.js';
4
- import { errorResult, successResult } from './error-result.js';
5
- import { DOCBLOCKS_MCP_TOOL_OUTPUT_SCHEMAS } from '@bendyline/docblocks/mcp/zod';
6
- import { MCP_OUTPUT_PATTERNS, boundWireText, boundWireTextArray, requireWireIdentifier, } from './output-bounds.js';
7
- const READ_ONLY = {
8
- readOnlyHint: true,
9
- destructiveHint: false,
10
- idempotentHint: true,
11
- openWorldHint: false,
12
- };
13
- /** Register the canonical linked-registry discovery surface (no format-specific aliases). */
14
- export function registerDiscoveryTools(server) {
15
- server.registerTool('list_formats', {
16
- description: 'List every format in the linked Squisq registry and whether DocBlocks can import it through document tools or export it through convert_document.',
17
- inputSchema: z.object({}).strict(),
18
- outputSchema: DOCBLOCKS_MCP_TOOL_OUTPUT_SCHEMAS.list_formats,
19
- annotations: READ_ONLY,
20
- }, async () => {
21
- try {
22
- const result = { formats: serializableCapabilities() };
23
- return {
24
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
25
- structuredContent: successResult(result),
26
- };
27
- }
28
- catch (caught) {
29
- return errorResult(caught, 'inspect');
30
- }
31
- });
32
- server.registerTool('list_themes', {
33
- description: 'List the linked Squisq built-in visual themes.',
34
- inputSchema: z.object({}).strict(),
35
- outputSchema: DOCBLOCKS_MCP_TOOL_OUTPUT_SCHEMAS.list_themes,
36
- annotations: READ_ONLY,
37
- }, async () => {
38
- try {
39
- const { getThemeSummaries } = await import('@bendyline/squisq/schemas');
40
- const result = {
41
- themes: getThemeSummaries()
42
- .slice(0, MCP_WIRE_LIMITS.arrayEntries)
43
- .map((theme) => ({
44
- id: requireWireIdentifier(theme.id, 'theme id'),
45
- name: boundWireText(theme.name, MCP_WIRE_LIMITS.labelCharacters, theme.id),
46
- description: boundWireText(theme.description ?? ''),
47
- })),
48
- };
49
- return {
50
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
51
- structuredContent: successResult(result),
52
- };
53
- }
54
- catch (caught) {
55
- return errorResult(caught, 'inspect');
56
- }
57
- });
58
- server.registerTool('list_transform_styles', {
59
- description: 'List the linked Squisq transform styles accepted by convert_document.',
60
- inputSchema: z.object({}).strict(),
61
- outputSchema: DOCBLOCKS_MCP_TOOL_OUTPUT_SCHEMAS.list_transform_styles,
62
- annotations: READ_ONLY,
63
- }, async () => {
64
- try {
65
- const { getTransformStyleSummaries } = await import('@bendyline/squisq/transform');
66
- const result = {
67
- styles: getTransformStyleSummaries()
68
- .slice(0, MCP_WIRE_LIMITS.arrayEntries)
69
- .map((style) => ({
70
- id: requireWireIdentifier(style.id, 'transform style id'),
71
- name: boundWireText(style.name, MCP_WIRE_LIMITS.labelCharacters, style.id),
72
- description: boundWireText(style.description),
73
- })),
74
- };
75
- return {
76
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
77
- structuredContent: successResult(result),
78
- };
79
- }
80
- catch (caught) {
81
- return errorResult(caught, 'inspect');
82
- }
83
- });
84
- server.registerResource('formats', 'docblocks://formats', {
85
- description: 'Import/export capabilities derived from the linked Squisq registry.',
86
- mimeType: 'application/json',
87
- }, async () => ({
88
- contents: [
89
- {
90
- uri: 'docblocks://formats',
91
- mimeType: 'application/json',
92
- text: JSON.stringify({ formats: serializableCapabilities() }, null, 2),
93
- },
94
- ],
95
- }));
96
- }
97
- function serializableCapabilities() {
98
- return MCP_FORMAT_CAPABILITIES.slice(0, 64).map((format) => ({
99
- id: requireWireFormat(format.id),
100
- label: boundWireText(format.label, MCP_WIRE_LIMITS.labelCharacters, format.id),
101
- mimeType: format.mimeType,
102
- extensions: boundWireTextArray(format.extensions, 64, MCP_WIRE_LIMITS.labelCharacters),
103
- import: { ...format.import },
104
- export: { ...format.export },
105
- }));
106
- }
107
- function requireWireFormat(value) {
108
- requireWireIdentifier(value, 'format id');
109
- if (value.length > MCP_WIRE_LIMITS.formatCharacters || !MCP_OUTPUT_PATTERNS.format.test(value)) {
110
- throw new Error('Linked Squisq returned an invalid MCP format id');
111
- }
112
- return value;
113
- }
114
- //# sourceMappingURL=discovery-tools.js.map