@superdoc/cli 0.35.0-next.8 → 0.35.0-next.9

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/dist/index.js CHANGED
@@ -765063,7 +765063,7 @@ var init_host2 = __esm(() => {
765063
765063
  });
765064
765064
 
765065
765065
  // ../../packages/sdk/langs/node/src/runtime/sdk-version.generated.ts
765066
- var SDK_VERSION = "2.12.0-next.8";
765066
+ var SDK_VERSION = "2.12.0-next.9";
765067
765067
 
765068
765068
  // ../../packages/sdk/langs/node/src/runtime/embedded-platform.ts
765069
765069
  import { chmodSync, existsSync } from "node:fs";
@@ -806260,17 +806260,25 @@ function normalizeTableColor2(raw) {
806260
806260
  return normalized ? `#${normalized}` : null;
806261
806261
  }
806262
806262
  async function runAcceptTrackedChanges(doc, args2) {
806263
- return runTrackedChangeDecision(doc, "accept_tracked_changes", "accept", args2.author, args2.changeType);
806263
+ return runTrackedChangeDecision(doc, "accept_tracked_changes", "accept", Array.isArray(args2.id) ? args2.id : typeof args2.id === "string" ? [args2.id] : undefined, args2.author, args2.changeType);
806264
806264
  }
806265
806265
  async function runRejectTrackedChanges(doc, args2) {
806266
- return runTrackedChangeDecision(doc, "reject_tracked_changes", "reject", args2.author, args2.changeType);
806266
+ return runTrackedChangeDecision(doc, "reject_tracked_changes", "reject", Array.isArray(args2.id) ? args2.id : typeof args2.id === "string" ? [args2.id] : undefined, args2.author, args2.changeType);
806267
806267
  }
806268
- async function runTrackedChangeDecision(doc, intentLabel, decision, author, changeType) {
806268
+ async function runTrackedChangeDecision(doc, intentLabel, decision, exactIds, author, changeType) {
806269
806269
  const pre = await buildDocumentSnapshot(doc);
806270
806270
  try {
806271
- const listFn = maybeMethod2(doc, ["trackChanges", "list"]);
806272
806271
  const decideFn = maybeMethod2(doc, ["trackChanges", "decide"]);
806273
- if (!listFn || !decideFn) {
806272
+ if (!decideFn) {
806273
+ throw new SuperDocCliError("doc.trackChanges.list / decide are not available on the document handle.", {
806274
+ code: "TOOL_DISPATCH_NOT_FOUND"
806275
+ });
806276
+ }
806277
+ if (exactIds && exactIds.length > 0) {
806278
+ return decideExactTrackedChanges(doc, intentLabel, decision, decideFn, exactIds, pre);
806279
+ }
806280
+ const listFn = maybeMethod2(doc, ["trackChanges", "list"]);
806281
+ if (!listFn) {
806274
806282
  throw new SuperDocCliError("doc.trackChanges.list / decide are not available on the document handle.", {
806275
806283
  code: "TOOL_DISPATCH_NOT_FOUND"
806276
806284
  });
@@ -806339,6 +806347,53 @@ async function runTrackedChangeDecision(doc, intentLabel, decision, author, chan
806339
806347
  return failedReceipt2(intentLabel, err2, pre);
806340
806348
  }
806341
806349
  }
806350
+ function trackedChangeDecideFailure(result) {
806351
+ const rec = asRecord10(result);
806352
+ if (!rec || rec.success !== false)
806353
+ return null;
806354
+ const failure27 = asRecord10(rec.failure);
806355
+ return {
806356
+ code: asString2(failure27?.code, "ACTION_FAILED") || "ACTION_FAILED",
806357
+ message: asString2(failure27?.message, "tracked-change decision failed") || "tracked-change decision failed"
806358
+ };
806359
+ }
806360
+ async function decideExactTrackedChanges(doc, intentLabel, decision, decideFn, exactIds, pre) {
806361
+ const target = exactIds.length === 1 ? { kind: "id", id: exactIds[0] } : { kind: "ids", ids: [...exactIds] };
806362
+ const result = await decideFn({ decision, target });
806363
+ const failure27 = trackedChangeDecideFailure(result);
806364
+ const selectedTargets = exactIds.map((id2) => ({
806365
+ selector: { kind: "entity", entityType: "trackedChange", entityId: id2 },
806366
+ matched: failure27 ? [] : [id2]
806367
+ }));
806368
+ if (failure27) {
806369
+ return {
806370
+ status: "failed",
806371
+ intent: intentLabel,
806372
+ preSnapshot: { revision: pre.revision, counts: pre.counts },
806373
+ selectedTargets,
806374
+ executedOperations: [{ operationId: "doc.trackChanges.decide", result }],
806375
+ verification: [],
806376
+ errors: [
806377
+ {
806378
+ code: failure27.code,
806379
+ message: failure27.message,
806380
+ recovery: { kind: "reinspect" }
806381
+ }
806382
+ ]
806383
+ };
806384
+ }
806385
+ const post = await buildDocumentSnapshot(doc);
806386
+ const verification = evaluateChecks(pre, post, [{ kind: "revision-changed" }]);
806387
+ return {
806388
+ status: verification.every((v) => v.passed) ? "ok" : "failed",
806389
+ intent: intentLabel,
806390
+ preSnapshot: { revision: pre.revision, counts: pre.counts },
806391
+ postSnapshot: { revision: post.revision, counts: post.counts },
806392
+ selectedTargets,
806393
+ executedOperations: [{ operationId: "doc.trackChanges.decide", result }],
806394
+ verification
806395
+ };
806396
+ }
806342
806397
  async function listAllTrackedChanges(listFn) {
806343
806398
  const PAGE = 250;
806344
806399
  let offset = 0;
@@ -809341,14 +809396,12 @@ async function dispatchSuperdocPerformAction(doc, args2) {
809341
809396
  case "accept_tracked_changes":
809342
809397
  return runAcceptTrackedChanges(doc, {
809343
809398
  action: action2,
809344
- author: asString2(args2.author),
809345
- changeType: parseTrackedChangeKind(args2.changeType)
809399
+ ...parseTrackedChangeDecisionArgs(action2, args2)
809346
809400
  });
809347
809401
  case "reject_tracked_changes":
809348
809402
  return runRejectTrackedChanges(doc, {
809349
809403
  action: action2,
809350
- author: asString2(args2.author),
809351
- changeType: parseTrackedChangeKind(args2.changeType)
809404
+ ...parseTrackedChangeDecisionArgs(action2, args2)
809352
809405
  });
809353
809406
  case "normalize_body_font_size": {
809354
809407
  const fontSize = asNumber2(args2.fontSize);
@@ -809701,6 +809754,62 @@ async function dispatchSuperdocPerformAction(doc, args2) {
809701
809754
  }
809702
809755
  }
809703
809756
  }
809757
+ function parseTrackedChangeDecisionArgs(action2, args2) {
809758
+ const hasId = args2.id !== undefined;
809759
+ const hasAuthor = args2.author !== undefined;
809760
+ const hasChangeType = args2.changeType !== undefined;
809761
+ const id2 = hasId ? parseExactTrackedChangeIdList(args2.id) : undefined;
809762
+ const author = asString2(args2.author)?.trim();
809763
+ const changeType = parseTrackedChangeKind(args2.changeType);
809764
+ if (hasId && !id2) {
809765
+ throw new SuperDocCliError(`${action2} requires "id" to be a non-empty string or array of non-empty strings`, {
809766
+ code: "INVALID_ARGUMENT"
809767
+ });
809768
+ }
809769
+ if (hasAuthor && !author) {
809770
+ throw new SuperDocCliError(`${action2} requires "author" to be a non-empty string when provided`, {
809771
+ code: "INVALID_ARGUMENT"
809772
+ });
809773
+ }
809774
+ if (hasChangeType && !changeType) {
809775
+ throw new SuperDocCliError(`${action2} requires "changeType" to be insert, delete, replacement, or format when provided`, {
809776
+ code: "INVALID_ARGUMENT"
809777
+ });
809778
+ }
809779
+ if (id2 && (hasAuthor || hasChangeType)) {
809780
+ throw new SuperDocCliError(`${action2} cannot combine "id" with "author" or "changeType"`, {
809781
+ code: "INVALID_ARGUMENT"
809782
+ });
809783
+ }
809784
+ if (id2)
809785
+ return { id: id2 };
809786
+ return {
809787
+ ...author ? { author } : {},
809788
+ ...changeType ? { changeType } : {}
809789
+ };
809790
+ }
809791
+ function parseExactTrackedChangeIdList(value2) {
809792
+ if (typeof value2 === "string") {
809793
+ const trimmed = value2.trim();
809794
+ return trimmed.length > 0 ? [trimmed] : undefined;
809795
+ }
809796
+ if (!Array.isArray(value2))
809797
+ return;
809798
+ const ids = [];
809799
+ const seen = new Set;
809800
+ for (const entry of value2) {
809801
+ if (typeof entry !== "string")
809802
+ return;
809803
+ const trimmed = entry.trim();
809804
+ if (trimmed.length === 0)
809805
+ return;
809806
+ if (seen.has(trimmed))
809807
+ continue;
809808
+ seen.add(trimmed);
809809
+ ids.push(trimmed);
809810
+ }
809811
+ return ids.length > 0 ? ids : undefined;
809812
+ }
809704
809813
  async function superdocPerformAction(doc, args2) {
809705
809814
  try {
809706
809815
  return await dispatchSuperdocPerformAction(doc, args2);
@@ -809981,8 +810090,8 @@ var init_actions = __esm(() => {
809981
810090
  add_comments: 'commentText, selector (one block) OR selectors[] to comment MANY blocks in ONE call (same text) — use selectors[] for "comment every heading/section/clause"; NEVER emit multiple add_comments calls, batch the targets into selectors[]',
809982
810091
  resolve_comments: 'anchorText? (resolve only comments anchored on text containing this; omit to resolve ALL open comments), reopen? (true = reopen resolved comments instead) — THE way to resolve (or reopen) comments. Use for "resolve the comment(s)" / "mark comments resolved".',
809983
810092
  reply_to_comment: `commentText (the reply body), anchorText (text the target comment is anchored on / mentions) OR commentId — THE way to REPLY to an existing comment thread. Use for "reply to the comment about X" / "respond to Reviewer's comment". Adds a threaded reply, not a new top-level comment.`,
809984
- accept_tracked_changes: 'author?, changeType?: insert|delete|replacement|format — e.g. changeType:"format" accepts ONLY formatting revisions (bold/italic/color), leaving text edits pending',
809985
- reject_tracked_changes: "author?, changeType?: insert|delete|replacement|format",
810093
+ accept_tracked_changes: 'id? (string or string[]) OR author?/changeType?: insert|delete|replacement|format — a string[] decides that exact set atomically; e.g. changeType:"format" accepts ONLY formatting revisions (bold/italic/color), leaving text edits pending',
810094
+ reject_tracked_changes: "id? (string or string[]) OR author?/changeType?: insert|delete|replacement|format — a string[] decides that exact set atomically",
809986
810095
  normalize_body_font_size: "fontSize, changeMode?",
809987
810096
  set_font_family: 'fontFamily (e.g. "Arial"), selector? (one block) OR targetText/targetTexts[] (occurrences) — omit both to set the WHOLE body font, caseSensitive?, changeMode? — THE way to change the typeface. Use for "change the font to X" / "set the heading font to Y".',
809988
810097
  format_text: "bold?/italic?/underline?/strike? booleans, highlight? color name, color?, fontSize?, applied to EVERY occurrence of targetText (or targetTexts[] for several phrases in one call, or a selector'd block), caseSensitive?, changeMode? — THE way to bold/italicize/underline/highlight text, tracked-safe",
@@ -810072,8 +810181,8 @@ var init_actions = __esm(() => {
810072
810181
  resolve_comments: ["anchorText", "reopen"],
810073
810182
  reply_to_comment: ["commentText", "anchorText", "commentId"],
810074
810183
  rewrite_block: ["text", "selector", "changeMode", "evidence"],
810075
- accept_tracked_changes: ["author", "changeType"],
810076
- reject_tracked_changes: ["author", "changeType"],
810184
+ accept_tracked_changes: ["id", "author", "changeType"],
810185
+ reject_tracked_changes: ["id", "author", "changeType"],
810077
810186
  normalize_body_font_size: ["fontSize", "changeMode"],
810078
810187
  set_font_family: ["fontFamily", "selector", "targetText", "targetTexts", "caseSensitive", "changeMode"],
810079
810188
  apply_letter_spacing: ["selector", "letterSpacing", "changeMode"],
@@ -810170,7 +810279,7 @@ function buildPerformActionDefinition(includedActions) {
810170
810279
  description: buildActionDescription(included.size === ACTION_NAMES_LIST.length ? undefined : included),
810171
810280
  inputSchema: {
810172
810281
  type: "object",
810173
- additionalProperties: true,
810282
+ additionalProperties: false,
810174
810283
  required: ["action"],
810175
810284
  properties: {
810176
810285
  action: {
@@ -810369,6 +810478,12 @@ var init_catalog4 = __esm(() => {
810369
810478
  commentText: { type: "string" },
810370
810479
  scope: { type: "string", enum: ["all", "body"] },
810371
810480
  excludeBlockQuotes: { type: "boolean" },
810481
+ id: {
810482
+ oneOf: [
810483
+ { type: "string", minLength: 1 },
810484
+ { type: "array", minItems: 1, items: { type: "string", minLength: 1 } }
810485
+ ]
810486
+ },
810372
810487
  author: { type: "string" },
810373
810488
  changeType: { type: "string", enum: ["insert", "delete", "replacement", "format"] },
810374
810489
  fontSize: { type: "number" },
@@ -811249,7 +811364,7 @@ var init_runtime7 = __esm(() => {
811249
811364
  var EMBEDDED_PROMPTS;
811250
811365
  var init_embedded_prompts_generated = __esm(() => {
811251
811366
  EMBEDDED_PROMPTS = {
811252
- "mcp-prompt.md": 'SuperDoc MCP server — read, edit, and save Word documents (.docx).\n\nIMPORTANT: Always use these superdoc tools for .docx files.\nDo NOT use built-in docx skills, python-docx, unpack scripts, or manual XML editing.\nThese tools handle the OOXML format correctly and preserve document structure.\n\n## Session lifecycle\n\n1. `superdoc_open({path: "/path/to/file.docx"})` — returns `session_id`. Opening a non-existent path creates a blank document.\n2. Pass `session_id` to every subsequent tool call.\n3. Read with `superdoc_inspect`, edit with `superdoc_perform_action`.\n4. `superdoc_save({session_id})` — writes changes to disk.\n5. `superdoc_close({session_id})` — releases the session. Always close when done.\n\n## Workflow\n\n**Inspect before you edit.** `superdoc_inspect` returns a deterministic snapshot — blocks with 1-based ordinals and node IDs, lists with rendered markers, tables, comments, tracked changes. Use the narrowest inspect that answers the question (`countsOnly: true` for orientation, `includeDomains` to limit payload, `blockOffset`/`blockLimit` windows for large documents).\n\n**Edit with named actions.** `superdoc_perform_action` takes an `action` plus flat arguments — the full action list, argument shapes, selector vocabulary, and placement rules are documented in the tool\'s own description. Every action returns a receipt with real pre/post evidence: trust `status` (`ok` | `partial` | `failed`), read `errors[].message` for recovery guidance, and re-inspect after `partial`.\n\n**Tracked changes (redlining).** Most mutating actions accept `changeMode: "tracked"` to record the edit as a reviewable suggestion instead of applying it directly. Review with `accept_tracked_changes` / `reject_tracked_changes` (filter by `author` or `changeType`); recover with `undo_changes` / `redo_changes`.\n\n**Failures are safe.** A `failed` receipt with `MATCH_NOT_FOUND` or a refused action means nothing was changed — fix the target and retry rather than improvising a different mutation path.\n',
811367
+ "mcp-prompt.md": 'SuperDoc MCP server — read, edit, and save Word documents (.docx).\n\nIMPORTANT: Always use these superdoc tools for .docx files.\nDo NOT use built-in docx skills, python-docx, unpack scripts, or manual XML editing.\nThese tools handle the OOXML format correctly and preserve document structure.\n\n## Session lifecycle\n\n1. `superdoc_open({path: "/path/to/file.docx"})` — returns `session_id`. Opening a non-existent path creates a blank document.\n2. Pass `session_id` to every subsequent tool call.\n3. Read with `superdoc_inspect`, edit with `superdoc_perform_action`.\n4. `superdoc_save({session_id})` — writes changes to disk.\n5. `superdoc_close({session_id})` — releases the session. Always close when done.\n\n## Workflow\n\n**Inspect before you edit.** `superdoc_inspect` returns a deterministic snapshot — blocks with 1-based ordinals and node IDs, lists with rendered markers, tables, comments, tracked changes. Use the narrowest inspect that answers the question (`countsOnly: true` for orientation, `includeDomains` to limit payload, `blockOffset`/`blockLimit` windows for large documents).\n\n**Edit with named actions.** `superdoc_perform_action` takes an `action` plus flat arguments — the full action list, argument shapes, selector vocabulary, and placement rules are documented in the tool\'s own description. Every action returns a receipt with real pre/post evidence: trust `status` (`ok` | `partial` | `failed`), read `errors[].message` for recovery guidance, and re-inspect after `partial`.\n\n**Tracked changes (redlining).** Most mutating actions accept `changeMode: "tracked"` to record the edit as a reviewable suggestion instead of applying it directly. Review with `accept_tracked_changes` / `reject_tracked_changes` (target one change with `id`, or an exact set with `id:[…]`; or filter by `author` or `changeType`). Do not combine exact IDs with filters. Recover with `undo_changes` / `redo_changes`.\n\n**Failures are safe.** A `failed` receipt with `MATCH_NOT_FOUND` or a refused action means nothing was changed — fix the target and retry rather than improvising a different mutation path.\n',
811253
811368
  "system-prompt.md": `You are an expert document editor working inside a live Word document. You know how documents actually work — headings structure content, numbering schemes carry legal meaning, tables hold data, tracked changes record intent, comments carry review. You edit the way a skilled human editor would: you understand what people MEAN, not just what they SAY, and you leave the document the way a professional would leave it.
811254
811369
 
811255
811370
  ============================================================
@@ -811309,7 +811424,7 @@ ACTIONS (superdoc_perform_action with flat args)
811309
811424
  - add_comments: commentText, and either selector (one block) or selectors:[…] to comment MANY blocks in ONE call with the same text. To comment every heading/section/clause, resolve their targets and pass them all in selectors:[…] — NEVER emit a separate add_comments call per block.
811310
811425
  - reply_to_comment: commentText (the reply body), and either anchorText (text the target comment is anchored on / mentions) or commentId. THE way to REPLY to an existing comment thread ("reply to the comment about X") — a threaded reply, not a new top-level comment.
811311
811426
  - resolve_comments: anchorText? (resolve only comments anchored on / mentioning that text; omit to resolve ALL open comments), reopen:true to reopen resolved comments instead. THE way to "resolve the comment(s)" / "mark comments resolved".
811312
- - accept_tracked_changes / reject_tracked_changes: optional author:"Full Name", optional changeType:"insert"|"delete"|"replacement"|"format". "Accept only the formatting changes" = changeType:"format" (formatting revisions — bold/italic/underline/color — are a DISTINCT tracked-change type from text edits; text changes stay pending).
811427
+ - accept_tracked_changes / reject_tracked_changes: id:"change-id" or id:["id1","id2"] for one atomic set, OR optional author:"Full Name" / changeType:"insert"|"delete"|"replacement"|"format" to filter. Do not combine id with author/changeType. "Accept only the formatting changes" = changeType:"format" (formatting revisions — bold/italic/underline/color — are a DISTINCT tracked-change type from text edits; text changes stay pending).
811313
811428
  - format_text: bold/italic/underline/strike:true, highlight:"yellow", color (named or hex), fontSize — applied to EVERY occurrence of targetText (or targetTexts:["…","…"] for several phrases in one call; or selector for a whole block). caseSensitive:true for exact case. changeMode:"tracked" produces format-type tracked changes. THE way to bold/italicize/underline/highlight/color text — find the literal texts first (inspect), then ONE call. NOTE: one call applies ONE set of properties to ALL its targets — to color two phrases DIFFERENT colors, make a SEPARATE call per color (do NOT batch different-colored phrases into one targetTexts call).
811314
811429
  - apply_style: selector (the block to restyle), then ONE of styleId ("Heading2"), headingLevel (1-6), or likeText (text inside the block whose style AND effective look to copy). "Make Summary match the Parties heading" = apply_style {selector:…, likeText:"Parties"}. THE way to restyle an existing block — never delete-and-recreate it.
811315
811430
  - normalize_body_font_size: fontSize:N.
@@ -18,6 +18,6 @@ These tools handle the OOXML format correctly and preserve document structure.
18
18
 
19
19
  **Edit with named actions.** `superdoc_perform_action` takes an `action` plus flat arguments — the full action list, argument shapes, selector vocabulary, and placement rules are documented in the tool's own description. Every action returns a receipt with real pre/post evidence: trust `status` (`ok` | `partial` | `failed`), read `errors[].message` for recovery guidance, and re-inspect after `partial`.
20
20
 
21
- **Tracked changes (redlining).** Most mutating actions accept `changeMode: "tracked"` to record the edit as a reviewable suggestion instead of applying it directly. Review with `accept_tracked_changes` / `reject_tracked_changes` (filter by `author` or `changeType`); recover with `undo_changes` / `redo_changes`.
21
+ **Tracked changes (redlining).** Most mutating actions accept `changeMode: "tracked"` to record the edit as a reviewable suggestion instead of applying it directly. Review with `accept_tracked_changes` / `reject_tracked_changes` (target one change with `id`, or an exact set with `id:[…]`; or filter by `author` or `changeType`). Do not combine exact IDs with filters. Recover with `undo_changes` / `redo_changes`.
22
22
 
23
23
  **Failures are safe.** A `failed` receipt with `MATCH_NOT_FOUND` or a refused action means nothing was changed — fix the target and retry rather than improvising a different mutation path.
@@ -57,7 +57,7 @@ ACTIONS (superdoc_perform_action with flat args)
57
57
  - add_comments: commentText, and either selector (one block) or selectors:[…] to comment MANY blocks in ONE call with the same text. To comment every heading/section/clause, resolve their targets and pass them all in selectors:[…] — NEVER emit a separate add_comments call per block.
58
58
  - reply_to_comment: commentText (the reply body), and either anchorText (text the target comment is anchored on / mentions) or commentId. THE way to REPLY to an existing comment thread ("reply to the comment about X") — a threaded reply, not a new top-level comment.
59
59
  - resolve_comments: anchorText? (resolve only comments anchored on / mentioning that text; omit to resolve ALL open comments), reopen:true to reopen resolved comments instead. THE way to "resolve the comment(s)" / "mark comments resolved".
60
- - accept_tracked_changes / reject_tracked_changes: optional author:"Full Name", optional changeType:"insert"|"delete"|"replacement"|"format". "Accept only the formatting changes" = changeType:"format" (formatting revisions — bold/italic/underline/color — are a DISTINCT tracked-change type from text edits; text changes stay pending).
60
+ - accept_tracked_changes / reject_tracked_changes: id:"change-id" or id:["id1","id2"] for one atomic set, OR optional author:"Full Name" / changeType:"insert"|"delete"|"replacement"|"format" to filter. Do not combine id with author/changeType. "Accept only the formatting changes" = changeType:"format" (formatting revisions — bold/italic/underline/color — are a DISTINCT tracked-change type from text edits; text changes stay pending).
61
61
  - format_text: bold/italic/underline/strike:true, highlight:"yellow", color (named or hex), fontSize — applied to EVERY occurrence of targetText (or targetTexts:["…","…"] for several phrases in one call; or selector for a whole block). caseSensitive:true for exact case. changeMode:"tracked" produces format-type tracked changes. THE way to bold/italicize/underline/highlight/color text — find the literal texts first (inspect), then ONE call. NOTE: one call applies ONE set of properties to ALL its targets — to color two phrases DIFFERENT colors, make a SEPARATE call per color (do NOT batch different-colored phrases into one targetTexts call).
62
62
  - apply_style: selector (the block to restyle), then ONE of styleId ("Heading2"), headingLevel (1-6), or likeText (text inside the block whose style AND effective look to copy). "Make Summary match the Parties heading" = apply_style {selector:…, likeText:"Parties"}. THE way to restyle an existing block — never delete-and-recreate it.
63
63
  - normalize_body_font_size: fontSize:N.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superdoc/cli",
3
- "version": "0.35.0-next.8",
3
+ "version": "0.35.0-next.9",
4
4
  "description": "Command-line interface for SuperDoc: inspect, convert, and edit .docx files from a terminal or a script.",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "devDependencies": {
37
37
  "@hocuspocus/server": "^2.13.6",
38
- "@superdoc/sdk": "2.12.0-next.8",
38
+ "@superdoc/sdk": "2.12.0-next.9",
39
39
  "@superdoc/document-api": "0.1.0-alpha.0",
40
40
  "@superdoc/docx-engine": "0.14.0-next.6",
41
41
  "@types/bun": "^1.3.8",
@@ -51,11 +51,11 @@
51
51
  "access": "public"
52
52
  },
53
53
  "optionalDependencies": {
54
- "@superdoc/cli-darwin-arm64": "0.35.0-next.8",
55
- "@superdoc/cli-darwin-x64": "0.35.0-next.8",
56
- "@superdoc/cli-linux-x64": "0.35.0-next.8",
57
- "@superdoc/cli-linux-arm64": "0.35.0-next.8",
58
- "@superdoc/cli-windows-x64": "0.35.0-next.8"
54
+ "@superdoc/cli-darwin-arm64": "0.35.0-next.9",
55
+ "@superdoc/cli-darwin-x64": "0.35.0-next.9",
56
+ "@superdoc/cli-linux-x64": "0.35.0-next.9",
57
+ "@superdoc/cli-linux-arm64": "0.35.0-next.9",
58
+ "@superdoc/cli-windows-x64": "0.35.0-next.9"
59
59
  },
60
60
  "scripts": {
61
61
  "predev": "node scripts/ensure-superdoc-build.js",