@bendyline/docblocks-cli 1.1.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -88
- package/dist/commands/convert.d.ts +12 -2
- package/dist/commands/convert.d.ts.map +1 -1
- package/dist/commands/convert.js +272 -101
- package/dist/commands/convert.js.map +1 -1
- package/dist/commands/mcp.d.ts +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +90 -4
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/parse.js +1 -1
- package/dist/commands/parse.js.map +1 -1
- package/dist/commands/serve.d.ts +9 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +209 -44
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/themes.js +1 -1
- package/dist/commands/themes.js.map +1 -1
- package/dist/commands/transforms.js +1 -1
- package/dist/commands/transforms.js.map +1 -1
- package/dist/commands/video.d.ts +8 -1
- package/dist/commands/video.d.ts.map +1 -1
- package/dist/commands/video.js +50 -30
- package/dist/commands/video.js.map +1 -1
- package/dist/contained-file.d.ts +8 -0
- package/dist/contained-file.d.ts.map +1 -0
- package/dist/contained-file.js +77 -0
- package/dist/contained-file.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/agentic-tools.d.ts +16 -0
- package/dist/mcp/agentic-tools.d.ts.map +1 -0
- package/dist/mcp/agentic-tools.js +967 -0
- package/dist/mcp/agentic-tools.js.map +1 -0
- package/dist/mcp/artifact-store.d.ts +98 -0
- package/dist/mcp/artifact-store.d.ts.map +1 -0
- package/dist/mcp/artifact-store.js +542 -0
- package/dist/mcp/artifact-store.js.map +1 -0
- package/dist/mcp/authority.d.ts +53 -0
- package/dist/mcp/authority.d.ts.map +1 -0
- package/dist/mcp/authority.js +433 -0
- package/dist/mcp/authority.js.map +1 -0
- package/dist/mcp/conversion-service.d.ts +111 -0
- package/dist/mcp/conversion-service.d.ts.map +1 -0
- package/dist/mcp/conversion-service.js +512 -0
- package/dist/mcp/conversion-service.js.map +1 -0
- package/dist/mcp/discovery-tools.d.ts +4 -0
- package/dist/mcp/discovery-tools.d.ts.map +1 -0
- package/dist/mcp/discovery-tools.js +114 -0
- package/dist/mcp/discovery-tools.js.map +1 -0
- package/dist/mcp/document-service.d.ts +47 -0
- package/dist/mcp/document-service.d.ts.map +1 -0
- package/dist/mcp/document-service.js +424 -0
- package/dist/mcp/document-service.js.map +1 -0
- package/dist/mcp/error-result.d.ts +17 -0
- package/dist/mcp/error-result.d.ts.map +1 -0
- package/dist/mcp/error-result.js +82 -0
- package/dist/mcp/error-result.js.map +1 -0
- package/dist/mcp/intelligence.d.ts +15 -0
- package/dist/mcp/intelligence.d.ts.map +1 -0
- package/dist/mcp/intelligence.js +855 -0
- package/dist/mcp/intelligence.js.map +1 -0
- package/dist/mcp/output-bounds.d.ts +13 -0
- package/dist/mcp/output-bounds.d.ts.map +1 -0
- package/dist/mcp/output-bounds.js +61 -0
- package/dist/mcp/output-bounds.js.map +1 -0
- package/dist/mcp/preview-service.d.ts +54 -0
- package/dist/mcp/preview-service.d.ts.map +1 -0
- package/dist/mcp/preview-service.js +454 -0
- package/dist/mcp/preview-service.js.map +1 -0
- package/dist/mcp/progress.d.ts +18 -0
- package/dist/mcp/progress.d.ts.map +1 -0
- package/dist/mcp/progress.js +28 -0
- package/dist/mcp/progress.js.map +1 -0
- package/dist/mcp/prompts.d.ts +4 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +124 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/rendered-conversion.d.ts +34 -0
- package/dist/mcp/rendered-conversion.d.ts.map +1 -0
- package/dist/mcp/rendered-conversion.js +364 -0
- package/dist/mcp/rendered-conversion.js.map +1 -0
- package/dist/mcp/server.d.ts +67 -10
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +227 -496
- package/dist/mcp/server.js.map +1 -1
- package/dist/preview-policy.d.ts +8 -0
- package/dist/preview-policy.d.ts.map +1 -0
- package/dist/preview-policy.js +85 -0
- package/dist/preview-policy.js.map +1 -0
- package/dist/render-html.d.ts +8 -0
- package/dist/render-html.d.ts.map +1 -1
- package/dist/render-html.js +32 -7
- package/dist/render-html.js.map +1 -1
- package/dist/version.d.ts +4 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +95 -6
- package/dist/version.js.map +1 -1
- package/package.json +11 -11
- package/dist/converters/docx-to-md.d.ts +0 -10
- package/dist/converters/docx-to-md.d.ts.map +0 -1
- package/dist/converters/docx-to-md.js +0 -17
- package/dist/converters/docx-to-md.js.map +0 -1
- package/dist/converters/pdf-to-md.d.ts +0 -14
- package/dist/converters/pdf-to-md.d.ts.map +0 -1
- package/dist/converters/pdf-to-md.js +0 -51
- package/dist/converters/pdf-to-md.js.map +0 -1
- package/dist/converters/pptx-to-md.d.ts +0 -13
- package/dist/converters/pptx-to-md.d.ts.map +0 -1
- package/dist/converters/pptx-to-md.js +0 -67
- package/dist/converters/pptx-to-md.js.map +0 -1
package/dist/commands/convert.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* convert command
|
|
3
3
|
*
|
|
4
|
-
* Reads
|
|
5
|
-
*
|
|
4
|
+
* Reads any input supported by the linked Squisq CLI and exports through its
|
|
5
|
+
* canonical format registry. The historical default set remains DOCX, PPTX,
|
|
6
|
+
* PDF, HTML, and DBK; callers may explicitly request any export-capable
|
|
7
|
+
* registry format.
|
|
6
8
|
*
|
|
7
9
|
* Wraps the same logic as squisq-cli's convert command, reusing the
|
|
8
10
|
* underlying squisq libraries directly.
|
|
@@ -10,149 +12,302 @@
|
|
|
10
12
|
import { writeFile, mkdir, stat } from 'node:fs/promises';
|
|
11
13
|
import { dirname, basename, extname, join, resolve } from 'node:path';
|
|
12
14
|
import { Command } from 'commander';
|
|
13
|
-
const
|
|
14
|
-
function parseFormats(value) {
|
|
15
|
-
const requested = value.split(',').map((s) => s.trim().toLowerCase());
|
|
16
|
-
const valid = [];
|
|
17
|
-
for (const r of requested) {
|
|
18
|
-
if (ALL_FORMATS.includes(r)) {
|
|
19
|
-
valid.push(r);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
console.warn(`Unknown format "${r}" — skipping. Valid: ${ALL_FORMATS.join(', ')}`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
if (valid.length === 0) {
|
|
26
|
-
throw new Error(`No valid formats specified. Valid: ${ALL_FORMATS.join(', ')}`);
|
|
27
|
-
}
|
|
28
|
-
return valid;
|
|
29
|
-
}
|
|
15
|
+
const DEFAULT_FORMATS = ['docx', 'pptx', 'pdf', 'html', 'dbk'];
|
|
30
16
|
export async function runConvert(inputPath, opts) {
|
|
17
|
+
throwIfAborted(opts.signal);
|
|
31
18
|
const resolvedInput = resolve(inputPath);
|
|
32
|
-
const formats = opts.formats ? parseFormats(opts.formats) : [...ALL_FORMATS];
|
|
33
19
|
const outputDir = opts.outputDir ? resolve(opts.outputDir) : dirname(resolvedInput);
|
|
34
20
|
const inputBasename = basename(resolvedInput);
|
|
35
21
|
const inputExt = extname(inputBasename);
|
|
36
22
|
const baseName = inputExt ? inputBasename.slice(0, -inputExt.length) : inputBasename;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
23
|
+
const squisq = await import('@bendyline/squisq-cli/api');
|
|
24
|
+
throwIfAborted(opts.signal);
|
|
25
|
+
const registry = opts.registry ?? squisq.createCliRegistry();
|
|
26
|
+
const exportableIds = registry
|
|
27
|
+
.list()
|
|
28
|
+
.filter((definition) => definition.exportDoc !== undefined)
|
|
29
|
+
.map((definition) => definition.id);
|
|
30
|
+
const exportable = new Set(exportableIds);
|
|
31
|
+
const requested = opts.formats
|
|
32
|
+
? opts.formats
|
|
33
|
+
.split(',')
|
|
34
|
+
.map((format) => format.trim().toLowerCase())
|
|
35
|
+
.filter(Boolean)
|
|
36
|
+
: [...DEFAULT_FORMATS];
|
|
37
|
+
const formats = requested.filter((format) => exportable.has(format));
|
|
38
|
+
const unknown = requested.filter((format) => !exportable.has(format));
|
|
39
|
+
if (unknown.length > 0) {
|
|
40
|
+
console.warn(`Unknown or non-exportable format${unknown.length === 1 ? '' : 's'} "${unknown.join(', ')}" — skipping. Valid: ${exportableIds.join(', ')}`);
|
|
41
|
+
}
|
|
42
|
+
if (formats.length === 0) {
|
|
43
|
+
throw new squisq.ConversionError('unknown-format', `No valid formats specified. Valid: ${exportableIds.join(', ')}`, {
|
|
44
|
+
format: requested[0],
|
|
45
|
+
hint: 'Choose a format reported by the linked Squisq CLI registry.',
|
|
46
|
+
});
|
|
45
47
|
}
|
|
48
|
+
await mkdir(outputDir, { recursive: true });
|
|
49
|
+
throwIfAborted(opts.signal);
|
|
46
50
|
// Validate transform
|
|
47
51
|
if (opts.transform) {
|
|
48
52
|
const { getTransformStyleIds } = await import('@bendyline/squisq/transform');
|
|
53
|
+
throwIfAborted(opts.signal);
|
|
49
54
|
const styles = getTransformStyleIds();
|
|
50
55
|
if (!styles.includes(opts.transform)) {
|
|
51
56
|
throw new Error(`Unknown transform style "${opts.transform}". Available: ${styles.join(', ')}`);
|
|
52
57
|
}
|
|
53
58
|
}
|
|
54
59
|
console.error(`Reading: ${resolvedInput}`);
|
|
55
|
-
const
|
|
56
|
-
|
|
60
|
+
const result = await squisq.readInput(resolvedInput, { signal: opts.signal });
|
|
61
|
+
throwIfAborted(opts.signal);
|
|
57
62
|
const { container } = result;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// Apply transform if requested
|
|
63
|
+
// Keep DocBlocks' source-preserving Markdown transform projection for
|
|
64
|
+
// authored Markdown. JSON Doc inputs have no Markdown source to protect, so
|
|
65
|
+
// they use the registry's native transform path below.
|
|
62
66
|
let exportMarkdownDoc = result.markdownDoc;
|
|
63
|
-
if (opts.transform) {
|
|
64
|
-
exportMarkdownDoc = await applyTransformToMarkdown(
|
|
67
|
+
if (opts.transform && exportMarkdownDoc) {
|
|
68
|
+
exportMarkdownDoc = await applyTransformToMarkdown(exportMarkdownDoc, container, opts.transform, opts.theme);
|
|
69
|
+
throwIfAborted(opts.signal);
|
|
65
70
|
console.error(` Applied transform: ${opts.transform}`);
|
|
66
71
|
}
|
|
67
|
-
const
|
|
72
|
+
const source = exportMarkdownDoc
|
|
73
|
+
? { kind: 'markdown', markdown: exportMarkdownDoc, container, baseName }
|
|
74
|
+
: { kind: 'doc', doc: result.doc, container, baseName };
|
|
68
75
|
const outputFiles = [];
|
|
69
76
|
for (const format of formats) {
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
77
|
+
throwIfAborted(opts.signal);
|
|
78
|
+
const conversion = await squisq.convert(source, format, {
|
|
79
|
+
signal: opts.signal,
|
|
80
|
+
registry,
|
|
81
|
+
title: baseName,
|
|
82
|
+
themeId: opts.theme,
|
|
83
|
+
...(!exportMarkdownDoc && opts.transform ? { transformStyle: opts.transform } : {}),
|
|
84
|
+
});
|
|
85
|
+
throwIfAborted(opts.signal);
|
|
86
|
+
const suggestedFilename = basename(conversion.suggestedFilename);
|
|
87
|
+
const outPath = join(outputDir, suggestedFilename);
|
|
88
|
+
await writeFile(outPath, conversion.bytes);
|
|
89
|
+
throwIfAborted(opts.signal);
|
|
73
90
|
const info = await stat(outPath);
|
|
74
|
-
|
|
91
|
+
throwIfAborted(opts.signal);
|
|
92
|
+
outputFiles.push({
|
|
93
|
+
path: outPath,
|
|
94
|
+
format,
|
|
95
|
+
size: info.size,
|
|
96
|
+
mimeType: conversion.mimeType,
|
|
97
|
+
suggestedFilename: conversion.suggestedFilename,
|
|
98
|
+
warnings: [...conversion.warnings],
|
|
99
|
+
});
|
|
100
|
+
for (const warning of conversion.warnings) {
|
|
101
|
+
console.error(` Warning [${format}]: ${warning}`);
|
|
102
|
+
}
|
|
75
103
|
console.error(` ✓ ${outPath}`);
|
|
76
104
|
}
|
|
77
105
|
console.error('Done.');
|
|
78
106
|
return { outputFiles };
|
|
79
107
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const { markdownDocToPptx } = await import('@bendyline/squisq-formats/pptx');
|
|
89
|
-
const images = await collectContainerImages(container);
|
|
90
|
-
const buf = await markdownDocToPptx(markdownDoc, { themeId, images });
|
|
91
|
-
return Buffer.from(buf);
|
|
92
|
-
}
|
|
93
|
-
case 'pdf': {
|
|
94
|
-
const { markdownDocToPdf } = await import('@bendyline/squisq-formats/pdf');
|
|
95
|
-
const buf = await markdownDocToPdf(markdownDoc, { themeId });
|
|
96
|
-
return Buffer.from(buf);
|
|
97
|
-
}
|
|
98
|
-
case 'html': {
|
|
99
|
-
const { markdownToDoc } = await import('@bendyline/squisq/doc');
|
|
100
|
-
const { docToHtml, collectImagePaths } = await import('@bendyline/squisq-formats/html');
|
|
101
|
-
const { PLAYER_BUNDLE } = await import('@bendyline/squisq-react/standalone-source');
|
|
102
|
-
const doc = markdownToDoc(markdownDoc);
|
|
103
|
-
const imagePaths = collectImagePaths(doc);
|
|
104
|
-
const images = new Map();
|
|
105
|
-
for (const imgPath of imagePaths) {
|
|
106
|
-
const data = await container.readFile(imgPath);
|
|
107
|
-
if (data) {
|
|
108
|
-
images.set(imgPath, data);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return docToHtml(doc, {
|
|
112
|
-
playerScript: PLAYER_BUNDLE,
|
|
113
|
-
images,
|
|
114
|
-
title: baseName,
|
|
115
|
-
mode: 'static',
|
|
116
|
-
themeId,
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
case 'dbk': {
|
|
120
|
-
const { containerToZip } = await import('@bendyline/squisq-formats/container');
|
|
121
|
-
const blob = await containerToZip(container);
|
|
122
|
-
const buf = await blob.arrayBuffer();
|
|
123
|
-
return Buffer.from(buf);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
108
|
+
function throwIfAborted(signal) {
|
|
109
|
+
if (!signal?.aborted)
|
|
110
|
+
return;
|
|
111
|
+
if (signal.reason !== undefined)
|
|
112
|
+
throw signal.reason;
|
|
113
|
+
const error = new Error('Document conversion was cancelled');
|
|
114
|
+
error.name = 'AbortError';
|
|
115
|
+
throw error;
|
|
126
116
|
}
|
|
127
117
|
/**
|
|
128
118
|
* Apply a transform style to a MarkdownDocument.
|
|
129
119
|
*/
|
|
130
120
|
export async function applyTransformToMarkdown(markdownDoc, container, transformStyle, themeId) {
|
|
131
121
|
const { markdownToDoc, docToMarkdown } = await import('@bendyline/squisq/doc');
|
|
122
|
+
const { readFrontmatterThemeId } = await import('@bendyline/squisq/markdown');
|
|
132
123
|
const { applyTransform, extractDocImages } = await import('@bendyline/squisq/transform');
|
|
133
124
|
const doc = markdownToDoc(markdownDoc);
|
|
134
125
|
const images = extractDocImages(doc.blocks);
|
|
135
|
-
const
|
|
136
|
-
|
|
126
|
+
const effectiveTheme = themeId ?? readFrontmatterThemeId(markdownDoc.frontmatter);
|
|
127
|
+
const result = applyTransform(doc, transformStyle, { themeId: effectiveTheme, images });
|
|
128
|
+
const projected = projectTransformOntoMarkdownSource(doc, result.doc);
|
|
129
|
+
const transformedMarkdown = docToMarkdown(projected);
|
|
130
|
+
const resolvedTheme = effectiveTheme ?? result.doc.themeId ?? doc.themeId;
|
|
131
|
+
if (!resolvedTheme)
|
|
132
|
+
return transformedMarkdown;
|
|
133
|
+
return {
|
|
134
|
+
...transformedMarkdown,
|
|
135
|
+
frontmatter: {
|
|
136
|
+
...(transformedMarkdown.frontmatter ?? {}),
|
|
137
|
+
'squisq-theme': resolvedTheme,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
137
140
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
141
|
+
/**
|
|
142
|
+
* Squisq transforms produce a presentation Doc whose generated highlight
|
|
143
|
+
* blocks intentionally replace source blocks. Those generated blocks do not
|
|
144
|
+
* carry Markdown authoring nodes, so serializing the transformed Doc directly
|
|
145
|
+
* can drop complete sections. Project each selected visual template back onto
|
|
146
|
+
* its source block instead: the style remains material while the authored
|
|
147
|
+
* headings, body content, media references, and hierarchy stay intact.
|
|
148
|
+
*/
|
|
149
|
+
function projectTransformOntoMarkdownSource(source, transformed) {
|
|
150
|
+
const candidatesBySource = new Map();
|
|
151
|
+
const timedSourceBlocks = collectTransformSourceBlocks(source.blocks).sort((left, right) => left.startTime - right.startTime);
|
|
152
|
+
const collectCandidates = (blocks) => {
|
|
153
|
+
for (const block of blocks) {
|
|
154
|
+
const provenance = block;
|
|
155
|
+
const sourceBlockId = provenance.sourceBlockId ??
|
|
156
|
+
findSourceBlockAtTime(timedSourceBlocks, provenance.sourceStartTime)?.id;
|
|
157
|
+
if (sourceBlockId && block.template) {
|
|
158
|
+
const candidates = candidatesBySource.get(sourceBlockId) ?? [];
|
|
159
|
+
candidates.push(block);
|
|
160
|
+
candidatesBySource.set(sourceBlockId, candidates);
|
|
146
161
|
}
|
|
162
|
+
if (block.children)
|
|
163
|
+
collectCandidates(block.children);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
collectCandidates(transformed.blocks);
|
|
167
|
+
const projectBlock = (block) => {
|
|
168
|
+
const children = block.children?.map(projectBlock);
|
|
169
|
+
const visual = selectVisualCandidate(candidatesBySource.get(block.id));
|
|
170
|
+
if (!visual || !block.sourceHeading) {
|
|
171
|
+
return { ...block, ...(children ? { children } : {}) };
|
|
172
|
+
}
|
|
173
|
+
const { autoTemplate: _autoTemplate, ...sourceBlock } = block;
|
|
174
|
+
void _autoTemplate;
|
|
175
|
+
const templateOverrides = {
|
|
176
|
+
...visual.overrides,
|
|
177
|
+
...(block.sourceHeading.templateAnnotation?.params ?? {}),
|
|
178
|
+
...(block.templateOverrides ?? {}),
|
|
179
|
+
};
|
|
180
|
+
const sourceHeading = {
|
|
181
|
+
...block.sourceHeading,
|
|
182
|
+
templateAnnotation: {
|
|
183
|
+
...(block.sourceHeading.templateAnnotation ?? {}),
|
|
184
|
+
template: visual.block.template,
|
|
185
|
+
...(Object.keys(templateOverrides).length > 0 ? { params: templateOverrides } : {}),
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
return {
|
|
189
|
+
...sourceBlock,
|
|
190
|
+
...(children ? { children } : {}),
|
|
191
|
+
template: visual.block.template,
|
|
192
|
+
templateOverrides,
|
|
193
|
+
sourceHeading,
|
|
194
|
+
...(block.transition || visual.block.transition
|
|
195
|
+
? { transition: block.transition ?? visual.block.transition }
|
|
196
|
+
: {}),
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
return {
|
|
200
|
+
...source,
|
|
201
|
+
blocks: source.blocks.map(projectBlock),
|
|
202
|
+
themeId: transformed.themeId ?? source.themeId,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
function collectTransformSourceBlocks(blocks) {
|
|
206
|
+
const sourceBlocks = [];
|
|
207
|
+
for (const block of blocks) {
|
|
208
|
+
if (block.children && block.children.length > 0) {
|
|
209
|
+
if (!block.contents || block.contents.length === 0)
|
|
210
|
+
sourceBlocks.push(block);
|
|
211
|
+
sourceBlocks.push(...collectTransformSourceBlocks(block.children));
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
sourceBlocks.push(block);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return sourceBlocks;
|
|
218
|
+
}
|
|
219
|
+
function findSourceBlockAtTime(sourceBlocks, sourceStartTime) {
|
|
220
|
+
if (sourceStartTime === undefined)
|
|
221
|
+
return undefined;
|
|
222
|
+
let match;
|
|
223
|
+
for (const block of sourceBlocks) {
|
|
224
|
+
if (block.startTime > sourceStartTime)
|
|
225
|
+
break;
|
|
226
|
+
match = block;
|
|
227
|
+
}
|
|
228
|
+
return match;
|
|
229
|
+
}
|
|
230
|
+
function selectVisualCandidate(candidates) {
|
|
231
|
+
if (!candidates || candidates.length === 0)
|
|
232
|
+
return undefined;
|
|
233
|
+
for (const candidate of candidates) {
|
|
234
|
+
if (candidate.id.startsWith('transform-header-') ||
|
|
235
|
+
candidate.id.startsWith('transform-img-') ||
|
|
236
|
+
candidate.template === 'sectionHeader') {
|
|
237
|
+
continue;
|
|
147
238
|
}
|
|
239
|
+
const overrides = serializeVisualInputs(candidate);
|
|
240
|
+
if (overrides)
|
|
241
|
+
return { block: candidate, overrides };
|
|
148
242
|
}
|
|
149
|
-
return
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
function serializeVisualInputs(block) {
|
|
246
|
+
const input = block;
|
|
247
|
+
switch (block.template) {
|
|
248
|
+
case 'title':
|
|
249
|
+
return serializeStringInputs(input, ['title'], ['subtitle', 'backgroundColor']);
|
|
250
|
+
case 'statHighlight':
|
|
251
|
+
return serializeStringInputs(input, ['stat', 'description'], ['detail', 'colorScheme']);
|
|
252
|
+
case 'quote':
|
|
253
|
+
return serializeStringInputs(input, ['quote'], ['attribution']);
|
|
254
|
+
case 'fullBleedQuote':
|
|
255
|
+
return serializeStringInputs(input, ['text'], ['colorScheme']);
|
|
256
|
+
case 'factCard':
|
|
257
|
+
return serializeStringInputs(input, ['fact', 'explanation'], ['source']);
|
|
258
|
+
case 'definitionCard':
|
|
259
|
+
return serializeStringInputs(input, ['term', 'definition'], ['origin', 'colorScheme']);
|
|
260
|
+
case 'dateEvent':
|
|
261
|
+
return serializeStringInputs(input, ['date', 'description'], ['footer', 'mood']);
|
|
262
|
+
case 'twoColumn': {
|
|
263
|
+
const left = serializeLabeledPair(input.left);
|
|
264
|
+
const right = serializeLabeledPair(input.right);
|
|
265
|
+
if (!left || !right)
|
|
266
|
+
return undefined;
|
|
267
|
+
return {
|
|
268
|
+
left,
|
|
269
|
+
right,
|
|
270
|
+
...(serializeStringInputs(input, [], ['header', 'leftColor', 'rightColor']) ?? {}),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
default:
|
|
274
|
+
// Some template inputs (lists, images, tables, and custom templates)
|
|
275
|
+
// are structured and cannot be represented losslessly in one inline
|
|
276
|
+
// annotation. Keep their source Markdown unchanged instead of emitting
|
|
277
|
+
// a visually empty or corrupt template block.
|
|
278
|
+
return undefined;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function serializeStringInputs(input, required, optional) {
|
|
282
|
+
const serialized = {};
|
|
283
|
+
for (const key of required) {
|
|
284
|
+
const value = input[key];
|
|
285
|
+
if (typeof value !== 'string')
|
|
286
|
+
return undefined;
|
|
287
|
+
serialized[key] = value;
|
|
288
|
+
}
|
|
289
|
+
for (const key of optional) {
|
|
290
|
+
const value = input[key];
|
|
291
|
+
if (typeof value === 'string')
|
|
292
|
+
serialized[key] = value;
|
|
293
|
+
}
|
|
294
|
+
return serialized;
|
|
295
|
+
}
|
|
296
|
+
function serializeLabeledPair(value) {
|
|
297
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
298
|
+
return undefined;
|
|
299
|
+
const pair = value;
|
|
300
|
+
if (typeof pair.label !== 'string')
|
|
301
|
+
return undefined;
|
|
302
|
+
return typeof pair.sublabel === 'string' && pair.sublabel
|
|
303
|
+
? `${pair.label}|${pair.sublabel}`
|
|
304
|
+
: pair.label;
|
|
150
305
|
}
|
|
151
306
|
export const convertCommand = new Command('convert')
|
|
152
|
-
.description('Convert a
|
|
153
|
-
.argument('<input>', 'Path to
|
|
307
|
+
.description('Convert a document through the linked Squisq format registry')
|
|
308
|
+
.argument('<input>', 'Path to a supported document, .zip/.dbk container, or folder')
|
|
154
309
|
.option('-o, --output-dir <dir>', 'Output directory (default: same as input)')
|
|
155
|
-
.option('-f, --formats <list>', `Comma-separated
|
|
310
|
+
.option('-f, --formats <list>', `Comma-separated linked Squisq export formats (default: ${DEFAULT_FORMATS.join(', ')})`)
|
|
156
311
|
.option('-t, --theme <id>', 'Squisq theme ID to apply (e.g., documentary, cinematic, bold)')
|
|
157
312
|
.option('--transform <style>', 'Transform style to apply before export (e.g., documentary, magazine, minimal)')
|
|
158
313
|
.action(async (inputPath, opts) => {
|
|
@@ -162,7 +317,23 @@ export const convertCommand = new Command('convert')
|
|
|
162
317
|
catch (err) {
|
|
163
318
|
const message = err instanceof Error ? err.message : String(err);
|
|
164
319
|
console.error(`Error: ${message}`);
|
|
320
|
+
if (isConversionErrorMetadata(err)) {
|
|
321
|
+
console.error(` Code: ${err.code}${err.format ? ` (${err.format})` : ''}`);
|
|
322
|
+
if (err.hint)
|
|
323
|
+
console.error(` Hint: ${err.hint}`);
|
|
324
|
+
}
|
|
165
325
|
process.exitCode = 1;
|
|
166
326
|
}
|
|
167
327
|
});
|
|
328
|
+
function isConversionErrorMetadata(error) {
|
|
329
|
+
if (!(error instanceof Error))
|
|
330
|
+
return false;
|
|
331
|
+
const candidate = error;
|
|
332
|
+
if (typeof candidate.code !== 'string')
|
|
333
|
+
return false;
|
|
334
|
+
if (candidate.format !== undefined && typeof candidate.format !== 'string') {
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
return candidate.hint === undefined || typeof candidate.hint === 'string';
|
|
338
|
+
}
|
|
168
339
|
//# sourceMappingURL=convert.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/commands/convert.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/commands/convert.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/mcp.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* docblocks mcp
|
|
6
6
|
*
|
|
7
7
|
* For Claude Desktop, add to your config:
|
|
8
|
-
* { "mcpServers": { "docblocks": { "command": "npx", "args": ["docblocks", "mcp"] } } }
|
|
8
|
+
* { "mcpServers": { "docblocks": { "command": "npx", "args": ["-y", "@bendyline/docblocks-cli", "mcp"] } } }
|
|
9
9
|
*/
|
|
10
10
|
import { Command } from 'commander';
|
|
11
11
|
export declare const mcpCommand: Command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,UAAU,SAwJpB,CAAC"}
|
package/dist/commands/mcp.js
CHANGED
|
@@ -5,16 +5,102 @@
|
|
|
5
5
|
* docblocks mcp
|
|
6
6
|
*
|
|
7
7
|
* For Claude Desktop, add to your config:
|
|
8
|
-
* { "mcpServers": { "docblocks": { "command": "npx", "args": ["docblocks", "mcp"] } } }
|
|
8
|
+
* { "mcpServers": { "docblocks": { "command": "npx", "args": ["-y", "@bendyline/docblocks-cli", "mcp"] } } }
|
|
9
9
|
*/
|
|
10
|
+
import process from 'node:process';
|
|
10
11
|
import { Command } from 'commander';
|
|
12
|
+
import { MCP_ARTIFACT_STORE_LIMITS } from '../mcp/artifact-store.js';
|
|
13
|
+
import { MCP_FILE_AUTHORITY_LIMITS } from '../mcp/authority.js';
|
|
11
14
|
export const mcpCommand = new Command('mcp')
|
|
12
15
|
.description('Start an MCP server over stdio for AI-assisted document operations')
|
|
13
|
-
.
|
|
16
|
+
.option('--allow-read <dir...>', 'allow MCP tools to read below these directories')
|
|
17
|
+
.option('--allow-write <dir...>', 'allow MCP tools to write below these directories')
|
|
18
|
+
.option('--max-concurrency <count>', 'maximum simultaneous expensive tools', '2')
|
|
19
|
+
.option('--operation-timeout-ms <milliseconds>', 'runtime budget for one expensive tool', '120000')
|
|
20
|
+
.option('--max-input-bytes <bytes>', 'maximum bytes read from one granted source file', '104857600')
|
|
21
|
+
.option('--max-artifact-bytes <bytes>', 'maximum bytes in one generated artifact', '524288000')
|
|
22
|
+
.option('--max-artifact-total-bytes <bytes>', 'maximum generated artifact bytes per session', '1073741824')
|
|
23
|
+
.option('--max-artifacts <count>', 'maximum generated artifacts per session', '64')
|
|
24
|
+
.option('--artifact-ttl-ms <milliseconds>', 'generated artifact lifetime', '1800000')
|
|
25
|
+
.option('--max-resource-bytes <bytes>', 'maximum artifact bytes returned as an MCP resource', '26214400')
|
|
26
|
+
.option('--max-report-bytes <bytes>', 'maximum stored conversion report bytes', '8388608')
|
|
27
|
+
.option('--max-report-total-bytes <bytes>', 'maximum stored conversion report bytes per session', '67108864')
|
|
28
|
+
.action(async (opts) => {
|
|
14
29
|
const { createMcpServer } = await import('../mcp/server.js');
|
|
15
30
|
const { StdioServerTransport } = await import('@modelcontextprotocol/sdk/server/stdio.js');
|
|
16
|
-
const
|
|
31
|
+
const maxConcurrentOperations = Number(opts.maxConcurrency);
|
|
32
|
+
if (!Number.isSafeInteger(maxConcurrentOperations) ||
|
|
33
|
+
maxConcurrentOperations < 1 ||
|
|
34
|
+
maxConcurrentOperations > 32) {
|
|
35
|
+
throw new Error('--max-concurrency must be an integer between 1 and 32');
|
|
36
|
+
}
|
|
37
|
+
const operationTimeoutMs = Number(opts.operationTimeoutMs);
|
|
38
|
+
if (!Number.isSafeInteger(operationTimeoutMs) ||
|
|
39
|
+
operationTimeoutMs < 1000 ||
|
|
40
|
+
operationTimeoutMs > 30 * 60 * 1000) {
|
|
41
|
+
throw new Error('--operation-timeout-ms must be between 1000 and 1800000');
|
|
42
|
+
}
|
|
43
|
+
const server = createMcpServer({
|
|
44
|
+
readRoots: opts.allowRead ?? [],
|
|
45
|
+
writeRoots: opts.allowWrite ?? [],
|
|
46
|
+
maxConcurrentOperations,
|
|
47
|
+
operationTimeoutMs,
|
|
48
|
+
maxInputFileBytes: boundedIntegerOption('--max-input-bytes', opts.maxInputBytes, MCP_FILE_AUTHORITY_LIMITS.maxInputFileBytes),
|
|
49
|
+
maxArtifactBytes: boundedIntegerOption('--max-artifact-bytes', opts.maxArtifactBytes, MCP_ARTIFACT_STORE_LIMITS.maxArtifactBytes),
|
|
50
|
+
maxArtifactTotalBytes: boundedIntegerOption('--max-artifact-total-bytes', opts.maxArtifactTotalBytes, MCP_ARTIFACT_STORE_LIMITS.maxArtifactTotalBytes),
|
|
51
|
+
maxArtifactCount: boundedIntegerOption('--max-artifacts', opts.maxArtifacts, MCP_ARTIFACT_STORE_LIMITS.maxArtifactCount),
|
|
52
|
+
artifactTtlMs: boundedIntegerOption('--artifact-ttl-ms', opts.artifactTtlMs, MCP_ARTIFACT_STORE_LIMITS.artifactTtlMs),
|
|
53
|
+
maxArtifactResourceBytes: boundedIntegerOption('--max-resource-bytes', opts.maxResourceBytes, MCP_ARTIFACT_STORE_LIMITS.maxArtifactResourceBytes),
|
|
54
|
+
maxArtifactReportBytes: boundedIntegerOption('--max-report-bytes', opts.maxReportBytes, MCP_ARTIFACT_STORE_LIMITS.maxArtifactReportBytes),
|
|
55
|
+
maxArtifactReportTotalBytes: boundedIntegerOption('--max-report-total-bytes', opts.maxReportTotalBytes, MCP_ARTIFACT_STORE_LIMITS.maxArtifactReportTotalBytes),
|
|
56
|
+
});
|
|
17
57
|
const transport = new StdioServerTransport();
|
|
18
|
-
|
|
58
|
+
let markDisconnected = () => undefined;
|
|
59
|
+
const disconnected = new Promise((resolve) => {
|
|
60
|
+
markDisconnected = resolve;
|
|
61
|
+
});
|
|
62
|
+
const onInputClosed = () => markDisconnected();
|
|
63
|
+
let exitSignal = null;
|
|
64
|
+
const onSigint = () => {
|
|
65
|
+
exitSignal = 'SIGINT';
|
|
66
|
+
markDisconnected();
|
|
67
|
+
};
|
|
68
|
+
const onSigterm = () => {
|
|
69
|
+
exitSignal = 'SIGTERM';
|
|
70
|
+
markDisconnected();
|
|
71
|
+
};
|
|
72
|
+
const previousTransportClose = transport.onclose;
|
|
73
|
+
transport.onclose = () => {
|
|
74
|
+
previousTransportClose?.();
|
|
75
|
+
markDisconnected();
|
|
76
|
+
};
|
|
77
|
+
process.stdin.once('end', onInputClosed);
|
|
78
|
+
process.stdin.once('close', onInputClosed);
|
|
79
|
+
process.once('SIGINT', onSigint);
|
|
80
|
+
process.once('SIGTERM', onSigterm);
|
|
81
|
+
try {
|
|
82
|
+
await server.connect(transport);
|
|
83
|
+
if (process.stdin.readableEnded || process.stdin.destroyed)
|
|
84
|
+
markDisconnected();
|
|
85
|
+
await disconnected;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
process.stdin.off('end', onInputClosed);
|
|
89
|
+
process.stdin.off('close', onInputClosed);
|
|
90
|
+
process.off('SIGINT', onSigint);
|
|
91
|
+
process.off('SIGTERM', onSigterm);
|
|
92
|
+
await server.close();
|
|
93
|
+
if (exitSignal === 'SIGINT')
|
|
94
|
+
process.exitCode = 130;
|
|
95
|
+
if (exitSignal === 'SIGTERM')
|
|
96
|
+
process.exitCode = 143;
|
|
97
|
+
}
|
|
19
98
|
});
|
|
99
|
+
function boundedIntegerOption(name, value, maximum) {
|
|
100
|
+
const parsed = Number(value);
|
|
101
|
+
if (!Number.isSafeInteger(parsed) || parsed < 1 || parsed > maximum) {
|
|
102
|
+
throw new Error(`${name} must be an integer between 1 and ${maximum}`);
|
|
103
|
+
}
|
|
104
|
+
return parsed;
|
|
105
|
+
}
|
|
20
106
|
//# sourceMappingURL=mcp.js.map
|
package/dist/commands/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/parse.js
CHANGED
|
@@ -6,7 +6,7 @@ import { resolve } from 'node:path';
|
|
|
6
6
|
import { Command } from 'commander';
|
|
7
7
|
export const parseCommand = new Command('parse')
|
|
8
8
|
.description('Parse a markdown file and print its structure as JSON')
|
|
9
|
-
.argument('<input>', 'Path to
|
|
9
|
+
.argument('<input>', 'Path to UTF-8 Markdown content')
|
|
10
10
|
.action(async (inputPath) => {
|
|
11
11
|
try {
|
|
12
12
|
const resolvedInput = resolve(inputPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uDAAuD,CAAC;KACpE,QAAQ,CAAC,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uDAAuD,CAAC;KACpE,QAAQ,CAAC,SAAS,EAAE,gCAAgC,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;IAClC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAE3C,wBAAwB;QACxB,MAAM,KAAK,GAAG;YACZ,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC;YACjB,UAAU,EAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;SAC9C,CAAC;QAEF,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,YAAY,EAAE,CAAC;gBAClD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;oBAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC"}
|