@bendyline/docblocks-cli 2.7.2 → 2.7.3

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.
@@ -15,11 +15,11 @@ This notice is included in the published npm tarball. Transitive packages instal
15
15
  | Package | Version | License | Source |
16
16
  | --- | --- | --- | --- |
17
17
  | @antfu/install-pkg | 2.1.0 | MIT | https://github.com/antfu-collective/install-pkg |
18
- | @bendyline/squisq | 2.12.0 | MIT | https://github.com/bendyline/squisq |
19
- | @bendyline/squisq-cli | 2.9.1 | MIT | https://github.com/bendyline/squisq |
20
- | @bendyline/squisq-formats | 2.7.1 | MIT | https://github.com/bendyline/squisq |
21
- | @bendyline/squisq-react | 2.12.1 | MIT | https://github.com/bendyline/squisq |
22
- | @bendyline/squisq-video | 2.4.0 | MIT | https://github.com/bendyline/squisq |
18
+ | @bendyline/squisq | 2.12.3 | MIT | https://github.com/bendyline/squisq |
19
+ | @bendyline/squisq-cli | 2.9.5 | MIT | https://github.com/bendyline/squisq |
20
+ | @bendyline/squisq-formats | 2.7.3 | MIT | https://github.com/bendyline/squisq |
21
+ | @bendyline/squisq-react | 2.12.4 | MIT | https://github.com/bendyline/squisq |
22
+ | @bendyline/squisq-video | 2.4.3 | MIT | https://github.com/bendyline/squisq |
23
23
  | @braintree/sanitize-url | 7.1.2 | MIT | https://github.com/braintree/sanitize-url |
24
24
  | @chevrotain/types | 11.1.2 | Apache-2.0 | https://github.com/Chevrotain/chevrotain |
25
25
  | @ffmpeg/ffmpeg | 0.12.15 | MIT | https://github.com/ffmpegwasm/ffmpeg.wasm |
@@ -409,7 +409,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
409
409
  SOFTWARE.
410
410
 
411
411
  ==============================================================================
412
- Components: @bendyline/squisq-cli@2.9.1, @bendyline/squisq-formats@2.7.1, @bendyline/squisq-react@2.12.1, @bendyline/squisq-video@2.4.0, @bendyline/squisq@2.12.0
412
+ Components: @bendyline/squisq-cli@2.9.5, @bendyline/squisq-formats@2.7.3, @bendyline/squisq-react@2.12.4, @bendyline/squisq-video@2.4.3, @bendyline/squisq@2.12.3
413
413
  Source files: node_modules/@bendyline/squisq-cli/LICENSE, node_modules/@bendyline/squisq-formats/LICENSE, node_modules/@bendyline/squisq-react/LICENSE, node_modules/@bendyline/squisq-video/LICENSE, node_modules/@bendyline/squisq/LICENSE
414
414
  ==============================================================================
415
415
  MIT License
@@ -679,7 +679,7 @@ This software contains code derived from the Puppeteer project (https://github.c
679
679
  available under the Apache 2.0 license (https://github.com/puppeteer/puppeteer/blob/master/LICENSE).
680
680
 
681
681
  ==============================================================================
682
- Components: @bendyline/squisq-cli@2.9.1
682
+ Components: @bendyline/squisq-cli@2.9.5
683
683
  Source files: node_modules/@bendyline/squisq-cli/NOTICE.md
684
684
  ==============================================================================
685
685
  # Third-Party Notices for @bendyline/squisq-cli
@@ -699,7 +699,7 @@ Copyright and complete license texts for these dependencies are included in
699
699
  their respective npm distributions and source repositories.
700
700
 
701
701
  ==============================================================================
702
- Components: @bendyline/squisq-cli@2.9.1
702
+ Components: @bendyline/squisq-cli@2.9.5
703
703
  Source files: node_modules/@bendyline/squisq-cli/THIRD_PARTY_LICENSES.txt
704
704
  ==============================================================================
705
705
  THIRD-PARTY LICENSES FOR @bendyline/squisq-cli
@@ -5869,7 +5869,7 @@ The above copyright notice and this permission notice shall be included in all c
5869
5869
  **THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.**
5870
5870
 
5871
5871
  ==============================================================================
5872
- Components: @bendyline/squisq-formats@2.7.1
5872
+ Components: @bendyline/squisq-formats@2.7.3
5873
5873
  Source files: node_modules/@bendyline/squisq-formats/NOTICE.md
5874
5874
  ==============================================================================
5875
5875
  # Third-Party Notices for @bendyline/squisq-formats
@@ -5895,7 +5895,7 @@ texts for these dependencies are included in their respective npm
5895
5895
  distributions and source repositories.
5896
5896
 
5897
5897
  ==============================================================================
5898
- Components: @bendyline/squisq-formats@2.7.1
5898
+ Components: @bendyline/squisq-formats@2.7.3
5899
5899
  Source files: node_modules/@bendyline/squisq-formats/THIRD_PARTY_LICENSES.txt
5900
5900
  ==============================================================================
5901
5901
  THIRD-PARTY LICENSES FOR @bendyline/squisq-formats
@@ -5906,6 +5906,7 @@ repository license, the pinned upstream copy is vendored and identified below.
5906
5906
 
5907
5907
  COMPONENTS
5908
5908
  - @fortawesome/fontawesome-free@7.3.1 ((CC-BY-4.0 AND OFL-1.1 AND MIT)); files: LICENSE.txt
5909
+ - dejavu-fonts-ttf@2.37.3 (SEE LICENSE IN README.md AND LICENSE); files: LICENSE
5909
5910
 
5910
5911
  ==============================================================================
5911
5912
  @fortawesome/fontawesome-free@7.3.1 - LICENSE.txt
@@ -6077,7 +6078,198 @@ Awesome, nor vice versa. **Please do not use brand logos for any purpose except
6077
6078
  to represent the company, product, or service to which they refer.**
6078
6079
 
6079
6080
  ==============================================================================
6080
- Components: @bendyline/squisq-react@2.12.1
6081
+ dejavu-fonts-ttf@2.37.3 - LICENSE
6082
+ ==============================================================================
6083
+ Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
6084
+ Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
6085
+
6086
+
6087
+ Bitstream Vera Fonts Copyright
6088
+ ------------------------------
6089
+
6090
+ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
6091
+ a trademark of Bitstream, Inc.
6092
+
6093
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6094
+ of the fonts accompanying this license ("Fonts") and associated
6095
+ documentation files (the "Font Software"), to reproduce and distribute the
6096
+ Font Software, including without limitation the rights to use, copy, merge,
6097
+ publish, distribute, and/or sell copies of the Font Software, and to permit
6098
+ persons to whom the Font Software is furnished to do so, subject to the
6099
+ following conditions:
6100
+
6101
+ The above copyright and trademark notices and this permission notice shall
6102
+ be included in all copies of one or more of the Font Software typefaces.
6103
+
6104
+ The Font Software may be modified, altered, or added to, and in particular
6105
+ the designs of glyphs or characters in the Fonts may be modified and
6106
+ additional glyphs or characters may be added to the Fonts, only if the fonts
6107
+ are renamed to names not containing either the words "Bitstream" or the word
6108
+ "Vera".
6109
+
6110
+ This License becomes null and void to the extent applicable to Fonts or Font
6111
+ Software that has been modified and is distributed under the "Bitstream
6112
+ Vera" names.
6113
+
6114
+ The Font Software may be sold as part of a larger software package but no
6115
+ copy of one or more of the Font Software typefaces may be sold by itself.
6116
+
6117
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6118
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
6119
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
6120
+ TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
6121
+ FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
6122
+ ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
6123
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
6124
+ THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
6125
+ FONT SOFTWARE.
6126
+
6127
+ Except as contained in this notice, the names of Gnome, the Gnome
6128
+ Foundation, and Bitstream Inc., shall not be used in advertising or
6129
+ otherwise to promote the sale, use or other dealings in this Font Software
6130
+ without prior written authorization from the Gnome Foundation or Bitstream
6131
+ Inc., respectively. For further information, contact: fonts at gnome dot
6132
+ org.
6133
+
6134
+ Arev Fonts Copyright
6135
+ ------------------------------
6136
+
6137
+ Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
6138
+
6139
+ Permission is hereby granted, free of charge, to any person obtaining
6140
+ a copy of the fonts accompanying this license ("Fonts") and
6141
+ associated documentation files (the "Font Software"), to reproduce
6142
+ and distribute the modifications to the Bitstream Vera Font Software,
6143
+ including without limitation the rights to use, copy, merge, publish,
6144
+ distribute, and/or sell copies of the Font Software, and to permit
6145
+ persons to whom the Font Software is furnished to do so, subject to
6146
+ the following conditions:
6147
+
6148
+ The above copyright and trademark notices and this permission notice
6149
+ shall be included in all copies of one or more of the Font Software
6150
+ typefaces.
6151
+
6152
+ The Font Software may be modified, altered, or added to, and in
6153
+ particular the designs of glyphs or characters in the Fonts may be
6154
+ modified and additional glyphs or characters may be added to the
6155
+ Fonts, only if the fonts are renamed to names not containing either
6156
+ the words "Tavmjong Bah" or the word "Arev".
6157
+
6158
+ This License becomes null and void to the extent applicable to Fonts
6159
+ or Font Software that has been modified and is distributed under the
6160
+ "Tavmjong Bah Arev" names.
6161
+
6162
+ The Font Software may be sold as part of a larger software package but
6163
+ no copy of one or more of the Font Software typefaces may be sold by
6164
+ itself.
6165
+
6166
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
6167
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
6168
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
6169
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
6170
+ TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
6171
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
6172
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
6173
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
6174
+ OTHER DEALINGS IN THE FONT SOFTWARE.
6175
+
6176
+ Except as contained in this notice, the name of Tavmjong Bah shall not
6177
+ be used in advertising or otherwise to promote the sale, use or other
6178
+ dealings in this Font Software without prior written authorization
6179
+ from Tavmjong Bah. For further information, contact: tavmjong @ free
6180
+ . fr.
6181
+
6182
+ TeX Gyre DJV Math
6183
+ -----------------
6184
+ Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
6185
+
6186
+ Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski
6187
+ (on behalf of TeX users groups) are in public domain.
6188
+
6189
+ Letters imported from Euler Fraktur from AMSfonts are (c) American
6190
+ Mathematical Society (see below).
6191
+ Bitstream Vera Fonts Copyright
6192
+ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera
6193
+ is a trademark of Bitstream, Inc.
6194
+
6195
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6196
+ of the fonts accompanying this license (“Fonts”) and associated
6197
+ documentation
6198
+ files (the “Font Software”), to reproduce and distribute the Font Software,
6199
+ including without limitation the rights to use, copy, merge, publish,
6200
+ distribute,
6201
+ and/or sell copies of the Font Software, and to permit persons to whom
6202
+ the Font Software is furnished to do so, subject to the following
6203
+ conditions:
6204
+
6205
+ The above copyright and trademark notices and this permission notice
6206
+ shall be
6207
+ included in all copies of one or more of the Font Software typefaces.
6208
+
6209
+ The Font Software may be modified, altered, or added to, and in particular
6210
+ the designs of glyphs or characters in the Fonts may be modified and
6211
+ additional
6212
+ glyphs or characters may be added to the Fonts, only if the fonts are
6213
+ renamed
6214
+ to names not containing either the words “Bitstream” or the word “Vera”.
6215
+
6216
+ This License becomes null and void to the extent applicable to Fonts or
6217
+ Font Software
6218
+ that has been modified and is distributed under the “Bitstream Vera”
6219
+ names.
6220
+
6221
+ The Font Software may be sold as part of a larger software package but
6222
+ no copy
6223
+ of one or more of the Font Software typefaces may be sold by itself.
6224
+
6225
+ THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
6226
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
6227
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
6228
+ TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
6229
+ FOUNDATION
6230
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL,
6231
+ SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN
6232
+ ACTION
6233
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR
6234
+ INABILITY TO USE
6235
+ THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
6236
+ Except as contained in this notice, the names of GNOME, the GNOME
6237
+ Foundation,
6238
+ and Bitstream Inc., shall not be used in advertising or otherwise to promote
6239
+ the sale, use or other dealings in this Font Software without prior written
6240
+ authorization from the GNOME Foundation or Bitstream Inc., respectively.
6241
+ For further information, contact: fonts at gnome dot org.
6242
+
6243
+ AMSFonts (v. 2.2) copyright
6244
+
6245
+ The PostScript Type 1 implementation of the AMSFonts produced by and
6246
+ previously distributed by Blue Sky Research and Y&Y, Inc. are now freely
6247
+ available for general use. This has been accomplished through the
6248
+ cooperation
6249
+ of a consortium of scientific publishers with Blue Sky Research and Y&Y.
6250
+ Members of this consortium include:
6251
+
6252
+ Elsevier Science IBM Corporation Society for Industrial and Applied
6253
+ Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS)
6254
+
6255
+ In order to assure the authenticity of these fonts, copyright will be
6256
+ held by
6257
+ the American Mathematical Society. This is not meant to restrict in any way
6258
+ the legitimate use of the fonts, such as (but not limited to) electronic
6259
+ distribution of documents containing these fonts, inclusion of these fonts
6260
+ into other public domain or commercial font collections or computer
6261
+ applications, use of the outline data to create derivative fonts and/or
6262
+ faces, etc. However, the AMS does require that the AMS copyright notice be
6263
+ removed from any derivative versions of the fonts which have been altered in
6264
+ any way. In addition, to ensure the fidelity of TeX documents using Computer
6265
+ Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces,
6266
+ has requested that any alterations which yield different font metrics be
6267
+ given a different name.
6268
+
6269
+ $Id$
6270
+
6271
+ ==============================================================================
6272
+ Components: @bendyline/squisq-react@2.12.4
6081
6273
  Source files: node_modules/@bendyline/squisq-react/NOTICE.md
6082
6274
  ==============================================================================
6083
6275
  # Third-Party Notices for @bendyline/squisq-react
@@ -6102,7 +6294,7 @@ third-party license texts for the complete standalone bundle graph are shipped
6102
6294
  in THIRD_PARTY_LICENSES.txt.
6103
6295
 
6104
6296
  ==============================================================================
6105
- Components: @bendyline/squisq-react@2.12.1
6297
+ Components: @bendyline/squisq-react@2.12.4
6106
6298
  Source files: node_modules/@bendyline/squisq-react/THIRD_PARTY_LICENSES.txt
6107
6299
  ==============================================================================
6108
6300
  THIRD-PARTY LICENSES FOR @bendyline/squisq-react
@@ -11031,7 +11223,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
11031
11223
  SOFTWARE.
11032
11224
 
11033
11225
  ==============================================================================
11034
- Components: @bendyline/squisq-video@2.4.0
11226
+ Components: @bendyline/squisq-video@2.4.3
11035
11227
  Source files: node_modules/@bendyline/squisq-video/NOTICE.md
11036
11228
  ==============================================================================
11037
11229
  # Third-Party Notices for @bendyline/squisq-video
@@ -11056,7 +11248,7 @@ Copyright and complete license texts for the listed dependencies are included
11056
11248
  in their respective npm distributions and source repositories.
11057
11249
 
11058
11250
  ==============================================================================
11059
- Components: @bendyline/squisq-video@2.4.0
11251
+ Components: @bendyline/squisq-video@2.4.3
11060
11252
  Source files: node_modules/@bendyline/squisq-video/THIRD_PARTY_LICENSES.txt
11061
11253
  ==============================================================================
11062
11254
  THIRD-PARTY LICENSES FOR @bendyline/squisq-video
@@ -11068,7 +11260,7 @@ repository license, the pinned upstream copy is vendored and identified below.
11068
11260
  COMPONENTS
11069
11261
 
11070
11262
  ==============================================================================
11071
- Components: @bendyline/squisq@2.12.0
11263
+ Components: @bendyline/squisq@2.12.3
11072
11264
  Source files: node_modules/@bendyline/squisq/NOTICE.md
11073
11265
  ==============================================================================
11074
11266
  # Third-Party Notices for @bendyline/squisq
@@ -11099,7 +11291,7 @@ third-party license texts for bundled code and data are shipped in
11099
11291
  THIRD_PARTY_LICENSES.txt.
11100
11292
 
11101
11293
  ==============================================================================
11102
- Components: @bendyline/squisq@2.12.0
11294
+ Components: @bendyline/squisq@2.12.3
11103
11295
  Source files: node_modules/@bendyline/squisq/THIRD_PARTY_LICENSES.txt
11104
11296
  ==============================================================================
11105
11297
  THIRD-PARTY LICENSES FOR @bendyline/squisq
package/dist/bin.js CHANGED
@@ -1824,7 +1824,13 @@ async function inspectPreparedDocument(_documents, prepared, maximumBlocks = DEF
1824
1824
  (diagnostic) => mapDocDiagnostic(diagnostic, prepared.sourceFormat)
1825
1825
  ),
1826
1826
  ...missingAltTextDiagnostics(prepared.markdownDoc, prepared.sourceFormat),
1827
- ...await authoringDiagnostics(prepared, "inspect", prepared.sourceFormat, signal)
1827
+ ...await authoringDiagnostics(prepared, "inspect", prepared.sourceFormat, signal),
1828
+ ...await svgPictureDiagnostics(
1829
+ prepared.markdownDoc,
1830
+ "inspect",
1831
+ prepared.sourceFormat,
1832
+ signal
1833
+ )
1828
1834
  ];
1829
1835
  let wordCount = 0;
1830
1836
  for (let index = 0; index < analyzed.length; index += 1) {
@@ -2433,6 +2439,172 @@ function missingAltTextDiagnostics(markdownDoc, format) {
2433
2439
  }
2434
2440
  ];
2435
2441
  }
2442
+ async function svgPictureDiagnostics(markdownDoc, stage, format, signal) {
2443
+ throwIfAborted5(signal);
2444
+ const { SVG_ISLAND_LIMITS, isSvgIslandLang, parseSvgIsland } = await import("@bendyline/squisq/markdown");
2445
+ const diagnostics = [];
2446
+ const untitled = [];
2447
+ let fenceCount = 0;
2448
+ const pending = [markdownDoc];
2449
+ let visited = 0;
2450
+ while (pending.length > 0) {
2451
+ const checkpoint = cancellationCheckpoint(signal, visited);
2452
+ if (checkpoint) await checkpoint;
2453
+ visited += 1;
2454
+ const node = pending.pop();
2455
+ if (!node || typeof node !== "object") continue;
2456
+ const candidate = node;
2457
+ if (candidate.type === "code" && typeof candidate.value === "string" && isSvgIslandLang(typeof candidate.lang === "string" ? candidate.lang : null)) {
2458
+ fenceCount += 1;
2459
+ if (fenceCount > MAX_SVG_FENCES_ANALYZED) continue;
2460
+ const location = sourceLocation(candidate.position);
2461
+ const result = parseSvgIsland(candidate.value);
2462
+ if (!result.ok) {
2463
+ diagnostics.push(
2464
+ svgFenceNotRenderedDiagnostic(result, location, stage, format, SVG_ISLAND_LIMITS)
2465
+ );
2466
+ continue;
2467
+ }
2468
+ if (result.diagnostics.length > 0) {
2469
+ diagnostics.push(svgContentRemovedDiagnostic(result.diagnostics, location, stage, format));
2470
+ }
2471
+ if (result.island.title === void 0) untitled.push(location);
2472
+ continue;
2473
+ }
2474
+ if (candidate.type === "htmlBlock" || candidate.type === "htmlInline") {
2475
+ const svgCount = countSvgElements(candidate.htmlChildren);
2476
+ if (svgCount > 0) {
2477
+ diagnostics.push(
2478
+ rawSvgHtmlDiagnostic(svgCount, sourceLocation(candidate.position), stage, format)
2479
+ );
2480
+ }
2481
+ }
2482
+ if (Array.isArray(candidate.children)) {
2483
+ for (let index = candidate.children.length - 1; index >= 0; index -= 1) {
2484
+ pending.push(candidate.children[index]);
2485
+ }
2486
+ }
2487
+ }
2488
+ if (untitled.length > 0) {
2489
+ diagnostics.push(svgMissingTitleDiagnostic(untitled, stage, format));
2490
+ }
2491
+ if (fenceCount > MAX_SVG_FENCES_ANALYZED) {
2492
+ diagnostics.push({
2493
+ code: "svg-analysis-truncated",
2494
+ severity: "info",
2495
+ stage,
2496
+ format,
2497
+ count: fenceCount - MAX_SVG_FENCES_ANALYZED,
2498
+ message: `SVG diagnostics analyzed the first ${MAX_SVG_FENCES_ANALYZED} of ${fenceCount} \`\`\`svg fences.`,
2499
+ remediation: "Split the document before requesting exhaustive SVG picture diagnostics.",
2500
+ retryable: false,
2501
+ location: null
2502
+ });
2503
+ }
2504
+ return diagnostics;
2505
+ }
2506
+ function svgFenceLabel(location) {
2507
+ return location ? `The \`\`\`svg fence at line ${location.line}` : "A ```svg fence";
2508
+ }
2509
+ function svgFenceNotRenderedDiagnostic(result, location, stage, format, limits) {
2510
+ const sourceKiB = Math.floor(limits.maxSourceBytes / 1024);
2511
+ const remediation = {
2512
+ empty: "Put one complete <svg>\u2026</svg> element in the fence, or delete the fence.",
2513
+ "not-svg": "Keep exactly one <svg> root element in the fence and nothing beside it. To show SVG source as code instead, use an ```xml fence.",
2514
+ "too-large": `Simplify the picture and remove circular <use> references: a fence must stay under ${sourceKiB} KiB of source, ${limits.maxElements} elements, and ${limits.maxExpandedElements} elements after <use> expansion.`,
2515
+ "too-deep": `Flatten nested groups: a fence may nest elements at most ${limits.maxDepth} levels deep.`,
2516
+ parse: "Repair the markup so the fence holds one well-formed <svg> element."
2517
+ }[result.reason];
2518
+ return {
2519
+ code: "svg-fence-not-rendered",
2520
+ severity: "error",
2521
+ stage,
2522
+ format,
2523
+ count: 1,
2524
+ message: `${svgFenceLabel(location)} cannot be drawn (${result.reason}): ${result.message} It shows as code, or as a placeholder on slides, instead of a picture.`,
2525
+ remediation,
2526
+ retryable: false,
2527
+ location
2528
+ };
2529
+ }
2530
+ function svgContentRemovedDiagnostic(removals, location, stage, format) {
2531
+ const listed = removals.slice(0, MAX_LISTED_SVG_REMOVALS).map(({ kind, name, count }) => {
2532
+ const bounded = name.slice(0, MAX_SVG_REMOVAL_NAME_CHARACTERS);
2533
+ return `${kind === "element" ? `<${bounded}>` : bounded} \xD7${count}`;
2534
+ });
2535
+ const omitted = removals.length - listed.length;
2536
+ const occurrences = removals.reduce(
2537
+ (sum, removal) => safeDiagnosticCountSum(sum, removal.count),
2538
+ 0
2539
+ );
2540
+ return {
2541
+ code: "svg-content-removed",
2542
+ severity: "warning",
2543
+ stage,
2544
+ format,
2545
+ count: Math.max(1, occurrences),
2546
+ message: `${svgFenceLabel(location)} draws, but the sanitizer removed ${listed.join(", ")}${omitted > 0 ? `, and ${omitted} more` : ""}.`,
2547
+ remediation: "Delete the removed content or replace it with what renders: inline shapes and text, #id and url(#id) references, base64 PNG, JPEG, GIF, or WebP <image> data, and system fonts. Scripts, event handlers, foreignObject, external links or images, @import, and @font-face never render.",
2548
+ retryable: false,
2549
+ location
2550
+ };
2551
+ }
2552
+ function svgMissingTitleDiagnostic(locations, stage, format) {
2553
+ const lines = locations.filter((location) => location !== null).map(({ line }) => line);
2554
+ const listedLines = lines.length === 0 ? "" : ` (line${lines.length === 1 ? "" : "s"} ${lines.slice(0, MAX_LISTED_SVG_LINES).join(", ")}${lines.length > MAX_LISTED_SVG_LINES ? ", \u2026" : ""})`;
2555
+ return {
2556
+ code: "svg-missing-title",
2557
+ severity: "warning",
2558
+ stage,
2559
+ format,
2560
+ count: locations.length,
2561
+ message: locations.length === 1 ? `One \`\`\`svg fence has no accessible name${listedLines}.` : `${locations.length} \`\`\`svg fences have no accessible name${listedLines}.`,
2562
+ remediation: "Add a concise <title> as the first child of each <svg> root, or an aria-label on the root; it becomes the alternative text.",
2563
+ retryable: false,
2564
+ location: locations.length === 1 ? locations[0] ?? null : null
2565
+ };
2566
+ }
2567
+ function rawSvgHtmlDiagnostic(count, location, stage, format) {
2568
+ return {
2569
+ code: "raw-svg-html-dropped",
2570
+ severity: "warning",
2571
+ stage,
2572
+ format,
2573
+ count,
2574
+ message: `${location ? `Raw <svg> HTML at line ${location.line}` : "Raw <svg> HTML"} is removed by the Markdown sanitizer, so it never shows as a picture.`,
2575
+ remediation: "Wrap the markup in a ```svg fence to draw it as a picture, or in an ```xml fence to show it as code.",
2576
+ retryable: false,
2577
+ location
2578
+ };
2579
+ }
2580
+ function countSvgElements(htmlChildren) {
2581
+ let count = 0;
2582
+ const pending = Array.isArray(htmlChildren) ? [...htmlChildren] : [];
2583
+ while (pending.length > 0) {
2584
+ const node = pending.pop();
2585
+ if (!node || typeof node !== "object") continue;
2586
+ const element = node;
2587
+ if (element.type !== "htmlElement") continue;
2588
+ if (typeof element.tagName === "string" && element.tagName.toLowerCase() === "svg") {
2589
+ count += 1;
2590
+ continue;
2591
+ }
2592
+ if (Array.isArray(element.children)) {
2593
+ for (const child of element.children) pending.push(child);
2594
+ }
2595
+ }
2596
+ return count;
2597
+ }
2598
+ function sourceLocation(position) {
2599
+ if (!position || typeof position !== "object") return null;
2600
+ const start = position.start;
2601
+ if (!start || typeof start !== "object") return null;
2602
+ const { line, column } = start;
2603
+ if (typeof line !== "number" || typeof column !== "number" || !Number.isSafeInteger(line) || !Number.isSafeInteger(column) || line < 1 || column < 1) {
2604
+ return null;
2605
+ }
2606
+ return { kind: "source", line, column };
2607
+ }
2436
2608
  function boundDiagnostics(diagnostics, stage) {
2437
2609
  const aggregated = aggregateDiagnostics(diagnostics);
2438
2610
  if (aggregated.length <= MAX_DIAGNOSTICS) return aggregated;
@@ -2651,7 +2823,7 @@ function change(category, similarity, label, leftCount, rightCount) {
2651
2823
  function clamp01(value) {
2652
2824
  return Math.max(0, Math.min(1, Number(value.toFixed(6))));
2653
2825
  }
2654
- var DEFAULT_MAX_INSPECTION_BLOCKS, MAX_INSPECTION_BLOCKS, MCP_MAX_PUBLISHED_DIAGNOSTICS, MAX_DIAGNOSTICS, FORMAT_PATTERN, CANCELLATION_YIELD_INTERVAL;
2826
+ var DEFAULT_MAX_INSPECTION_BLOCKS, MAX_INSPECTION_BLOCKS, MCP_MAX_PUBLISHED_DIAGNOSTICS, MAX_DIAGNOSTICS, FORMAT_PATTERN, CANCELLATION_YIELD_INTERVAL, MAX_SVG_FENCES_ANALYZED, MAX_LISTED_SVG_REMOVALS, MAX_LISTED_SVG_LINES, MAX_SVG_REMOVAL_NAME_CHARACTERS;
2655
2827
  var init_intelligence = __esm({
2656
2828
  "src/mcp/intelligence.ts"() {
2657
2829
  "use strict";
@@ -2664,6 +2836,10 @@ var init_intelligence = __esm({
2664
2836
  MAX_DIAGNOSTICS = MCP_MAX_PUBLISHED_DIAGNOSTICS;
2665
2837
  FORMAT_PATTERN = /^[a-z0-9][a-z0-9.+_-]{0,63}$/u;
2666
2838
  CANCELLATION_YIELD_INTERVAL = 256;
2839
+ MAX_SVG_FENCES_ANALYZED = 1e3;
2840
+ MAX_LISTED_SVG_REMOVALS = 12;
2841
+ MAX_LISTED_SVG_LINES = 10;
2842
+ MAX_SVG_REMOVAL_NAME_CHARACTERS = 64;
2667
2843
  }
2668
2844
  });
2669
2845
 
@@ -4211,6 +4387,86 @@ var init_preview_content = __esm({
4211
4387
  }
4212
4388
  });
4213
4389
 
4390
+ // src/mcp/picture-guidance.ts
4391
+ function pictureExportGuidance(targetFormat) {
4392
+ switch (targetFormat) {
4393
+ case "pptx":
4394
+ return "PPTX exports Mermaid as source text; draw flows as ```svg. Other pictures draw.";
4395
+ case "docx":
4396
+ case "epub":
4397
+ return "In DOCX and EPUB only ```svg becomes a picture; Mermaid, timeline and tree fences export as source text, so draw pictures that must survive as ```svg.";
4398
+ case "pdf":
4399
+ return 'Semantic PDF prints every picture fence as source text. Use fidelity "rendered-fidelity" only when pictures matter more than selectable text; Mermaid still does not draw there.';
4400
+ default:
4401
+ return null;
4402
+ }
4403
+ }
4404
+ function documentPictureHint(target) {
4405
+ return target === "docx" ? `For pictures use ${SVG_FENCE_SUMMARY}; DOCX keeps Mermaid, timeline and tree fences as source text, and raw <svg> HTML is silently dropped.` : `For pictures use ${SVG_FENCE_SUMMARY}; raw <svg> HTML is silently dropped. Semantic PDF prints picture fences as source text, so pass fidelity "rendered-fidelity" when pictures matter more than selectable text.`;
4406
+ }
4407
+ async function authoringGuidePictures() {
4408
+ const [{ SVG_ISLAND_LIMITS }, { TABLE_FED_TEMPLATES, getAvailableTemplates }] = await Promise.all(
4409
+ [import("@bendyline/squisq/markdown"), import("@bendyline/squisq/doc")]
4410
+ );
4411
+ const available = new Set(getAvailableTemplates());
4412
+ const chartTemplates = [...TABLE_FED_TEMPLATES].filter(
4413
+ (id) => id !== "dataTable" && available.has(id)
4414
+ );
4415
+ const sourceKiB = Math.floor(SVG_ISLAND_LIMITS.maxSourceBytes / 1024);
4416
+ return {
4417
+ choose: [
4418
+ "```mermaid for flows, sequences, state machines, hierarchies, and gantt schedules.",
4419
+ "```timeline for dated events: one rail per track, for example `\u25CF 2020 Founded \u2500\u2500\u2500\u25CF 2022 Launch \u2500\u2500\u2500\u25BA`.",
4420
+ "```tree for outlines and file trees drawn with \u251C\u2500\u2500 and \u2514\u2500\u2500 branches.",
4421
+ "A Markdown table under a heading annotated with a chart template for numbers, for example `## Revenue {[barChart]}`. Every chart template reads the first table in its block.",
4422
+ "```svg for bespoke illustrations, icons, annotated figures, and anything the formats above cannot draw.",
4423
+ "A sidecar `![alt](assets/name.svg)` image only for large or reused artwork. Pass it as a bundle asset, or stage it with create_document_bundle, so it travels with the document. Sidecar SVG is sanitized like a fence but keeps its own colors.",
4424
+ "The diagram, drawing, and layout container templates build pictures from child headings; use describe_template for their inputs."
4425
+ ],
4426
+ chartTemplates,
4427
+ svgRules: [
4428
+ 'Exactly one <svg> root with a viewBox, for example viewBox="0 0 640 360", and nothing beside it.',
4429
+ "A <title> as the first child: it becomes the alt text. A root aria-label also works.",
4430
+ 'currentColor for strokes and text, and fill="none" or currentColor with fill-opacity, instead of hard-coded black or white. Fences then follow the theme text color on screen, in slides, DOCX, and EPUB. Accent colors are fine, but nothing inside the picture follows dark mode or CSS variables.',
4431
+ "No script, foreignObject, on* event handlers, external href or xlink:href links and images, url() other than url(#id), @import, or @font-face web fonts: the sanitizer removes them. <image> accepts only base64 PNG, JPEG, GIF, or WebP data URIs.",
4432
+ 'font-family="sans-serif": pictures render with system fonts, never the page or theme fonts. Keep labels short and keep all text inside the viewBox.',
4433
+ `Stay well under the limits: ${sourceKiB} KiB of source, ${SVG_ISLAND_LIMITS.maxElements} elements, nesting depth ${SVG_ISLAND_LIMITS.maxDepth}, and ${SVG_ISLAND_LIMITS.maxExpandedElements} elements after <use> expansion. A fence past any limit shows as code.`
4434
+ ],
4435
+ svgExample: SVG_ISLAND_EXAMPLE,
4436
+ never: "Never write raw <svg> HTML in Markdown: the sanitizer silently drops it with its content. Use a ```svg fence to draw it, or an ```xml fence to show SVG source as code.",
4437
+ exports: [
4438
+ "convert_document embeds ```svg as a vector picture in DOCX, PPTX, EPUB, and HTML.",
4439
+ "PPTX also draws timeline, tree, and chart pictures as native shapes.",
4440
+ "Mermaid exports as source text in DOCX, PPTX, EPUB, and PDF; timeline and tree fences do too in DOCX, EPUB, and PDF. Draw a picture that must survive those exports as ```svg.",
4441
+ "Semantic PDF prints every picture fence as source text. Rendered-fidelity PDF draws ```svg, timeline, tree, and chart pictures, but not Mermaid."
4442
+ ],
4443
+ check: 'inspect_document reports a ```svg fence that will not draw (svg-fence-not-rendered), content the sanitizer removed (svg-content-removed), a missing <title> (svg-missing-title), and raw <svg> HTML (raw-svg-html-dropped). preview_document draws ```svg, timeline, tree, and chart pictures, or a dashed "Couldn\'t render this SVG" placeholder for a broken fence; Mermaid shows a placeholder there.'
4444
+ };
4445
+ }
4446
+ var PICTURE_SELECTION_GUIDANCE, PICTURE_INSTRUCTION_GUIDANCE, SVG_FENCE_SUMMARY, PRESENTATION_PICTURE_HINT, SVG_ISLAND_EXAMPLE;
4447
+ var init_picture_guidance = __esm({
4448
+ "src/mcp/picture-guidance.ts"() {
4449
+ "use strict";
4450
+ PICTURE_SELECTION_GUIDANCE = 'Pictures: ```mermaid for flows, sequences, states, hierarchies, gantt; ```timeline for dated events; ```tree for outlines; a table under `## Sales {[barChart]}` for numbers; ```svg for bespoke illustrations, icons, annotated figures. In ```svg: one <svg> root with a viewBox and <title>, currentColor strokes and text, font-family="sans-serif"; no script, foreignObject, event handlers, external links or web fonts. Never raw <svg> HTML (silently dropped); use ```xml to show SVG source. inspect_document flags broken ```svg.';
4451
+ PICTURE_INSTRUCTION_GUIDANCE = "Draw pictures with fences, never raw <svg> HTML, which is silently dropped: ```svg for bespoke art, ```mermaid, ```timeline, ```tree, or a chart template over a table. get_authoring_context gives target-specific picture rules.";
4452
+ SVG_FENCE_SUMMARY = "a ```svg fence (one <svg> root with a viewBox, a <title>, and currentColor strokes and text)";
4453
+ PRESENTATION_PICTURE_HINT = `For pictures use ${SVG_FENCE_SUMMARY}, \`\`\`timeline, \`\`\`tree, or a chart template over a table; Mermaid exports to PPTX as source text, and raw <svg> HTML is silently dropped.`;
4454
+ SVG_ISLAND_EXAMPLE = [
4455
+ "```svg",
4456
+ '<svg viewBox="0 0 320 120" xmlns="http://www.w3.org/2000/svg">',
4457
+ " <title>A request flows from the client to the server</title>",
4458
+ ' <rect x="10" y="30" width="110" height="60" rx="8" fill="currentColor" fill-opacity="0.08" stroke="currentColor" stroke-width="2"/>',
4459
+ ' <text x="65" y="66" font-family="sans-serif" font-size="16" text-anchor="middle" fill="currentColor">Client</text>',
4460
+ ' <path d="M124 60 H188" fill="none" stroke="currentColor" stroke-width="2"/>',
4461
+ ' <path d="M188 52 L200 60 L188 68 Z" fill="currentColor"/>',
4462
+ ' <rect x="200" y="30" width="110" height="60" rx="8" fill="none" stroke="currentColor" stroke-width="2"/>',
4463
+ ' <text x="255" y="66" font-family="sans-serif" font-size="16" text-anchor="middle" fill="currentColor">Server</text>',
4464
+ "</svg>",
4465
+ "```"
4466
+ ].join("\n");
4467
+ }
4468
+ });
4469
+
4214
4470
  // src/mcp/style-guidance.ts
4215
4471
  var STYLE_SELECTION_GUIDANCE, TRANSFORM_SELECTION_GUIDANCE, MOTION_SELECTION_GUIDANCE;
4216
4472
  var init_style_guidance = __esm({
@@ -4596,13 +4852,14 @@ function registerAuthoringGuideResource(server) {
4596
4852
  annotations: { audience: ["assistant"], priority: 1 }
4597
4853
  },
4598
4854
  async () => {
4599
- const [templates, schemaModule, transformModule] = await Promise.all([
4855
+ const [templates, schemaModule, transformModule, pictures] = await Promise.all([
4600
4856
  authoringTemplateCatalog(),
4601
4857
  import("@bendyline/squisq/schemas"),
4602
- import("@bendyline/squisq/transform")
4858
+ import("@bendyline/squisq/transform"),
4859
+ authoringGuidePictures()
4603
4860
  ]);
4604
4861
  const guide = {
4605
- version: 10,
4862
+ version: 11,
4606
4863
  workflow: [
4607
4864
  "plain text and ordinary Markdown can be passed directly to convert_document without a preflight or template annotations",
4608
4865
  "for deliberate PPTX slide boundaries, use one level-one Markdown heading per slide; headings alone create the boundaries, so do not add --- between them unless a visible horizontal rule is intended",
@@ -4610,6 +4867,7 @@ function registerAuthoringGuideResource(server) {
4610
4867
  STYLE_SELECTION_GUIDANCE,
4611
4868
  TRANSFORM_SELECTION_GUIDANCE,
4612
4869
  MOTION_SELECTION_GUIDANCE,
4870
+ "for pictures, choose a format from pictures.choose, follow pictures.svgRules for ```svg fences, and check pictures.exports for the target; never write raw <svg> HTML, which is silently dropped",
4613
4871
  "use a bundle source when assets must travel with the document, or create_document_bundle when one draft will be reused by two or more inspect, preview, or convert calls",
4614
4872
  "use inspect_document or preview_document only when the user asks for document analysis or visual evidence",
4615
4873
  "convert_document creates immutable artifacts; save_artifact only when a durable file is required"
@@ -4617,6 +4875,7 @@ function registerAuthoringGuideResource(server) {
4617
4875
  markdownAnnotation: '# Heading {[templateId key="value"]}',
4618
4876
  standaloneAnnotation: '{[templateId key="value"]}',
4619
4877
  standaloneWarning: "A standalone annotation creates an additional heading-less block. Bind the annotation to a heading unless that extra block is deliberate.",
4878
+ pictures,
4620
4879
  fidelity: {
4621
4880
  semantic: "Prioritize meaning and portability.",
4622
4881
  "editable-native": "Produce editable native structures with target-specific diagnostics.",
@@ -4682,6 +4941,7 @@ function registerTemplateTools(server, context) {
4682
4941
  import("@bendyline/squisq/transform")
4683
4942
  ]);
4684
4943
  const annotationHandling = normalizedTarget ? await targetTemplateAnnotationHandling(normalizedTarget) : null;
4944
+ const pictureExport = pictureExportGuidance(normalizedTarget);
4685
4945
  const candidateTemplates = annotationHandling === "ignored" ? fullTemplates.filter((template) => template.safeForContentFirst) : fullTemplates;
4686
4946
  let recommendations = [];
4687
4947
  let totalBlocks = null;
@@ -4734,6 +4994,8 @@ function registerTemplateTools(server, context) {
4734
4994
  ...normalizedTarget === "pptx" || normalizedTarget === "html" || normalizedTarget === "htmlzip" || normalizedTarget === "mp4" || normalizedTarget === "gif" ? [MOTION_SELECTION_GUIDANCE] : [],
4735
4995
  "convert_document chooses compatible templates automatically. Annotations on headings are optional layout hints that take precedence; use the returned exact starter examples when useful.",
4736
4996
  annotationHandling === "ignored" ? "This target flattens template annotations to semantic content, so annotations are unnecessary for the exported file." : "Explicit valid annotations override automatic layout choices; invalid or unnecessary annotations should be omitted rather than repaired through a separate workflow.",
4997
+ PICTURE_SELECTION_GUIDANCE,
4998
+ ...pictureExport ? [pictureExport] : [],
4737
4999
  "Pass Markdown directly to convert_document. Use a bundle source for assets, or create_document_bundle only when one draft will be reused by two or more inspect, preview, or convert calls.",
4738
5000
  "Use inspect_document or preview_document only when the user asks for document analysis or visual evidence. Save only final durable artifacts with save_artifact."
4739
5001
  ],
@@ -5384,6 +5646,7 @@ var init_agentic_tools = __esm({
5384
5646
  init_progress();
5385
5647
  init_preview_content();
5386
5648
  init_output_bounds();
5649
+ init_picture_guidance();
5387
5650
  init_style_guidance();
5388
5651
  READ_ONLY = {
5389
5652
  readOnlyHint: true,
@@ -5834,7 +6097,7 @@ function presentationPrompt(topic, style, theme, template) {
5834
6097
 
5835
6098
  1. For durable output, call list_roots before drafting. If no returned root is write-enabled, stop and explain that the MCP server must restart with --allow-write; do not use a shell or CLI converter.
5836
6099
  2. ${selectionHint} ${MOTION_SELECTION_GUIDANCE} Call get_authoring_context only when the linked theme and Summarize descriptions would materially improve the choice.
5837
- 3. Author plain Markdown. One level-one heading (\`#\`) creates each deliberate slide boundary; headings alone create the boundaries, so do not add \`---\` between them unless a visible horizontal rule is intended. Unstructured text is also accepted. Squisq annotations are optional layout hints.${templateHint}
6100
+ 3. Author plain Markdown. One level-one heading (\`#\`) creates each deliberate slide boundary; headings alone create the boundaries, so do not add \`---\` between them unless a visible horizontal rule is intended. Unstructured text is also accepted. Squisq annotations are optional layout hints.${templateHint} ${PRESENTATION_PICTURE_HINT}
5838
6101
  4. Pass the Markdown directly to convert_document with a pptx target${themeHint}${styleHint}. Use a bundle source only when assets must travel with the document. No validation, inspection, or preview is required.
5839
6102
  5. Use inspect_document or preview_document only when the user explicitly asks for document analysis or visual evidence.
5840
6103
  6. Call save_artifact only when a durable file is required.`;
@@ -5870,7 +6133,7 @@ function documentPrompt(topic, format, theme, template) {
5870
6133
  return `Create a document about: ${topic}
5871
6134
 
5872
6135
  1. For durable output, call list_roots before drafting and stop if no root is write-enabled; do not use a shell or CLI converter.
5873
- 2. Author plain Markdown. Squisq annotations are optional layout hints.${templateHint} Call get_authoring_context only when exact annotation examples or theme details would help.
6136
+ 2. Author plain Markdown. Squisq annotations are optional layout hints.${templateHint} ${documentPictureHint(target)} Call get_authoring_context only when exact annotation examples or theme details would help.
5874
6137
  3. Pass the Markdown directly to convert_document with a ${target} target${themeHint}. Use a bundle source only when assets must travel with the document. No validation, inspection, or preview is required.
5875
6138
  4. Use inspect_document or preview_document only when the user explicitly asks for document analysis or visual evidence.
5876
6139
  5. Call save_artifact only when a durable file is required.`;
@@ -5884,6 +6147,7 @@ var init_prompts = __esm({
5884
6147
  "src/mcp/prompts.ts"() {
5885
6148
  "use strict";
5886
6149
  init_conversion_service();
6150
+ init_picture_guidance();
5887
6151
  init_style_guidance();
5888
6152
  MAX_ID_CHARACTERS = 256;
5889
6153
  MAX_TOPIC_CHARACTERS = 1e4;
@@ -5924,6 +6188,7 @@ function createMcpServer(options = {}) {
5924
6188
  STYLE_SELECTION_GUIDANCE,
5925
6189
  TRANSFORM_SELECTION_GUIDANCE,
5926
6190
  MOTION_SELECTION_GUIDANCE,
6191
+ PICTURE_INSTRUCTION_GUIDANCE,
5927
6192
  "Use a bundle source when assets must travel with the document. Use create_document_bundle only when one complete draft will be reused by two or more inspect, preview, or convert calls.",
5928
6193
  "Use inspect_document or preview_document only when the user asks for document analysis or visual evidence.",
5929
6194
  "convert_document returns immutable artifacts and diagnostics. Save only final durable output with save_artifact; never invent root ids or switch conversion to a shell or CLI."
@@ -5994,6 +6259,7 @@ var init_server = __esm({
5994
6259
  init_artifact_store();
5995
6260
  init_authority();
5996
6261
  init_discovery_tools();
6262
+ init_picture_guidance();
5997
6263
  init_prompts();
5998
6264
  init_style_guidance();
5999
6265
  DEFAULT_MAX_CONCURRENT_OPERATIONS = 2;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bendyline/docblocks-cli",
3
- "version": "2.7.2",
3
+ "version": "2.7.3",
4
4
  "description": "Build, preview, convert, render, inspect, and automate documents",
5
5
  "license": "MIT",
6
6
  "author": "Bendyline",
@@ -47,12 +47,12 @@
47
47
  "typecheck": "tsc --noEmit"
48
48
  },
49
49
  "dependencies": {
50
- "@bendyline/docblocks": "2.7.2",
51
- "@bendyline/squisq": "2.12.0",
52
- "@bendyline/squisq-cli": "2.9.1",
53
- "@bendyline/squisq-formats": "2.7.1",
54
- "@bendyline/squisq-react": "2.12.1",
55
- "@bendyline/squisq-video": "2.4.0",
50
+ "@bendyline/docblocks": "2.7.3",
51
+ "@bendyline/squisq": "2.12.3",
52
+ "@bendyline/squisq-cli": "2.9.5",
53
+ "@bendyline/squisq-formats": "2.7.3",
54
+ "@bendyline/squisq-react": "2.12.4",
55
+ "@bendyline/squisq-video": "2.4.3",
56
56
  "@modelcontextprotocol/sdk": "1.32.1",
57
57
  "commander": "13.1.0",
58
58
  "jszip": "3.10.1",