@bendyline/docblocks 1.1.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +76 -11
  2. package/dist/chunk-6IYMTYMQ.js +1692 -0
  3. package/dist/chunk-6IYMTYMQ.js.map +1 -0
  4. package/dist/chunk-AEHCVWU5.js +25 -0
  5. package/dist/chunk-AEHCVWU5.js.map +1 -0
  6. package/dist/chunk-B56KWCSE.js +802 -0
  7. package/dist/chunk-B56KWCSE.js.map +1 -0
  8. package/dist/{chunk-ME76RUMR.js → chunk-BNKV7MTO.js} +15 -1
  9. package/dist/chunk-BNKV7MTO.js.map +1 -0
  10. package/dist/chunk-BXMF5YQJ.js +149 -0
  11. package/dist/chunk-BXMF5YQJ.js.map +1 -0
  12. package/dist/chunk-COYQXQK3.js +1071 -0
  13. package/dist/chunk-COYQXQK3.js.map +1 -0
  14. package/dist/chunk-DN7A33LL.js +780 -0
  15. package/dist/chunk-DN7A33LL.js.map +1 -0
  16. package/dist/chunk-EZKJZUNJ.js +13 -0
  17. package/dist/chunk-EZKJZUNJ.js.map +1 -0
  18. package/dist/chunk-FA7UNOXK.js +20 -0
  19. package/dist/chunk-FA7UNOXK.js.map +1 -0
  20. package/dist/chunk-FNW556FN.js +75 -0
  21. package/dist/chunk-FNW556FN.js.map +1 -0
  22. package/dist/chunk-GM5YXU4L.js +29 -0
  23. package/dist/chunk-GM5YXU4L.js.map +1 -0
  24. package/dist/chunk-JS6XFWQK.js +225 -0
  25. package/dist/chunk-JS6XFWQK.js.map +1 -0
  26. package/dist/chunk-MNSZ7EZN.js +111 -0
  27. package/dist/chunk-MNSZ7EZN.js.map +1 -0
  28. package/dist/chunk-P3DVZQ6S.js +228 -0
  29. package/dist/chunk-P3DVZQ6S.js.map +1 -0
  30. package/dist/chunk-P4WATND4.js +52 -0
  31. package/dist/chunk-P4WATND4.js.map +1 -0
  32. package/dist/chunk-RVPGQBWR.js +169 -0
  33. package/dist/chunk-RVPGQBWR.js.map +1 -0
  34. package/dist/chunk-U722UUFN.js +9 -0
  35. package/dist/chunk-U722UUFN.js.map +1 -0
  36. package/dist/chunk-VTCSF7VS.js +553 -0
  37. package/dist/chunk-VTCSF7VS.js.map +1 -0
  38. package/dist/chunk-WJKYY5QR.js +1350 -0
  39. package/dist/chunk-WJKYY5QR.js.map +1 -0
  40. package/dist/chunk-XUML3MKV.js +945 -0
  41. package/dist/chunk-XUML3MKV.js.map +1 -0
  42. package/dist/document/index.d.ts +358 -0
  43. package/dist/document/index.js +25 -0
  44. package/dist/document/index.js.map +1 -0
  45. package/dist/filesystem/electron.d.ts +73 -0
  46. package/dist/filesystem/electron.js +17 -0
  47. package/dist/filesystem/electron.js.map +1 -0
  48. package/dist/filesystem/index.d.ts +228 -8
  49. package/dist/filesystem/index.js +133 -6
  50. package/dist/filesystem/index.js.map +1 -1
  51. package/dist/filesystem/indexeddb.d.ts +284 -0
  52. package/dist/filesystem/indexeddb.js +23 -0
  53. package/dist/filesystem/indexeddb.js.map +1 -0
  54. package/dist/filesystem/memory.d.ts +152 -0
  55. package/dist/filesystem/memory.js +13 -0
  56. package/dist/filesystem/memory.js.map +1 -0
  57. package/dist/filesystem/native.d.ts +136 -0
  58. package/dist/filesystem/native.js +28 -0
  59. package/dist/filesystem/native.js.map +1 -0
  60. package/dist/host/index.d.ts +32 -6
  61. package/dist/host/index.js +26 -27
  62. package/dist/host/index.js.map +1 -1
  63. package/dist/index.d.ts +14 -9
  64. package/dist/index.js +204 -8
  65. package/dist/index.js.map +1 -1
  66. package/dist/mcp/index.d.ts +33 -0
  67. package/dist/mcp/index.js +32 -0
  68. package/dist/mcp/index.js.map +1 -0
  69. package/dist/mcp/zod.d.ts +5765 -0
  70. package/dist/mcp/zod.js +724 -0
  71. package/dist/mcp/zod.js.map +1 -0
  72. package/dist/share/index.d.ts +43 -0
  73. package/dist/share/index.js +13 -0
  74. package/dist/share/index.js.map +1 -0
  75. package/dist/types-BEg5SQ1_.d.ts +301 -0
  76. package/dist/types-CX893hgH.d.ts +468 -0
  77. package/dist/types-CueK0tvU.d.ts +501 -0
  78. package/dist/vscode/index.d.ts +220 -0
  79. package/dist/vscode/index.js +383 -0
  80. package/dist/vscode/index.js.map +1 -0
  81. package/dist/workspace/index.d.ts +141 -3
  82. package/dist/workspace/index.js +28 -1
  83. package/dist/workspace/index.js.map +1 -1
  84. package/dist/workspace-path-CWVrcuPL.d.ts +21 -0
  85. package/package.json +50 -5
  86. package/dist/chunk-GUNM43XZ.js +0 -63
  87. package/dist/chunk-GUNM43XZ.js.map +0 -1
  88. package/dist/chunk-IM7LCQJ6.js +0 -850
  89. package/dist/chunk-IM7LCQJ6.js.map +0 -1
  90. package/dist/chunk-ME76RUMR.js.map +0 -1
  91. package/dist/filesystem/electron-provider.d.ts +0 -32
  92. package/dist/filesystem/electron-provider.d.ts.map +0 -1
  93. package/dist/filesystem/electron-provider.js +0 -64
  94. package/dist/filesystem/electron-provider.js.map +0 -1
  95. package/dist/filesystem/file-media-provider.d.ts +0 -23
  96. package/dist/filesystem/file-media-provider.d.ts.map +0 -1
  97. package/dist/filesystem/file-media-provider.js +0 -85
  98. package/dist/filesystem/file-media-provider.js.map +0 -1
  99. package/dist/filesystem/filesystem-content-container.d.ts +0 -24
  100. package/dist/filesystem/filesystem-content-container.d.ts.map +0 -1
  101. package/dist/filesystem/filesystem-content-container.js +0 -116
  102. package/dist/filesystem/filesystem-content-container.js.map +0 -1
  103. package/dist/filesystem/index.d.ts.map +0 -1
  104. package/dist/filesystem/indexeddb-content-container.d.ts +0 -20
  105. package/dist/filesystem/indexeddb-content-container.d.ts.map +0 -1
  106. package/dist/filesystem/indexeddb-content-container.js +0 -93
  107. package/dist/filesystem/indexeddb-content-container.js.map +0 -1
  108. package/dist/filesystem/indexeddb-provider.d.ts +0 -32
  109. package/dist/filesystem/indexeddb-provider.d.ts.map +0 -1
  110. package/dist/filesystem/indexeddb-provider.js +0 -295
  111. package/dist/filesystem/indexeddb-provider.js.map +0 -1
  112. package/dist/filesystem/native-provider.d.ts +0 -45
  113. package/dist/filesystem/native-provider.d.ts.map +0 -1
  114. package/dist/filesystem/native-provider.js +0 -336
  115. package/dist/filesystem/native-provider.js.map +0 -1
  116. package/dist/filesystem/types.d.ts +0 -50
  117. package/dist/filesystem/types.d.ts.map +0 -1
  118. package/dist/filesystem/types.js +0 -8
  119. package/dist/filesystem/types.js.map +0 -1
  120. package/dist/host/index.d.ts.map +0 -1
  121. package/dist/host/types.d.ts +0 -149
  122. package/dist/host/types.d.ts.map +0 -1
  123. package/dist/host/types.js +0 -10
  124. package/dist/host/types.js.map +0 -1
  125. package/dist/index-pgBHBQ9G.d.ts +0 -213
  126. package/dist/index.d.ts.map +0 -1
  127. package/dist/workspace/index.d.ts.map +0 -1
  128. package/dist/workspace/types.d.ts +0 -29
  129. package/dist/workspace/types.d.ts.map +0 -1
  130. package/dist/workspace/types.js +0 -6
  131. package/dist/workspace/types.js.map +0 -1
  132. package/dist/workspace/workspace-manager.d.ts +0 -35
  133. package/dist/workspace/workspace-manager.d.ts.map +0 -1
  134. package/dist/workspace/workspace-manager.js +0 -82
  135. package/dist/workspace/workspace-manager.js.map +0 -1
  136. package/src/filesystem/electron-provider.ts +0 -88
  137. package/src/filesystem/file-media-provider.ts +0 -103
  138. package/src/filesystem/filesystem-content-container.ts +0 -126
  139. package/src/filesystem/index.ts +0 -24
  140. package/src/filesystem/indexeddb-content-container.ts +0 -104
  141. package/src/filesystem/indexeddb-provider.ts +0 -345
  142. package/src/filesystem/native-provider.ts +0 -384
  143. package/src/filesystem/types.ts +0 -69
  144. package/src/host/index.ts +0 -47
  145. package/src/host/types.ts +0 -153
  146. package/src/index.ts +0 -9
  147. package/src/workspace/index.ts +0 -10
  148. package/src/workspace/types.ts +0 -29
  149. package/src/workspace/workspace-manager.ts +0 -90
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mcp/types.ts","../src/mcp/wire.ts"],"sourcesContent":["import type { WorkspacePath } from '../filesystem/workspace-path.js';\n\n/** Version of the exact DocBlocks MCP wire envelopes in this module. */\nexport const DOCBLOCKS_MCP_WIRE_VERSION = 1 as const;\n\nexport type DocBlocksMcpWireVersion = typeof DOCBLOCKS_MCP_WIRE_VERSION;\n\n/** Canonical artifact-first tools exposed by the local DocBlocks MCP server. */\nexport const DOCBLOCKS_MCP_TOOL_NAMES = [\n 'list_roots',\n 'get_conversion_report',\n 'convert_document',\n 'create_document_bundle',\n 'save_artifact',\n 'inspect_document',\n 'validate_document',\n 'preview_document',\n 'compare_documents',\n 'list_templates',\n 'describe_template',\n 'recommend_templates',\n 'describe_theme',\n 'infer_theme_from_file',\n 'inspect_pptx_layouts',\n 'apply_inferred_theme',\n 'list_formats',\n 'list_themes',\n 'list_transform_styles',\n] as const;\n\nexport type DocBlocksMcpToolName = (typeof DOCBLOCKS_MCP_TOOL_NAMES)[number];\n\nexport type AppliedOptionValue = string | number | boolean | null;\n\nexport interface AppliedOption {\n readonly name: string;\n readonly value: AppliedOptionValue;\n}\n\nexport interface EngineVersion {\n readonly name: string;\n readonly version: string;\n}\n\n/** Immutable, session-scoped output which can be read through an MCP resource. */\nexport interface ArtifactRef {\n readonly id: string;\n readonly uri: string;\n readonly format: string;\n readonly mimeType: string;\n readonly size: number;\n readonly sha256: string;\n readonly sourceFormat: string | null;\n readonly sourceSha256: string | null;\n readonly suggestedFilename: string;\n readonly appliedOptions: readonly AppliedOption[];\n readonly engineVersions: readonly EngineVersion[];\n readonly createdAt: string;\n readonly expiresAt: string | null;\n}\n\n/** Exactly one bounded, authority-scoped content source for a bundle asset. */\nexport type BundleAssetContentSource =\n | {\n readonly kind: 'file';\n readonly rootId: string;\n readonly path: WorkspacePath;\n }\n | {\n readonly kind: 'artifact';\n readonly uri: string;\n };\n\n/** An asset retained beside Markdown at one canonical path in a document bundle. */\nexport interface BundleAssetRef {\n readonly path: WorkspacePath;\n readonly source: BundleAssetContentSource;\n readonly mimeType: string | null;\n readonly altText: string | null;\n readonly credit: string | null;\n readonly license: string | null;\n}\n\n/** Inline Markdown. Use artifact or file sources for large or binary documents. */\nexport interface MarkdownDocumentSource {\n readonly kind: 'markdown';\n readonly markdown: string;\n readonly name: string | null;\n}\n\n/** A file selected from a server-configured, authority-scoped root. */\nexport interface FileDocumentSource {\n readonly kind: 'file';\n readonly rootId: string;\n readonly path: WorkspacePath;\n readonly format: string | null;\n}\n\n/** A previously produced immutable artifact. */\nexport interface ArtifactDocumentSource {\n readonly kind: 'artifact';\n readonly uri: string;\n}\n\n/** Markdown plus artifact-backed media, preserving a complete document tree. */\nexport interface BundleDocumentSource {\n readonly kind: 'bundle';\n readonly markdown: string;\n readonly assets: readonly BundleAssetRef[];\n readonly name: string | null;\n}\n\nexport type DocumentSource =\n | MarkdownDocumentSource\n | FileDocumentSource\n | ArtifactDocumentSource\n | BundleDocumentSource;\n\nexport type DiagnosticSeverity = 'info' | 'warning' | 'error';\n\nexport type DiagnosticStage =\n | 'resolve'\n | 'import'\n | 'parse'\n | 'inspect'\n | 'validate'\n | 'transform'\n | 'convert'\n | 'render'\n | 'export'\n | 'materialize'\n | 'compare';\n\nexport type DiagnosticLocation =\n | {\n readonly kind: 'source';\n readonly line: number;\n readonly column: number;\n }\n | {\n readonly kind: 'block';\n readonly blockId: string;\n readonly nodeType: string;\n }\n | {\n readonly kind: 'asset';\n readonly path: WorkspacePath;\n }\n | {\n readonly kind: 'item';\n readonly itemKind: 'page' | 'slide' | 'sheet' | 'frame';\n readonly index: number;\n };\n\n/** Stable, machine-actionable diagnostic shared by every MCP operation. */\nexport interface McpDiagnostic {\n readonly code: string;\n readonly severity: DiagnosticSeverity;\n readonly stage: DiagnosticStage;\n readonly format: string | null;\n readonly count: number;\n readonly message: string;\n readonly remediation: string | null;\n readonly retryable: boolean;\n readonly location: DiagnosticLocation | null;\n}\n\nexport interface McpErrorDetail {\n readonly code: string;\n readonly message: string;\n readonly stage: DiagnosticStage | null;\n readonly format: string | null;\n readonly hint: string | null;\n readonly retryable: boolean;\n readonly operationLoad: {\n readonly active: number;\n readonly capacity: number;\n } | null;\n}\n\n/** Exact failure envelope returned as structured content by MCP tools. */\nexport interface McpErrorResult {\n readonly version: DocBlocksMcpWireVersion;\n readonly kind: 'error';\n readonly result: null;\n readonly error: McpErrorDetail;\n}\n\n/** Exact success envelope used by MCP tool structured content. */\nexport interface McpSuccessResult<T> {\n readonly version: DocBlocksMcpWireVersion;\n readonly kind: 'success';\n readonly result: T;\n readonly error: null;\n}\n\nexport type ConversionFidelity = 'semantic' | 'editable-native' | 'rendered-fidelity' | 'hybrid';\n\nexport interface ConversionResult {\n readonly version: DocBlocksMcpWireVersion;\n readonly kind: 'conversion';\n readonly sourceFormat: string;\n readonly targetFormat: string;\n readonly artifact: ArtifactRef;\n readonly fidelity: ConversionFidelity;\n readonly appliedThemeId: string | null;\n readonly appliedTransformId: string | null;\n /** Source-side assets available to the conversion, including durable attribution metadata. */\n readonly sourceAssets: readonly AssetSummary[];\n readonly sourceAssetCount: number;\n readonly diagnostics: readonly McpDiagnostic[];\n}\n\n/** Successful payload returned by the canonical multi-target conversion tool. */\nexport interface ConvertDocumentResult {\n readonly results: readonly ConversionResult[];\n}\n\nexport interface DocumentMetadataSummary {\n readonly title: string | null;\n readonly author: string | null;\n readonly description: string | null;\n}\n\nexport interface DocumentStatistics {\n readonly blockCount: number;\n readonly wordCount: number;\n readonly characterCount: number;\n readonly tableCount: number;\n readonly linkCount: number;\n readonly assetCount: number;\n readonly pageCount: number | null;\n readonly slideCount: number | null;\n readonly sheetCount: number | null;\n}\n\nexport interface OutlineEntry {\n readonly id: string;\n readonly title: string;\n readonly level: number;\n readonly blockIndex: number;\n}\n\nexport interface SourceRange {\n readonly start: number;\n readonly end: number;\n}\n\nexport interface BlockSummary {\n readonly id: string;\n readonly type: string;\n readonly text: string;\n readonly wordCount: number;\n readonly templateId: string | null;\n readonly sourceRange: SourceRange | null;\n}\n\nexport interface TableSummary {\n readonly index: number;\n readonly rowCount: number;\n readonly columnCount: number;\n readonly headers: readonly string[];\n}\n\nexport interface LinkSummary {\n readonly index: number;\n readonly text: string;\n readonly target: string;\n}\n\nexport interface DocumentItemSummary {\n readonly kind: PreviewItemKind;\n readonly index: number;\n readonly label: string | null;\n readonly blockIds: readonly string[];\n}\n\nexport interface AssetSummary {\n readonly path: WorkspacePath;\n readonly mimeType: string;\n readonly size: number;\n readonly sha256: string | null;\n readonly altText: string | null;\n readonly credit: string | null;\n readonly license: string | null;\n}\n\nexport interface ThemeSummary {\n readonly id: string;\n readonly name: string;\n readonly source: 'built-in' | 'document' | 'inferred';\n readonly layouts: readonly string[];\n}\n\nexport interface InspectionResult {\n readonly version: DocBlocksMcpWireVersion;\n readonly kind: 'inspection';\n readonly sourceFormat: string;\n readonly metadata: DocumentMetadataSummary;\n readonly statistics: DocumentStatistics;\n readonly outline: readonly OutlineEntry[];\n readonly blocks: readonly BlockSummary[];\n readonly blockOffset: number;\n readonly nextCursor: string | null;\n readonly tables: readonly TableSummary[];\n readonly links: readonly LinkSummary[];\n readonly items: readonly DocumentItemSummary[];\n readonly assets: readonly AssetSummary[];\n readonly theme: ThemeSummary | null;\n readonly truncated: boolean;\n readonly detailsTruncated: boolean;\n readonly diagnostics: readonly McpDiagnostic[];\n}\n\nexport interface ValidationSummary {\n readonly errorCount: number;\n readonly warningCount: number;\n readonly infoCount: number;\n}\n\nexport interface ValidationResult {\n readonly version: DocBlocksMcpWireVersion;\n readonly kind: 'validation';\n readonly sourceFormat: string;\n readonly targetFormat: string | null;\n readonly valid: boolean;\n readonly summary: ValidationSummary;\n readonly diagnostics: readonly McpDiagnostic[];\n}\n\nexport type PreviewItemKind = 'page' | 'slide' | 'sheet' | 'frame';\n\nexport interface PreviewItem {\n readonly kind: PreviewItemKind;\n readonly index: number;\n readonly label: string | null;\n readonly artifact: ArtifactRef;\n readonly width: number;\n readonly height: number;\n}\n\nexport interface PreviewResult {\n readonly version: DocBlocksMcpWireVersion;\n readonly kind: 'preview';\n readonly sourceFormat: string;\n readonly previewBasis: 'source-render' | 'reconstructed-import' | 'native-extracted';\n readonly totalItems: number;\n readonly items: readonly PreviewItem[];\n readonly truncated: boolean;\n readonly diagnostics: readonly McpDiagnostic[];\n}\n\nexport type ComparisonCategory =\n | 'text'\n | 'structure'\n | 'table'\n | 'media'\n | 'theme'\n | 'layout'\n | 'metadata'\n | 'timing'\n | 'accessibility';\n\nexport type ComparisonStatus = 'retained' | 'changed' | 'degraded' | 'omitted' | 'added';\n\nexport interface ComparisonChange {\n readonly category: ComparisonCategory;\n readonly status: ComparisonStatus;\n readonly path: string | null;\n readonly message: string;\n}\n\nexport interface ComparisonMetric {\n readonly name: string;\n readonly leftValue: number;\n readonly rightValue: number;\n readonly similarity: number;\n}\n\nexport interface ComparisonResult {\n readonly version: DocBlocksMcpWireVersion;\n readonly kind: 'comparison';\n readonly leftFormat: string;\n readonly rightFormat: string;\n readonly equivalent: boolean;\n readonly score: number;\n readonly changes: readonly ComparisonChange[];\n readonly metrics: readonly ComparisonMetric[];\n readonly diagnostics: readonly McpDiagnostic[];\n}\n\nexport interface RootGrantSummary {\n readonly id: string;\n readonly label: string;\n readonly read: boolean;\n readonly write: boolean;\n}\n\nexport interface ListRootsResult {\n readonly roots: readonly RootGrantSummary[];\n}\n\nexport interface SavedArtifactDestination {\n readonly rootId: string;\n readonly path: WorkspacePath;\n}\n\nexport interface SaveArtifactResult {\n readonly artifact: ArtifactRef;\n readonly destination: SavedArtifactDestination;\n readonly sha256: string;\n}\n\nexport type FormatDirectionCapability =\n | {\n readonly supported: true;\n readonly tool: 'inspect_document' | 'convert_document';\n }\n | {\n readonly supported: false;\n readonly excludedReason: string;\n };\n\nexport interface FormatCapabilitySummary {\n readonly id: string;\n readonly label: string;\n readonly mimeType: string;\n readonly extensions: readonly string[];\n readonly import: FormatDirectionCapability;\n readonly export: FormatDirectionCapability;\n}\n\nexport interface ListFormatsResult {\n readonly formats: readonly FormatCapabilitySummary[];\n}\n\nexport interface ThemeCatalogEntry {\n readonly id: string;\n readonly name: string;\n readonly description?: string;\n}\n\nexport interface ListThemesResult {\n readonly themes: readonly ThemeCatalogEntry[];\n}\n\nexport interface TransformStyleSummary {\n readonly id: string;\n readonly name: string;\n readonly description: string;\n}\n\nexport interface ListTransformStylesResult {\n readonly styles: readonly TransformStyleSummary[];\n}\n\nexport interface TemplateSummary {\n readonly id: string;\n readonly label: string;\n readonly description: string;\n}\n\nexport interface ListTemplatesResult {\n readonly templates: readonly TemplateSummary[];\n}\n\nexport interface TemplateInputSummary {\n readonly key: string;\n readonly description: string;\n readonly type: string;\n readonly required: boolean;\n readonly values: readonly string[];\n readonly valueHint: string | null;\n}\n\nexport interface DescribedTemplate extends TemplateSummary {\n readonly inputs: readonly TemplateInputSummary[];\n}\n\nexport interface DescribeTemplateResult {\n readonly template: DescribedTemplate;\n readonly annotationExample: string;\n}\n\nexport interface TemplateContentProfile {\n readonly hasImage: boolean;\n readonly imageCount: number;\n readonly hasVideo: boolean;\n readonly hasBlockquote: boolean;\n readonly hasList: boolean;\n readonly hasTable: boolean;\n readonly hasDate: boolean;\n readonly hasNumberHighlight: boolean;\n readonly wordCount: number;\n readonly hasAsciiDiagram: boolean;\n readonly hasTimeline: boolean;\n readonly hasTree: boolean;\n}\n\nexport interface TemplateRecommendation {\n readonly blockId: string;\n readonly title: string | null;\n readonly profile: TemplateContentProfile;\n readonly recommendedTemplateIds: readonly string[];\n}\n\nexport interface RecommendTemplatesResult {\n readonly recommendations: readonly TemplateRecommendation[];\n readonly totalBlocks: number;\n readonly truncated: boolean;\n}\n\nexport interface ThemeDescriptionColors {\n readonly primary: string;\n readonly secondary: string;\n readonly background: string;\n readonly text: string;\n readonly highlight: string;\n}\n\nexport interface ThemeDescription {\n readonly id: string;\n readonly name: string;\n readonly description: string;\n readonly colors: ThemeDescriptionColors;\n readonly bodyFont: string;\n readonly titleFont: string;\n}\n\nexport interface DescribeThemeResult {\n readonly theme: ThemeDescription;\n readonly source: 'built-in' | 'document';\n}\n\nexport interface InferredLayoutSummary {\n readonly id: string;\n readonly name: string;\n readonly description: string;\n}\n\nexport interface InferThemeResult {\n readonly sourceFormat: string;\n readonly sourceSha256: string;\n readonly theme: ThemeDescription;\n readonly layouts: readonly InferredLayoutSummary[];\n readonly warnings: readonly string[];\n}\n\nexport interface PptxSlideSize {\n readonly cx: number;\n readonly cy: number;\n}\n\nexport interface PptxLayoutSummary {\n readonly layoutPath: string;\n readonly name: string;\n readonly masterName: string | null;\n readonly type: string | null;\n readonly slideCount: number;\n readonly verdict: 'builtin' | 'custom' | 'plain' | 'skip';\n readonly templateId: string | null;\n readonly notes: readonly string[];\n}\n\nexport interface InspectPptxLayoutsResult {\n readonly slideSize: PptxSlideSize;\n readonly layouts: readonly PptxLayoutSummary[];\n}\n\nexport interface ApplyInferredThemeResult {\n readonly result: ConversionResult;\n readonly theme: ThemeDescription;\n readonly layoutIds: readonly string[];\n readonly warnings: readonly string[];\n}\n\n/**\n * Safe materialization never overwrites by default. Replacement is available\n * only as a process-serialized, hash-conditional update which revalidates the\n * observed target bytes immediately before atomic publication.\n */\nexport type MaterializationOptions =\n | {\n readonly rootId: string;\n readonly path: WorkspacePath;\n readonly ifExists: 'error';\n readonly expectedSha256: null;\n }\n | {\n readonly rootId: string;\n readonly path: WorkspacePath;\n readonly ifExists: 'replace';\n readonly expectedSha256: string;\n };\n","import { tryParseWorkspacePath, type WorkspacePath } from '../filesystem/workspace-path.js';\nimport {\n DOCBLOCKS_MCP_WIRE_VERSION,\n type AppliedOption,\n type ArtifactRef,\n type AssetSummary,\n type BlockSummary,\n type BundleAssetRef,\n type BundleAssetContentSource,\n type ComparisonChange,\n type ComparisonMetric,\n type ComparisonResult,\n type ConversionFidelity,\n type ConversionResult,\n type DiagnosticLocation,\n type DiagnosticSeverity,\n type DiagnosticStage,\n type DocumentMetadataSummary,\n type DocumentItemSummary,\n type DocumentSource,\n type DocumentStatistics,\n type EngineVersion,\n type InspectionResult,\n type LinkSummary,\n type MaterializationOptions,\n type McpDiagnostic,\n type McpErrorResult,\n type OutlineEntry,\n type PreviewItem,\n type PreviewResult,\n type SourceRange,\n type ThemeSummary,\n type TableSummary,\n type ValidationResult,\n type ValidationSummary,\n} from './types.js';\n\n/** Quantitative limits for untrusted MCP payloads. */\nexport const MCP_WIRE_LIMITS = Object.freeze({\n identifierCharacters: 256,\n formatCharacters: 64,\n mimeTypeCharacters: 256,\n labelCharacters: 1_024,\n pathCharacters: 4_096,\n uriCharacters: 8_192,\n messageCharacters: 4_000,\n excerptCharacters: 4_096,\n documentCharacters: 20 * 1024 * 1024,\n artifactBytes: 500 * 1024 * 1024,\n bundleAssets: 256,\n arrayEntries: 10_000,\n previewItems: 1_000,\n imageDimension: 32_768,\n});\n\nconst IDENTIFIER_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]*$/u;\nconst ENGINE_NAME_PATTERN =\n /^(?:[A-Za-z0-9][A-Za-z0-9._:-]*|@[A-Za-z0-9][A-Za-z0-9._-]*\\/[A-Za-z0-9][A-Za-z0-9._-]*)$/u;\nconst FORMAT_PATTERN = /^[a-z0-9][a-z0-9.+_-]*$/u;\nconst MIME_TYPE_PATTERN = /^[a-z0-9!#$&^_.+-]+\\/[a-z0-9!#$&^_.+-]+$/iu;\nconst SHA256_PATTERN = /^[a-f0-9]{64}$/u;\nconst ISO_TIMESTAMP_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/u;\n\nexport function parseArtifactRef(value: unknown): ArtifactRef | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, [\n 'id',\n 'uri',\n 'format',\n 'mimeType',\n 'size',\n 'sha256',\n 'sourceFormat',\n 'sourceSha256',\n 'suggestedFilename',\n 'appliedOptions',\n 'engineVersions',\n 'createdAt',\n 'expiresAt',\n ])\n ) {\n return null;\n }\n\n const {\n id,\n uri,\n format,\n mimeType,\n size,\n sha256,\n sourceFormat,\n sourceSha256,\n suggestedFilename,\n createdAt,\n expiresAt,\n } = value;\n const appliedOptions = parseArray(value.appliedOptions, parseAppliedOption);\n const engineVersions = parseArray(value.engineVersions, parseEngineVersion);\n if (\n !isIdentifier(id) ||\n !isArtifactUri(uri, id) ||\n !isFormat(format) ||\n !isMimeType(mimeType) ||\n !isBoundedInteger(size, 0, MCP_WIRE_LIMITS.artifactBytes) ||\n !isSha256(sha256) ||\n !(sourceFormat === null || isFormat(sourceFormat)) ||\n !(sourceSha256 === null || isSha256(sourceSha256)) ||\n !isSafeFilename(suggestedFilename) ||\n appliedOptions === null ||\n engineVersions === null ||\n hasDuplicateNames(appliedOptions) ||\n hasDuplicateNames(engineVersions) ||\n !isIsoTimestamp(createdAt) ||\n !(expiresAt === null || isIsoTimestamp(expiresAt)) ||\n (expiresAt !== null && Date.parse(expiresAt) <= Date.parse(createdAt))\n ) {\n return null;\n }\n\n return {\n id,\n uri,\n format,\n mimeType,\n size,\n sha256,\n sourceFormat,\n sourceSha256,\n suggestedFilename,\n appliedOptions,\n engineVersions,\n createdAt,\n expiresAt,\n };\n}\n\nexport function parseDocumentSource(value: unknown): DocumentSource | null {\n if (!isRecord(value) || typeof value.kind !== 'string') return null;\n\n switch (value.kind) {\n case 'markdown': {\n if (!hasExactKeys(value, ['kind', 'markdown', 'name'])) return null;\n const { markdown, name } = value;\n if (\n !isBoundedString(markdown, MCP_WIRE_LIMITS.documentCharacters) ||\n !isNullableBoundedString(name, MCP_WIRE_LIMITS.labelCharacters)\n ) {\n return null;\n }\n return { kind: 'markdown', markdown, name };\n }\n case 'file': {\n if (!hasExactKeys(value, ['kind', 'rootId', 'path', 'format'])) return null;\n const { rootId, path, format } = value;\n const parsedPath = parseNonRootWorkspacePath(path);\n if (!isIdentifier(rootId) || parsedPath === null || !(format === null || isFormat(format))) {\n return null;\n }\n return { kind: 'file', rootId, path: parsedPath, format };\n }\n case 'artifact': {\n if (!hasExactKeys(value, ['kind', 'uri']) || !isArtifactUri(value.uri)) return null;\n return { kind: 'artifact', uri: value.uri };\n }\n case 'bundle': {\n if (!hasExactKeys(value, ['kind', 'markdown', 'assets', 'name'])) return null;\n const { markdown, name } = value;\n if (\n !isBoundedString(markdown, MCP_WIRE_LIMITS.documentCharacters) ||\n !isNullableBoundedString(name, MCP_WIRE_LIMITS.labelCharacters)\n ) {\n return null;\n }\n const assets = parseArray(value.assets, parseBundleAssetRef, MCP_WIRE_LIMITS.bundleAssets);\n if (assets === null || hasDuplicatePaths(assets)) return null;\n return { kind: 'bundle', markdown, assets, name };\n }\n default:\n return null;\n }\n}\n\nexport function parseMcpDiagnostic(value: unknown): McpDiagnostic | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, [\n 'code',\n 'severity',\n 'stage',\n 'format',\n 'count',\n 'message',\n 'remediation',\n 'retryable',\n 'location',\n ])\n ) {\n return null;\n }\n\n const { code, severity, stage, format, count, message, remediation, retryable } = value;\n const location = parseNullable(value.location, parseDiagnosticLocation);\n if (\n !isIdentifier(code) ||\n !isDiagnosticSeverity(severity) ||\n !isDiagnosticStage(stage) ||\n !(format === null || isFormat(format)) ||\n !isBoundedInteger(count, 1, Number.MAX_SAFE_INTEGER) ||\n !isBoundedString(message, MCP_WIRE_LIMITS.messageCharacters, 1) ||\n !isNullableBoundedString(remediation, MCP_WIRE_LIMITS.messageCharacters) ||\n typeof retryable !== 'boolean' ||\n location === undefined\n ) {\n return null;\n }\n\n return {\n code,\n severity,\n stage,\n format,\n count,\n message,\n remediation,\n retryable,\n location,\n };\n}\n\nexport function parseMcpErrorResult(value: unknown): McpErrorResult | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['version', 'kind', 'result', 'error']) ||\n value.version !== DOCBLOCKS_MCP_WIRE_VERSION ||\n value.kind !== 'error' ||\n value.result !== null ||\n !isRecord(value.error) ||\n !hasExactKeys(value.error, [\n 'code',\n 'message',\n 'stage',\n 'format',\n 'hint',\n 'retryable',\n 'operationLoad',\n ])\n ) {\n return null;\n }\n const { code, message, stage, format, hint, retryable, operationLoad } = value.error;\n if (\n !isIdentifier(code) ||\n !isBoundedString(message, MCP_WIRE_LIMITS.messageCharacters, 1) ||\n !(stage === null || isDiagnosticStage(stage)) ||\n !(format === null || isFormat(format)) ||\n !isNullableBoundedString(hint, MCP_WIRE_LIMITS.messageCharacters) ||\n typeof retryable !== 'boolean' ||\n !(\n operationLoad === null ||\n (isRecord(operationLoad) &&\n hasExactKeys(operationLoad, ['active', 'capacity']) &&\n isBoundedInteger(operationLoad.active, 0, 32) &&\n isBoundedInteger(operationLoad.capacity, 1, 32) &&\n operationLoad.active <= operationLoad.capacity)\n )\n ) {\n return null;\n }\n return {\n version: DOCBLOCKS_MCP_WIRE_VERSION,\n kind: 'error',\n result: null,\n error: {\n code,\n message,\n stage,\n format,\n hint,\n retryable,\n operationLoad:\n operationLoad === null\n ? null\n : {\n active: operationLoad.active as number,\n capacity: operationLoad.capacity as number,\n },\n },\n };\n}\n\nexport function parseConversionResult(value: unknown): ConversionResult | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, [\n 'version',\n 'kind',\n 'sourceFormat',\n 'targetFormat',\n 'artifact',\n 'fidelity',\n 'appliedThemeId',\n 'appliedTransformId',\n 'sourceAssets',\n 'sourceAssetCount',\n 'diagnostics',\n ]) ||\n value.version !== DOCBLOCKS_MCP_WIRE_VERSION ||\n value.kind !== 'conversion' ||\n !isFormat(value.sourceFormat) ||\n !isFormat(value.targetFormat) ||\n !isConversionFidelity(value.fidelity) ||\n !isNullableIdentifier(value.appliedThemeId) ||\n !isNullableIdentifier(value.appliedTransformId) ||\n !isBoundedInteger(value.sourceAssetCount, 0, MCP_WIRE_LIMITS.arrayEntries)\n ) {\n return null;\n }\n\n const artifact = parseArtifactRef(value.artifact);\n const sourceAssets = parseArray(value.sourceAssets, parseAssetSummary);\n const diagnostics = parseArray(value.diagnostics, parseMcpDiagnostic);\n if (\n artifact === null ||\n sourceAssets === null ||\n diagnostics === null ||\n sourceAssets.length !== value.sourceAssetCount ||\n hasDuplicatePaths(sourceAssets) ||\n artifact.format !== value.targetFormat ||\n (artifact.sourceFormat !== null && artifact.sourceFormat !== value.sourceFormat)\n ) {\n return null;\n }\n\n return {\n version: DOCBLOCKS_MCP_WIRE_VERSION,\n kind: 'conversion',\n sourceFormat: value.sourceFormat,\n targetFormat: value.targetFormat,\n artifact,\n fidelity: value.fidelity,\n appliedThemeId: value.appliedThemeId,\n appliedTransformId: value.appliedTransformId,\n sourceAssets,\n sourceAssetCount: value.sourceAssetCount,\n diagnostics,\n };\n}\n\nexport function parseInspectionResult(value: unknown): InspectionResult | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, [\n 'version',\n 'kind',\n 'sourceFormat',\n 'metadata',\n 'statistics',\n 'outline',\n 'blocks',\n 'blockOffset',\n 'nextCursor',\n 'tables',\n 'links',\n 'items',\n 'assets',\n 'theme',\n 'truncated',\n 'detailsTruncated',\n 'diagnostics',\n ]) ||\n value.version !== DOCBLOCKS_MCP_WIRE_VERSION ||\n value.kind !== 'inspection' ||\n !isFormat(value.sourceFormat) ||\n !isBoundedInteger(value.blockOffset, 0, MCP_WIRE_LIMITS.arrayEntries) ||\n !isNullableBoundedString(value.nextCursor, MCP_WIRE_LIMITS.identifierCharacters) ||\n typeof value.truncated !== 'boolean' ||\n typeof value.detailsTruncated !== 'boolean'\n ) {\n return null;\n }\n\n const metadata = parseDocumentMetadata(value.metadata);\n const statistics = parseDocumentStatistics(value.statistics);\n const outline = parseArray(value.outline, parseOutlineEntry);\n const blocks = parseArray(value.blocks, parseBlockSummary);\n const tables = parseArray(value.tables, parseTableSummary);\n const links = parseArray(value.links, parseLinkSummary);\n const items = parseArray(value.items, parseDocumentItemSummary);\n const assets = parseArray(value.assets, parseAssetSummary);\n const theme = parseNullable(value.theme, parseThemeSummary);\n const diagnostics = parseArray(value.diagnostics, parseMcpDiagnostic);\n if (\n metadata === null ||\n statistics === null ||\n outline === null ||\n blocks === null ||\n tables === null ||\n links === null ||\n items === null ||\n assets === null ||\n theme === undefined ||\n diagnostics === null ||\n statistics.blockCount < value.blockOffset + blocks.length ||\n statistics.assetCount < assets.length ||\n (!value.truncated && statistics.blockCount !== value.blockOffset + blocks.length) ||\n value.truncated !== (value.nextCursor !== null) ||\n statistics.tableCount < tables.length ||\n statistics.linkCount < links.length ||\n hasDuplicateIds(outline) ||\n hasDuplicateIds(blocks) ||\n hasDuplicateIndexes(tables) ||\n hasDuplicateIndexes(links) ||\n hasDuplicateItemIndexes(items) ||\n hasDuplicatePaths(assets) ||\n outline.some((entry) => entry.blockIndex >= statistics.blockCount) ||\n blocks.some(\n (block) => block.sourceRange !== null && block.sourceRange.end > statistics.characterCount,\n )\n ) {\n return null;\n }\n\n return {\n version: DOCBLOCKS_MCP_WIRE_VERSION,\n kind: 'inspection',\n sourceFormat: value.sourceFormat,\n metadata,\n statistics,\n outline,\n blocks,\n blockOffset: value.blockOffset,\n nextCursor: value.nextCursor,\n tables,\n links,\n items,\n assets,\n theme,\n truncated: value.truncated,\n detailsTruncated: value.detailsTruncated,\n diagnostics,\n };\n}\n\nexport function parseValidationResult(value: unknown): ValidationResult | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, [\n 'version',\n 'kind',\n 'sourceFormat',\n 'targetFormat',\n 'valid',\n 'summary',\n 'diagnostics',\n ]) ||\n value.version !== DOCBLOCKS_MCP_WIRE_VERSION ||\n value.kind !== 'validation' ||\n !isFormat(value.sourceFormat) ||\n !(value.targetFormat === null || isFormat(value.targetFormat)) ||\n typeof value.valid !== 'boolean'\n ) {\n return null;\n }\n\n const summary = parseValidationSummary(value.summary);\n const diagnostics = parseArray(value.diagnostics, parseMcpDiagnostic);\n if (summary === null || diagnostics === null) return null;\n const actualSummary = summarizeDiagnostics(diagnostics);\n if (\n summary.errorCount !== actualSummary.errorCount ||\n summary.warningCount !== actualSummary.warningCount ||\n summary.infoCount !== actualSummary.infoCount ||\n value.valid !== (summary.errorCount === 0)\n ) {\n return null;\n }\n\n return {\n version: DOCBLOCKS_MCP_WIRE_VERSION,\n kind: 'validation',\n sourceFormat: value.sourceFormat,\n targetFormat: value.targetFormat,\n valid: value.valid,\n summary,\n diagnostics,\n };\n}\n\nexport function parsePreviewResult(value: unknown): PreviewResult | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, [\n 'version',\n 'kind',\n 'sourceFormat',\n 'previewBasis',\n 'totalItems',\n 'items',\n 'truncated',\n 'diagnostics',\n ]) ||\n value.version !== DOCBLOCKS_MCP_WIRE_VERSION ||\n value.kind !== 'preview' ||\n !isFormat(value.sourceFormat) ||\n !(\n value.previewBasis === 'source-render' ||\n value.previewBasis === 'reconstructed-import' ||\n value.previewBasis === 'native-extracted'\n ) ||\n !isBoundedInteger(value.totalItems, 0, Number.MAX_SAFE_INTEGER) ||\n typeof value.truncated !== 'boolean'\n ) {\n return null;\n }\n\n const items = parseArray(value.items, parsePreviewItem, MCP_WIRE_LIMITS.previewItems);\n const diagnostics = parseArray(value.diagnostics, parseMcpDiagnostic);\n if (\n items === null ||\n diagnostics === null ||\n value.totalItems < items.length ||\n (!value.truncated && value.totalItems !== items.length) ||\n hasDuplicatePreviewIndexes(items) ||\n items.some(\n (item) =>\n item.artifact.sourceFormat !== null && item.artifact.sourceFormat !== value.sourceFormat,\n )\n ) {\n return null;\n }\n\n return {\n version: DOCBLOCKS_MCP_WIRE_VERSION,\n kind: 'preview',\n sourceFormat: value.sourceFormat,\n previewBasis: value.previewBasis,\n totalItems: value.totalItems,\n items,\n truncated: value.truncated,\n diagnostics,\n };\n}\n\nexport function parseComparisonResult(value: unknown): ComparisonResult | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, [\n 'version',\n 'kind',\n 'leftFormat',\n 'rightFormat',\n 'equivalent',\n 'score',\n 'changes',\n 'metrics',\n 'diagnostics',\n ]) ||\n value.version !== DOCBLOCKS_MCP_WIRE_VERSION ||\n value.kind !== 'comparison' ||\n !isFormat(value.leftFormat) ||\n !isFormat(value.rightFormat) ||\n typeof value.equivalent !== 'boolean' ||\n !isBoundedNumber(value.score, 0, 1)\n ) {\n return null;\n }\n\n const changes = parseArray(value.changes, parseComparisonChange);\n const metrics = parseArray(value.metrics, parseComparisonMetric);\n const diagnostics = parseArray(value.diagnostics, parseMcpDiagnostic);\n if (\n changes === null ||\n metrics === null ||\n diagnostics === null ||\n hasDuplicateNames(metrics) ||\n (value.equivalent &&\n (value.score !== 1 || changes.some((change) => change.status !== 'retained')))\n ) {\n return null;\n }\n\n return {\n version: DOCBLOCKS_MCP_WIRE_VERSION,\n kind: 'comparison',\n leftFormat: value.leftFormat,\n rightFormat: value.rightFormat,\n equivalent: value.equivalent,\n score: value.score,\n changes,\n metrics,\n diagnostics,\n };\n}\n\nexport function parseMaterializationOptions(value: unknown): MaterializationOptions | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['rootId', 'path', 'ifExists', 'expectedSha256']) ||\n !isIdentifier(value.rootId)\n ) {\n return null;\n }\n const path = parseNonRootWorkspacePath(value.path);\n if (path === null) return null;\n\n if (value.ifExists === 'error' && value.expectedSha256 === null) {\n return { rootId: value.rootId, path, ifExists: 'error', expectedSha256: null };\n }\n if (value.ifExists === 'replace' && isSha256(value.expectedSha256)) {\n return {\n rootId: value.rootId,\n path,\n ifExists: 'replace',\n expectedSha256: value.expectedSha256,\n };\n }\n return null;\n}\n\nfunction parseBundleAssetRef(value: unknown): BundleAssetRef | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['path', 'source', 'mimeType', 'altText', 'credit', 'license'])\n ) {\n return null;\n }\n const path = parseNonRootWorkspacePath(value.path);\n const source = parseBundleAssetContentSource(value.source);\n if (\n path === null ||\n source === null ||\n !(value.mimeType === null || isMimeType(value.mimeType)) ||\n !isNullableBoundedString(value.altText, MCP_WIRE_LIMITS.labelCharacters) ||\n !isNullableBoundedString(value.credit, MCP_WIRE_LIMITS.labelCharacters) ||\n !isNullableBoundedString(value.license, MCP_WIRE_LIMITS.labelCharacters)\n ) {\n return null;\n }\n return {\n path,\n source,\n mimeType: value.mimeType,\n altText: value.altText,\n credit: value.credit,\n license: value.license,\n };\n}\n\nfunction parseBundleAssetContentSource(value: unknown): BundleAssetContentSource | null {\n if (!isRecord(value) || typeof value.kind !== 'string') return null;\n if (value.kind === 'file') {\n if (!hasExactKeys(value, ['kind', 'rootId', 'path']) || !isIdentifier(value.rootId)) {\n return null;\n }\n const path = parseNonRootWorkspacePath(value.path);\n return path === null ? null : { kind: 'file', rootId: value.rootId, path };\n }\n if (value.kind === 'artifact') {\n return hasExactKeys(value, ['kind', 'uri']) && isArtifactUri(value.uri)\n ? { kind: 'artifact', uri: value.uri }\n : null;\n }\n return null;\n}\n\nfunction parseDiagnosticLocation(value: unknown): DiagnosticLocation | null {\n if (!isRecord(value) || typeof value.kind !== 'string') return null;\n switch (value.kind) {\n case 'source':\n return hasExactKeys(value, ['kind', 'line', 'column']) &&\n isBoundedInteger(value.line, 1, Number.MAX_SAFE_INTEGER) &&\n isBoundedInteger(value.column, 1, Number.MAX_SAFE_INTEGER)\n ? { kind: 'source', line: value.line, column: value.column }\n : null;\n case 'block':\n return hasExactKeys(value, ['kind', 'blockId', 'nodeType']) &&\n isIdentifier(value.blockId) &&\n isIdentifier(value.nodeType)\n ? { kind: 'block', blockId: value.blockId, nodeType: value.nodeType }\n : null;\n case 'asset': {\n if (!hasExactKeys(value, ['kind', 'path'])) return null;\n const path = parseNonRootWorkspacePath(value.path);\n return path === null ? null : { kind: 'asset', path };\n }\n case 'item':\n return hasExactKeys(value, ['kind', 'itemKind', 'index']) &&\n isPreviewItemKind(value.itemKind) &&\n isBoundedInteger(value.index, 0, Number.MAX_SAFE_INTEGER)\n ? { kind: 'item', itemKind: value.itemKind, index: value.index }\n : null;\n default:\n return null;\n }\n}\n\nfunction parseAppliedOption(value: unknown): AppliedOption | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['name', 'value']) ||\n !isIdentifier(value.name) ||\n !isAppliedOptionValue(value.value)\n ) {\n return null;\n }\n return { name: value.name, value: value.value };\n}\n\nfunction parseEngineVersion(value: unknown): EngineVersion | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['name', 'version']) ||\n !isEngineName(value.name) ||\n !isBoundedString(value.version, MCP_WIRE_LIMITS.identifierCharacters, 1)\n ) {\n return null;\n }\n return { name: value.name, version: value.version };\n}\n\nfunction parseDocumentMetadata(value: unknown): DocumentMetadataSummary | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['title', 'author', 'description']) ||\n !isNullableBoundedString(value.title, MCP_WIRE_LIMITS.labelCharacters) ||\n !isNullableBoundedString(value.author, MCP_WIRE_LIMITS.labelCharacters) ||\n !isNullableBoundedString(value.description, MCP_WIRE_LIMITS.messageCharacters)\n ) {\n return null;\n }\n return { title: value.title, author: value.author, description: value.description };\n}\n\nfunction parseDocumentStatistics(value: unknown): DocumentStatistics | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, [\n 'blockCount',\n 'wordCount',\n 'characterCount',\n 'tableCount',\n 'linkCount',\n 'assetCount',\n 'pageCount',\n 'slideCount',\n 'sheetCount',\n ]) ||\n !isNonNegativeInteger(value.blockCount) ||\n !isNonNegativeInteger(value.wordCount) ||\n !isNonNegativeInteger(value.characterCount) ||\n !isNonNegativeInteger(value.tableCount) ||\n !isNonNegativeInteger(value.linkCount) ||\n !isNonNegativeInteger(value.assetCount) ||\n !isNullableNonNegativeInteger(value.pageCount) ||\n !isNullableNonNegativeInteger(value.slideCount) ||\n !isNullableNonNegativeInteger(value.sheetCount)\n ) {\n return null;\n }\n return {\n blockCount: value.blockCount,\n wordCount: value.wordCount,\n characterCount: value.characterCount,\n tableCount: value.tableCount,\n linkCount: value.linkCount,\n assetCount: value.assetCount,\n pageCount: value.pageCount,\n slideCount: value.slideCount,\n sheetCount: value.sheetCount,\n };\n}\n\nfunction parseOutlineEntry(value: unknown): OutlineEntry | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['id', 'title', 'level', 'blockIndex']) ||\n !isIdentifier(value.id) ||\n !isBoundedString(value.title, MCP_WIRE_LIMITS.labelCharacters, 1) ||\n !isBoundedInteger(value.level, 1, 6) ||\n !isNonNegativeInteger(value.blockIndex)\n ) {\n return null;\n }\n return { id: value.id, title: value.title, level: value.level, blockIndex: value.blockIndex };\n}\n\nfunction parseBlockSummary(value: unknown): BlockSummary | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['id', 'type', 'text', 'wordCount', 'templateId', 'sourceRange']) ||\n !isIdentifier(value.id) ||\n !isIdentifier(value.type) ||\n !isBoundedString(value.text, MCP_WIRE_LIMITS.excerptCharacters) ||\n !isNonNegativeInteger(value.wordCount) ||\n !isNullableIdentifier(value.templateId)\n ) {\n return null;\n }\n const sourceRange = parseNullable(value.sourceRange, parseSourceRange);\n if (sourceRange === undefined) return null;\n return {\n id: value.id,\n type: value.type,\n text: value.text,\n wordCount: value.wordCount,\n templateId: value.templateId,\n sourceRange,\n };\n}\n\nfunction parseSourceRange(value: unknown): SourceRange | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['start', 'end']) ||\n !isNonNegativeInteger(value.start) ||\n !isNonNegativeInteger(value.end) ||\n value.end < value.start\n ) {\n return null;\n }\n return { start: value.start, end: value.end };\n}\n\nfunction parseTableSummary(value: unknown): TableSummary | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['index', 'rowCount', 'columnCount', 'headers']) ||\n !isNonNegativeInteger(value.index) ||\n !isNonNegativeInteger(value.rowCount) ||\n !isNonNegativeInteger(value.columnCount)\n ) {\n return null;\n }\n const headers = parseArray(value.headers, (entry) =>\n isBoundedString(entry, MCP_WIRE_LIMITS.labelCharacters) ? entry : null,\n );\n if (headers === null || headers.length > value.columnCount) return null;\n return {\n index: value.index,\n rowCount: value.rowCount,\n columnCount: value.columnCount,\n headers,\n };\n}\n\nfunction parseLinkSummary(value: unknown): LinkSummary | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['index', 'text', 'target']) ||\n !isNonNegativeInteger(value.index) ||\n !isBoundedString(value.text, MCP_WIRE_LIMITS.labelCharacters) ||\n !isBoundedString(value.target, MCP_WIRE_LIMITS.uriCharacters, 1)\n ) {\n return null;\n }\n return { index: value.index, text: value.text, target: value.target };\n}\n\nfunction parseDocumentItemSummary(value: unknown): DocumentItemSummary | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['kind', 'index', 'label', 'blockIds']) ||\n !isPreviewItemKind(value.kind) ||\n !isNonNegativeInteger(value.index) ||\n !isNullableBoundedString(value.label, MCP_WIRE_LIMITS.labelCharacters)\n ) {\n return null;\n }\n const blockIds = parseArray(value.blockIds, (entry) => (isIdentifier(entry) ? entry : null));\n if (blockIds === null || new Set(blockIds).size !== blockIds.length) return null;\n return { kind: value.kind, index: value.index, label: value.label, blockIds };\n}\n\nfunction parseAssetSummary(value: unknown): AssetSummary | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['path', 'mimeType', 'size', 'sha256', 'altText', 'credit', 'license'])\n ) {\n return null;\n }\n const path = parseNonRootWorkspacePath(value.path);\n if (\n path === null ||\n !isMimeType(value.mimeType) ||\n !isBoundedInteger(value.size, 0, MCP_WIRE_LIMITS.artifactBytes) ||\n !(value.sha256 === null || isSha256(value.sha256)) ||\n !isNullableBoundedString(value.altText, MCP_WIRE_LIMITS.labelCharacters) ||\n !isNullableBoundedString(value.credit, MCP_WIRE_LIMITS.labelCharacters) ||\n !isNullableBoundedString(value.license, MCP_WIRE_LIMITS.labelCharacters)\n ) {\n return null;\n }\n return {\n path,\n mimeType: value.mimeType,\n size: value.size,\n sha256: value.sha256,\n altText: value.altText,\n credit: value.credit,\n license: value.license,\n };\n}\n\nfunction parseThemeSummary(value: unknown): ThemeSummary | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['id', 'name', 'source', 'layouts']) ||\n !isIdentifier(value.id) ||\n !isBoundedString(value.name, MCP_WIRE_LIMITS.labelCharacters, 1) ||\n !(value.source === 'built-in' || value.source === 'document' || value.source === 'inferred')\n ) {\n return null;\n }\n const layouts = parseStringArray(value.layouts, MCP_WIRE_LIMITS.labelCharacters);\n if (layouts === null || new Set(layouts).size !== layouts.length) return null;\n return { id: value.id, name: value.name, source: value.source, layouts };\n}\n\nfunction parseValidationSummary(value: unknown): ValidationSummary | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['errorCount', 'warningCount', 'infoCount']) ||\n !isNonNegativeInteger(value.errorCount) ||\n !isNonNegativeInteger(value.warningCount) ||\n !isNonNegativeInteger(value.infoCount)\n ) {\n return null;\n }\n return {\n errorCount: value.errorCount,\n warningCount: value.warningCount,\n infoCount: value.infoCount,\n };\n}\n\nfunction parsePreviewItem(value: unknown): PreviewItem | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['kind', 'index', 'label', 'artifact', 'width', 'height']) ||\n !isPreviewItemKind(value.kind) ||\n !isNonNegativeInteger(value.index) ||\n !isNullableBoundedString(value.label, MCP_WIRE_LIMITS.labelCharacters) ||\n !isBoundedInteger(value.width, 1, MCP_WIRE_LIMITS.imageDimension) ||\n !isBoundedInteger(value.height, 1, MCP_WIRE_LIMITS.imageDimension)\n ) {\n return null;\n }\n const artifact = parseArtifactRef(value.artifact);\n if (artifact === null || !artifact.mimeType.startsWith('image/')) return null;\n return {\n kind: value.kind,\n index: value.index,\n label: value.label,\n artifact,\n width: value.width,\n height: value.height,\n };\n}\n\nfunction parseComparisonChange(value: unknown): ComparisonChange | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['category', 'status', 'path', 'message']) ||\n !isComparisonCategory(value.category) ||\n !isComparisonStatus(value.status) ||\n !isNullableBoundedString(value.path, MCP_WIRE_LIMITS.pathCharacters) ||\n !isBoundedString(value.message, MCP_WIRE_LIMITS.messageCharacters, 1)\n ) {\n return null;\n }\n return {\n category: value.category,\n status: value.status,\n path: value.path,\n message: value.message,\n };\n}\n\nfunction parseComparisonMetric(value: unknown): ComparisonMetric | null {\n if (\n !isRecord(value) ||\n !hasExactKeys(value, ['name', 'leftValue', 'rightValue', 'similarity']) ||\n !isIdentifier(value.name) ||\n !isFiniteNumber(value.leftValue) ||\n !isFiniteNumber(value.rightValue) ||\n !isBoundedNumber(value.similarity, 0, 1)\n ) {\n return null;\n }\n return {\n name: value.name,\n leftValue: value.leftValue,\n rightValue: value.rightValue,\n similarity: value.similarity,\n };\n}\n\nfunction summarizeDiagnostics(diagnostics: readonly McpDiagnostic[]): ValidationSummary {\n let errorCount = 0;\n let warningCount = 0;\n let infoCount = 0;\n for (const diagnostic of diagnostics) {\n if (diagnostic.severity === 'error') errorCount += diagnostic.count;\n else if (diagnostic.severity === 'warning') warningCount += diagnostic.count;\n else infoCount += diagnostic.count;\n }\n return { errorCount, warningCount, infoCount };\n}\n\nfunction parseArray<T>(\n value: unknown,\n parser: (entry: unknown) => T | null,\n maximumEntries: number = MCP_WIRE_LIMITS.arrayEntries,\n): T[] | null {\n if (!Array.isArray(value) || value.length > maximumEntries) return null;\n const parsed: T[] = [];\n for (const entry of value) {\n const result = parser(entry);\n if (result === null) return null;\n parsed.push(result);\n }\n return parsed;\n}\n\nfunction parseStringArray(value: unknown, maximumCharacters: number): string[] | null {\n if (!Array.isArray(value) || value.length > MCP_WIRE_LIMITS.arrayEntries) return null;\n const parsed: string[] = [];\n for (const entry of value) {\n if (!isBoundedString(entry, maximumCharacters, 1)) return null;\n parsed.push(entry);\n }\n return parsed;\n}\n\nfunction parseNullable<T>(\n value: unknown,\n parser: (entry: unknown) => T | null,\n): T | null | undefined {\n if (value === null) return null;\n return parser(value) ?? undefined;\n}\n\nfunction parseNonRootWorkspacePath(value: unknown): WorkspacePath | null {\n if (\n !isBoundedString(value, MCP_WIRE_LIMITS.pathCharacters, 1) ||\n value.includes('\\\\') ||\n value.startsWith('/') ||\n value.endsWith('/') ||\n value.includes('//')\n ) {\n return null;\n }\n const parsed = tryParseWorkspacePath(value);\n return parsed !== null && parsed !== '' && parsed === value ? parsed : null;\n}\n\nfunction isArtifactUri(value: unknown, expectedId?: string): value is string {\n if (!isBoundedString(value, MCP_WIRE_LIMITS.uriCharacters, 1)) return false;\n try {\n const url = new URL(value);\n if (\n url.protocol !== 'docblocks:' ||\n url.hostname !== 'artifacts' ||\n url.username !== '' ||\n url.password !== '' ||\n url.port !== '' ||\n url.search !== '' ||\n url.hash !== ''\n ) {\n return false;\n }\n const id = url.pathname.slice(1);\n return (\n !id.includes('/') &&\n isIdentifier(id) &&\n value === `docblocks://artifacts/${id}` &&\n (expectedId === undefined || id === expectedId)\n );\n } catch {\n return false;\n }\n}\n\nfunction isSafeFilename(value: unknown): value is string {\n return (\n isBoundedString(value, MCP_WIRE_LIMITS.labelCharacters, 1) &&\n value !== '.' &&\n value !== '..' &&\n !value.includes('/') &&\n !value.includes('\\\\')\n );\n}\n\nfunction isIsoTimestamp(value: unknown): value is string {\n if (typeof value !== 'string' || !ISO_TIMESTAMP_PATTERN.test(value)) return false;\n const timestamp = Date.parse(value);\n return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === value;\n}\n\nfunction isIdentifier(value: unknown): value is string {\n return (\n isBoundedString(value, MCP_WIRE_LIMITS.identifierCharacters, 1) &&\n IDENTIFIER_PATTERN.test(value)\n );\n}\n\nfunction isEngineName(value: unknown): value is string {\n return (\n isBoundedString(value, MCP_WIRE_LIMITS.identifierCharacters, 1) &&\n ENGINE_NAME_PATTERN.test(value)\n );\n}\n\nfunction isNullableIdentifier(value: unknown): value is string | null {\n return value === null || isIdentifier(value);\n}\n\nfunction isFormat(value: unknown): value is string {\n return isBoundedString(value, MCP_WIRE_LIMITS.formatCharacters, 1) && FORMAT_PATTERN.test(value);\n}\n\nfunction isMimeType(value: unknown): value is string {\n return (\n isBoundedString(value, MCP_WIRE_LIMITS.mimeTypeCharacters, 3) && MIME_TYPE_PATTERN.test(value)\n );\n}\n\nfunction isSha256(value: unknown): value is string {\n return typeof value === 'string' && SHA256_PATTERN.test(value);\n}\n\nfunction isAppliedOptionValue(value: unknown): value is string | number | boolean | null {\n return (\n value === null ||\n typeof value === 'boolean' ||\n isBoundedString(value, MCP_WIRE_LIMITS.messageCharacters) ||\n isFiniteNumber(value)\n );\n}\n\nfunction isDiagnosticSeverity(value: unknown): value is DiagnosticSeverity {\n return value === 'info' || value === 'warning' || value === 'error';\n}\n\nfunction isDiagnosticStage(value: unknown): value is DiagnosticStage {\n return (\n value === 'resolve' ||\n value === 'import' ||\n value === 'parse' ||\n value === 'inspect' ||\n value === 'validate' ||\n value === 'transform' ||\n value === 'convert' ||\n value === 'render' ||\n value === 'export' ||\n value === 'materialize' ||\n value === 'compare'\n );\n}\n\nfunction isConversionFidelity(value: unknown): value is ConversionFidelity {\n return (\n value === 'semantic' ||\n value === 'editable-native' ||\n value === 'rendered-fidelity' ||\n value === 'hybrid'\n );\n}\n\nfunction isPreviewItemKind(value: unknown): value is PreviewItem['kind'] {\n return value === 'page' || value === 'slide' || value === 'sheet' || value === 'frame';\n}\n\nfunction isComparisonCategory(value: unknown): value is ComparisonChange['category'] {\n return (\n value === 'text' ||\n value === 'structure' ||\n value === 'table' ||\n value === 'media' ||\n value === 'theme' ||\n value === 'layout' ||\n value === 'metadata' ||\n value === 'timing' ||\n value === 'accessibility'\n );\n}\n\nfunction isComparisonStatus(value: unknown): value is ComparisonChange['status'] {\n return (\n value === 'retained' ||\n value === 'changed' ||\n value === 'degraded' ||\n value === 'omitted' ||\n value === 'added'\n );\n}\n\nfunction hasDuplicateNames(values: readonly { readonly name: string }[]): boolean {\n return new Set(values.map((value) => value.name)).size !== values.length;\n}\n\nfunction hasDuplicateIds(values: readonly { readonly id: string }[]): boolean {\n return new Set(values.map((value) => value.id)).size !== values.length;\n}\n\nfunction hasDuplicatePaths(values: readonly { readonly path: WorkspacePath }[]): boolean {\n return new Set(values.map((value) => value.path)).size !== values.length;\n}\n\nfunction hasDuplicateIndexes(values: readonly { readonly index: number }[]): boolean {\n return new Set(values.map((value) => value.index)).size !== values.length;\n}\n\nfunction hasDuplicateItemIndexes(values: readonly DocumentItemSummary[]): boolean {\n return new Set(values.map((value) => `${value.kind}:${value.index}`)).size !== values.length;\n}\n\nfunction hasDuplicatePreviewIndexes(values: readonly PreviewItem[]): boolean {\n const keys = values.map((value) => `${value.kind}:${value.index}`);\n return new Set(keys).size !== keys.length;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction hasExactKeys(value: Record<string, unknown>, keys: readonly string[]): boolean {\n const actual = Object.keys(value);\n return (\n actual.length === keys.length &&\n keys.every((key) => Object.prototype.hasOwnProperty.call(value, key))\n );\n}\n\nfunction isBoundedString(\n value: unknown,\n maximumCharacters: number,\n minimumCharacters = 0,\n): value is string {\n return (\n typeof value === 'string' &&\n value.length >= minimumCharacters &&\n value.length <= maximumCharacters &&\n ![...value].some((character) => {\n const codePoint = character.codePointAt(0) ?? 0;\n return codePoint === 0 || codePoint === 0x7f;\n })\n );\n}\n\nfunction isNullableBoundedString(\n value: unknown,\n maximumCharacters: number,\n): value is string | null {\n return value === null || isBoundedString(value, maximumCharacters);\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction isBoundedNumber(value: unknown, minimum: number, maximum: number): value is number {\n return isFiniteNumber(value) && value >= minimum && value <= maximum;\n}\n\nfunction isBoundedInteger(value: unknown, minimum: number, maximum: number): value is number {\n return (\n Number.isSafeInteger(value) && typeof value === 'number' && value >= minimum && value <= maximum\n );\n}\n\nfunction isNonNegativeInteger(value: unknown): value is number {\n return isBoundedInteger(value, 0, Number.MAX_SAFE_INTEGER);\n}\n\nfunction isNullableNonNegativeInteger(value: unknown): value is number | null {\n return value === null || isNonNegativeInteger(value);\n}\n"],"mappings":"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","names":[]}
@@ -1,3 +1,16 @@
1
+ // src/host/filesystem-v2.ts
2
+ var ELECTRON_FILE_SYSTEM_V2_CAPABILITIES = Object.freeze({
3
+ writeAtomicity: "process",
4
+ moveAtomicity: "process",
5
+ snapshotAtomicity: "process",
6
+ conditionalWrite: "process",
7
+ recursiveRemove: true,
8
+ watch: true,
9
+ caseSensitivity: "platform",
10
+ symlinkPolicy: "follow-contained",
11
+ durability: "best-effort"
12
+ });
13
+
1
14
  // src/host/index.ts
2
15
  function isElectronHost() {
3
16
  if (typeof globalThis === "undefined") return false;
@@ -16,8 +29,9 @@ function maybeGetDocBlocksHost() {
16
29
  }
17
30
 
18
31
  export {
32
+ ELECTRON_FILE_SYSTEM_V2_CAPABILITIES,
19
33
  isElectronHost,
20
34
  getDocBlocksHost,
21
35
  maybeGetDocBlocksHost
22
36
  };
23
- //# sourceMappingURL=chunk-ME76RUMR.js.map
37
+ //# sourceMappingURL=chunk-BNKV7MTO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/host/filesystem-v2.ts","../src/host/index.ts"],"sourcesContent":["import type {\n FileSystemCreateDirectoryOptions,\n FileSystemDirectorySnapshot,\n FileSystemEntrySnapshot,\n FileSystemFileRead,\n FileSystemFileSnapshot,\n FileSystemMoveOptions,\n FileSystemProviderCapabilities,\n FileSystemRemoveOptions,\n FileSystemRemoveResult,\n FileSystemSnapshot,\n FileSystemWatchEvent,\n FileSystemWriteOptions,\n SerializedFsError,\n WorkspacePath,\n} from '../filesystem/index.js';\n\n/** Stable capabilities shared by the Electron v2 client and native backend. */\nexport const ELECTRON_FILE_SYSTEM_V2_CAPABILITIES: FileSystemProviderCapabilities = Object.freeze({\n writeAtomicity: 'process',\n moveAtomicity: 'process',\n snapshotAtomicity: 'process',\n conditionalWrite: 'process',\n recursiveRemove: true,\n watch: true,\n caseSensitivity: 'platform',\n symlinkPolicy: 'follow-contained',\n durability: 'best-effort',\n});\n\n/** Explicit result envelope; Electron does not preserve custom Error fields. */\nexport type HostFileSystemV2Result<T> =\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: SerializedFsError };\n\nexport interface HostFileSystemV2OpenRequest {\n readonly instanceId: string;\n /** Main-owned persisted workspace authority, never an absolute path. */\n readonly providerId: string;\n readonly label: string;\n}\n\nexport type HostFileSystemV2WatchMessage =\n | {\n readonly instanceId: string;\n readonly subscriptionId: string;\n readonly kind: 'event';\n readonly event: FileSystemWatchEvent;\n }\n | {\n readonly instanceId: string;\n readonly subscriptionId: string;\n readonly kind: 'error';\n readonly error: SerializedFsError;\n };\n\n/** Wire-level filesystem v2 API exposed by preload. */\nexport interface DocBlocksHostFsV2API {\n open(\n request: HostFileSystemV2OpenRequest,\n ): Promise<HostFileSystemV2Result<FileSystemProviderCapabilities>>;\n stat(\n instanceId: string,\n path: WorkspacePath,\n ): Promise<HostFileSystemV2Result<FileSystemEntrySnapshot | null>>;\n readFile(\n instanceId: string,\n path: WorkspacePath,\n ): Promise<HostFileSystemV2Result<FileSystemFileRead | null>>;\n readDirectory(\n instanceId: string,\n path: WorkspacePath,\n ): Promise<HostFileSystemV2Result<readonly FileSystemEntrySnapshot[]>>;\n writeFile(\n instanceId: string,\n path: WorkspacePath,\n data: ArrayBuffer | Uint8Array,\n options?: FileSystemWriteOptions,\n ): Promise<HostFileSystemV2Result<FileSystemFileSnapshot>>;\n createDirectory(\n instanceId: string,\n path: WorkspacePath,\n options?: FileSystemCreateDirectoryOptions,\n ): Promise<HostFileSystemV2Result<FileSystemDirectorySnapshot>>;\n remove(\n instanceId: string,\n path: WorkspacePath,\n options?: FileSystemRemoveOptions,\n ): Promise<HostFileSystemV2Result<FileSystemRemoveResult>>;\n move(\n instanceId: string,\n oldPath: WorkspacePath,\n newPath: WorkspacePath,\n options?: FileSystemMoveOptions,\n ): Promise<HostFileSystemV2Result<FileSystemEntrySnapshot>>;\n snapshot(instanceId: string): Promise<HostFileSystemV2Result<FileSystemSnapshot>>;\n watchSubscribe(instanceId: string, subscriptionId: string): Promise<HostFileSystemV2Result<null>>;\n watchUnsubscribe(\n instanceId: string,\n subscriptionId: string,\n ): Promise<HostFileSystemV2Result<null>>;\n dispose(instanceId: string): Promise<HostFileSystemV2Result<null>>;\n onWatchMessage(listener: (message: HostFileSystemV2WatchMessage) => void): () => void;\n}\n","/**\n * Host bridge — shared types + runtime access for the Electron desktop\n * host. The renderer calls `getDocBlocksHost()` to reach the preload\n * contextBridge; `isElectronHost()` gates desktop-only UI branches.\n */\n\nexport type {\n DocBlocksHostAPI,\n DocBlocksHostFsAPI,\n DocBlocksHostExternalAPI,\n DocBlocksHostWorkspacesAPI,\n DocBlocksHostShellAPI,\n DocBlocksHostExportAPI,\n DocBlocksHostFfmpegAPI,\n DocBlocksHostUpdaterAPI,\n DocBlocksHostLifecycleAPI,\n ElectronWorkspaceInfo,\n ExternalBinaryCommitResult,\n HostCloseReason,\n HostEnvironment,\n HostExportTargetGrant,\n HostPrepareCloseRequest,\n HostPrepareCloseResult,\n MenuCommand,\n OpenRequest,\n UpdateCheckResult,\n UpdateInstallResult,\n UpdaterStatus,\n} from './types.js';\n\nexport type {\n DocBlocksHostGitAPI,\n GitBranchInfo,\n GitCapabilities,\n GitCloneHandle,\n GitCloneProgress,\n GitError,\n GitErrorCode,\n GitFileAtRevision,\n GitFileChange,\n GitFileStatusCode,\n GitLogEntry,\n GitLogOptions,\n GitRemoteInfo,\n GitRepoDetection,\n GitResult,\n GitRevision,\n GitStatus,\n} from './git.js';\n\nexport {\n ELECTRON_FILE_SYSTEM_V2_CAPABILITIES,\n type DocBlocksHostFsV2API,\n type HostFileSystemV2OpenRequest,\n type HostFileSystemV2Result,\n type HostFileSystemV2WatchMessage,\n} from './filesystem-v2.js';\n\nexport {\n HOST_WIRE_LIMITS,\n isBoundedBytePayload,\n isBoundedString,\n isTrustedRendererUrl,\n parseExternalHttpUrl,\n parseOpenRequest,\n} from './wire-policy.js';\n\nimport type { DocBlocksHostAPI } from './types.js';\n\n/** True when running inside the Electron desktop shell. */\nexport function isElectronHost(): boolean {\n if (typeof globalThis === 'undefined') return false;\n const host = (globalThis as { docBlocksHost?: unknown }).docBlocksHost;\n return (\n typeof host === 'object' &&\n host !== null &&\n typeof (host as { fs?: unknown }).fs === 'object' &&\n (host as { fs?: unknown }).fs !== null\n );\n}\n\n/** Return the host API, or throw if not running under Electron. */\nexport function getDocBlocksHost(): DocBlocksHostAPI {\n const host = (globalThis as { docBlocksHost?: DocBlocksHostAPI }).docBlocksHost;\n if (!host) {\n throw new Error('docBlocksHost is not available — not running under Electron?');\n }\n return host;\n}\n\n/** Return the host API, or null if not running under Electron. */\nexport function maybeGetDocBlocksHost(): DocBlocksHostAPI | null {\n return (globalThis as { docBlocksHost?: DocBlocksHostAPI }).docBlocksHost ?? null;\n}\n"],"mappings":";AAkBO,IAAM,uCAAuE,OAAO,OAAO;AAAA,EAChG,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,YAAY;AACd,CAAC;;;AC0CM,SAAS,iBAA0B;AACxC,MAAI,OAAO,eAAe,YAAa,QAAO;AAC9C,QAAM,OAAQ,WAA2C;AACzD,SACE,OAAO,SAAS,YAChB,SAAS,QACT,OAAQ,KAA0B,OAAO,YACxC,KAA0B,OAAO;AAEtC;AAGO,SAAS,mBAAqC;AACnD,QAAM,OAAQ,WAAoD;AAClE,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,mEAA8D;AAAA,EAChF;AACA,SAAO;AACT;AAGO,SAAS,wBAAiD;AAC/D,SAAQ,WAAoD,iBAAiB;AAC/E;","names":[]}
@@ -0,0 +1,149 @@
1
+ // src/share/index.ts
2
+ var SHARED_DOCUMENT_LIMITS = Object.freeze({
3
+ /** A conservative interoperability threshold, not a universal browser limit. */
4
+ portableUrlCharacters: 4096,
5
+ /** Hard cap applied before a hash is copied or decoded. */
6
+ urlCharacters: 32768,
7
+ /** Maximum UTF-8 Markdown accepted by the first-party link generator. */
8
+ markdownBytes: 20 * 1024,
9
+ /** Maximum compressed DBK bytes carried by the versioned envelope. */
10
+ archiveBytes: 23 * 1024
11
+ });
12
+ var BASE64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
13
+ var HASH_PREFIX = "#shared(";
14
+ var MAGIC = new Uint8Array([68, 66, 83, 72, 65, 82, 69]);
15
+ var VERSION = 1;
16
+ var HEADER_BYTES = MAGIC.byteLength + 2;
17
+ var MODE_TO_CODE = Object.freeze({
18
+ slideshow: 1,
19
+ video: 2,
20
+ page: 3,
21
+ document: 4,
22
+ narrate: 5
23
+ });
24
+ var CODE_TO_MODE = Object.freeze({
25
+ 1: "slideshow",
26
+ 2: "video",
27
+ 3: "page",
28
+ 4: "document",
29
+ 5: "narrate"
30
+ });
31
+ function createSharedDocumentHash(archive, mode = null) {
32
+ assertArchive(archive);
33
+ const bytes = new Uint8Array(HEADER_BYTES + archive.byteLength);
34
+ bytes.set(MAGIC, 0);
35
+ bytes[MAGIC.byteLength] = VERSION;
36
+ bytes[MAGIC.byteLength + 1] = mode === null ? 0 : MODE_TO_CODE[mode];
37
+ bytes.set(archive, HEADER_BYTES);
38
+ const hash = `${HASH_PREFIX}${encodeBase64(bytes)})`;
39
+ if (hash.length > SHARED_DOCUMENT_LIMITS.urlCharacters) {
40
+ throw new Error("The shared document payload exceeds the URL length limit.");
41
+ }
42
+ return hash;
43
+ }
44
+ function createSharedDocumentUrl(baseUrl, archive, mode = null) {
45
+ const url = new URL(baseUrl);
46
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
47
+ throw new Error("Shared document links require an HTTP(S) DocBlocks URL.");
48
+ }
49
+ url.hash = createSharedDocumentHash(archive, mode);
50
+ const result = url.toString();
51
+ if (result.length > SHARED_DOCUMENT_LIMITS.urlCharacters) {
52
+ throw new Error("The shared document link exceeds the URL length limit.");
53
+ }
54
+ return result;
55
+ }
56
+ function parseSharedDocumentHash(hash) {
57
+ if (!hash.startsWith("#shared")) return { kind: "none" };
58
+ if (hash.length > SHARED_DOCUMENT_LIMITS.urlCharacters || !hash.startsWith(HASH_PREFIX) || !hash.endsWith(")")) {
59
+ return invalid("This shared document link is malformed or too long.");
60
+ }
61
+ const encoded = hash.slice(HASH_PREFIX.length, -1);
62
+ const maximumPayloadBytes = HEADER_BYTES + SHARED_DOCUMENT_LIMITS.archiveBytes;
63
+ const maximumBase64Characters = Math.ceil(maximumPayloadBytes / 3) * 4;
64
+ if (encoded.length === 0 || encoded.length > maximumBase64Characters) {
65
+ return invalid("This shared document payload is empty or too large.");
66
+ }
67
+ const bytes = decodeBase64(encoded, maximumPayloadBytes);
68
+ if (!bytes || bytes.byteLength <= HEADER_BYTES) {
69
+ return invalid("This shared document payload is not valid base64 data.");
70
+ }
71
+ for (let index = 0; index < MAGIC.byteLength; index += 1) {
72
+ if (bytes[index] !== MAGIC[index]) {
73
+ return invalid("This shared document payload has an unknown format.");
74
+ }
75
+ }
76
+ if (bytes[MAGIC.byteLength] !== VERSION) {
77
+ return invalid("This shared document link uses an unsupported version.");
78
+ }
79
+ const modeCode = bytes[MAGIC.byteLength + 1] ?? 0;
80
+ const mode = modeCode === 0 ? null : CODE_TO_MODE[modeCode];
81
+ if (modeCode !== 0 && !mode) {
82
+ return invalid("This shared document link has an unsupported launch mode.");
83
+ }
84
+ const archive = bytes.slice(HEADER_BYTES);
85
+ if (!hasZipSignature(archive)) {
86
+ return invalid("This shared document payload does not contain a DBK archive.");
87
+ }
88
+ return { kind: "valid", payload: { archive, mode } };
89
+ }
90
+ function assertArchive(archive) {
91
+ if (archive.byteLength === 0 || archive.byteLength > SHARED_DOCUMENT_LIMITS.archiveBytes) {
92
+ throw new Error("The shared document archive exceeds the URL payload limit.");
93
+ }
94
+ if (!hasZipSignature(archive)) {
95
+ throw new Error("A shared document payload must contain a DBK ZIP archive.");
96
+ }
97
+ }
98
+ function hasZipSignature(bytes) {
99
+ return bytes.byteLength >= 4 && bytes[0] === 80 && bytes[1] === 75 && bytes[2] === 3 && bytes[3] === 4;
100
+ }
101
+ function invalid(message) {
102
+ return { kind: "invalid", message };
103
+ }
104
+ function encodeBase64(bytes) {
105
+ let result = "";
106
+ for (let index = 0; index < bytes.byteLength; index += 3) {
107
+ const first = bytes[index] ?? 0;
108
+ const hasSecond = index + 1 < bytes.byteLength;
109
+ const hasThird = index + 2 < bytes.byteLength;
110
+ const second = bytes[index + 1] ?? 0;
111
+ const third = bytes[index + 2] ?? 0;
112
+ const value = first << 16 | second << 8 | third;
113
+ result += BASE64_ALPHABET[value >>> 18 & 63];
114
+ result += BASE64_ALPHABET[value >>> 12 & 63];
115
+ result += hasSecond ? BASE64_ALPHABET[value >>> 6 & 63] : "=";
116
+ result += hasThird ? BASE64_ALPHABET[value & 63] : "=";
117
+ }
118
+ return result;
119
+ }
120
+ function decodeBase64(value, maximumBytes) {
121
+ if (value.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/u.test(value) || value.slice(0, -2).includes("=")) {
122
+ return null;
123
+ }
124
+ const padding = value.endsWith("==") ? 2 : value.endsWith("=") ? 1 : 0;
125
+ const byteLength = value.length / 4 * 3 - padding;
126
+ if (byteLength <= 0 || byteLength > maximumBytes) return null;
127
+ const result = new Uint8Array(byteLength);
128
+ let outputIndex = 0;
129
+ for (let index = 0; index < value.length; index += 4) {
130
+ const a = BASE64_ALPHABET.indexOf(value[index] ?? "");
131
+ const b = BASE64_ALPHABET.indexOf(value[index + 1] ?? "");
132
+ const c = value[index + 2] === "=" ? 0 : BASE64_ALPHABET.indexOf(value[index + 2] ?? "");
133
+ const d = value[index + 3] === "=" ? 0 : BASE64_ALPHABET.indexOf(value[index + 3] ?? "");
134
+ if (a < 0 || b < 0 || c < 0 || d < 0) return null;
135
+ const combined = a << 18 | b << 12 | c << 6 | d;
136
+ if (outputIndex < byteLength) result[outputIndex++] = combined >>> 16 & 255;
137
+ if (outputIndex < byteLength) result[outputIndex++] = combined >>> 8 & 255;
138
+ if (outputIndex < byteLength) result[outputIndex++] = combined & 255;
139
+ }
140
+ return encodeBase64(result) === value ? result : null;
141
+ }
142
+
143
+ export {
144
+ SHARED_DOCUMENT_LIMITS,
145
+ createSharedDocumentHash,
146
+ createSharedDocumentUrl,
147
+ parseSharedDocumentHash
148
+ };
149
+ //# sourceMappingURL=chunk-BXMF5YQJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/share/index.ts"],"sourcesContent":["/**\n * Canonical wire format for a document embedded in a DocBlocks URL hash.\n *\n * The base64 payload is deliberately small and versioned:\n *\n * \"DBSHARE\" + version byte + mode byte + bounded DBK bytes\n *\n * The DBK itself is validated at the filesystem import boundary. Keeping the\n * launch mode outside the archive means the copied Markdown is never mutated\n * merely to choose its initial presentation.\n */\n\nexport type SharedDocumentMode = 'slideshow' | 'video' | 'page' | 'document' | 'narrate';\n\nexport interface SharedDocumentPayload {\n readonly archive: Uint8Array;\n readonly mode: SharedDocumentMode | null;\n}\n\nexport type SharedDocumentHashParseResult =\n | { readonly kind: 'none' }\n | { readonly kind: 'valid'; readonly payload: SharedDocumentPayload }\n | { readonly kind: 'invalid'; readonly message: string };\n\nexport const SHARED_DOCUMENT_LIMITS = Object.freeze({\n /** A conservative interoperability threshold, not a universal browser limit. */\n portableUrlCharacters: 4_096,\n /** Hard cap applied before a hash is copied or decoded. */\n urlCharacters: 32_768,\n /** Maximum UTF-8 Markdown accepted by the first-party link generator. */\n markdownBytes: 20 * 1024,\n /** Maximum compressed DBK bytes carried by the versioned envelope. */\n archiveBytes: 23 * 1024,\n});\n\nconst BASE64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst HASH_PREFIX = '#shared(';\nconst MAGIC = new Uint8Array([0x44, 0x42, 0x53, 0x48, 0x41, 0x52, 0x45]); // DBSHARE\nconst VERSION = 1;\nconst HEADER_BYTES = MAGIC.byteLength + 2;\n\nconst MODE_TO_CODE: Readonly<Record<SharedDocumentMode, number>> = Object.freeze({\n slideshow: 1,\n video: 2,\n page: 3,\n document: 4,\n narrate: 5,\n});\n\nconst CODE_TO_MODE: Readonly<Record<number, SharedDocumentMode>> = Object.freeze({\n 1: 'slideshow',\n 2: 'video',\n 3: 'page',\n 4: 'document',\n 5: 'narrate',\n});\n\n/** Build the exact `#shared(<base64>)` fragment for a bounded DBK archive. */\nexport function createSharedDocumentHash(\n archive: Uint8Array,\n mode: SharedDocumentMode | null = null,\n): string {\n assertArchive(archive);\n const bytes = new Uint8Array(HEADER_BYTES + archive.byteLength);\n bytes.set(MAGIC, 0);\n bytes[MAGIC.byteLength] = VERSION;\n bytes[MAGIC.byteLength + 1] = mode === null ? 0 : MODE_TO_CODE[mode];\n bytes.set(archive, HEADER_BYTES);\n\n const hash = `${HASH_PREFIX}${encodeBase64(bytes)})`;\n if (hash.length > SHARED_DOCUMENT_LIMITS.urlCharacters) {\n throw new Error('The shared document payload exceeds the URL length limit.');\n }\n return hash;\n}\n\n/** Replace any existing hash on a base URL with a validated shared payload. */\nexport function createSharedDocumentUrl(\n baseUrl: string,\n archive: Uint8Array,\n mode: SharedDocumentMode | null = null,\n): string {\n const url = new URL(baseUrl);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new Error('Shared document links require an HTTP(S) DocBlocks URL.');\n }\n url.hash = createSharedDocumentHash(archive, mode);\n const result = url.toString();\n if (result.length > SHARED_DOCUMENT_LIMITS.urlCharacters) {\n throw new Error('The shared document link exceeds the URL length limit.');\n }\n return result;\n}\n\n/** Parse a hash without ever treating malformed shared input as workspace routing. */\nexport function parseSharedDocumentHash(hash: string): SharedDocumentHashParseResult {\n if (!hash.startsWith('#shared')) return { kind: 'none' };\n if (\n hash.length > SHARED_DOCUMENT_LIMITS.urlCharacters ||\n !hash.startsWith(HASH_PREFIX) ||\n !hash.endsWith(')')\n ) {\n return invalid('This shared document link is malformed or too long.');\n }\n\n const encoded = hash.slice(HASH_PREFIX.length, -1);\n const maximumPayloadBytes = HEADER_BYTES + SHARED_DOCUMENT_LIMITS.archiveBytes;\n const maximumBase64Characters = Math.ceil(maximumPayloadBytes / 3) * 4;\n if (encoded.length === 0 || encoded.length > maximumBase64Characters) {\n return invalid('This shared document payload is empty or too large.');\n }\n\n const bytes = decodeBase64(encoded, maximumPayloadBytes);\n if (!bytes || bytes.byteLength <= HEADER_BYTES) {\n return invalid('This shared document payload is not valid base64 data.');\n }\n for (let index = 0; index < MAGIC.byteLength; index += 1) {\n if (bytes[index] !== MAGIC[index]) {\n return invalid('This shared document payload has an unknown format.');\n }\n }\n if (bytes[MAGIC.byteLength] !== VERSION) {\n return invalid('This shared document link uses an unsupported version.');\n }\n\n const modeCode = bytes[MAGIC.byteLength + 1] ?? 0;\n const mode = modeCode === 0 ? null : CODE_TO_MODE[modeCode];\n if (modeCode !== 0 && !mode) {\n return invalid('This shared document link has an unsupported launch mode.');\n }\n\n const archive = bytes.slice(HEADER_BYTES);\n if (!hasZipSignature(archive)) {\n return invalid('This shared document payload does not contain a DBK archive.');\n }\n return { kind: 'valid', payload: { archive, mode } };\n}\n\nfunction assertArchive(archive: Uint8Array): void {\n if (archive.byteLength === 0 || archive.byteLength > SHARED_DOCUMENT_LIMITS.archiveBytes) {\n throw new Error('The shared document archive exceeds the URL payload limit.');\n }\n if (!hasZipSignature(archive)) {\n throw new Error('A shared document payload must contain a DBK ZIP archive.');\n }\n}\n\nfunction hasZipSignature(bytes: Uint8Array): boolean {\n return (\n bytes.byteLength >= 4 &&\n bytes[0] === 0x50 &&\n bytes[1] === 0x4b &&\n bytes[2] === 0x03 &&\n bytes[3] === 0x04\n );\n}\n\nfunction invalid(message: string): SharedDocumentHashParseResult {\n return { kind: 'invalid', message };\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n let result = '';\n for (let index = 0; index < bytes.byteLength; index += 3) {\n const first = bytes[index] ?? 0;\n const hasSecond = index + 1 < bytes.byteLength;\n const hasThird = index + 2 < bytes.byteLength;\n const second = bytes[index + 1] ?? 0;\n const third = bytes[index + 2] ?? 0;\n const value = (first << 16) | (second << 8) | third;\n result += BASE64_ALPHABET[(value >>> 18) & 63];\n result += BASE64_ALPHABET[(value >>> 12) & 63];\n result += hasSecond ? BASE64_ALPHABET[(value >>> 6) & 63] : '=';\n result += hasThird ? BASE64_ALPHABET[value & 63] : '=';\n }\n return result;\n}\n\nfunction decodeBase64(value: string, maximumBytes: number): Uint8Array | null {\n if (\n value.length % 4 !== 0 ||\n !/^[A-Za-z0-9+/]*={0,2}$/u.test(value) ||\n value.slice(0, -2).includes('=')\n ) {\n return null;\n }\n\n const padding = value.endsWith('==') ? 2 : value.endsWith('=') ? 1 : 0;\n const byteLength = (value.length / 4) * 3 - padding;\n if (byteLength <= 0 || byteLength > maximumBytes) return null;\n\n const result = new Uint8Array(byteLength);\n let outputIndex = 0;\n for (let index = 0; index < value.length; index += 4) {\n const a = BASE64_ALPHABET.indexOf(value[index] ?? '');\n const b = BASE64_ALPHABET.indexOf(value[index + 1] ?? '');\n const c = value[index + 2] === '=' ? 0 : BASE64_ALPHABET.indexOf(value[index + 2] ?? '');\n const d = value[index + 3] === '=' ? 0 : BASE64_ALPHABET.indexOf(value[index + 3] ?? '');\n if (a < 0 || b < 0 || c < 0 || d < 0) return null;\n const combined = (a << 18) | (b << 12) | (c << 6) | d;\n if (outputIndex < byteLength) result[outputIndex++] = (combined >>> 16) & 0xff;\n if (outputIndex < byteLength) result[outputIndex++] = (combined >>> 8) & 0xff;\n if (outputIndex < byteLength) result[outputIndex++] = combined & 0xff;\n }\n\n // Reject non-canonical encodings with non-zero unused bits.\n return encodeBase64(result) === value ? result : null;\n}\n"],"mappings":"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","names":[]}