@bendyline/docblocks-cli 2.6.0 → 2.6.2

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.
@@ -6,7 +6,7 @@ Run `npm run generate:notices` from the repository root.
6
6
  Resolved runtime and optional dependency closure declared by packages/cli/package.json.
7
7
 
8
8
  Inventory source: package-lock.json.
9
- Components: 349.
9
+ Components: 350.
10
10
 
11
11
  This notice is included in the published npm tarball. Transitive packages installed by npm also retain their package-local license files.
12
12
 
@@ -15,18 +15,18 @@ 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 | 1.1.0 | MIT | https://github.com/antfu/install-pkg |
18
- | @bendyline/squisq | 2.11.1 | MIT | https://github.com/bendyline/squisq |
19
- | @bendyline/squisq-cli | 2.8.1 | MIT | https://github.com/bendyline/squisq |
20
- | @bendyline/squisq-formats | 2.6.1 | MIT | https://github.com/bendyline/squisq |
21
- | @bendyline/squisq-react | 2.11.1 | MIT | https://github.com/bendyline/squisq |
22
- | @bendyline/squisq-video | 2.3.4 | MIT | https://github.com/bendyline/squisq |
18
+ | @bendyline/squisq | 2.11.4 | MIT | https://github.com/bendyline/squisq |
19
+ | @bendyline/squisq-cli | 2.8.4 | MIT | https://github.com/bendyline/squisq |
20
+ | @bendyline/squisq-formats | 2.6.4 | MIT | https://github.com/bendyline/squisq |
21
+ | @bendyline/squisq-react | 2.11.4 | MIT | https://github.com/bendyline/squisq |
22
+ | @bendyline/squisq-video | 2.3.7 | 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 |
26
26
  | @ffmpeg/types | 0.12.4 | MIT | https://github.com/ffmpegwasm/ffmpeg.wasm |
27
27
  | @ffmpeg/util | 0.12.2 | MIT | https://github.com/ffmpegwasm/ffmpeg.wasm |
28
28
  | @fortawesome/fontawesome-free | 7.2.0 | (CC-BY-4.0 AND OFL-1.1 AND MIT) | https://github.com/FortAwesome/Font-Awesome |
29
- | @hono/node-server | 1.19.14 | MIT | https://github.com/honojs/node-server |
29
+ | @hono/node-server | 1.19.17 | MIT | https://github.com/honojs/node-server |
30
30
  | @iconify/types | 2.0.0 | MIT | https://github.com/iconify/iconify |
31
31
  | @iconify/utils | 3.1.4 | MIT | https://github.com/iconify/iconify |
32
32
  | @mermaid-js/parser | 1.2.0 | MIT | https://github.com/mermaid-js/mermaid |
@@ -92,7 +92,7 @@ This notice is included in the published npm tarball. Transitive packages instal
92
92
  | ajv | 8.20.0 | MIT | https://github.com/ajv-validator/ajv |
93
93
  | ajv-formats | 3.0.1 | MIT | https://github.com/ajv-validator/ajv-formats |
94
94
  | bail | 2.0.2 | MIT | https://github.com/wooorm/bail |
95
- | body-parser | 2.2.2 | MIT | https://github.com/expressjs/body-parser |
95
+ | body-parser | 2.3.0 | MIT | https://github.com/expressjs/body-parser |
96
96
  | bytes | 3.1.2 | MIT | https://github.com/visionmedia/bytes.js |
97
97
  | call-bind-apply-helpers | 1.0.2 | MIT | https://github.com/ljharb/call-bind-apply-helpers |
98
98
  | call-bound | 1.0.4 | MIT | https://github.com/ljharb/call-bound |
@@ -108,6 +108,7 @@ This notice is included in the published npm tarball. Transitive packages instal
108
108
  | commander | 8.3.0 | MIT | https://github.com/tj/commander.js |
109
109
  | content-disposition | 1.0.1 | MIT | https://github.com/jshttp/content-disposition |
110
110
  | content-type | 1.0.5 | MIT | https://github.com/jshttp/content-type |
111
+ | content-type | 2.1.0 | MIT | https://github.com/jshttp/content-type |
111
112
  | cookie | 0.7.2 | MIT | https://github.com/jshttp/cookie |
112
113
  | cookie-signature | 1.2.2 | MIT | https://github.com/visionmedia/node-cookie-signature |
113
114
  | core-util-is | 1.0.2 | MIT | https://github.com/isaacs/core-util-is |
@@ -179,7 +180,7 @@ This notice is included in the published npm tarball. Transitive packages instal
179
180
  | express-rate-limit | 8.5.2 | MIT | https://github.com/express-rate-limit/express-rate-limit |
180
181
  | extend | 3.0.2 | MIT | https://github.com/justmoon/node-extend |
181
182
  | fast-deep-equal | 3.1.3 | MIT | https://github.com/epoberezkin/fast-deep-equal |
182
- | fast-uri | 3.1.2 | BSD-3-Clause | https://github.com/fastify/fast-uri |
183
+ | fast-uri | 3.1.6 | BSD-3-Clause | https://github.com/fastify/fast-uri |
183
184
  | fault | 2.0.1 | MIT | https://github.com/wooorm/fault |
184
185
  | finalhandler | 2.1.1 | MIT | https://github.com/pillarjs/finalhandler |
185
186
  | format | 0.2.2 | MIT | https://github.com/samsonjs/format |
@@ -197,7 +198,7 @@ This notice is included in the published npm tarball. Transitive packages instal
197
198
  | hast-util-from-parse5 | 8.0.3 | MIT | https://github.com/syntax-tree/hast-util-from-parse5 |
198
199
  | hast-util-parse-selector | 4.0.0 | MIT | https://github.com/syntax-tree/hast-util-parse-selector |
199
200
  | hastscript | 9.0.1 | MIT | https://github.com/syntax-tree/hastscript |
200
- | hono | 4.12.27 | MIT | https://github.com/honojs/hono |
201
+ | hono | 4.13.5 | MIT | https://github.com/honojs/hono |
201
202
  | http-errors | 2.0.1 | MIT | https://github.com/jshttp/http-errors |
202
203
  | iconv-lite | 0.6.3 | MIT | https://github.com/ashtuchkin/iconv-lite |
203
204
  | iconv-lite | 0.7.2 | MIT | https://github.com/pillarjs/iconv-lite |
@@ -206,7 +207,7 @@ This notice is included in the published npm tarball. Transitive packages instal
206
207
  | inherits | 2.0.4 | ISC | https://github.com/isaacs/inherits |
207
208
  | internmap | 1.0.1 | ISC | https://github.com/mbostock/internmap |
208
209
  | internmap | 2.0.3 | ISC | https://github.com/mbostock/internmap |
209
- | ip-address | 10.2.0 | MIT | https://github.com/beaugunderson/ip-address |
210
+ | ip-address | 10.7.0 | MIT | https://github.com/beaugunderson/ip-address |
210
211
  | ipaddr.js | 1.9.1 | MIT | https://github.com/whitequark/ipaddr.js |
211
212
  | is-alphabetical | 2.0.1 | MIT | https://github.com/wooorm/is-alphabetical |
212
213
  | is-alphanumerical | 2.0.1 | MIT | https://github.com/wooorm/is-alphanumerical |
@@ -306,7 +307,7 @@ This notice is included in the published npm tarball. Transitive packages instal
306
307
  | process-nextick-args | 2.0.1 | MIT | https://github.com/calvinmetcalf/process-nextick-args |
307
308
  | property-information | 7.1.0 | MIT | https://github.com/wooorm/property-information |
308
309
  | proxy-addr | 2.0.7 | MIT | https://github.com/jshttp/proxy-addr |
309
- | qs | 6.15.3 | BSD-3-Clause | https://github.com/ljharb/qs |
310
+ | qs | 6.16.0 | BSD-3-Clause | https://github.com/ljharb/qs |
310
311
  | range-parser | 1.2.1 | MIT | https://github.com/jshttp/range-parser |
311
312
  | raw-body | 3.0.2 | MIT | https://github.com/stream-utils/raw-body |
312
313
  | readable-stream | 2.3.8 | MIT | https://github.com/nodejs/readable-stream |
@@ -343,7 +344,7 @@ This notice is included in the published npm tarball. Transitive packages instal
343
344
  | trough | 2.2.0 | MIT | https://github.com/wooorm/trough |
344
345
  | ts-dedent | 2.3.0 | MIT | https://github.com/tamino-martinius/node-ts-dedent |
345
346
  | tslib | 1.14.1 | 0BSD | https://github.com/Microsoft/tslib |
346
- | type-is | 2.0.1 | MIT | https://github.com/jshttp/type-is |
347
+ | type-is | 2.1.0 | MIT | https://github.com/jshttp/type-is |
347
348
  | unified | 11.0.5 | MIT | https://github.com/unifiedjs/unified |
348
349
  | unist-util-is | 6.0.1 | MIT | https://github.com/syntax-tree/unist-util-is |
349
350
  | unist-util-remove-position | 5.0.0 | MIT | https://github.com/syntax-tree/unist-util-remove-position |
@@ -403,7 +404,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
403
404
  SOFTWARE.
404
405
 
405
406
  ==============================================================================
406
- Components: @bendyline/squisq-cli@2.8.1, @bendyline/squisq-formats@2.6.1, @bendyline/squisq-react@2.11.1, @bendyline/squisq-video@2.3.4, @bendyline/squisq@2.11.1
407
+ Components: @bendyline/squisq-cli@2.8.4, @bendyline/squisq-formats@2.6.4, @bendyline/squisq-react@2.11.4, @bendyline/squisq-video@2.3.7, @bendyline/squisq@2.11.4
407
408
  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
408
409
  ==============================================================================
409
410
  MIT License
@@ -673,7 +674,7 @@ This software contains code derived from the Puppeteer project (https://github.c
673
674
  available under the Apache 2.0 license (https://github.com/puppeteer/puppeteer/blob/master/LICENSE).
674
675
 
675
676
  ==============================================================================
676
- Components: @bendyline/squisq-cli@2.8.1
677
+ Components: @bendyline/squisq-cli@2.8.4
677
678
  Source files: node_modules/@bendyline/squisq-cli/NOTICE.md
678
679
  ==============================================================================
679
680
  # Third-Party Notices for @bendyline/squisq-cli
@@ -693,7 +694,7 @@ Copyright and complete license texts for these dependencies are included in
693
694
  their respective npm distributions and source repositories.
694
695
 
695
696
  ==============================================================================
696
- Components: @bendyline/squisq-cli@2.8.1
697
+ Components: @bendyline/squisq-cli@2.8.4
697
698
  Source files: node_modules/@bendyline/squisq-cli/THIRD_PARTY_LICENSES.txt
698
699
  ==============================================================================
699
700
  THIRD-PARTY LICENSES FOR @bendyline/squisq-cli
@@ -5181,7 +5182,7 @@ The above copyright notice and this permission notice shall be included in all c
5181
5182
  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.
5182
5183
 
5183
5184
  ==============================================================================
5184
- Components: @bendyline/squisq-formats@2.6.1
5185
+ Components: @bendyline/squisq-formats@2.6.4
5185
5186
  Source files: node_modules/@bendyline/squisq-formats/NOTICE.md
5186
5187
  ==============================================================================
5187
5188
  # Third-Party Notices for @bendyline/squisq-formats
@@ -5207,7 +5208,7 @@ texts for these dependencies are included in their respective npm
5207
5208
  distributions and source repositories.
5208
5209
 
5209
5210
  ==============================================================================
5210
- Components: @bendyline/squisq-formats@2.6.1
5211
+ Components: @bendyline/squisq-formats@2.6.4
5211
5212
  Source files: node_modules/@bendyline/squisq-formats/THIRD_PARTY_LICENSES.txt
5212
5213
  ==============================================================================
5213
5214
  THIRD-PARTY LICENSES FOR @bendyline/squisq-formats
@@ -5389,7 +5390,7 @@ Awesome, nor vice versa. **Please do not use brand logos for any purpose except
5389
5390
  to represent the company, product, or service to which they refer.**
5390
5391
 
5391
5392
  ==============================================================================
5392
- Components: @bendyline/squisq-react@2.11.1
5393
+ Components: @bendyline/squisq-react@2.11.4
5393
5394
  Source files: node_modules/@bendyline/squisq-react/NOTICE.md
5394
5395
  ==============================================================================
5395
5396
  # Third-Party Notices for @bendyline/squisq-react
@@ -5414,7 +5415,7 @@ third-party license texts for the complete standalone bundle graph are shipped
5414
5415
  in THIRD_PARTY_LICENSES.txt.
5415
5416
 
5416
5417
  ==============================================================================
5417
- Components: @bendyline/squisq-react@2.11.1
5418
+ Components: @bendyline/squisq-react@2.11.4
5418
5419
  Source files: node_modules/@bendyline/squisq-react/THIRD_PARTY_LICENSES.txt
5419
5420
  ==============================================================================
5420
5421
  THIRD-PARTY LICENSES FOR @bendyline/squisq-react
@@ -9951,7 +9952,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
9951
9952
  SOFTWARE.
9952
9953
 
9953
9954
  ==============================================================================
9954
- Components: @bendyline/squisq-video@2.3.4
9955
+ Components: @bendyline/squisq-video@2.3.7
9955
9956
  Source files: node_modules/@bendyline/squisq-video/NOTICE.md
9956
9957
  ==============================================================================
9957
9958
  # Third-Party Notices for @bendyline/squisq-video
@@ -9976,7 +9977,7 @@ Copyright and complete license texts for the listed dependencies are included
9976
9977
  in their respective npm distributions and source repositories.
9977
9978
 
9978
9979
  ==============================================================================
9979
- Components: @bendyline/squisq-video@2.3.4
9980
+ Components: @bendyline/squisq-video@2.3.7
9980
9981
  Source files: node_modules/@bendyline/squisq-video/THIRD_PARTY_LICENSES.txt
9981
9982
  ==============================================================================
9982
9983
  THIRD-PARTY LICENSES FOR @bendyline/squisq-video
@@ -9988,7 +9989,7 @@ repository license, the pinned upstream copy is vendored and identified below.
9988
9989
  COMPONENTS
9989
9990
 
9990
9991
  ==============================================================================
9991
- Components: @bendyline/squisq@2.11.1
9992
+ Components: @bendyline/squisq@2.11.4
9992
9993
  Source files: node_modules/@bendyline/squisq/NOTICE.md
9993
9994
  ==============================================================================
9994
9995
  # Third-Party Notices for @bendyline/squisq
@@ -10019,7 +10020,7 @@ third-party license texts for bundled code and data are shipped in
10019
10020
  THIRD_PARTY_LICENSES.txt.
10020
10021
 
10021
10022
  ==============================================================================
10022
- Components: @bendyline/squisq@2.11.1
10023
+ Components: @bendyline/squisq@2.11.4
10023
10024
  Source files: node_modules/@bendyline/squisq/THIRD_PARTY_LICENSES.txt
10024
10025
  ==============================================================================
10025
10026
  THIRD-PARTY LICENSES FOR @bendyline/squisq
@@ -10604,7 +10605,7 @@ Awesome, nor vice versa. **Please do not use brand logos for any purpose except
10604
10605
  to represent the company, product, or service to which they refer.**
10605
10606
 
10606
10607
  ==============================================================================
10607
- Components: @hono/node-server@1.19.14
10608
+ Components: @hono/node-server@1.19.17
10608
10609
  Source files: node_modules/@hono/node-server/LICENSE
10609
10610
  ==============================================================================
10610
10611
  MIT License
@@ -10972,7 +10973,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
10972
10973
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10973
10974
 
10974
10975
  ==============================================================================
10975
- Components: body-parser@2.2.2, type-is@2.0.1
10976
+ Components: body-parser@2.3.0, type-is@2.1.0
10976
10977
  Source files: node_modules/body-parser/LICENSE, node_modules/type-is/LICENSE
10977
10978
  ==============================================================================
10978
10979
  (The MIT License)
@@ -11108,8 +11109,8 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
11108
11109
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
11109
11110
 
11110
11111
  ==============================================================================
11111
- Components: content-type@1.0.5
11112
- Source files: node_modules/content-type/LICENSE
11112
+ Components: content-type@1.0.5, content-type@2.1.0
11113
+ Source files: node_modules/content-type/LICENSE, node_modules/type-is/node_modules/content-type/LICENSE
11113
11114
  ==============================================================================
11114
11115
  (The MIT License)
11115
11116
 
@@ -12790,7 +12791,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
12790
12791
  SOFTWARE.
12791
12792
 
12792
12793
  ==============================================================================
12793
- Components: fast-uri@3.1.2
12794
+ Components: fast-uri@3.1.6
12794
12795
  Source files: node_modules/fast-uri/LICENSE
12795
12796
  ==============================================================================
12796
12797
  Copyright (c) 2011-2021, Gary Court until https://github.com/garycourt/uri-js/commit/a1acf730b4bba3f1097c9f52e7d9d3aba8cdcaae
@@ -13343,7 +13344,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
13343
13344
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
13344
13345
 
13345
13346
  ==============================================================================
13346
- Components: hono@4.12.27
13347
+ Components: hono@4.13.5
13347
13348
  Source files: node_modules/hono/LICENSE
13348
13349
  ==============================================================================
13349
13350
  MIT License
@@ -13521,7 +13522,7 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13521
13522
  PERFORMANCE OF THIS SOFTWARE.
13522
13523
 
13523
13524
  ==============================================================================
13524
- Components: ip-address@10.2.0
13525
+ Components: ip-address@10.7.0
13525
13526
  Source files: node_modules/ip-address/LICENSE
13526
13527
  ==============================================================================
13527
13528
  Copyright (C) 2011 by Beau Gunderson
@@ -15639,7 +15640,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
15639
15640
  SOFTWARE.**
15640
15641
 
15641
15642
  ==============================================================================
15642
- Components: qs@6.15.3
15643
+ Components: qs@6.16.0
15643
15644
  Source files: node_modules/qs/LICENSE.md
15644
15645
  ==============================================================================
15645
15646
  BSD 3-Clause License
package/dist/bin.js CHANGED
@@ -1,8 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __esm = (fn, res) => function __init() {
5
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
4
+ var __esm = (fn, res, err) => function __init() {
5
+ if (err) throw err[0];
6
+ try {
7
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
+ } catch (e) {
9
+ throw err = [e], e;
10
+ }
6
11
  };
7
12
  var __export = (target, all) => {
8
13
  for (var name in all)
@@ -169,6 +174,13 @@ import {
169
174
  MCP_WIRE_LIMITS,
170
175
  parseConversionResult
171
176
  } from "@bendyline/docblocks/mcp";
177
+ function artifactReferenceError(message) {
178
+ return Object.assign(new Error(message), {
179
+ code: "invalid-artifact-reference",
180
+ hint: "Use the exact artifact.uri returned by a successful convert_document, create_document_bundle, or preview_document call in this MCP session. Do not invent a URI or use a content hash as an id. For an earlier saved file, call list_roots and use a file source with rootId and path; if it was not saved, convert the source again.",
181
+ retryable: false
182
+ });
183
+ }
172
184
  function artifactId(uriOrId) {
173
185
  const artifactIdPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u;
174
186
  if (artifactIdPattern.test(uriOrId)) {
@@ -178,11 +190,11 @@ function artifactId(uriOrId) {
178
190
  try {
179
191
  parsed = new URL(uriOrId);
180
192
  } catch {
181
- throw new Error("Invalid MCP artifact URI");
193
+ throw artifactReferenceError("Invalid MCP artifact URI");
182
194
  }
183
195
  const id = parsed.pathname.slice(1);
184
196
  if (parsed.protocol !== "docblocks:" || parsed.hostname !== "artifacts" || parsed.username !== "" || parsed.password !== "" || parsed.port !== "" || parsed.search !== "" || parsed.hash !== "" || parsed.pathname !== `/${id}` || !artifactIdPattern.test(id) || uriOrId !== `docblocks://artifacts/${id}`) {
185
- throw new Error("Invalid MCP artifact URI");
197
+ throw artifactReferenceError("Invalid MCP artifact URI");
186
198
  }
187
199
  return id;
188
200
  }
@@ -535,7 +547,7 @@ var init_artifact_store = __esm({
535
547
  findRecordLocked(uriOrId) {
536
548
  const id = artifactId(uriOrId);
537
549
  const stored = this.records.get(id);
538
- if (!stored) throw new Error("Unknown or expired MCP artifact");
550
+ if (!stored) throw artifactReferenceError("Unknown or expired MCP artifact");
539
551
  return stored;
540
552
  }
541
553
  takeExpiredLocked() {
@@ -1567,9 +1579,9 @@ var init_document_service = __esm({
1567
1579
  markdown = importedMarkdown;
1568
1580
  }
1569
1581
  const { parseMarkdown: parseMarkdown2 } = await import("@bendyline/squisq/markdown");
1570
- const { markdownToDoc: markdownToDoc2 } = await import("@bendyline/squisq/doc");
1582
+ const { markdownToDoc: markdownToDoc3 } = await import("@bendyline/squisq/doc");
1571
1583
  const markdownDoc = parseMarkdown2(markdown);
1572
- const doc = markdownToDoc2(markdownDoc, {
1584
+ const doc = markdownToDoc3(markdownDoc, {
1573
1585
  defaultTemplate: "content",
1574
1586
  autoTemplates: false
1575
1587
  });
@@ -1983,7 +1995,7 @@ async function authoringDiagnostics(prepared, stage, format, signal) {
1983
1995
  totalBlocks: analyzedBlocks.length
1984
1996
  });
1985
1997
  const renderedText = materialized.layers.filter((layer) => layer.type === "text").map((layer) => layer.content.text).join("\n");
1986
- if (!normalizedText(renderedText).includes(normalizedText(body))) {
1998
+ if (!renderedBodyIncludes(renderedText, body)) {
1987
1999
  diagnostics.push({
1988
2000
  code: "rendered-content-omitted",
1989
2001
  severity: "error",
@@ -2016,6 +2028,10 @@ async function authoringDiagnostics(prepared, stage, format, signal) {
2016
2028
  }
2017
2029
  return diagnostics;
2018
2030
  }
2031
+ function renderedBodyIncludes(renderedText, body) {
2032
+ const undecorated = renderedText.replace(/(^|\n)[\t ]*(?:[•◦▪]|\d+[.)])[\t ]+/gu, "$1");
2033
+ return normalizedText(undecorated).includes(normalizedText(body));
2034
+ }
2019
2035
  function normalizedText(value) {
2020
2036
  return value.normalize("NFKC").replace(/\s+/gu, " ").trim().toLocaleLowerCase("en-US");
2021
2037
  }
@@ -3463,6 +3479,30 @@ var init_rendered_conversion = __esm({
3463
3479
  }
3464
3480
  });
3465
3481
 
3482
+ // src/mcp/pptx-source.ts
3483
+ import { markdownToDoc as markdownToDoc2 } from "@bendyline/squisq/doc";
3484
+ function preparePptxSource(markdown, slideBreak, autoTemplates) {
3485
+ const maxDepth = slideBreak === "h1" ? 1 : slideBreak === "h2" ? 2 : 6;
3486
+ const grouped = {
3487
+ ...markdown,
3488
+ children: markdown.children.map(
3489
+ (node) => node.type === "heading" && node.depth > maxDepth ? {
3490
+ type: "paragraph",
3491
+ children: [{ type: "strong", children: node.children }]
3492
+ } : node
3493
+ )
3494
+ };
3495
+ return {
3496
+ markdownDoc: grouped,
3497
+ doc: markdownToDoc2(grouped, { generateCoverBlock: false, autoTemplates })
3498
+ };
3499
+ }
3500
+ var init_pptx_source = __esm({
3501
+ "src/mcp/pptx-source.ts"() {
3502
+ "use strict";
3503
+ }
3504
+ });
3505
+
3466
3506
  // src/mcp/conversion-service.ts
3467
3507
  import { createHash as createHash6 } from "crypto";
3468
3508
  import { DOCBLOCKS_MCP_WIRE_VERSION as DOCBLOCKS_MCP_WIRE_VERSION3 } from "@bendyline/docblocks/mcp";
@@ -3507,6 +3547,9 @@ async function convertPreparedDocument(artifacts, prepared, request, signal, pro
3507
3547
  for (let index = 0; index < request.targets.length; index += 1) {
3508
3548
  throwIfAborted5(signal);
3509
3549
  const target = request.targets[index];
3550
+ const slideBreak = target.options?.slideBreak ?? "h1";
3551
+ const pptxSource = target.format === "pptx" && (slideBreak === "h1" || slideBreak === "h2" || slideBreak === "heading") ? preparePptxSource(prepared.markdownDoc, slideBreak, request.autoTemplates) : void 0;
3552
+ const targetDocument = pptxSource ? { ...prepared, ...pptxSource } : prepared;
3510
3553
  const definition = linkedRegistry.get(target.format);
3511
3554
  if (!definition) throw new Error(`Unknown conversion target "${target.format}"`);
3512
3555
  if (!definition.exportDoc) throw new Error(`Format "${target.format}" is not export-capable`);
@@ -3545,7 +3588,7 @@ async function convertPreparedDocument(artifacts, prepared, request, signal, pro
3545
3588
  }
3546
3589
  };
3547
3590
  const converted = usesDocumentRasterizer(target.format, fidelity) ? await dependencies.convertRenderedDocument(
3548
- prepared,
3591
+ targetDocument,
3549
3592
  target.format,
3550
3593
  fidelity,
3551
3594
  target.options ?? {},
@@ -3561,7 +3604,15 @@ async function convertPreparedDocument(artifacts, prepared, request, signal, pro
3561
3604
  `${target.format}: ${message}`
3562
3605
  )
3563
3606
  ) : await (async () => {
3564
- nativePrepared ?? (nativePrepared = await dependencies.prepareNativeConversion(
3607
+ const targetPrepared = pptxSource ? await dependencies.prepareNativeConversion(
3608
+ {
3609
+ kind: "doc",
3610
+ doc: pptxSource.doc,
3611
+ container: prepared.container,
3612
+ baseName: prepared.baseName
3613
+ },
3614
+ nativePrepareOptions
3615
+ ) : nativePrepared ?? (nativePrepared = await dependencies.prepareNativeConversion(
3565
3616
  {
3566
3617
  kind: "markdown",
3567
3618
  markdown: prepared.markdownDoc,
@@ -3571,7 +3622,7 @@ async function convertPreparedDocument(artifacts, prepared, request, signal, pro
3571
3622
  nativePrepareOptions
3572
3623
  ));
3573
3624
  try {
3574
- return await nativePrepared.convert(target.format, {
3625
+ return await targetPrepared.convert(target.format, {
3575
3626
  signal,
3576
3627
  title: request.title,
3577
3628
  formatOptions: { [target.format]: formatOptions }
@@ -3883,6 +3934,7 @@ var init_conversion_service = __esm({
3883
3934
  init_document_service();
3884
3935
  init_intelligence();
3885
3936
  init_rendered_conversion();
3937
+ init_pptx_source();
3886
3938
  MCP_FORMAT_FIDELITIES = {
3887
3939
  md: ["semantic"],
3888
3940
  docx: ["semantic", "editable-native"],
@@ -4126,6 +4178,39 @@ var init_progress = __esm({
4126
4178
  }
4127
4179
  });
4128
4180
 
4181
+ // src/mcp/preview-content.ts
4182
+ async function inlinePreviewContent(result, artifacts, signal) {
4183
+ const content = [];
4184
+ let remaining = MAX_INLINE_PREVIEW_BYTES;
4185
+ for (const item of result.items) {
4186
+ signal?.throwIfAborted();
4187
+ const encodedSize = 4 * Math.ceil(item.artifact.size / 3);
4188
+ if (encodedSize > remaining) {
4189
+ content.push({
4190
+ type: "text",
4191
+ text: `Preview item ${item.index} is available by resource link but was not inlined because of the response-size budget. Request startIndex: ${item.index}, maxItems: 1 and smaller width/height to inspect its pixels.`
4192
+ });
4193
+ continue;
4194
+ }
4195
+ const bytes = await artifacts.read(item.artifact.uri, signal);
4196
+ const data = bytes.toString("base64");
4197
+ remaining -= data.length;
4198
+ content.push({
4199
+ type: "text",
4200
+ text: `Preview item ${item.index}${item.label ? `: ${item.label}` : ""} (${result.previewBasis})`
4201
+ });
4202
+ content.push({ type: "image", mimeType: item.artifact.mimeType, data });
4203
+ }
4204
+ return content;
4205
+ }
4206
+ var MAX_INLINE_PREVIEW_BYTES;
4207
+ var init_preview_content = __esm({
4208
+ "src/mcp/preview-content.ts"() {
4209
+ "use strict";
4210
+ MAX_INLINE_PREVIEW_BYTES = 4 * 1024 * 1024;
4211
+ }
4212
+ });
4213
+
4129
4214
  // src/mcp/style-guidance.ts
4130
4215
  var STYLE_SELECTION_GUIDANCE, TRANSFORM_SELECTION_GUIDANCE, MOTION_SELECTION_GUIDANCE;
4131
4216
  var init_style_guidance = __esm({
@@ -4430,7 +4515,8 @@ function registerAgenticTools(server, context) {
4430
4515
  return {
4431
4516
  content: [
4432
4517
  { type: "text", text: JSON.stringify(result) },
4433
- ...result.items.map((item) => artifactLink(item.artifact))
4518
+ ...result.items.map((item) => artifactLink(item.artifact)),
4519
+ ...await inlinePreviewContent(result, context.artifacts, operationSignal)
4434
4520
  ],
4435
4521
  structuredContent: asStructuredContent(successResult(result))
4436
4522
  };
@@ -5294,6 +5380,7 @@ var init_agentic_tools = __esm({
5294
5380
  init_preview_service();
5295
5381
  init_error_result();
5296
5382
  init_progress();
5383
+ init_preview_content();
5297
5384
  init_output_bounds();
5298
5385
  init_style_guidance();
5299
5386
  READ_ONLY = {
@@ -5351,8 +5438,8 @@ var init_agentic_tools = __esm({
5351
5438
  format: z.literal("pptx"),
5352
5439
  fidelity: fidelitySchemas.pptx.optional(),
5353
5440
  ...metadataFields,
5354
- slideBreak: z.enum(["h1", "h2", "heading"]).optional().describe(
5355
- "Heading depths that start slides. Headings alone create slide boundaries; do not add --- between them unless a visible horizontal rule is intended."
5441
+ slideBreak: z.enum(["h1", "h2", "heading"]).default("h1").describe(
5442
+ "Defaults to h1: author one H1 per slide; deeper headings remain body text and no extra cover is inserted. h2 breaks at H1/H2; heading breaks at any depth. Include a title slide as an authored heading; do not add --- between heading-based slides."
5356
5443
  ),
5357
5444
  defaultFont: z.string().max(256).optional(),
5358
5445
  defaultFontSize: z.number().min(6).max(96).optional(),
@@ -7366,10 +7453,10 @@ function throwIfAborted2(signal) {
7366
7453
  throwIfAborted(signal, "Document conversion was cancelled");
7367
7454
  }
7368
7455
  async function applyTransformToMarkdown(markdownDoc, container, transformStyle, themeId) {
7369
- const { markdownToDoc: markdownToDoc2, docToMarkdown } = await import("@bendyline/squisq/doc");
7456
+ const { markdownToDoc: markdownToDoc3, docToMarkdown } = await import("@bendyline/squisq/doc");
7370
7457
  const { readFrontmatterThemeId } = await import("@bendyline/squisq/markdown");
7371
7458
  const { applyTransform, extractDocImages } = await import("@bendyline/squisq/transform");
7372
- const doc = markdownToDoc2(markdownDoc);
7459
+ const doc = markdownToDoc3(markdownDoc);
7373
7460
  const images = extractDocImages(doc.blocks);
7374
7461
  const effectiveTheme = themeId ?? readFrontmatterThemeId(markdownDoc.frontmatter);
7375
7462
  const result = applyTransform(doc, transformStyle, { themeId: effectiveTheme, images });
package/dist/eval/cli.js CHANGED
@@ -38,7 +38,8 @@ Include a clear opening thesis, a compact scorecard, insights rather than repeat
38
38
  minWords: 220,
39
39
  maxWords: 650,
40
40
  maxWordsPerSection: 95,
41
- minVisualTemplates: 2,
41
+ // Layouts may be chosen by autoTemplates; annotation count is not visual quality.
42
+ minVisualTemplates: 0,
42
43
  requiredPhrases: ["18,420", "71%", "$3.8M", "49%", "23%", "31%", "permissions"]
43
44
  }
44
45
  },
@@ -63,7 +64,8 @@ Cover: a plain-language definition, an opening scenario, a four-question risk sc
63
64
  minWords: 240,
64
65
  maxWords: 700,
65
66
  maxWordsPerSection: 90,
66
- minVisualTemplates: 2,
67
+ // Layouts may be chosen by autoTemplates; annotation count is not visual quality.
68
+ minVisualTemplates: 0,
67
69
  requiredPhrases: ["accountable", "confidential", "escalat", "four", "one-week"]
68
70
  }
69
71
  },
@@ -422,7 +424,7 @@ var HEADING_PATTERN = /^(#{1,6})\s+(.+)$/gm;
422
424
  var TEMPLATE_PATTERN = /\{\[([A-Za-z0-9_-]+)/g;
423
425
  function judgeMarkdown(markdown, testCase) {
424
426
  const words = countWords(markdown);
425
- const sections = markdownSections(markdown);
427
+ const sections = markdownSections(markdown, testCase.targetFormat === "pptx" ? 1 : 6);
426
428
  const headings = [...markdown.matchAll(HEADING_PATTERN)];
427
429
  const templates = [...markdown.matchAll(TEMPLATE_PATTERN)].map((match) => match[1]);
428
430
  const visualTemplates = templates.filter((template) => template !== "content");
@@ -440,7 +442,7 @@ function judgeMarkdown(markdown, testCase) {
440
442
  ),
441
443
  rangeCheck(
442
444
  "section-count",
443
- headings.length,
445
+ sections.length,
444
446
  testCase.expectation.minItems,
445
447
  testCase.expectation.maxItems,
446
448
  true,
@@ -482,6 +484,7 @@ function judgeMarkdown(markdown, testCase) {
482
484
  return summarizeChecks(checks, {
483
485
  wordCount: words,
484
486
  headingCount: headings.length,
487
+ sectionCount: sections.length,
485
488
  templateAnnotationCount: templates.length,
486
489
  visualTemplateCount: visualTemplates.length,
487
490
  denseSectionCount: denseSections.length
@@ -490,8 +493,10 @@ function judgeMarkdown(markdown, testCase) {
490
493
  function countWords(value) {
491
494
  return value.trim().match(/[\p{L}\p{N}][\p{L}\p{N}'’.-]*/gu)?.length ?? 0;
492
495
  }
493
- function markdownSections(markdown) {
494
- const matches = [...markdown.matchAll(HEADING_PATTERN)];
496
+ function markdownSections(markdown, maxDepth = 6) {
497
+ const matches = [...markdown.matchAll(HEADING_PATTERN)].filter(
498
+ (match) => match[1].length <= maxDepth
499
+ );
495
500
  return matches.map((match, index) => ({
496
501
  heading: match[2],
497
502
  body: markdown.slice((match.index ?? 0) + match[0].length, matches[index + 1]?.index)
@@ -1083,7 +1088,8 @@ The deterministic observations below are authoritative. Do not recount them or c
1083
1088
 
1084
1089
  Deterministic observations:
1085
1090
  - Word count: ${String(deterministic.metrics.wordCount)} (acceptance envelope ${testCase.expectation.minWords}-${testCase.expectation.maxWords})
1086
- - Heading/section count: ${String(deterministic.metrics.headingCount)} (acceptance envelope ${testCase.expectation.minItems}-${testCase.expectation.maxItems})
1091
+ - Section count${testCase.targetFormat === "pptx" ? " (H1 slide boundaries)" : ""}: ${String(deterministic.metrics.sectionCount)} (acceptance envelope ${testCase.expectation.minItems}-${testCase.expectation.maxItems})
1092
+ - All headings, including subordinate headings within a slide: ${String(deterministic.metrics.headingCount)} (diagnostic only; do not compare this count with the slide target)
1087
1093
  - Sections over ${testCase.expectation.maxWordsPerSection} words: ${String(deterministic.metrics.denseSectionCount)}
1088
1094
  - Non-content Squisq template annotations: ${String(deterministic.metrics.visualTemplateCount)} (minimum ${testCase.expectation.minVisualTemplates})
1089
1095
  - Deterministic acceptance: ${deterministic.passed ? "pass" : "fail"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bendyline/docblocks-cli",
3
- "version": "2.6.0",
3
+ "version": "2.6.2",
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.6.0",
51
- "@bendyline/squisq": "2.11.1",
52
- "@bendyline/squisq-cli": "2.8.1",
53
- "@bendyline/squisq-formats": "2.6.1",
54
- "@bendyline/squisq-react": "2.11.1",
55
- "@bendyline/squisq-video": "2.3.4",
50
+ "@bendyline/docblocks": "2.6.2",
51
+ "@bendyline/squisq": "2.11.4",
52
+ "@bendyline/squisq-cli": "2.8.4",
53
+ "@bendyline/squisq-formats": "2.6.4",
54
+ "@bendyline/squisq-react": "2.11.4",
55
+ "@bendyline/squisq-video": "2.3.7",
56
56
  "@modelcontextprotocol/sdk": "1.29.0",
57
57
  "commander": "13.1.0",
58
58
  "jszip": "3.10.1",