@vantageos/mosaic 0.3.1 → 0.5.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 (157) hide show
  1. package/CHANGELOG.md +88 -2
  2. package/LICENSE +110 -0
  3. package/README.md +193 -21
  4. package/dist/PipelineBoard-FucyGArR.d.cts +759 -0
  5. package/dist/PipelineBoard-FucyGArR.d.ts +759 -0
  6. package/dist/PipelineBoard.markdown-DIcvrS-2.d.cts +16 -0
  7. package/dist/PipelineBoard.markdown-DIcvrS-2.d.ts +16 -0
  8. package/dist/{StatusBadge.schema-1tOjB4Ir.d.cts → StatusBadge.schema-BEjSH2_4.d.cts} +2 -2
  9. package/dist/{StatusBadge.schema-1tOjB4Ir.d.ts → StatusBadge.schema-BEjSH2_4.d.ts} +2 -2
  10. package/dist/{Tabs.schema-BzcEyeq8.d.cts → Tabs.schema-Dqr6vwV3.d.cts} +2 -2
  11. package/dist/{Tabs.schema-BzcEyeq8.d.ts → Tabs.schema-Dqr6vwV3.d.ts} +2 -2
  12. package/dist/Timeline-Coo_3tA_.d.cts +114 -0
  13. package/dist/Timeline-Coo_3tA_.d.ts +114 -0
  14. package/dist/Timeline.markdown-C6UPDv1H.d.cts +4 -0
  15. package/dist/Timeline.markdown-C6UPDv1H.d.ts +4 -0
  16. package/dist/TransactionPreview-BzWDn8kE.d.cts +391 -0
  17. package/dist/TransactionPreview-BzWDn8kE.d.ts +391 -0
  18. package/dist/TransactionPreview.markdown-Dpb0VYgN.d.cts +7 -0
  19. package/dist/TransactionPreview.markdown-Dpb0VYgN.d.ts +7 -0
  20. package/dist/artifacts.cjs +190 -2
  21. package/dist/artifacts.cjs.map +1 -1
  22. package/dist/artifacts.js +190 -2
  23. package/dist/artifacts.js.map +1 -1
  24. package/dist/confirmation.cjs +728 -2
  25. package/dist/confirmation.cjs.map +1 -1
  26. package/dist/confirmation.d.cts +2 -1
  27. package/dist/confirmation.d.ts +2 -1
  28. package/dist/confirmation.js +726 -4
  29. package/dist/confirmation.js.map +1 -1
  30. package/dist/display.cjs +1555 -203
  31. package/dist/display.cjs.map +1 -1
  32. package/dist/display.d.cts +6 -229
  33. package/dist/display.d.ts +6 -229
  34. package/dist/display.js +1539 -206
  35. package/dist/display.js.map +1 -1
  36. package/dist/forms.cjs +139 -46
  37. package/dist/forms.cjs.map +1 -1
  38. package/dist/forms.d.cts +2 -2
  39. package/dist/forms.d.ts +2 -2
  40. package/dist/forms.js +139 -46
  41. package/dist/forms.js.map +1 -1
  42. package/dist/host.cjs +822 -0
  43. package/dist/host.cjs.map +1 -0
  44. package/dist/host.d.cts +287 -0
  45. package/dist/host.d.ts +287 -0
  46. package/dist/host.js +794 -0
  47. package/dist/host.js.map +1 -0
  48. package/dist/{index-CwXVgtGb.d.cts → index-BadRcCbm.d.cts} +28 -11
  49. package/dist/{index-CwXVgtGb.d.ts → index-BadRcCbm.d.ts} +28 -11
  50. package/dist/index.cjs +2202 -247
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.d.cts +42 -8
  53. package/dist/index.d.ts +42 -8
  54. package/dist/index.js +2167 -251
  55. package/dist/index.js.map +1 -1
  56. package/dist/input.d.cts +2 -2
  57. package/dist/input.d.ts +2 -2
  58. package/dist/media.cjs +190 -2
  59. package/dist/media.cjs.map +1 -1
  60. package/dist/media.d.cts +1 -1
  61. package/dist/media.d.ts +1 -1
  62. package/dist/media.js +190 -2
  63. package/dist/media.js.map +1 -1
  64. package/dist/preact/artifacts.js +190 -2
  65. package/dist/preact/artifacts.js.map +1 -1
  66. package/dist/preact/confirmation.d.ts +321 -1
  67. package/dist/preact/confirmation.js +629 -4
  68. package/dist/preact/confirmation.js.map +1 -1
  69. package/dist/preact/display.d.ts +570 -31
  70. package/dist/preact/display.js +1248 -126
  71. package/dist/preact/display.js.map +1 -1
  72. package/dist/preact/forms.d.ts +32 -15
  73. package/dist/preact/forms.js +139 -46
  74. package/dist/preact/forms.js.map +1 -1
  75. package/dist/preact/host.d.ts +307 -0
  76. package/dist/preact/host.js +875 -0
  77. package/dist/preact/host.js.map +1 -0
  78. package/dist/preact/media.d.ts +37 -1
  79. package/dist/preact/media.js +423 -0
  80. package/dist/preact/media.js.map +1 -1
  81. package/dist/preact/progress.d.ts +92 -1
  82. package/dist/preact/progress.js +469 -3
  83. package/dist/preact/progress.js.map +1 -1
  84. package/dist/progress.cjs +525 -2
  85. package/dist/progress.cjs.map +1 -1
  86. package/dist/progress.d.cts +2 -1
  87. package/dist/progress.d.ts +2 -1
  88. package/dist/progress.js +522 -3
  89. package/dist/progress.js.map +1 -1
  90. package/dist/react/artifacts.cjs +190 -2
  91. package/dist/react/artifacts.cjs.map +1 -1
  92. package/dist/react/artifacts.js +190 -2
  93. package/dist/react/artifacts.js.map +1 -1
  94. package/dist/react/confirmation.cjs +630 -2
  95. package/dist/react/confirmation.cjs.map +1 -1
  96. package/dist/react/confirmation.d.cts +3 -3
  97. package/dist/react/confirmation.d.ts +3 -3
  98. package/dist/react/confirmation.js +629 -4
  99. package/dist/react/confirmation.js.map +1 -1
  100. package/dist/react/display.cjs +1137 -123
  101. package/dist/react/display.cjs.map +1 -1
  102. package/dist/react/display.d.cts +42 -14
  103. package/dist/react/display.d.ts +42 -14
  104. package/dist/react/display.js +1122 -126
  105. package/dist/react/display.js.map +1 -1
  106. package/dist/react/forms.cjs +139 -46
  107. package/dist/react/forms.cjs.map +1 -1
  108. package/dist/react/forms.d.cts +1 -1
  109. package/dist/react/forms.d.ts +1 -1
  110. package/dist/react/forms.js +139 -46
  111. package/dist/react/forms.js.map +1 -1
  112. package/dist/react/host.cjs +910 -0
  113. package/dist/react/host.cjs.map +1 -0
  114. package/dist/react/host.d.cts +24 -0
  115. package/dist/react/host.d.ts +24 -0
  116. package/dist/react/host.js +875 -0
  117. package/dist/react/host.js.map +1 -0
  118. package/dist/react/input.d.cts +1 -1
  119. package/dist/react/input.d.ts +1 -1
  120. package/dist/react/media.cjs +426 -0
  121. package/dist/react/media.cjs.map +1 -1
  122. package/dist/react/media.d.cts +19 -1
  123. package/dist/react/media.d.ts +19 -1
  124. package/dist/react/media.js +423 -0
  125. package/dist/react/media.js.map +1 -1
  126. package/dist/react/progress.cjs +471 -2
  127. package/dist/react/progress.cjs.map +1 -1
  128. package/dist/react/progress.d.cts +1 -1
  129. package/dist/react/progress.d.ts +1 -1
  130. package/dist/react/progress.js +469 -3
  131. package/dist/react/progress.js.map +1 -1
  132. package/dist/server/resource.cjs +151 -0
  133. package/dist/server/resource.cjs.map +1 -0
  134. package/dist/server/resource.d.cts +90 -0
  135. package/dist/server/resource.d.ts +90 -0
  136. package/dist/server/resource.js +147 -0
  137. package/dist/server/resource.js.map +1 -0
  138. package/dist/server.cjs +1100 -25
  139. package/dist/server.cjs.map +1 -1
  140. package/dist/server.d.cts +84 -5
  141. package/dist/server.d.ts +84 -5
  142. package/dist/server.js +1087 -27
  143. package/dist/server.js.map +1 -1
  144. package/dist/tokens.cjs +73 -22
  145. package/dist/tokens.cjs.map +1 -1
  146. package/dist/tokens.d.cts +23 -3
  147. package/dist/tokens.d.ts +23 -3
  148. package/dist/tokens.js +73 -22
  149. package/dist/tokens.js.map +1 -1
  150. package/package.json +250 -231
  151. package/registry.yaml +51 -2
  152. package/dist/Alert.schema-LPJE5gFP.d.cts +0 -71
  153. package/dist/Alert.schema-LPJE5gFP.d.ts +0 -71
  154. package/dist/ProgressBar.schema-CdVYx0Wq.d.cts +0 -22
  155. package/dist/ProgressBar.schema-CdVYx0Wq.d.ts +0 -22
  156. package/dist/{ConfirmDialog-B3CQQGmJ.d.cts → ConfirmDialog-BCtOcmHe.d.cts} +1 -1
  157. package/dist/{ConfirmDialog-B3CQQGmJ.d.ts → ConfirmDialog-BCtOcmHe.d.ts} +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/artifacts/MarkdownRenderer.schema.ts","../src/components/confirmation/TokenDisplayOnceModal.schema.ts","../src/components/display/TableView.schema.ts","../src/components/input/ConfirmDialog.schema.ts","../src/components/media/StatusBadge.schema.ts","../src/components/progress/ProgressBar.schema.ts","../src/server/create-mosaic-resource.ts"],"names":["z","createUIResource"],"mappings":"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","file":"server.cjs","sourcesContent":["import { z } from \"zod\";\n\nexport const MarkdownRendererPropsSchema = z.object({\n content: z.string(),\n locale: z.enum([\"en\", \"fr\"]),\n maxLength: z.number().positive().default(50000),\n allowHtml: z.boolean().default(false),\n});\n\nexport type MarkdownRendererProps = z.infer<typeof MarkdownRendererPropsSchema>;\n\nexport function validateProps(raw: unknown): MarkdownRendererProps {\n return MarkdownRendererPropsSchema.parse(raw);\n}\n","import { z } from \"zod\";\n\n// i18nKeys: TokenDisplayOnceModal.button.copy, TokenDisplayOnceModal.button.close,\n// TokenDisplayOnceModal.warning.once, TokenDisplayOnceModal.copied\n\nexport const TokenDisplayOnceModalPropsSchema = z.object({\n token: z.string().min(1),\n title: z.string().min(1),\n warningMessage: z.string().min(1),\n copyLabel: z.string().min(1),\n closeLabel: z.string().min(1),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type TokenDisplayOnceModalProps = z.infer<typeof TokenDisplayOnceModalPropsSchema> & {\n onClose: () => void;\n};\n\nexport function validateTokenDisplayOnceModalProps(\n raw: unknown,\n): z.infer<typeof TokenDisplayOnceModalPropsSchema> {\n return TokenDisplayOnceModalPropsSchema.parse(raw);\n}\n","import type { ReactNode } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { z } from \"zod\";\n\n// i18nKeys: TableView.aria.table, TableView.pagination.next, TableView.pagination.prev, TableView.empty.message, TableView.error.invalidProps\n\nexport const ColumnDefSchema = z.object({\n key: z.string().min(1),\n header: z.string().min(1),\n // render is a runtime function — excluded from Zod, typed separately\n});\n\nexport type ColumnDef<TRow extends Record<string, unknown> = Record<string, unknown>> = {\n key: string;\n header: string;\n render?: (row: TRow) => ReactNode;\n};\n\n/**\n * Validates the serialisable (non-function) portion of TableView props.\n * The `rows$` Observable and `render` callbacks are not Zod-parseable and\n * must be validated at the call-site type level.\n */\nexport const TableViewPropsSchema = z.object({\n columns: z.array(ColumnDefSchema).min(1, \"TableView requires at least one column\"),\n virtualizeThreshold: z.number().int().positive().default(100),\n ariaLabel: z.string().min(1),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type TableViewPropsSchemaInput = z.input<typeof TableViewPropsSchema>;\nexport type TableViewPropsSchemaOutput = z.output<typeof TableViewPropsSchema>;\n\n/**\n * Props for the static TableView — accepts a plain array of rows.\n * Primary API for already-fetched data (no rxjs required).\n */\nexport type TableViewProps<TRow extends Record<string, unknown> = Record<string, unknown>> = {\n columns: ColumnDef<TRow>[];\n rows: Partial<TRow>[];\n virtualizeThreshold?: number;\n ariaLabel: string;\n locale?: \"en\" | \"fr\";\n /** v0.2.1+: when provided, rows become keyboard-activable (role=button + tabIndex=0 + Enter/Space). 5-BU ABSOLUTE blocker fix. */\n onRowClick?: (row: TRow, index: number) => void;\n};\n\n/**\n * Props for StreamingTableView — accepts an RxJS Observable for incremental row appending.\n * Consumers using this variant MUST install rxjs ^7.8.0 in their project.\n */\nexport type StreamingTableViewProps<\n TRow extends Record<string, unknown> = Record<string, unknown>,\n> = {\n columns: ColumnDef<TRow>[];\n rows$: Observable<Partial<TRow>[]>;\n virtualizeThreshold?: number;\n ariaLabel: string;\n locale?: \"en\" | \"fr\";\n /** v0.2.1+: same semantics as static TableView. */\n onRowClick?: (row: TRow, index: number) => void;\n};\n\nexport function validateTableViewProps(raw: unknown): TableViewPropsSchemaOutput {\n return TableViewPropsSchema.parse(raw);\n}\n","import { z } from \"zod\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nexport const ConfirmDialogPropsSchema = z.object({\n title: z.string().min(1),\n message: z.string().min(1),\n confirmLabel: z.string().min(1),\n cancelLabel: z.string().min(1),\n variant: z.enum([\"default\", \"danger\"]).default(\"default\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport function validateConfirmDialogProps(raw: unknown): z.infer<typeof ConfirmDialogPropsSchema> {\n return ConfirmDialogPropsSchema.parse(raw);\n}\n","import { z } from \"zod\";\n\nexport const StatusBadgePropsSchema = z.object({\n status: z.string(),\n variant: z.enum([\"success\", \"warning\", \"danger\", \"info\", \"neutral\"]).default(\"neutral\"),\n label: z.string().optional(),\n locale: z.enum([\"en\", \"fr\"]),\n});\n\nexport type StatusBadgeProps = z.infer<typeof StatusBadgePropsSchema>;\n\nexport function validateProps(raw: unknown): StatusBadgeProps {\n return StatusBadgePropsSchema.parse(raw);\n}\n","import { z } from \"zod\";\n\nexport const ProgressBarPropsSchema = z.object({\n value: z.number().min(0).max(100),\n label: z.string().min(1),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n colorVariant: z.enum([\"default\", \"warning\", \"danger\"]).default(\"default\"),\n});\n\nexport type ProgressBarProps = z.infer<typeof ProgressBarPropsSchema>;\n\nexport function validateProps(raw: unknown): ProgressBarProps {\n return ProgressBarPropsSchema.parse(raw);\n}\n","import { type UIResource, createUIResource } from \"@mcp-ui/server\";\nimport { MarkdownRendererPropsSchema } from \"../components/artifacts/MarkdownRenderer.schema.js\";\nimport { TokenDisplayOnceModalPropsSchema } from \"../components/confirmation/TokenDisplayOnceModal.schema.js\";\nimport { TableViewPropsSchema } from \"../components/display/TableView.schema.js\";\nimport { ConfirmDialogPropsSchema } from \"../components/input/ConfirmDialog.schema.js\";\nimport { StatusBadgePropsSchema } from \"../components/media/StatusBadge.schema.js\";\nimport { ProgressBarPropsSchema } from \"../components/progress/ProgressBar.schema.js\";\n\n/**\n * MCP capability key used by hosts to discover that this server emits\n * MCP UI Apps resources (mosaic-architecture-standard-v1 §2.1).\n */\nexport const MCP_UI_CAPABILITY_KEY = \"io.modelcontextprotocol/ui\" as const;\n\n/**\n * Canonical Mosaic MIME type — every UIResource produced by this server\n * advertises the MCP Apps profile (`text/html;profile=mcp-app`).\n */\nexport const MOSAIC_MIME_TYPE = \"text/html;profile=mcp-app\" as const;\n\ntype SupportedComponent =\n | \"ProgressBar\"\n | \"ConfirmDialog\"\n | \"TableView\"\n | \"MarkdownRenderer\"\n | \"TokenDisplayOnceModal\"\n | \"StatusBadge\";\n\nconst SCHEMA_BY_NAME = {\n ProgressBar: ProgressBarPropsSchema,\n ConfirmDialog: ConfirmDialogPropsSchema,\n TableView: TableViewPropsSchema,\n MarkdownRenderer: MarkdownRendererPropsSchema,\n TokenDisplayOnceModal: TokenDisplayOnceModalPropsSchema,\n StatusBadge: StatusBadgePropsSchema,\n} as const;\n\nconst COMPONENT_KEYS = Object.keys(SCHEMA_BY_NAME) as SupportedComponent[];\n\nconst I18N_TITLE: Record<SupportedComponent, { en: string; fr: string }> = {\n ProgressBar: { en: \"Progress\", fr: \"Progression\" },\n ConfirmDialog: { en: \"Confirmation\", fr: \"Confirmation\" },\n TableView: { en: \"Data table\", fr: \"Tableau de données\" },\n MarkdownRenderer: { en: \"Markdown content\", fr: \"Contenu Markdown\" },\n TokenDisplayOnceModal: { en: \"Token (shown once)\", fr: \"Jeton (affiché une fois)\" },\n StatusBadge: { en: \"Status\", fr: \"Statut\" },\n};\n\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction fallbackMarkdown(componentName: SupportedComponent, locale: \"en\" | \"fr\"): string {\n const heading = I18N_TITLE[componentName][locale];\n const note =\n locale === \"fr\"\n ? \"Rendu Markdown de secours — composant Mosaic chargé via MCP UI.\"\n : \"Markdown fallback — Mosaic component rendered via MCP UI.\";\n return `# ${heading}\\n\\n${note}\\n`;\n}\n\nfunction buildHtml(componentName: SupportedComponent, props: unknown, locale: \"en\" | \"fr\"): string {\n const propsJson = escapeHtml(JSON.stringify(props));\n const title = escapeHtml(I18N_TITLE[componentName][locale]);\n return `<!DOCTYPE html><html lang=\"${locale}\"><head><meta charset=\"utf-8\"><title>${title}</title></head><body><div id=\"mosaic-root\" data-component=\"${componentName}\" data-props='${propsJson}'></div></body></html>`;\n}\n\nexport interface CreateMosaicResourceOptions {\n /** Optional override for the generated `ui://` URI. */\n uri?: `ui://${string}`;\n /** Optional override of the markdown fallback emitted under `_meta.ui.fallback`. */\n markdownFallback?: string;\n}\n\n/**\n * Create a canonical MCP UI Apps `UIResource` for a Mosaic component.\n *\n * - Runtime-validates `props` with the component's Zod schema (throws on failure).\n * - Wraps the rendered HTML with `createUIResource()` from `@mcp-ui/server`.\n * - Emits canonical nested `_meta.ui.{ resourceUri, locale, componentName, fallback }`.\n * - Uses MIME `text/html;profile=mcp-app` (Mosaic standard §2.1).\n *\n * @throws ZodError when `props` fails validation for `componentName`.\n */\nexport function createMosaicResource(\n componentName: SupportedComponent,\n props: unknown,\n locale: \"en\" | \"fr\" = \"en\",\n): UIResource {\n const schema = SCHEMA_BY_NAME[componentName];\n if (!schema) {\n throw new Error(`createMosaicResource: unknown component '${componentName}'`);\n }\n const validated = schema.parse(props);\n const uri: `ui://${string}` = `ui://mosaic/${componentName.toLowerCase()}`;\n const html = buildHtml(componentName, validated, locale);\n const fallback = fallbackMarkdown(componentName, locale);\n\n const resource = createUIResource({\n uri,\n content: { type: \"rawHtml\", htmlString: html },\n encoding: \"text\",\n metadata: {\n ui: {\n resourceUri: uri,\n locale,\n componentName,\n fallback,\n },\n },\n });\n\n // createUIResource may itself default the MIME type; ensure it matches the\n // Mosaic canonical profile regardless of upstream defaults.\n resource.resource.mimeType = MOSAIC_MIME_TYPE;\n return resource;\n}\n\nexport const MOSAIC_SUPPORTED_COMPONENTS: readonly SupportedComponent[] = COMPONENT_KEYS;\nexport type { SupportedComponent };\n"]}
1
+ {"version":3,"sources":["../src/i18n/strings.ts","../src/components/shared/markdown.ts","../src/components/artifacts/MarkdownRenderer.schema.ts","../src/components/artifacts/MarkdownRenderer.markdown.ts","../src/components/confirmation/TokenDisplayOnceModal.schema.ts","../src/components/confirmation/TokenDisplayOnceModal.markdown.ts","../src/components/shared/datetime.ts","../src/components/shared/url.ts","../src/components/confirmation/TransactionPreview.schema.ts","../src/components/confirmation/TransactionPreview.markdown.ts","../src/components/shared/decimal.ts","../src/components/display/BalanceCard.schema.ts","../src/components/display/BalanceCard.markdown.ts","../src/components/display/MessageFeed.schema.ts","../src/components/display/MessageFeed.markdown.ts","../src/components/display/PipelineBoard.logic.ts","../src/components/display/PipelineBoard.schema.ts","../src/components/display/PipelineBoard.markdown.ts","../src/components/display/StatCard.schema.ts","../src/components/display/StatCard.markdown.ts","../src/components/display/TableView.schema.ts","../src/components/display/TableView.markdown.ts","../src/components/input/ConfirmDialog.schema.ts","../src/components/input/ConfirmDialog.markdown.ts","../src/components/media/StatusBadge.schema.ts","../src/components/media/StatusBadge.markdown.ts","../src/components/progress/ProgressBar.schema.ts","../src/components/progress/ProgressBar.markdown.ts","../src/components/progress/Timeline.schema.ts","../src/components/progress/Timeline.markdown.ts","../src/server/create-mosaic-resource.ts"],"names":["z","frac","createUIResource","ZodError"],"mappings":"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","file":"server.cjs","sourcesContent":["/**\n * Compile-time mirror of `@vantageos/mosaic-i18n` EN/FR locales for all\n * Mosaic components (v0.3.0). Inlined here so that `<Comp>` renderers can\n * resolve `t(key, locale)` without dragging react-i18next into the component\n * runtime (keeps bundle small and tests provider-free). Drift is gated by\n * `mosaic-registry-drift-check.mjs` which validates the canonical\n * `packages/mosaic-i18n/src/locales/{en,fr}.json` against `registry.yaml`.\n *\n * Mosaic standard §8: production JSX MUST resolve user-facing strings via\n * `t()` — no hardcoded English literals.\n *\n * Forms keys added — v0.3.0-C-PR1 (Axis 5/6 i18n pass).\n * Convention: Forms.<Component>.<context>.<id>\n */\nexport type MosaicLocale = \"en\" | \"fr\";\n\nconst EN = {\n // ─── Non-forms components ──────────────────────────────────────────────────\n \"ProgressBar.aria.label\": \"Progress\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar: invalid props\",\n \"ConfirmDialog.button.confirm\": \"Confirm\",\n \"ConfirmDialog.button.cancel\": \"Cancel\",\n \"ConfirmDialog.aria.dialog\": \"Confirmation dialog\",\n \"TableView.aria.table\": \"Data table\",\n \"TableView.pagination.next\": \"Next page\",\n \"TableView.pagination.prev\": \"Previous page\",\n \"TableView.empty.message\": \"No data to display\",\n \"TableView.error.invalidProps\": \"TableView: invalid props\",\n \"MarkdownRenderer.aria.content\": \"Rendered Markdown content\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer: invalid props\",\n \"MarkdownRenderer.error.tooLong\": \"Content exceeds maximum length\",\n \"TokenDisplayOnceModal.button.copy\": \"Copy token\",\n \"TokenDisplayOnceModal.button.close\": \"Close\",\n \"TokenDisplayOnceModal.warning.once\": \"This token will only be shown once. Copy it now.\",\n \"TokenDisplayOnceModal.copied\": \"Copied\",\n \"StatusBadge.aria.status\": \"Status\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge: invalid props\",\n \"Badge.aria.label\": \"Badge\",\n \"Badge.error.invalidProps\": \"Badge: invalid props\",\n \"EmptyState.error.invalidProps\": \"EmptyState: invalid props\",\n \"Toast.aria.close\": \"Close notification\",\n \"Toast.error.invalidProps\": \"Toast: invalid props\",\n \"Alert.aria.dismiss\": \"Dismiss alert\",\n \"Alert.error.invalidProps\": \"Alert: invalid props\",\n \"VirtualList.empty.message\": \"No items to display\",\n \"VirtualList.error.invalidProps\": \"VirtualList: invalid props\",\n \"Skeleton.aria.label\": \"Loading\",\n \"Skeleton.error.invalidProps\": \"Skeleton: invalid props\",\n // ─── Forms — useMosaicForm ─────────────────────────────────────────────────\n \"useMosaicForm.error.invalidProps\": \"useMosaicForm: invalid options\",\n // ─── Forms — FormProvider ──────────────────────────────────────────────────\n \"FormProvider.error.invalidProps\": \"FormProvider: invalid props\",\n // ─── Forms — FormField ────────────────────────────────────────────────────\n \"FormField.error.invalidProps\": \"FormField: invalid props\",\n // ─── Forms — ErrorDisplay ─────────────────────────────────────────────────\n \"ErrorDisplay.error.required\": \"This field is required\",\n \"ErrorDisplay.error.min\": \"Value is below the minimum\",\n \"ErrorDisplay.error.max\": \"Value exceeds the maximum\",\n \"ErrorDisplay.error.minLength\": \"Input is too short\",\n \"ErrorDisplay.error.maxLength\": \"Input is too long\",\n \"ErrorDisplay.error.pattern\": \"Invalid format\",\n \"ErrorDisplay.error.email\": \"Enter a valid email address\",\n \"ErrorDisplay.error.url\": \"Enter a valid URL\",\n \"ErrorDisplay.error.generic\": \"Invalid value\",\n // ─── Forms — SubmitButton ─────────────────────────────────────────────────\n \"SubmitButton.aria.submit\": \"Submit form\",\n \"SubmitButton.state.loading\": \"Submitting…\",\n \"SubmitButton.error.invalidProps\": \"SubmitButton: invalid props\",\n // ─── Forms — Input ────────────────────────────────────────────────────────\n \"Input.aria.label\": \"Input field\",\n \"Input.error.required\": \"This field is required\",\n \"Input.error.invalid\": \"Invalid value\",\n \"Input.error.tooLong\": \"Input is too long\",\n \"Input.error.tooShort\": \"Input is too short\",\n \"Input.error.invalidProps\": \"Input: invalid props\",\n // ─── Forms — Textarea ─────────────────────────────────────────────────────\n \"Textarea.aria.label\": \"Text area\",\n \"Textarea.error.required\": \"This field is required\",\n \"Textarea.error.tooLong\": \"Text is too long\",\n \"Textarea.counter.remaining\": \"characters remaining\",\n \"Textarea.error.invalidProps\": \"Textarea: invalid props\",\n // ─── Forms — FieldArray ───────────────────────────────────────────────────\n \"FieldArray.aria.list\": \"List of items\",\n \"FieldArray.aria.addItem\": \"Add item\",\n \"FieldArray.aria.removeItem\": \"Remove item\",\n \"FieldArray.error.invalidProps\": \"FieldArray: invalid props\",\n // ─── Forms — Checkbox ─────────────────────────────────────────────────────\n \"Checkbox.aria.label\": \"Checkbox\",\n \"Checkbox.error.required\": \"This field must be checked\",\n \"Checkbox.error.invalidProps\": \"Checkbox: invalid props\",\n // ─── Forms — MultiSelect ──────────────────────────────────────────────────\n \"MultiSelect.aria.label\": \"Multi-select field\",\n \"MultiSelect.aria.removeChip\": \"Remove\",\n \"MultiSelect.error.required\": \"Select at least one option\",\n \"MultiSelect.error.maxItems\": \"Maximum number of selections reached\",\n \"MultiSelect.placeholder\": \"Select options…\",\n \"MultiSelect.search.placeholder\": \"Search…\",\n \"MultiSelect.empty\": \"No options available\",\n \"MultiSelect.error.invalidProps\": \"MultiSelect: invalid props\",\n // ─── Forms — RadioGroup ───────────────────────────────────────────────────\n \"RadioGroup.aria.label\": \"Radio group\",\n \"RadioGroup.error.required\": \"Select one option\",\n \"RadioGroup.error.invalidProps\": \"RadioGroup: invalid props\",\n // ─── Forms — Select ───────────────────────────────────────────────────────\n \"Select.placeholder\": \"Select an option…\",\n \"Select.search.placeholder\": \"Search…\",\n \"Select.empty\": \"No options available\",\n \"Select.error.required\": \"Select an option\",\n \"Select.error.invalidProps\": \"Select: invalid props\",\n \"ModelContext.selection.one\": \"1 row selected\",\n \"ModelContext.selection.many\": \"{n} rows selected\",\n \"ModelContext.selection.none\": \"No rows selected\",\n \"TableView.sort.by\": \"Sort by\",\n \"TableView.select.row\": \"Select row\",\n \"TableView.select.all\": \"Select all rows\",\n \"TableView.loading\": \"Loading table\",\n \"StatCard.title\": \"Statistic\",\n \"StatCard.trend.up\": \"Up\",\n \"StatCard.trend.down\": \"Down\",\n \"StatCard.trend.flat\": \"Flat\",\n \"StatCard.empty.message\": \"No statistic to display\",\n \"StatCard.loading\": \"Loading statistic\",\n \"StatCard.error.invalidProps\": \"StatCard: invalid props\",\n \"BalanceCard.title\": \"Balance\",\n \"BalanceCard.network\": \"Network\",\n \"BalanceCard.testnet\": \"Testnet\",\n \"BalanceCard.address\": \"Address\",\n \"BalanceCard.contract\": \"Token contract\",\n \"BalanceCard.value\": \"Value\",\n \"BalanceCard.copy\": \"Copy address\",\n \"BalanceCard.copied\": \"Address copied\",\n \"BalanceCard.empty.message\": \"No balance to display\",\n \"BalanceCard.loading\": \"Loading balance\",\n \"BalanceCard.error.invalidProps\": \"BalanceCard: invalid props\",\n \"Timeline.title\": \"Timeline\",\n \"Timeline.status.done\": \"Done\",\n \"Timeline.status.current\": \"In progress\",\n \"Timeline.status.pending\": \"Pending\",\n \"Timeline.status.blocked\": \"Blocked\",\n \"Timeline.completed\": \"{n} completed\",\n \"Timeline.more\": \"{n} more\",\n \"Timeline.empty.message\": \"No steps to display\",\n \"Timeline.loading\": \"Loading timeline\",\n \"Timeline.error.invalidProps\": \"Timeline: invalid props\",\n \"MessageFeed.title\": \"Messages\",\n \"MessageFeed.unread\": \"Unread\",\n \"MessageFeed.attachment\": \"Attachment\",\n \"MessageFeed.showing\": \"Showing the latest {n} of {total}\",\n \"MessageFeed.empty.message\": \"No messages\",\n \"MessageFeed.loading\": \"Loading messages\",\n \"MessageFeed.error.invalidProps\": \"MessageFeed: invalid props\",\n \"PipelineBoard.title\": \"Pipeline\",\n \"PipelineBoard.deals.one\": \"1 deal\",\n \"PipelineBoard.deals.many\": \"{n} deals\",\n \"PipelineBoard.total\": \"Total\",\n \"PipelineBoard.stage.empty\": \"No deals\",\n \"PipelineBoard.filter.label\": \"Show stages\",\n \"PipelineBoard.summary.open\": \"Open full board\",\n \"PipelineBoard.more\": \"{n} more stages\",\n \"PipelineBoard.empty.message\": \"No pipeline to display\",\n \"PipelineBoard.loading\": \"Loading pipeline\",\n \"PipelineBoard.error.invalidProps\": \"PipelineBoard: invalid props\",\n \"PipelineBoard.col.stage\": \"Stage\",\n \"PipelineBoard.col.deals\": \"Deals\",\n \"TransactionPreview.title\": \"Transaction preview\",\n \"TransactionPreview.notice\": \"NOT SIGNED - preparation only\",\n \"TransactionPreview.kind.transfer\": \"Transfer\",\n \"TransactionPreview.kind.swap\": \"Swap\",\n \"TransactionPreview.testnet\": \"Testnet\",\n \"TransactionPreview.field.network\": \"Network\",\n \"TransactionPreview.field.from\": \"From\",\n \"TransactionPreview.field.to\": \"To\",\n \"TransactionPreview.field.amount\": \"Amount\",\n \"TransactionPreview.field.fee\": \"Network fee\",\n \"TransactionPreview.field.sell\": \"Sell\",\n \"TransactionPreview.field.buy\": \"Buy\",\n \"TransactionPreview.field.minReceived\": \"Minimum received\",\n \"TransactionPreview.field.route\": \"Route\",\n \"TransactionPreview.field.priceImpact\": \"Price impact\",\n \"TransactionPreview.field.expires\": \"Quote expires\",\n \"TransactionPreview.priceImpact.high\": \"High price impact\",\n \"TransactionPreview.simulation.success\": \"Simulation succeeded\",\n \"TransactionPreview.simulation.failed\": \"Simulation failed\",\n \"TransactionPreview.simulation.unavailable\": \"Simulation unavailable\",\n \"TransactionPreview.warnings\": \"Warnings\",\n \"TransactionPreview.handoff\": \"Open in wallet\",\n \"TransactionPreview.empty.message\": \"No transaction to preview\",\n \"TransactionPreview.loading\": \"Loading preview\",\n \"TransactionPreview.error.invalidProps\": \"TransactionPreview: invalid props\",\n \"ProgressBar.title\": \"Progress\",\n \"ConfirmDialog.title\": \"Confirmation\",\n \"ConfirmDialog.options\": \"Answers\",\n \"TableView.title\": \"Data table\",\n \"TableView.markdown.more\": \"{n} more rows\",\n \"MarkdownRenderer.title\": \"Markdown content\",\n \"TokenDisplayOnceModal.title\": \"Token (shown once)\",\n \"StatusBadge.title\": \"Status\",\n \"TokenDisplayOnceModal.notice.once\": \"The value is shown once, in the app view only.\",\n \"TokenDisplayOnceModal.field.scope\": \"Scope\",\n \"TokenDisplayOnceModal.field.expires\": \"Expires\",\n \"TokenDisplayOnceModal.field.fingerprint\": \"Fingerprint\",\n} as const;\n\nconst FR: Record<keyof typeof EN, string> = {\n // ─── Non-forms components ──────────────────────────────────────────────────\n \"ProgressBar.aria.label\": \"Progression\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar : propriétés invalides\",\n \"ConfirmDialog.button.confirm\": \"Confirmer\",\n \"ConfirmDialog.button.cancel\": \"Annuler\",\n \"ConfirmDialog.aria.dialog\": \"Boîte de dialogue de confirmation\",\n \"TableView.aria.table\": \"Tableau de données\",\n \"TableView.pagination.next\": \"Page suivante\",\n \"TableView.pagination.prev\": \"Page précédente\",\n \"TableView.empty.message\": \"Aucune donnée à afficher\",\n \"TableView.error.invalidProps\": \"TableView : propriétés invalides\",\n \"MarkdownRenderer.aria.content\": \"Contenu Markdown rendu\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer : propriétés invalides\",\n \"MarkdownRenderer.error.tooLong\": \"Le contenu dépasse la longueur maximale\",\n \"TokenDisplayOnceModal.button.copy\": \"Copier le jeton\",\n \"TokenDisplayOnceModal.button.close\": \"Fermer\",\n \"TokenDisplayOnceModal.warning.once\":\n \"Ce jeton ne sera affiché qu'une seule fois. Copiez-le maintenant.\",\n \"TokenDisplayOnceModal.copied\": \"Copié\",\n \"StatusBadge.aria.status\": \"Statut\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge : propriétés invalides\",\n \"Badge.aria.label\": \"Badge\",\n \"Badge.error.invalidProps\": \"Badge : propriétés invalides\",\n \"EmptyState.error.invalidProps\": \"EmptyState : propriétés invalides\",\n \"Toast.aria.close\": \"Fermer la notification\",\n \"Toast.error.invalidProps\": \"Toast : propriétés invalides\",\n \"Alert.aria.dismiss\": \"Fermer l'alerte\",\n \"Alert.error.invalidProps\": \"Alert : propriétés invalides\",\n \"VirtualList.empty.message\": \"Aucun élément à afficher\",\n \"VirtualList.error.invalidProps\": \"VirtualList : propriétés invalides\",\n \"Skeleton.aria.label\": \"Chargement\",\n \"Skeleton.error.invalidProps\": \"Skeleton : propriétés invalides\",\n // ─── Forms — useMosaicForm ─────────────────────────────────────────────────\n \"useMosaicForm.error.invalidProps\": \"useMosaicForm : options invalides\",\n // ─── Forms — FormProvider ──────────────────────────────────────────────────\n \"FormProvider.error.invalidProps\": \"FormProvider : propriétés invalides\",\n // ─── Forms — FormField ────────────────────────────────────────────────────\n \"FormField.error.invalidProps\": \"FormField : propriétés invalides\",\n // ─── Forms — ErrorDisplay ─────────────────────────────────────────────────\n \"ErrorDisplay.error.required\": \"Ce champ est obligatoire\",\n \"ErrorDisplay.error.min\": \"La valeur est inférieure au minimum\",\n \"ErrorDisplay.error.max\": \"La valeur dépasse le maximum\",\n \"ErrorDisplay.error.minLength\": \"La saisie est trop courte\",\n \"ErrorDisplay.error.maxLength\": \"La saisie est trop longue\",\n \"ErrorDisplay.error.pattern\": \"Format invalide\",\n \"ErrorDisplay.error.email\": \"Saisissez une adresse e-mail valide\",\n \"ErrorDisplay.error.url\": \"Saisissez une URL valide\",\n \"ErrorDisplay.error.generic\": \"Valeur invalide\",\n // ─── Forms — SubmitButton ─────────────────────────────────────────────────\n \"SubmitButton.aria.submit\": \"Soumettre le formulaire\",\n \"SubmitButton.state.loading\": \"Envoi en cours…\",\n \"SubmitButton.error.invalidProps\": \"SubmitButton : propriétés invalides\",\n // ─── Forms — Input ────────────────────────────────────────────────────────\n \"Input.aria.label\": \"Champ de saisie\",\n \"Input.error.required\": \"Ce champ est obligatoire\",\n \"Input.error.invalid\": \"Valeur invalide\",\n \"Input.error.tooLong\": \"La saisie est trop longue\",\n \"Input.error.tooShort\": \"La saisie est trop courte\",\n \"Input.error.invalidProps\": \"Input : propriétés invalides\",\n // ─── Forms — Textarea ─────────────────────────────────────────────────────\n \"Textarea.aria.label\": \"Zone de texte\",\n \"Textarea.error.required\": \"Ce champ est obligatoire\",\n \"Textarea.error.tooLong\": \"Le texte est trop long\",\n \"Textarea.counter.remaining\": \"caractères restants\",\n \"Textarea.error.invalidProps\": \"Textarea : propriétés invalides\",\n // ─── Forms — FieldArray ───────────────────────────────────────────────────\n \"FieldArray.aria.list\": \"Liste d'éléments\",\n \"FieldArray.aria.addItem\": \"Ajouter un élément\",\n \"FieldArray.aria.removeItem\": \"Supprimer l'élément\",\n \"FieldArray.error.invalidProps\": \"FieldArray : propriétés invalides\",\n // ─── Forms — Checkbox ─────────────────────────────────────────────────────\n \"Checkbox.aria.label\": \"Case à cocher\",\n \"Checkbox.error.required\": \"Ce champ doit être coché\",\n \"Checkbox.error.invalidProps\": \"Checkbox : propriétés invalides\",\n // ─── Forms — MultiSelect ──────────────────────────────────────────────────\n \"MultiSelect.aria.label\": \"Champ de sélection multiple\",\n \"MultiSelect.aria.removeChip\": \"Retirer\",\n \"MultiSelect.error.required\": \"Sélectionnez au moins une option\",\n \"MultiSelect.error.maxItems\": \"Nombre maximum de sélections atteint\",\n \"MultiSelect.placeholder\": \"Sélectionner des options…\",\n \"MultiSelect.search.placeholder\": \"Rechercher…\",\n \"MultiSelect.empty\": \"Aucune option disponible\",\n \"MultiSelect.error.invalidProps\": \"MultiSelect : propriétés invalides\",\n // ─── Forms — RadioGroup ───────────────────────────────────────────────────\n \"RadioGroup.aria.label\": \"Groupe de boutons radio\",\n \"RadioGroup.error.required\": \"Sélectionnez une option\",\n \"RadioGroup.error.invalidProps\": \"RadioGroup : propriétés invalides\",\n // ─── Forms — Select ───────────────────────────────────────────────────────\n \"Select.placeholder\": \"Sélectionner une option…\",\n \"Select.search.placeholder\": \"Rechercher…\",\n \"Select.empty\": \"Aucune option disponible\",\n \"Select.error.required\": \"Sélectionnez une option\",\n \"Select.error.invalidProps\": \"Select : propriétés invalides\",\n \"ModelContext.selection.one\": \"1 ligne sélectionnée\",\n \"ModelContext.selection.many\": \"{n} lignes sélectionnées\",\n \"ModelContext.selection.none\": \"Aucune ligne sélectionnée\",\n \"TableView.sort.by\": \"Trier par\",\n \"TableView.select.row\": \"Sélectionner la ligne\",\n \"TableView.select.all\": \"Tout sélectionner\",\n \"TableView.loading\": \"Chargement du tableau\",\n \"StatCard.title\": \"Statistique\",\n \"StatCard.trend.up\": \"En hausse\",\n \"StatCard.trend.down\": \"En baisse\",\n \"StatCard.trend.flat\": \"Stable\",\n \"StatCard.empty.message\": \"Aucune statistique à afficher\",\n \"StatCard.loading\": \"Chargement de la statistique\",\n \"StatCard.error.invalidProps\": \"StatCard : propriétés invalides\",\n \"BalanceCard.title\": \"Solde\",\n \"BalanceCard.network\": \"Réseau\",\n \"BalanceCard.testnet\": \"Réseau de test\",\n \"BalanceCard.address\": \"Adresse\",\n \"BalanceCard.contract\": \"Contrat du jeton\",\n \"BalanceCard.value\": \"Valeur\",\n \"BalanceCard.copy\": \"Copier l'adresse\",\n \"BalanceCard.copied\": \"Adresse copiée\",\n \"BalanceCard.empty.message\": \"Aucun solde à afficher\",\n \"BalanceCard.loading\": \"Chargement du solde\",\n \"BalanceCard.error.invalidProps\": \"BalanceCard : propriétés invalides\",\n \"Timeline.title\": \"Chronologie\",\n \"Timeline.status.done\": \"Terminé\",\n \"Timeline.status.current\": \"En cours\",\n \"Timeline.status.pending\": \"À venir\",\n \"Timeline.status.blocked\": \"Bloqué\",\n \"Timeline.completed\": \"{n} terminé(s)\",\n \"Timeline.more\": \"{n} de plus\",\n \"Timeline.empty.message\": \"Aucune étape à afficher\",\n \"Timeline.loading\": \"Chargement de la chronologie\",\n \"Timeline.error.invalidProps\": \"Timeline : propriétés invalides\",\n \"MessageFeed.title\": \"Messages\",\n \"MessageFeed.unread\": \"Non lu\",\n \"MessageFeed.attachment\": \"Pièce jointe\",\n \"MessageFeed.showing\": \"Affichage des {n} derniers sur {total}\",\n \"MessageFeed.empty.message\": \"Aucun message\",\n \"MessageFeed.loading\": \"Chargement des messages\",\n \"MessageFeed.error.invalidProps\": \"MessageFeed : propriétés invalides\",\n \"PipelineBoard.title\": \"Pipeline\",\n \"PipelineBoard.deals.one\": \"1 affaire\",\n \"PipelineBoard.deals.many\": \"{n} affaires\",\n \"PipelineBoard.total\": \"Total\",\n \"PipelineBoard.stage.empty\": \"Aucune affaire\",\n \"PipelineBoard.filter.label\": \"Afficher les étapes\",\n \"PipelineBoard.summary.open\": \"Ouvrir le tableau complet\",\n \"PipelineBoard.more\": \"{n} étapes de plus\",\n \"PipelineBoard.empty.message\": \"Aucun pipeline à afficher\",\n \"PipelineBoard.loading\": \"Chargement du pipeline\",\n \"PipelineBoard.error.invalidProps\": \"PipelineBoard : propriétés invalides\",\n \"PipelineBoard.col.stage\": \"Étape\",\n \"PipelineBoard.col.deals\": \"Affaires\",\n \"TransactionPreview.title\": \"Aperçu de transaction\",\n \"TransactionPreview.notice\": \"NON SIGNÉ - préparation uniquement\",\n \"TransactionPreview.kind.transfer\": \"Transfert\",\n \"TransactionPreview.kind.swap\": \"Échange\",\n \"TransactionPreview.testnet\": \"Réseau de test\",\n \"TransactionPreview.field.network\": \"Réseau\",\n \"TransactionPreview.field.from\": \"De\",\n \"TransactionPreview.field.to\": \"À\",\n \"TransactionPreview.field.amount\": \"Montant\",\n \"TransactionPreview.field.fee\": \"Frais de réseau\",\n \"TransactionPreview.field.sell\": \"Vendre\",\n \"TransactionPreview.field.buy\": \"Acheter\",\n \"TransactionPreview.field.minReceived\": \"Minimum reçu\",\n \"TransactionPreview.field.route\": \"Itinéraire\",\n \"TransactionPreview.field.priceImpact\": \"Impact sur le prix\",\n \"TransactionPreview.field.expires\": \"Expiration du devis\",\n \"TransactionPreview.priceImpact.high\": \"Impact sur le prix élevé\",\n \"TransactionPreview.simulation.success\": \"Simulation réussie\",\n \"TransactionPreview.simulation.failed\": \"Simulation échouée\",\n \"TransactionPreview.simulation.unavailable\": \"Simulation indisponible\",\n \"TransactionPreview.warnings\": \"Avertissements\",\n \"TransactionPreview.handoff\": \"Ouvrir dans le portefeuille\",\n \"TransactionPreview.empty.message\": \"Aucune transaction à prévisualiser\",\n \"TransactionPreview.loading\": \"Chargement de l'aperçu\",\n \"TransactionPreview.error.invalidProps\": \"TransactionPreview : propriétés invalides\",\n \"ProgressBar.title\": \"Progression\",\n \"ConfirmDialog.title\": \"Confirmation\",\n \"ConfirmDialog.options\": \"Réponses\",\n \"TableView.title\": \"Tableau de données\",\n \"TableView.markdown.more\": \"{n} lignes de plus\",\n \"MarkdownRenderer.title\": \"Contenu Markdown\",\n \"TokenDisplayOnceModal.title\": \"Jeton (affiché une fois)\",\n \"StatusBadge.title\": \"Statut\",\n \"TokenDisplayOnceModal.notice.once\":\n \"La valeur n'est affichée qu'une fois, dans la vue de l'application uniquement.\",\n \"TokenDisplayOnceModal.field.scope\": \"Portée\",\n \"TokenDisplayOnceModal.field.expires\": \"Expire le\",\n \"TokenDisplayOnceModal.field.fingerprint\": \"Empreinte\",\n};\n\nexport type MosaicI18nKey = keyof typeof EN;\n\nconst TABLE: Record<MosaicLocale, Record<MosaicI18nKey, string>> = {\n en: EN,\n fr: FR,\n};\n\n/** Resolves a Mosaic i18n key for the given locale, falling back to EN. */\nexport function t(key: MosaicI18nKey, locale: MosaicLocale = \"en\"): string {\n return TABLE[locale]?.[key] ?? TABLE.en[key];\n}\n","/**\n * Markdown building blocks for the A-1 fallback of every view (pure strings, no React).\n * The text goes into a tool result `content[]` block that the MODEL reads: every untrusted\n * string must come out as inert text. Newlines collapse, markdown and HTML significant\n * characters are backslash-escaped, block markers at the start are neutralised, and URLs go\n * through {@link mdUrl} after being parsed (see `normalizeHttpUrl`).\n */\n\n// Backslash-escaped (CommonMark: each renders as the literal character): \\ ` * _ [ ] ( ) < > & ! | ~\nconst SPECIAL = /([\\\\`*_[\\]()<>&!|~])/g;\nconst BREAKS = new Set([10, 11, 12, 13, 0x85, 0x2028, 0x2029]);\n\n/**\n * One pass: every run of line breaks becomes a single space; other C0 controls (tab kept) and\n * DEL are dropped. Done by code point so no control character sits in a regular expression.\n */\nfunction flatten(text: string): string {\n let out = \"\";\n let gap = false;\n for (const c of text) {\n const n = c.codePointAt(0) ?? 0;\n if (BREAKS.has(n)) {\n gap = true;\n continue;\n }\n if (n < 32 && n !== 9) continue;\n if (n === 127) continue;\n if (gap) out += \" \";\n gap = false;\n out += c;\n }\n return gap ? `${out} ` : out;\n}\n\n/** Inert inline text: safe in a table cell, a list item, a link label or a blockquote. */\nexport function mdEscape(text: string): string {\n const flat = flatten(text)\n .replace(SPECIAL, \"\\\\$1\")\n // break GFM autolink literals: a scheme or www. in plain text must not become a live link\n .replace(/\\b(https?|ftp):\\/\\//gi, \"$1:\\\\/\\\\/\")\n .replace(/\\bwww\\./gi, (m) => `${m.slice(0, 3)}\\\\.`);\n return flat.replace(/^(\\s*)([#>+-])/, \"$1\\\\$2\").replace(/^(\\s*\\d+)([.)])(?=\\s|$)/, \"$1\\\\$2\");\n}\n\n/** A link destination: parentheses, brackets, backslash, angle brackets, backtick, whitespace encoded. */\nexport function mdUrl(href: string): string {\n return href.replace(\n /[()[\\]\\\\<>`\\s]/g,\n (c) => `%${c.charCodeAt(0).toString(16).toUpperCase().padStart(2, \"0\")}`,\n );\n}\n\n/** An inline code span that survives backticks inside the text; newlines collapse. */\nexport function mdCode(text: string): string {\n const flat = flatten(text);\n const longest = Math.max(0, ...(flat.match(/`+/g) ?? []).map((r) => r.length));\n const fence = \"`\".repeat(longest + 1);\n return `${fence} ${flat} ${fence}`;\n}\n\nexport function mdTable(headers: readonly string[], rows: readonly (readonly string[])[]): string {\n const line = (cells: readonly string[]) => `| ${cells.join(\" | \")} |`;\n return [line(headers), line(headers.map(() => \"---\")), ...rows.map(line)].join(\"\\n\");\n}\n\nexport function mdHeading(text: string, level = 1): string {\n return `${\"#\".repeat(level)} ${text}`;\n}\n","import { z } from \"zod\";\n\nexport const MarkdownRendererPropsSchema = z.object({\n content: z.string(),\n locale: z.enum([\"en\", \"fr\"]),\n maxLength: z.number().positive().default(50000),\n allowHtml: z.boolean().default(false),\n});\n\nexport type MarkdownRendererProps = z.infer<typeof MarkdownRendererPropsSchema>;\n\nexport function validateProps(raw: unknown): MarkdownRendererProps {\n return MarkdownRendererPropsSchema.parse(raw);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdHeading } from \"../shared/markdown.js\";\nimport { MarkdownRendererPropsSchema } from \"./MarkdownRenderer.schema.js\";\n\n/** A-1 fallback: the content IS markdown, so it is passed through (capped at `maxLength`). */\nexport function markdownRendererToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const p = MarkdownRendererPropsSchema.parse({ locale, ...(props as object) });\n return `${mdHeading(t(\"MarkdownRenderer.title\", locale))}\\n\\n${p.content.slice(0, p.maxLength)}\\n`;\n}\n","import { z } from \"zod\";\n\n// i18nKeys: TokenDisplayOnceModal.button.copy, TokenDisplayOnceModal.button.close,\n// TokenDisplayOnceModal.warning.once, TokenDisplayOnceModal.copied\n\nexport const TokenDisplayOnceModalPropsSchema = z.object({\n token: z.string().min(1),\n title: z.string().min(1),\n warningMessage: z.string().min(1),\n copyLabel: z.string().min(1),\n closeLabel: z.string().min(1),\n /** Non-secret metadata, shown in the view AND carried by the A-1 fallback. */\n scope: z.string().optional(),\n expiresAt: z.string().optional(),\n /** Supplied by the issuer; NEVER derived from the secret. */\n fingerprint: z.string().optional(),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type TokenDisplayOnceModalProps = z.infer<typeof TokenDisplayOnceModalPropsSchema> & {\n onClose: () => void;\n};\n\nexport function validateTokenDisplayOnceModalProps(\n raw: unknown,\n): z.infer<typeof TokenDisplayOnceModalPropsSchema> {\n return TokenDisplayOnceModalPropsSchema.parse(raw);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { TokenDisplayOnceModalPropsSchema } from \"./TokenDisplayOnceModal.schema.js\";\n\n/**\n * A-1 fallback for a one-time secret. `content[]` text reaches the model's context, and an\n * audience annotation is only a hint hosts may ignore, so the VALUE IS NEVER WRITTEN HERE: the\n * fallback carries the name, scope, expiry and an issuer-supplied fingerprint, plus a fixed\n * sentence that the value is shown once in the app view only. (`token` is declared in\n * MOSAIC_NEVER_SERIALISE and asserted absent by createMosaicToolResult.)\n */\nexport function tokenDisplayOnceModalToMarkdown(\n props: unknown,\n locale: \"en\" | \"fr\" = \"en\",\n): string {\n // `token` is omitted on purpose: the renderer never needs it and is fed props without it.\n const p = TokenDisplayOnceModalPropsSchema.omit({ token: true }).parse(props);\n const rows = [\n p.scope ? `- ${t(\"TokenDisplayOnceModal.field.scope\", locale)}: ${mdEscape(p.scope)}` : \"\",\n p.expiresAt\n ? `- ${t(\"TokenDisplayOnceModal.field.expires\", locale)}: ${mdEscape(p.expiresAt)}`\n : \"\",\n p.fingerprint\n ? `- ${t(\"TokenDisplayOnceModal.field.fingerprint\", locale)}: ${mdEscape(p.fingerprint)}`\n : \"\",\n ].filter(Boolean);\n return `${mdHeading(t(\"TokenDisplayOnceModal.title\", locale))}\\n\\n**${mdEscape(p.title)}**\\n\\n${rows.length ? `${rows.join(\"\\n\")}\\n\\n` : \"\"}${t(\"TokenDisplayOnceModal.notice.once\", locale)}\\n`;\n}\n","/**\n * Locale date-time formatting for views. An unparseable timestamp is returned unchanged (visible,\n * not replaced by a guess). `timeZone` is passed through so output is reproducible in tests and\n * follows the host's `hostContext.timeZone` (MCP Apps spec l.570).\n */\nexport function formatTimestamp(iso: string, locale: string, timeZone?: string): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n try {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n ...(timeZone ? { timeZone } : {}),\n }).format(d);\n } catch {\n return iso;\n }\n}\n","/**\n * The parsed, normalised form of an http(s) URL (`new URL(x).href`), or `undefined`. Emit THIS,\n * never the raw input: the parser strips tabs/newlines and percent-encodes spaces, so a raw\n * string with an embedded newline cannot reach a fallback or the host as a second line.\n */\nexport function normalizeHttpUrl(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n try {\n const u = new URL(value);\n return u.protocol === \"https:\" || u.protocol === \"http:\" ? u.href : undefined;\n } catch {\n return undefined;\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: TransactionPreview.title, TransactionPreview.notice, TransactionPreview.kind.transfer, TransactionPreview.kind.swap, TransactionPreview.testnet, TransactionPreview.field.network, TransactionPreview.field.from, TransactionPreview.field.to, TransactionPreview.field.amount, TransactionPreview.field.fee, TransactionPreview.field.sell, TransactionPreview.field.buy, TransactionPreview.field.minReceived, TransactionPreview.field.route, TransactionPreview.field.priceImpact, TransactionPreview.field.expires, TransactionPreview.priceImpact.high, TransactionPreview.simulation.success, TransactionPreview.simulation.failed, TransactionPreview.simulation.unavailable, TransactionPreview.warnings, TransactionPreview.handoff, TransactionPreview.empty.message, TransactionPreview.loading, TransactionPreview.error.invalidProps\n\nconst AmountSchema = z.object({\n /** Decimal STRING (never a float). */\n value: z.string().min(1),\n symbol: z.string().min(1),\n});\n\nconst QuoteSchema = z.object({\n sell: AmountSchema,\n buy: AmountSchema,\n minReceived: AmountSchema.optional(),\n route: z.array(z.string().min(1)).optional(),\n /** Percent as a decimal string, e.g. \"0.42\". */\n priceImpact: z.string().optional(),\n});\n\nexport type TransactionAmount = z.infer<typeof AmountSchema>;\nexport type TransactionQuote = z.infer<typeof QuoteSchema>;\n\n/**\n * TransactionPreview (R11): a transaction the server PREPARED and never signs — shape follows\n * fuse-mcp-server `getTradeQuote.ts` (expected output, route, price impact; read-only). There\n * is deliberately no field for a signature, a signer, a raw transaction or an execute action\n * (R12 refused): the only exit is an optional `handoff` link to the user's wallet. OpenAI's\n * public directory prohibits executing crypto transfers, so the view stops at the preview.\n * `{}` parses (empty state).\n */\nexport const TransactionPreviewPropsSchema = z.object({\n kind: z.enum([\"transfer\", \"swap\"]).default(\"transfer\"),\n network: z.string().optional(),\n testnet: z.boolean().default(false),\n from: z.string().optional(),\n to: z.string().optional(),\n amount: AmountSchema.optional(),\n fee: AmountSchema.optional(),\n quote: QuoteSchema.optional(),\n simulation: z\n .object({\n status: z.enum([\"success\", \"failed\", \"unavailable\"]),\n message: z.string().optional(),\n })\n .optional(),\n warnings: z.array(z.string()).default([]),\n /** ISO 8601 expiry of the quote. */\n expiresAt: z.string().optional(),\n /** Wallet link-out. Only http(s) urls are ever rendered. */\n handoff: z.object({ url: z.string().min(1) }).optional(),\n timeZone: z.string().optional(),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type TransactionPreviewProps = z.input<typeof TransactionPreviewPropsSchema>;\nexport type TransactionPreviewPropsOutput = z.output<typeof TransactionPreviewPropsSchema>;\n\nexport function validateTransactionPreviewProps(raw: unknown): TransactionPreviewPropsOutput {\n return TransactionPreviewPropsSchema.parse(raw);\n}\n\n/** True when the transaction has anything to preview. */\nexport function hasPreviewContent(p: TransactionPreviewPropsOutput): boolean {\n return Boolean(p.from || p.to || p.amount || p.quote || p.fee);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { formatTimestamp } from \"../shared/datetime.js\";\nimport { mdEscape, mdHeading, mdTable, mdUrl } from \"../shared/markdown.js\";\nimport { normalizeHttpUrl } from \"../shared/url.js\";\nimport {\n type TransactionAmount,\n TransactionPreviewPropsSchema,\n hasPreviewContent,\n} from \"./TransactionPreview.schema.js\";\n\nconst amt = (a: TransactionAmount) => `${a.value} ${a.symbol}`;\n\n/**\n * A-1 fallback (mandatory for this view): the field table plus the sentence \"NOT SIGNED -\n * preparation only\". The sentence is present even when there is nothing to preview.\n */\nexport function transactionPreviewToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const title = mdHeading(t(\"TransactionPreview.title\", locale));\n const notice = `**${t(\"TransactionPreview.notice\", locale)}**`;\n const parsed = TransactionPreviewPropsSchema.safeParse(props);\n if (!parsed.success || !hasPreviewContent(parsed.data)) {\n return `${title}\\n\\n${notice}\\n\\n${t(\"TransactionPreview.empty.message\", locale)}\\n`;\n }\n const p = parsed.data;\n const rows: string[][] = [];\n const add = (key: Parameters<typeof t>[0], value: string | undefined) => {\n if (value) rows.push([t(key, locale), mdEscape(value)]);\n };\n add(\n \"TransactionPreview.field.network\",\n [p.network, p.testnet ? t(\"TransactionPreview.testnet\", locale) : \"\"]\n .filter(Boolean)\n .join(\", \"),\n );\n add(\"TransactionPreview.field.from\", p.from);\n add(\"TransactionPreview.field.to\", p.to);\n if (p.amount) add(\"TransactionPreview.field.amount\", amt(p.amount));\n if (p.quote) {\n add(\"TransactionPreview.field.sell\", amt(p.quote.sell));\n add(\"TransactionPreview.field.buy\", amt(p.quote.buy));\n if (p.quote.minReceived) add(\"TransactionPreview.field.minReceived\", amt(p.quote.minReceived));\n if (p.quote.route) add(\"TransactionPreview.field.route\", p.quote.route.join(\" → \"));\n if (p.quote.priceImpact) add(\"TransactionPreview.field.priceImpact\", `${p.quote.priceImpact}%`);\n }\n if (p.fee) add(\"TransactionPreview.field.fee\", amt(p.fee));\n if (p.expiresAt) {\n add(\"TransactionPreview.field.expires\", formatTimestamp(p.expiresAt, locale, p.timeZone));\n }\n const sections = [\n `${title}\\n\\n${notice}`,\n mdTable([t(`TransactionPreview.kind.${p.kind}`, locale), \"\"], rows),\n ];\n if (p.simulation) {\n const msg = p.simulation.message ? ` - ${mdEscape(p.simulation.message)}` : \"\";\n sections.push(`${t(`TransactionPreview.simulation.${p.simulation.status}`, locale)}${msg}`);\n }\n if (p.warnings.length > 0) {\n sections.push(\n `${t(\"TransactionPreview.warnings\", locale)}:\\n${p.warnings.map((w) => `- ${mdEscape(w)}`).join(\"\\n\")}`,\n );\n }\n const handoff = normalizeHttpUrl(p.handoff?.url);\n if (handoff) sections.push(`${t(\"TransactionPreview.handoff\", locale)}: <${mdUrl(handoff)}>`);\n return `${sections.join(\"\\n\\n\")}\\n`;\n}\n","/**\n * Decimal-string helpers. Token amounts and prices travel as decimal STRINGS (the Fuse tools\n * return `balanceFormatted` / `balanceRaw` strings): converting through `Number` loses digits\n * beyond 2^53 and rounds 18-decimal values. Everything here works on the digits.\n */\nconst DECIMAL = /^(-)?(\\d+)(?:\\.(\\d+))?$/;\n\n/** Exact sum; `undefined` when ANY input is not a plain decimal string (no silent skipping). */\nexport function sumDecimalStrings(values: readonly string[]): string | undefined {\n let scale = 0;\n const parsed: Array<{ neg: boolean; int: string; frac: string }> = [];\n for (const v of values) {\n const m = DECIMAL.exec(v);\n if (!m) return undefined;\n const frac = m[3] ?? \"\";\n scale = Math.max(scale, frac.length);\n parsed.push({ neg: m[1] === \"-\", int: m[2] ?? \"0\", frac });\n }\n let total = 0n;\n for (const p of parsed) {\n const n = BigInt(p.int + p.frac.padEnd(scale, \"0\"));\n total += p.neg ? -n : n;\n }\n const neg = total < 0n;\n const digits = (neg ? -total : total).toString().padStart(scale + 1, \"0\");\n const int = digits.slice(0, digits.length - scale);\n const frac = digits.slice(digits.length - scale).replace(/0+$/, \"\");\n return `${neg ? \"-\" : \"\"}${int}${frac ? `.${frac}` : \"\"}`;\n}\n\n/**\n * Locale formatting of a decimal string for DISPLAY. The input is parsed from its digits (no\n * float round trip), but the OUTPUT IS ROUNDED to the currency's fraction digits (`0.125` USD\n * shows `$0.13`); amounts that must stay exact are shown as the raw string, not through this.\n * On anything unformattable the raw string is returned unchanged, so a bad value is visible.\n */\nexport function formatDecimalString(value: string, locale: string, currency?: string): string {\n if (!DECIMAL.test(value)) return value;\n try {\n const nf = new Intl.NumberFormat(\n locale,\n currency ? { style: \"currency\", currency } : { maximumFractionDigits: 20 },\n );\n return nf.format(value as unknown as number);\n } catch {\n return value;\n }\n}\n\n/** `0x1234…5678`: first `head` and last `tail` characters; short strings are returned whole. */\nexport function truncateAddress(address: string, head = 6, tail = 4): string {\n return address.length <= head + tail + 1\n ? address\n : `${address.slice(0, head)}…${address.slice(address.length - tail)}`;\n}\n","import { z } from \"zod\";\n\n// i18nKeys: BalanceCard.title, BalanceCard.network, BalanceCard.testnet, BalanceCard.address, BalanceCard.contract, BalanceCard.value, BalanceCard.copy, BalanceCard.copied, BalanceCard.empty.message, BalanceCard.loading, BalanceCard.error.invalidProps\n\n/**\n * BalanceCard (R09): a wallet balance for the Fuse server views.\n *\n * Source shape: fuse-mcp-server `src/tools/getBalance.ts` returns `{ address, token,\n * tokenAddress?, decimals, balanceRaw?, balanceWei?, balanceFormatted }`. `balance` is the\n * `balanceFormatted` DECIMAL STRING — shown as given, never routed through a float. Read-only.\n * `{}` parses (ChatGPT entrypoint default).\n */\nexport const BalanceCardPropsSchema = z.object({\n token: z.string().default(\"\"),\n balance: z.string().default(\"\"),\n address: z.string().default(\"\"),\n tokenAddress: z.string().optional(),\n decimals: z.number().int().nonnegative().optional(),\n network: z.string().optional(),\n testnet: z.boolean().default(false),\n /** Decimal string in `currency`. */\n usdValue: z.string().optional(),\n currency: z.string().default(\"USD\"),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type BalanceCardProps = z.input<typeof BalanceCardPropsSchema>;\nexport type BalanceCardPropsOutput = z.output<typeof BalanceCardPropsSchema>;\n\nexport function validateBalanceCardProps(raw: unknown): BalanceCardPropsOutput {\n return BalanceCardPropsSchema.parse(raw);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { formatDecimalString } from \"../shared/decimal.js\";\nimport { mdCode, mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { BalanceCardPropsSchema } from \"./BalanceCard.schema.js\";\n\n/** A-1 fallback: `token: balance (network, testnet)` plus the full address, as markdown. */\nexport function balanceCardToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const parsed = BalanceCardPropsSchema.safeParse(props);\n const title = mdHeading(t(\"BalanceCard.title\", locale));\n if (!parsed.success || (parsed.data.token === \"\" && parsed.data.balance === \"\")) {\n return `${title}\\n\\n${t(\"BalanceCard.empty.message\", locale)}\\n`;\n }\n const p = parsed.data;\n const where = [p.network, p.testnet ? t(\"BalanceCard.testnet\", locale) : \"\"].filter(Boolean);\n const lines = [\n `- ${mdEscape(p.token)}: ${mdEscape(p.balance)}${where.length ? ` (${mdEscape(where.join(\", \"))})` : \"\"}`,\n ];\n if (p.usdValue) {\n lines.push(\n `- ${t(\"BalanceCard.value\", locale)}: ${mdEscape(formatDecimalString(p.usdValue, locale, p.currency))}`,\n );\n }\n if (p.address) lines.push(`- ${t(\"BalanceCard.address\", locale)}: ${mdCode(p.address)}`);\n if (p.tokenAddress)\n lines.push(`- ${t(\"BalanceCard.contract\", locale)}: ${mdCode(p.tokenAddress)}`);\n return `${title}\\n\\n${lines.join(\"\\n\")}\\n`;\n}\n","import { z } from \"zod\";\n\n// i18nKeys: MessageFeed.title, MessageFeed.unread, MessageFeed.attachment, MessageFeed.showing, MessageFeed.empty.message, MessageFeed.loading, MessageFeed.error.invalidProps\n\nexport const FeedMessageSchema = z.object({\n id: z.string().optional(),\n sender: z.string().min(1),\n channel: z.string().optional(),\n /** Plain text. Rendered as text, never as HTML. */\n content: z.string(),\n /** ISO 8601. */\n timestamp: z.string(),\n attachmentUrl: z.string().optional(),\n attachmentLabel: z.string().optional(),\n unread: z.boolean().optional(),\n});\n\nexport type FeedMessage = z.infer<typeof FeedMessageSchema>;\n\n/**\n * MessageFeed (R03): VantagePeers messages as a READ-ONLY feed — not a chat input (Claude's\n * design guidelines list chat inputs under patterns to avoid; the host composer exists).\n * Messages are ordered oldest first; `maxItems` keeps the latest N (Claude inline: last few).\n * `{}` parses (ChatGPT entrypoint default).\n */\nexport const MessageFeedPropsSchema = z.object({\n messages: z.array(FeedMessageSchema).default([]),\n maxItems: z.number().int().positive().optional(),\n /** IANA timezone for timestamps (e.g. `hostContext.timeZone`). */\n timeZone: z.string().optional(),\n /** Above this many shown messages the feed is virtualised through VirtualList. */\n virtualizeThreshold: z.number().int().positive().default(50),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type MessageFeedProps = z.input<typeof MessageFeedPropsSchema>;\nexport type MessageFeedPropsOutput = z.output<typeof MessageFeedPropsSchema>;\n\nexport function validateMessageFeedProps(raw: unknown): MessageFeedPropsOutput {\n return MessageFeedPropsSchema.parse(raw);\n}\n\n/** The latest `maxItems` messages (all when unset) and how many exist. */\nexport function latestMessages(\n messages: readonly FeedMessage[],\n maxItems: number | undefined,\n): { shown: FeedMessage[]; total: number } {\n const shown = maxItems === undefined ? [...messages] : messages.slice(-maxItems);\n return { shown, total: messages.length };\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { formatTimestamp } from \"../shared/datetime.js\";\nimport { mdEscape, mdHeading, mdUrl } from \"../shared/markdown.js\";\nimport { normalizeHttpUrl } from \"../shared/url.js\";\nimport { MessageFeedPropsSchema, latestMessages } from \"./MessageFeed.schema.js\";\n\n/** A-1 fallback: each message as a blockquote with sender, time, channel, content, attachment. */\nexport function messageFeedToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const parsed = MessageFeedPropsSchema.safeParse(props);\n const title = mdHeading(t(\"MessageFeed.title\", locale));\n if (!parsed.success || parsed.data.messages.length === 0) {\n return `${title}\\n\\n${t(\"MessageFeed.empty.message\", locale)}\\n`;\n }\n const { messages, maxItems, timeZone } = parsed.data;\n const { shown, total } = latestMessages(messages, maxItems);\n const lines = shown.map((m) => {\n const when = [formatTimestamp(m.timestamp, locale, timeZone), m.channel ?? \"\"]\n .filter(Boolean)\n .join(\", \");\n const href = normalizeHttpUrl(m.attachmentUrl);\n const label = mdEscape(m.attachmentLabel ?? t(\"MessageFeed.attachment\", locale));\n const attachment = m.attachmentUrl ? (href ? ` [${label}](${mdUrl(href)})` : ` ${label}`) : \"\";\n return `> **${mdEscape(m.sender)}** (${mdEscape(when)}): ${mdEscape(m.content)}${attachment}`;\n });\n const cut =\n shown.length < total\n ? `${t(\"MessageFeed.showing\", locale).replace(\"{n}\", String(shown.length)).replace(\"{total}\", String(total))}\\n\\n`\n : \"\";\n return `${title}\\n\\n${cut}${lines.join(\"\\n>\\n\")}\\n`;\n}\n","/** PipelineBoard pure logic (no React). */\nimport { sumDecimalStrings } from \"../shared/decimal.js\";\n\nexport type BoardDisplayMode = \"inline\" | \"fullscreen\" | \"pip\";\nexport type BoardLayout = \"board\" | \"summary\";\n\n/**\n * Fullscreen-first: Claude allows the board only fullscreen (inline = stage totals, within the\n * 4-5 data-point cap) and ChatGPT opens entrypoints fullscreen. Inline and pip get the summary.\n */\nexport function layoutForDisplayMode(mode: BoardDisplayMode): BoardLayout {\n return mode === \"fullscreen\" ? \"board\" : \"summary\";\n}\n\nexport interface DealLike {\n amount?: string;\n}\n\n/**\n * Deal count and exact total of a stage. Deals without an amount are counted but not summed; an\n * amount that is not a decimal string makes the total `undefined` (shown as unknown, never a\n * partial sum presented as the total).\n */\nexport function stageSummary(deals: readonly DealLike[]): {\n count: number;\n total: string | undefined;\n} {\n const amounts = deals.flatMap((d) => (d.amount === undefined ? [] : [d.amount]));\n return { count: deals.length, total: sumDecimalStrings(amounts) };\n}\n\n/** Claude inline card guideline: at most 4-5 data points, so at most 5 stages in the summary. */\nexport const SUMMARY_STAGE_LIMIT = 5;\n","import { z } from \"zod\";\n\n// i18nKeys: PipelineBoard.title, PipelineBoard.deals.one, PipelineBoard.deals.many, PipelineBoard.total, PipelineBoard.stage.empty, PipelineBoard.filter.label, PipelineBoard.summary.open, PipelineBoard.more, PipelineBoard.empty.message, PipelineBoard.loading, PipelineBoard.error.invalidProps, PipelineBoard.col.stage, PipelineBoard.col.deals\n\nexport const PipelineDealSchema = z.object({\n id: z.string().min(1),\n title: z.string().min(1),\n /** Decimal STRING (never a float), in the board currency. */\n amount: z.string().optional(),\n contact: z.string().optional(),\n url: z.string().optional(),\n});\n\nexport const PipelineStageSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n deals: z.array(PipelineDealSchema).default([]),\n});\n\nexport type PipelineDeal = z.infer<typeof PipelineDealSchema>;\nexport type PipelineStage = z.infer<typeof PipelineStageSchema>;\n\n/**\n * PipelineBoard (R06): deals by stage, READ-ONLY (no drag, no stage change), fullscreen-first.\n * `layout: \"board\"` is the fullscreen columns view; `\"summary\"` is the inline stage-totals card\n * (see `layoutForDisplayMode`). `{}` parses: ChatGPT opens entrypoints fullscreen with empty\n * arguments (openai/mcp-extensions docs/spec.md).\n */\nexport const PipelineBoardPropsSchema = z.object({\n stages: z.array(PipelineStageSchema).default([]),\n /** ISO 4217 code used to format amounts. */\n currency: z.string().default(\"EUR\"),\n layout: z.enum([\"board\", \"summary\"]).default(\"board\"),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type PipelineBoardProps = z.input<typeof PipelineBoardPropsSchema>;\nexport type PipelineBoardPropsOutput = z.output<typeof PipelineBoardPropsSchema>;\n\nexport function validatePipelineBoardProps(raw: unknown): PipelineBoardPropsOutput {\n return PipelineBoardPropsSchema.parse(raw);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { formatDecimalString } from \"../shared/decimal.js\";\nimport { mdEscape, mdHeading, mdTable } from \"../shared/markdown.js\";\nimport { stageSummary } from \"./PipelineBoard.logic.js\";\nimport { PipelineBoardPropsSchema } from \"./PipelineBoard.schema.js\";\n\n/** A-1 fallback: a stage x deal-count x total table, then the deals of each stage. */\nexport function pipelineBoardToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const parsed = PipelineBoardPropsSchema.safeParse(props);\n const title = mdHeading(t(\"PipelineBoard.title\", locale));\n if (!parsed.success || parsed.data.stages.length === 0) {\n return `${title}\\n\\n${t(\"PipelineBoard.empty.message\", locale)}\\n`;\n }\n const { stages, currency } = parsed.data;\n const money = (v: string) => mdEscape(formatDecimalString(v, locale, currency));\n const table = mdTable(\n [\n t(\"PipelineBoard.col.stage\", locale),\n t(\"PipelineBoard.col.deals\", locale),\n t(\"PipelineBoard.total\", locale),\n ],\n stages.map((s) => {\n const sum = stageSummary(s.deals);\n return [\n mdEscape(s.name),\n String(sum.count),\n sum.total === undefined ? \"-\" : money(sum.total),\n ];\n }),\n );\n const sections = stages\n .filter((s) => s.deals.length > 0)\n .map((s) => {\n const lines = s.deals.map((d) => {\n const amount = d.amount === undefined ? \"\" : ` (${money(d.amount)})`;\n const contact = d.contact ? ` - ${mdEscape(d.contact)}` : \"\";\n return `- ${mdEscape(d.title)}${amount}${contact}`;\n });\n return `${mdHeading(mdEscape(s.name), 2)}\\n\\n${lines.join(\"\\n\")}`;\n });\n return `${title}\\n\\n${table}\\n${sections.length ? `\\n${sections.join(\"\\n\\n\")}\\n` : \"\"}`;\n}\n","import { z } from \"zod\";\n\n// i18nKeys: StatCard.title, StatCard.trend.up, StatCard.trend.down, StatCard.trend.flat, StatCard.empty.message, StatCard.loading, StatCard.error.invalidProps\n\n/**\n * StatCard (R08): one metric — label, value, optional trend and change.\n *\n * Every field has a default so `{}` parses: a ChatGPT global entrypoint opens with empty\n * arguments (openai/mcp-extensions docs/spec.md, entrypoints) and the view then shows an empty\n * state instead of failing. `value` is a STRING (a decimal string for money, never a float).\n * Claude inline cards count each stat toward the \"4-5 data points\" cap: keep few per card.\n */\nexport const StatCardPropsSchema = z.object({\n label: z.string().default(\"\"),\n value: z.string().default(\"\"),\n unit: z.string().optional(),\n trend: z.enum([\"up\", \"down\", \"flat\"]).optional(),\n /** Pre-formatted change, e.g. \"+4.2%\". */\n change: z.string().optional(),\n tone: z.enum([\"neutral\", \"success\", \"warning\", \"danger\"]).default(\"neutral\"),\n description: z.string().optional(),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type StatCardProps = z.input<typeof StatCardPropsSchema>;\nexport type StatCardPropsOutput = z.output<typeof StatCardPropsSchema>;\n\nexport function validateStatCardProps(raw: unknown): StatCardPropsOutput {\n return StatCardPropsSchema.parse(raw);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { StatCardPropsSchema } from \"./StatCard.schema.js\";\n\n/**\n * A-1 fallback: the metric as markdown (label, value, unit, trend in words, change), for clients\n * with no UI layer. Pure; shares the schema defaults with the view.\n */\nexport function statCardToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const parsed = StatCardPropsSchema.safeParse(props);\n const title = mdHeading(t(\"StatCard.title\", locale));\n if (!parsed.success || (parsed.data.label === \"\" && parsed.data.value === \"\")) {\n return `${title}\\n\\n${t(\"StatCard.empty.message\", locale)}\\n`;\n }\n const { label, value, unit, trend, change, description } = parsed.data;\n const amount = unit ? `${value} ${unit}` : value;\n const movement = [trend ? t(`StatCard.trend.${trend}`, locale) : \"\", change ?? \"\"]\n .filter(Boolean)\n .join(\" \");\n const line = `- **${mdEscape(label)}**: ${mdEscape(amount)}${movement ? ` (${mdEscape(movement)})` : \"\"}`;\n return `${title}\\n\\n${line}\\n${description ? `\\n${mdEscape(description)}\\n` : \"\"}`;\n}\n","import type { ReactNode } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { z } from \"zod\";\nimport type { SelectionMode, SortState } from \"./TableView.logic\";\n\n// i18nKeys: TableView.aria.table, TableView.pagination.next, TableView.pagination.prev, TableView.empty.message, TableView.error.invalidProps, TableView.sort.by, TableView.select.row, TableView.select.all, TableView.loading\n\nconst ColumnKindSchema = z.enum([\"text\", \"number\", \"amount\", \"icon\"]);\nconst AlignSchema = z.enum([\"start\", \"center\", \"end\"]);\n\nexport const ColumnDefSchema = z.object({\n key: z.string().min(1),\n header: z.string().min(1),\n /** Cell kind: drives comparison and rendering. `amount` = decimal STRING, never a float. */\n type: ColumnKindSchema.default(\"text\"),\n /** Defaults to `end` for `number` / `amount` columns, `start` otherwise. */\n align: AlignSchema.optional(),\n /** CSS width: a number is pixels. */\n width: z.union([z.string().min(1), z.number().positive()]).optional(),\n sortable: z.boolean().default(false),\n /**\n * Values of this column are masked in the A-1 markdown fallback and kept out of the HTML\n * props of a tool result (delivered via the result `_meta`), never written to `content[]`.\n */\n sensitive: z.boolean().default(false),\n // render is a runtime function — excluded from Zod, typed separately\n});\n\nexport type ColumnDef<TRow extends Record<string, unknown> = Record<string, unknown>> = {\n key: string;\n header: string;\n type?: \"text\" | \"number\" | \"amount\" | \"icon\";\n align?: \"start\" | \"center\" | \"end\";\n width?: string | number;\n sortable?: boolean;\n sensitive?: boolean;\n render?: (row: TRow) => ReactNode;\n};\n\nconst SortSchema = z.object({ key: z.string().min(1), direction: z.enum([\"asc\", \"desc\"]) });\n\n/**\n * Validates the serialisable (non-function) portion of TableView props.\n * The `rows$` Observable and `render` callbacks are not Zod-parseable and\n * must be validated at the call-site type level.\n */\nexport const TableViewPropsSchema = z.object({\n columns: z.array(ColumnDefSchema).min(1, \"TableView requires at least one column\"),\n /**\n * Serialisable rows, for views built through `createMosaicResource` (the React props carry\n * `rows` separately).\n */\n rows: z.array(z.record(z.unknown())).default([]),\n virtualizeThreshold: z.number().int().positive().default(100),\n ariaLabel: z.string().min(1),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n selectionMode: z.enum([\"none\", \"single\", \"multiple\"]).default(\"none\"),\n /** Initial sort. */\n sort: SortSchema.optional(),\n stickyHeader: z.boolean().default(false),\n /** Scroll region height when `stickyHeader` is on (pixels). */\n maxHeight: z.number().int().positive().default(400),\n density: z.enum([\"comfortable\", \"compact\"]).default(\"comfortable\"),\n loading: z.boolean().default(false),\n});\n\nexport type TableViewPropsSchemaInput = z.input<typeof TableViewPropsSchema>;\nexport type TableViewPropsSchemaOutput = z.output<typeof TableViewPropsSchema>;\n\n/** Options shared by the static and streaming variants (R01 / R10 extension). */\nexport type TableViewOptions<TRow extends Record<string, unknown>> = {\n /** `none` (default) adds no selection column. `single` renders radios, `multiple` checkboxes. */\n selectionMode?: SelectionMode;\n /** Controlled selection: row keys (`id` when present, else `row-<original index>`). */\n selectedKeys?: string[];\n defaultSelectedKeys?: string[];\n /** Selected rows in table order, plus their keys. Feed it to `selectionModelContext`. */\n onSelectionChange?: (rows: Partial<TRow>[], keys: string[]) => void;\n /** Controlled sort; `null` = unsorted. */\n sort?: SortState | null;\n defaultSort?: SortState;\n onSortChange?: (sort: SortState | undefined) => void;\n stickyHeader?: boolean;\n /** Scroll region height in pixels when `stickyHeader` is on. Default 400. */\n maxHeight?: number;\n density?: \"comfortable\" | \"compact\";\n /** Shows a Skeleton table instead of rows. */\n loading?: boolean;\n};\n\n/**\n * Props for the static TableView — accepts a plain array of rows.\n * Primary API for already-fetched data (no rxjs required).\n */\nexport type TableViewProps<TRow extends Record<string, unknown> = Record<string, unknown>> = {\n columns: ColumnDef<TRow>[];\n rows: Partial<TRow>[];\n virtualizeThreshold?: number;\n ariaLabel: string;\n locale?: \"en\" | \"fr\";\n /** v0.2.1+: when provided, rows become keyboard-activable (role=button + tabIndex=0 + Enter/Space). 5-BU ABSOLUTE blocker fix. */\n onRowClick?: (row: TRow, index: number) => void;\n} & TableViewOptions<TRow>;\n\n/**\n * Props for StreamingTableView — accepts an RxJS Observable for incremental row appending.\n * Consumers using this variant MUST install rxjs ^7.8.0 in their project.\n */\nexport type StreamingTableViewProps<\n TRow extends Record<string, unknown> = Record<string, unknown>,\n> = {\n columns: ColumnDef<TRow>[];\n rows$: Observable<Partial<TRow>[]>;\n virtualizeThreshold?: number;\n ariaLabel: string;\n locale?: \"en\" | \"fr\";\n /** v0.2.1+: same semantics as static TableView. */\n onRowClick?: (row: TRow, index: number) => void;\n} & TableViewOptions<TRow>;\n\nexport function validateTableViewProps(raw: unknown): TableViewPropsSchemaOutput {\n return TableViewPropsSchema.parse(raw);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading, mdTable } from \"../shared/markdown.js\";\nimport { TableViewPropsSchema } from \"./TableView.schema.js\";\n\n/** Rows beyond this are summarised, not listed (a text client gets a readable table). */\nexport const MARKDOWN_MAX_ROWS = 50;\n\n/** Shown in place of a `sensitive` column's values. */\nconst MASK = \"••••\";\n\n/** A-1 fallback: the table as GFM (headers + the first rows) with the count of the rest. */\nexport function tableViewToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const p = TableViewPropsSchema.parse(props);\n const shown = p.rows.slice(0, MARKDOWN_MAX_ROWS);\n const table = mdTable(\n p.columns.map((c) => mdEscape(c.header)),\n shown.map((r) => p.columns.map((c) => (c.sensitive ? MASK : mdEscape(String(r[c.key] ?? \"\"))))),\n );\n const rest = p.rows.length - shown.length;\n const more =\n rest > 0 ? `\\n${t(\"TableView.markdown.more\", locale).replace(\"{n}\", String(rest))}\\n` : \"\";\n const empty = p.rows.length === 0 ? `\\n${t(\"TableView.empty.message\", locale)}\\n` : \"\";\n return `${mdHeading(t(\"TableView.title\", locale))}\\n\\n${table}\\n${more}${empty}`;\n}\n","import { z } from \"zod\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nexport const ConfirmDialogPropsSchema = z.object({\n title: z.string().min(1),\n message: z.string().min(1),\n confirmLabel: z.string().min(1),\n cancelLabel: z.string().min(1),\n variant: z.enum([\"default\", \"danger\"]).default(\"default\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport function validateConfirmDialogProps(raw: unknown): z.infer<typeof ConfirmDialogPropsSchema> {\n return ConfirmDialogPropsSchema.parse(raw);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { ConfirmDialogPropsSchema } from \"./ConfirmDialog.schema.js\";\n\n/** A-1 fallback: the question, then the two answers the dialog would have offered. */\nexport function confirmDialogToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const p = ConfirmDialogPropsSchema.parse(props);\n return `${mdHeading(t(\"ConfirmDialog.title\", locale))}\\n\\n**${mdEscape(p.title)}**\\n\\n${mdEscape(p.message)}\\n\\n${t(\"ConfirmDialog.options\", locale)}: ${mdEscape(p.confirmLabel)} / ${mdEscape(p.cancelLabel)}\\n`;\n}\n","import { z } from \"zod\";\n\nexport const StatusBadgePropsSchema = z.object({\n status: z.string(),\n variant: z.enum([\"success\", \"warning\", \"danger\", \"info\", \"neutral\"]).default(\"neutral\"),\n label: z.string().optional(),\n locale: z.enum([\"en\", \"fr\"]),\n});\n\nexport type StatusBadgeProps = z.infer<typeof StatusBadgePropsSchema>;\n\nexport function validateProps(raw: unknown): StatusBadgeProps {\n return StatusBadgePropsSchema.parse(raw);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { StatusBadgePropsSchema } from \"./StatusBadge.schema.js\";\n\n/** A-1 fallback: the status text and its variant in words. */\nexport function statusBadgeToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const p = StatusBadgePropsSchema.parse({ locale, ...(props as object) });\n return `${mdHeading(t(\"StatusBadge.title\", locale))}\\n\\n- ${mdEscape(p.label ?? p.status)} (${p.variant})\\n`;\n}\n","import { z } from \"zod\";\n\nexport const ProgressBarPropsSchema = z.object({\n value: z.number().min(0).max(100),\n label: z.string().min(1),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n colorVariant: z.enum([\"default\", \"warning\", \"danger\"]).default(\"default\"),\n});\n\nexport type ProgressBarProps = z.infer<typeof ProgressBarPropsSchema>;\n\nexport function validateProps(raw: unknown): ProgressBarProps {\n return ProgressBarPropsSchema.parse(raw);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { ProgressBarPropsSchema } from \"./ProgressBar.schema.js\";\n\n/** A-1 fallback: the label and the percentage (plus a non-default colour variant in words). */\nexport function progressBarToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const p = ProgressBarPropsSchema.parse(props);\n const variant = p.colorVariant === \"default\" ? \"\" : ` (${p.colorVariant})`;\n return `${mdHeading(t(\"ProgressBar.title\", locale))}\\n\\n- ${mdEscape(p.label)}: ${p.value}%${variant}\\n`;\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Timeline.title, Timeline.status.done, Timeline.status.current, Timeline.status.pending, Timeline.status.blocked, Timeline.completed, Timeline.more, Timeline.empty.message, Timeline.loading, Timeline.error.invalidProps\n\nexport const TimelineStepSchema = z.object({\n id: z.string().optional(),\n title: z.string().min(1),\n status: z.enum([\"done\", \"current\", \"pending\", \"blocked\"]),\n description: z.string().optional(),\n /** ISO 8601. */\n timestamp: z.string().optional(),\n});\n\nexport type TimelineStep = z.infer<typeof TimelineStepSchema>;\n\n/**\n * Timeline (R02): missions as status steps — vertical or horizontal. `compact` is the Claude\n * inline form (current + next step); fullscreen shows all. `{}` parses (ChatGPT entrypoint\n * default).\n */\nexport const TimelinePropsSchema = z.object({\n steps: z.array(TimelineStepSchema).default([]),\n orientation: z.enum([\"vertical\", \"horizontal\"]).default(\"vertical\"),\n compact: z.boolean().default(false),\n /** IANA timezone for timestamps (e.g. `hostContext.timeZone`). Default: the viewer's. */\n timeZone: z.string().optional(),\n loading: z.boolean().default(false),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type TimelineProps = z.input<typeof TimelinePropsSchema>;\nexport type TimelinePropsOutput = z.output<typeof TimelinePropsSchema>;\n\nexport function validateTimelineProps(raw: unknown): TimelinePropsOutput {\n return TimelinePropsSchema.parse(raw);\n}\n","import { t } from \"../../i18n/strings.js\";\nimport { formatTimestamp } from \"../shared/datetime.js\";\nimport { mdEscape, mdHeading } from \"../shared/markdown.js\";\nimport { TimelinePropsSchema } from \"./Timeline.schema.js\";\n\n/** A-1 fallback: every step as an ordered list with its status, description and time. */\nexport function timelineToMarkdown(props: unknown, locale: \"en\" | \"fr\" = \"en\"): string {\n const parsed = TimelinePropsSchema.safeParse(props);\n const title = mdHeading(t(\"Timeline.title\", locale));\n if (!parsed.success || parsed.data.steps.length === 0) {\n return `${title}\\n\\n${t(\"Timeline.empty.message\", locale)}\\n`;\n }\n const { steps, timeZone } = parsed.data;\n const lines = steps.map((s, i) => {\n const status = t(`Timeline.status.${s.status}`, locale);\n const extras = [\n s.description ? mdEscape(s.description) : \"\",\n s.timestamp ? mdEscape(formatTimestamp(s.timestamp, locale, timeZone)) : \"\",\n ].filter(Boolean);\n return `${i + 1}. [${status}] ${mdEscape(s.title)}${extras.length ? ` - ${extras.join(\" - \")}` : \"\"}`;\n });\n return `${title}\\n\\n${lines.join(\"\\n\")}\\n`;\n}\n","import { type UIResource, createUIResource } from \"@mcp-ui/server\";\nimport { ZodError } from \"zod\";\nimport { markdownRendererToMarkdown } from \"../components/artifacts/MarkdownRenderer.markdown.js\";\nimport { MarkdownRendererPropsSchema } from \"../components/artifacts/MarkdownRenderer.schema.js\";\nimport { tokenDisplayOnceModalToMarkdown } from \"../components/confirmation/TokenDisplayOnceModal.markdown.js\";\nimport { TokenDisplayOnceModalPropsSchema } from \"../components/confirmation/TokenDisplayOnceModal.schema.js\";\nimport { transactionPreviewToMarkdown } from \"../components/confirmation/TransactionPreview.markdown.js\";\nimport { TransactionPreviewPropsSchema } from \"../components/confirmation/TransactionPreview.schema.js\";\nimport { balanceCardToMarkdown } from \"../components/display/BalanceCard.markdown.js\";\nimport { BalanceCardPropsSchema } from \"../components/display/BalanceCard.schema.js\";\nimport { messageFeedToMarkdown } from \"../components/display/MessageFeed.markdown.js\";\nimport { MessageFeedPropsSchema } from \"../components/display/MessageFeed.schema.js\";\nimport { pipelineBoardToMarkdown } from \"../components/display/PipelineBoard.markdown.js\";\nimport { PipelineBoardPropsSchema } from \"../components/display/PipelineBoard.schema.js\";\nimport { statCardToMarkdown } from \"../components/display/StatCard.markdown.js\";\nimport { StatCardPropsSchema } from \"../components/display/StatCard.schema.js\";\nimport { tableViewToMarkdown } from \"../components/display/TableView.markdown.js\";\nimport { TableViewPropsSchema } from \"../components/display/TableView.schema.js\";\nimport { confirmDialogToMarkdown } from \"../components/input/ConfirmDialog.markdown.js\";\nimport { ConfirmDialogPropsSchema } from \"../components/input/ConfirmDialog.schema.js\";\nimport { statusBadgeToMarkdown } from \"../components/media/StatusBadge.markdown.js\";\nimport { StatusBadgePropsSchema } from \"../components/media/StatusBadge.schema.js\";\nimport { progressBarToMarkdown } from \"../components/progress/ProgressBar.markdown.js\";\nimport { ProgressBarPropsSchema } from \"../components/progress/ProgressBar.schema.js\";\nimport { timelineToMarkdown } from \"../components/progress/Timeline.markdown.js\";\nimport { TimelinePropsSchema } from \"../components/progress/Timeline.schema.js\";\nimport { t } from \"../i18n/strings.js\";\n\n/**\n * MCP capability key used by hosts to discover that this server emits\n * MCP UI Apps resources (mosaic-architecture-standard-v1 §2.1).\n */\nexport const MCP_UI_CAPABILITY_KEY = \"io.modelcontextprotocol/ui\" as const;\n\n/**\n * Canonical Mosaic MIME type — every UIResource produced by this server\n * advertises the MCP Apps profile (`text/html;profile=mcp-app`).\n */\nexport const MOSAIC_MIME_TYPE = \"text/html;profile=mcp-app\" as const;\n\ntype SupportedComponent =\n | \"ProgressBar\"\n | \"ConfirmDialog\"\n | \"TableView\"\n | \"MarkdownRenderer\"\n | \"TokenDisplayOnceModal\"\n | \"StatusBadge\"\n | \"StatCard\"\n | \"BalanceCard\"\n | \"Timeline\"\n | \"MessageFeed\"\n | \"PipelineBoard\"\n | \"TransactionPreview\";\n\nconst SCHEMA_BY_NAME = {\n ProgressBar: ProgressBarPropsSchema,\n ConfirmDialog: ConfirmDialogPropsSchema,\n TableView: TableViewPropsSchema,\n MarkdownRenderer: MarkdownRendererPropsSchema,\n TokenDisplayOnceModal: TokenDisplayOnceModalPropsSchema,\n StatusBadge: StatusBadgePropsSchema,\n StatCard: StatCardPropsSchema,\n BalanceCard: BalanceCardPropsSchema,\n Timeline: TimelinePropsSchema,\n MessageFeed: MessageFeedPropsSchema,\n PipelineBoard: PipelineBoardPropsSchema,\n TransactionPreview: TransactionPreviewPropsSchema,\n} as const;\n\n/**\n * Per-view `toMarkdown(props, locale)` (App standard A-1): the DATA of the view as markdown, for\n * clients with no UI layer. Keyed by component so a view without one fails to compile.\n */\nconst MARKDOWN_BY_NAME: Record<\n SupportedComponent,\n (props: unknown, locale: \"en\" | \"fr\") => string\n> = {\n ProgressBar: progressBarToMarkdown,\n ConfirmDialog: confirmDialogToMarkdown,\n TableView: tableViewToMarkdown,\n MarkdownRenderer: markdownRendererToMarkdown,\n TokenDisplayOnceModal: tokenDisplayOnceModalToMarkdown,\n StatusBadge: statusBadgeToMarkdown,\n StatCard: statCardToMarkdown,\n BalanceCard: balanceCardToMarkdown,\n Timeline: timelineToMarkdown,\n MessageFeed: messageFeedToMarkdown,\n PipelineBoard: pipelineBoardToMarkdown,\n TransactionPreview: transactionPreviewToMarkdown,\n};\n\nconst COMPONENT_KEYS = Object.keys(SCHEMA_BY_NAME) as SupportedComponent[];\n\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction buildHtml(componentName: SupportedComponent, props: unknown, locale: \"en\" | \"fr\"): string {\n const propsJson = escapeHtml(JSON.stringify(props));\n const title = escapeHtml(t(`${componentName}.title`, locale));\n return `<!DOCTYPE html><html lang=\"${locale === \"fr\" ? \"fr\" : \"en\"}\"><head><meta charset=\"utf-8\"><title>${title}</title></head><body><div id=\"mosaic-root\" data-component=\"${componentName}\" data-props='${propsJson}'></div></body></html>`;\n}\n\nexport interface CreateMosaicResourceOptions {\n /** Optional override for the generated `ui://` URI. */\n uri?: `ui://${string}`;\n /**\n * Optional override of the markdown fallback emitted under `_meta.ui.fallback`. Default: the\n * view's own `toMarkdown`, which carries the data.\n */\n markdownFallback?: string;\n /**\n * Keep declared secret fields in the embedded HTML props. Default false: a secret never goes\n * into a resource that may be placed in `content[]` (see {@link MOSAIC_NEVER_SERIALISE}).\n */\n includeSecrets?: boolean;\n}\n\n/**\n * Create a canonical MCP UI Apps `UIResource` for a Mosaic component.\n *\n * - Runtime-validates `props` with the component's Zod schema (throws on failure).\n * - Wraps the rendered HTML with `createUIResource()` from `@mcp-ui/server`.\n * - Emits canonical nested `_meta.ui.{ resourceUri, locale, componentName, fallback }`; `fallback`\n * is kept (published contract) and now carries the view's data as markdown (it was a title and a\n * note). The A-1 conformant place is the tool result `content[]`: see {@link createMosaicToolResult}.\n * - Uses MIME `text/html;profile=mcp-app` (Mosaic standard §2.1).\n *\n * @throws ZodError when `props` fails validation for `componentName`.\n */\nexport function createMosaicResource(\n componentName: SupportedComponent,\n props: unknown,\n locale: \"en\" | \"fr\" = \"en\",\n options: CreateMosaicResourceOptions = {},\n): UIResource {\n const schema = SCHEMA_BY_NAME[componentName];\n if (!schema) {\n throw new Error(`createMosaicResource: unknown component '${componentName}'`);\n }\n const validated = schema.parse(props) as Record<string, unknown>;\n const embedded = options.includeSecrets\n ? validated\n : splitSecrets(componentName, validated, []).publicProps;\n const fallback = options.markdownFallback ?? MARKDOWN_BY_NAME[componentName](embedded, locale);\n return buildResource(componentName, embedded, locale, fallback, options.uri);\n}\n\n/** Builds the UIResource from props that are ALREADY validated (and already split). */\nfunction buildResource(\n componentName: SupportedComponent,\n embedded: unknown,\n locale: \"en\" | \"fr\",\n fallback: string,\n uriOverride?: `ui://${string}`,\n): UIResource {\n const uri: `ui://${string}` = uriOverride ?? `ui://mosaic/${componentName.toLowerCase()}`;\n const html = buildHtml(componentName, embedded, locale);\n\n const resource = createUIResource({\n uri,\n content: { type: \"rawHtml\", htmlString: html },\n encoding: \"text\",\n metadata: {\n ui: {\n resourceUri: uri,\n locale,\n componentName,\n fallback,\n },\n },\n });\n\n // createUIResource may itself default the MIME type; ensure it matches the\n // Mosaic canonical profile regardless of upstream defaults.\n resource.resource.mimeType = MOSAIC_MIME_TYPE;\n return resource;\n}\n\n/**\n * Fields whose VALUE must never be serialised into a tool result's `content[]` (text block or\n * ui:// resource): that text reaches the model's context, and `annotations.audience` is only a\n * hint hosts may ignore. Exhaustive by type: a new view cannot be added without answering. The\n * value reaches the view through the tool result `_meta[\"mosaic/secrets\"]` instead.\n * (TableView additionally honours per-column `sensitive`.)\n */\nexport const MOSAIC_NEVER_SERIALISE: Record<SupportedComponent, readonly string[]> = {\n ProgressBar: [],\n ConfirmDialog: [],\n TableView: [],\n MarkdownRenderer: [],\n TokenDisplayOnceModal: [\"token\"],\n StatusBadge: [],\n StatCard: [],\n BalanceCard: [],\n Timeline: [],\n MessageFeed: [],\n PipelineBoard: [],\n TransactionPreview: [],\n};\n\n/**\n * Thrown when a declared never-serialise field would reach `content[]`, or the fallback cannot be\n * rendered once the field is removed. Names the field; never prints the value.\n */\nexport class MosaicSecretLeakError extends Error {\n readonly field: string;\n constructor(field: string, reason = \"would be serialised into content[]\") {\n super(`createMosaicToolResult: the value of \"${field}\" ${reason}`);\n this.name = \"MosaicSecretLeakError\";\n this.field = field;\n }\n}\n\ntype Secrets = Record<string, unknown>;\n\n/**\n * Splits validated props into the public props (what may be embedded) and the secrets: declared\n * top-level fields, plus the cells of TableView columns flagged `sensitive`.\n */\nfunction splitSecrets(\n name: SupportedComponent,\n validated: Record<string, unknown>,\n extraFields: readonly string[],\n): { publicProps: Record<string, unknown>; secrets: Secrets } {\n const publicProps: Record<string, unknown> = { ...validated };\n const secrets: Secrets = {};\n for (const f of extraFields) {\n if (!(f in validated))\n throw new Error(`createMosaicToolResult: unknown field \"${f}\" for ${name}`);\n }\n for (const field of [...MOSAIC_NEVER_SERIALISE[name], ...extraFields]) {\n if (field in publicProps) {\n secrets[field] = publicProps[field];\n delete publicProps[field];\n }\n }\n if (name === \"TableView\") {\n const columns = (validated.columns ?? []) as Array<{ key: string; sensitive?: boolean }>;\n const sensitive = columns.filter((c) => c.sensitive).map((c) => c.key);\n if (sensitive.length > 0) {\n const cells: Record<string, unknown> = {};\n publicProps.rows = ((validated.rows ?? []) as Array<Record<string, unknown>>).map(\n (row, i) => {\n const rest = { ...row };\n for (const k of sensitive) {\n if (k in rest) {\n cells[`${i}.${k}`] = rest[k];\n delete rest[k];\n }\n }\n return rest;\n },\n );\n secrets.cells = cells;\n }\n }\n return { publicProps, secrets };\n}\n\n/**\n * Comparison form for the leak check: Unicode NFKC (compatibility forms such as full-width\n * letters collapse) then lower case, applied to BOTH sides. A secret echoed as \"ABCD\", \"abcd\" or\n * \"ABCD\" is the same secret. Cost, accepted: a short secret can also match differently-cased\n * unrelated text and then REFUSES loudly (the issuer keeps it out of the other props); there is no\n * case in which a case-folded match is silently allowed.\n */\nfunction fold(text: string): string {\n return text.normalize(\"NFKC\").toLowerCase();\n}\n\n/**\n * EVERY declared secret value, whatever its length (a one-time code is 4-6 characters). Only an\n * empty value carries nothing to look for. A short value that collides with other text makes the\n * call REFUSE (loudly): the issuer keeps it out of the other props. Never a skip.\n */\nfunction secretNeedles(secrets: Secrets): Array<{ field: string; needle: string }> {\n const out: Array<{ field: string; needle: string }> = [];\n for (const [field, v] of Object.entries(secrets)) {\n const values = field === \"cells\" && v && typeof v === \"object\" ? Object.values(v) : [v];\n for (const x of values) {\n const needle =\n typeof x === \"string\"\n ? x\n : typeof x === \"number\" || typeof x === \"boolean\"\n ? String(x)\n : x === null || x === undefined\n ? \"\"\n : JSON.stringify(x);\n if (needle.length > 0) out.push({ field, needle });\n }\n }\n return out;\n}\n\nexport const MOSAIC_SUPPORTED_COMPONENTS: readonly SupportedComponent[] = COMPONENT_KEYS;\nexport type { SupportedComponent };\n\n/**\n * MCP tool result for a view, App standard A-1: a markdown text block carrying the view's DATA,\n * next to the `ui://` resource, in `content[]` (reference handler, standard l.136-138):\n * `{ content: [ { type: \"text\", text }, { type: \"resource\", resource } ] }`.\n *\n * FAIL CLOSED on secrets: `content[]` reaches the model, so the fields declared in\n * {@link MOSAIC_NEVER_SERIALISE} (plus the caller's `neverSerialise`, plus TableView `sensitive`\n * columns) are removed from the embedded props, delivered to the view through\n * `_meta[\"mosaic/secrets\"]`, and asserted absent from the serialised `content[]`; a leak throws\n * {@link MosaicSecretLeakError}. A declared field the view does not have throws (a typo would\n * otherwise assert nothing). The fallback is RENDERED FROM THE PUBLIC PROPS (declared secrets\n * removed first), and every non-empty declared value is then checked at any length.\n */\nexport function createMosaicToolResult(\n componentName: SupportedComponent,\n props: unknown,\n locale: \"en\" | \"fr\" = \"en\",\n options: { neverSerialise?: readonly string[] } = {},\n): {\n content: [{ type: \"text\"; text: string }, UIResource];\n _meta?: { \"mosaic/secrets\": Secrets };\n} {\n const schema = SCHEMA_BY_NAME[componentName];\n if (!schema) {\n throw new Error(`createMosaicResource: unknown component '${componentName}'`);\n }\n const validated = schema.parse(props) as Record<string, unknown>;\n const { publicProps, secrets } = splitSecrets(\n componentName,\n validated,\n options.neverSerialise ?? [],\n );\n let markdown: string;\n try {\n markdown = MARKDOWN_BY_NAME[componentName](publicProps, locale);\n } catch (err) {\n const declared = Object.keys(secrets).filter((k) => k !== \"cells\")[0];\n if (declared && err instanceof ZodError) {\n throw new MosaicSecretLeakError(\n declared,\n \"is required by the fallback renderer and cannot be declared secret\",\n );\n }\n throw err;\n }\n const ui = buildResource(componentName, publicProps, locale, markdown);\n const content: [{ type: \"text\"; text: string }, UIResource] = [\n { type: \"text\", text: markdown },\n ui,\n ];\n const serialised = fold(JSON.stringify(content));\n for (const { field, needle } of secretNeedles(secrets)) {\n if (\n serialised.includes(fold(needle)) ||\n serialised.includes(fold(JSON.stringify(needle).slice(1, -1)))\n ) {\n throw new MosaicSecretLeakError(field);\n }\n }\n return Object.keys(secrets).length > 0\n ? { content, _meta: { \"mosaic/secrets\": secrets } }\n : { content };\n}\n\n// The per-view A-1 builders, importable by a server that renders no UI.\nexport {\n progressBarToMarkdown,\n confirmDialogToMarkdown,\n tableViewToMarkdown,\n markdownRendererToMarkdown,\n tokenDisplayOnceModalToMarkdown,\n statusBadgeToMarkdown,\n statCardToMarkdown,\n balanceCardToMarkdown,\n timelineToMarkdown,\n messageFeedToMarkdown,\n pipelineBoardToMarkdown,\n transactionPreviewToMarkdown,\n};\n"]}
package/dist/server.d.cts CHANGED
@@ -1,4 +1,31 @@
1
1
  import { UIResource } from '@mcp-ui/server';
2
+ export { t as transactionPreviewToMarkdown } from './TransactionPreview.markdown-Dpb0VYgN.cjs';
3
+ export { b as balanceCardToMarkdown, m as messageFeedToMarkdown, p as pipelineBoardToMarkdown, s as statCardToMarkdown } from './PipelineBoard.markdown-DIcvrS-2.cjs';
4
+ export { t as timelineToMarkdown } from './Timeline.markdown-C6UPDv1H.cjs';
5
+
6
+ /** A-1 fallback: the content IS markdown, so it is passed through (capped at `maxLength`). */
7
+ declare function markdownRendererToMarkdown(props: unknown, locale?: "en" | "fr"): string;
8
+
9
+ /**
10
+ * A-1 fallback for a one-time secret. `content[]` text reaches the model's context, and an
11
+ * audience annotation is only a hint hosts may ignore, so the VALUE IS NEVER WRITTEN HERE: the
12
+ * fallback carries the name, scope, expiry and an issuer-supplied fingerprint, plus a fixed
13
+ * sentence that the value is shown once in the app view only. (`token` is declared in
14
+ * MOSAIC_NEVER_SERIALISE and asserted absent by createMosaicToolResult.)
15
+ */
16
+ declare function tokenDisplayOnceModalToMarkdown(props: unknown, locale?: "en" | "fr"): string;
17
+
18
+ /** A-1 fallback: the table as GFM (headers + the first rows) with the count of the rest. */
19
+ declare function tableViewToMarkdown(props: unknown, locale?: "en" | "fr"): string;
20
+
21
+ /** A-1 fallback: the question, then the two answers the dialog would have offered. */
22
+ declare function confirmDialogToMarkdown(props: unknown, locale?: "en" | "fr"): string;
23
+
24
+ /** A-1 fallback: the status text and its variant in words. */
25
+ declare function statusBadgeToMarkdown(props: unknown, locale?: "en" | "fr"): string;
26
+
27
+ /** A-1 fallback: the label and the percentage (plus a non-default colour variant in words). */
28
+ declare function progressBarToMarkdown(props: unknown, locale?: "en" | "fr"): string;
2
29
 
3
30
  /**
4
31
  * MCP capability key used by hosts to discover that this server emits
@@ -10,24 +37,76 @@ declare const MCP_UI_CAPABILITY_KEY: "io.modelcontextprotocol/ui";
10
37
  * advertises the MCP Apps profile (`text/html;profile=mcp-app`).
11
38
  */
12
39
  declare const MOSAIC_MIME_TYPE: "text/html;profile=mcp-app";
13
- type SupportedComponent = "ProgressBar" | "ConfirmDialog" | "TableView" | "MarkdownRenderer" | "TokenDisplayOnceModal" | "StatusBadge";
40
+ type SupportedComponent = "ProgressBar" | "ConfirmDialog" | "TableView" | "MarkdownRenderer" | "TokenDisplayOnceModal" | "StatusBadge" | "StatCard" | "BalanceCard" | "Timeline" | "MessageFeed" | "PipelineBoard" | "TransactionPreview";
14
41
  interface CreateMosaicResourceOptions {
15
42
  /** Optional override for the generated `ui://` URI. */
16
43
  uri?: `ui://${string}`;
17
- /** Optional override of the markdown fallback emitted under `_meta.ui.fallback`. */
44
+ /**
45
+ * Optional override of the markdown fallback emitted under `_meta.ui.fallback`. Default: the
46
+ * view's own `toMarkdown`, which carries the data.
47
+ */
18
48
  markdownFallback?: string;
49
+ /**
50
+ * Keep declared secret fields in the embedded HTML props. Default false: a secret never goes
51
+ * into a resource that may be placed in `content[]` (see {@link MOSAIC_NEVER_SERIALISE}).
52
+ */
53
+ includeSecrets?: boolean;
19
54
  }
20
55
  /**
21
56
  * Create a canonical MCP UI Apps `UIResource` for a Mosaic component.
22
57
  *
23
58
  * - Runtime-validates `props` with the component's Zod schema (throws on failure).
24
59
  * - Wraps the rendered HTML with `createUIResource()` from `@mcp-ui/server`.
25
- * - Emits canonical nested `_meta.ui.{ resourceUri, locale, componentName, fallback }`.
60
+ * - Emits canonical nested `_meta.ui.{ resourceUri, locale, componentName, fallback }`; `fallback`
61
+ * is kept (published contract) and now carries the view's data as markdown (it was a title and a
62
+ * note). The A-1 conformant place is the tool result `content[]`: see {@link createMosaicToolResult}.
26
63
  * - Uses MIME `text/html;profile=mcp-app` (Mosaic standard §2.1).
27
64
  *
28
65
  * @throws ZodError when `props` fails validation for `componentName`.
29
66
  */
30
- declare function createMosaicResource(componentName: SupportedComponent, props: unknown, locale?: "en" | "fr"): UIResource;
67
+ declare function createMosaicResource(componentName: SupportedComponent, props: unknown, locale?: "en" | "fr", options?: CreateMosaicResourceOptions): UIResource;
68
+ /**
69
+ * Fields whose VALUE must never be serialised into a tool result's `content[]` (text block or
70
+ * ui:// resource): that text reaches the model's context, and `annotations.audience` is only a
71
+ * hint hosts may ignore. Exhaustive by type: a new view cannot be added without answering. The
72
+ * value reaches the view through the tool result `_meta["mosaic/secrets"]` instead.
73
+ * (TableView additionally honours per-column `sensitive`.)
74
+ */
75
+ declare const MOSAIC_NEVER_SERIALISE: Record<SupportedComponent, readonly string[]>;
76
+ /**
77
+ * Thrown when a declared never-serialise field would reach `content[]`, or the fallback cannot be
78
+ * rendered once the field is removed. Names the field; never prints the value.
79
+ */
80
+ declare class MosaicSecretLeakError extends Error {
81
+ readonly field: string;
82
+ constructor(field: string, reason?: string);
83
+ }
84
+ type Secrets = Record<string, unknown>;
31
85
  declare const MOSAIC_SUPPORTED_COMPONENTS: readonly SupportedComponent[];
32
86
 
33
- export { type CreateMosaicResourceOptions, MCP_UI_CAPABILITY_KEY, MOSAIC_MIME_TYPE, MOSAIC_SUPPORTED_COMPONENTS, type SupportedComponent, createMosaicResource };
87
+ /**
88
+ * MCP tool result for a view, App standard A-1: a markdown text block carrying the view's DATA,
89
+ * next to the `ui://` resource, in `content[]` (reference handler, standard l.136-138):
90
+ * `{ content: [ { type: "text", text }, { type: "resource", resource } ] }`.
91
+ *
92
+ * FAIL CLOSED on secrets: `content[]` reaches the model, so the fields declared in
93
+ * {@link MOSAIC_NEVER_SERIALISE} (plus the caller's `neverSerialise`, plus TableView `sensitive`
94
+ * columns) are removed from the embedded props, delivered to the view through
95
+ * `_meta["mosaic/secrets"]`, and asserted absent from the serialised `content[]`; a leak throws
96
+ * {@link MosaicSecretLeakError}. A declared field the view does not have throws (a typo would
97
+ * otherwise assert nothing). The fallback is RENDERED FROM THE PUBLIC PROPS (declared secrets
98
+ * removed first), and every non-empty declared value is then checked at any length.
99
+ */
100
+ declare function createMosaicToolResult(componentName: SupportedComponent, props: unknown, locale?: "en" | "fr", options?: {
101
+ neverSerialise?: readonly string[];
102
+ }): {
103
+ content: [{
104
+ type: "text";
105
+ text: string;
106
+ }, UIResource];
107
+ _meta?: {
108
+ "mosaic/secrets": Secrets;
109
+ };
110
+ };
111
+
112
+ export { type CreateMosaicResourceOptions, MCP_UI_CAPABILITY_KEY, MOSAIC_MIME_TYPE, MOSAIC_NEVER_SERIALISE, MOSAIC_SUPPORTED_COMPONENTS, MosaicSecretLeakError, type SupportedComponent, confirmDialogToMarkdown, createMosaicResource, createMosaicToolResult, markdownRendererToMarkdown, progressBarToMarkdown, statusBadgeToMarkdown, tableViewToMarkdown, tokenDisplayOnceModalToMarkdown };
package/dist/server.d.ts CHANGED
@@ -1,4 +1,31 @@
1
1
  import { UIResource } from '@mcp-ui/server';
2
+ export { t as transactionPreviewToMarkdown } from './TransactionPreview.markdown-Dpb0VYgN.js';
3
+ export { b as balanceCardToMarkdown, m as messageFeedToMarkdown, p as pipelineBoardToMarkdown, s as statCardToMarkdown } from './PipelineBoard.markdown-DIcvrS-2.js';
4
+ export { t as timelineToMarkdown } from './Timeline.markdown-C6UPDv1H.js';
5
+
6
+ /** A-1 fallback: the content IS markdown, so it is passed through (capped at `maxLength`). */
7
+ declare function markdownRendererToMarkdown(props: unknown, locale?: "en" | "fr"): string;
8
+
9
+ /**
10
+ * A-1 fallback for a one-time secret. `content[]` text reaches the model's context, and an
11
+ * audience annotation is only a hint hosts may ignore, so the VALUE IS NEVER WRITTEN HERE: the
12
+ * fallback carries the name, scope, expiry and an issuer-supplied fingerprint, plus a fixed
13
+ * sentence that the value is shown once in the app view only. (`token` is declared in
14
+ * MOSAIC_NEVER_SERIALISE and asserted absent by createMosaicToolResult.)
15
+ */
16
+ declare function tokenDisplayOnceModalToMarkdown(props: unknown, locale?: "en" | "fr"): string;
17
+
18
+ /** A-1 fallback: the table as GFM (headers + the first rows) with the count of the rest. */
19
+ declare function tableViewToMarkdown(props: unknown, locale?: "en" | "fr"): string;
20
+
21
+ /** A-1 fallback: the question, then the two answers the dialog would have offered. */
22
+ declare function confirmDialogToMarkdown(props: unknown, locale?: "en" | "fr"): string;
23
+
24
+ /** A-1 fallback: the status text and its variant in words. */
25
+ declare function statusBadgeToMarkdown(props: unknown, locale?: "en" | "fr"): string;
26
+
27
+ /** A-1 fallback: the label and the percentage (plus a non-default colour variant in words). */
28
+ declare function progressBarToMarkdown(props: unknown, locale?: "en" | "fr"): string;
2
29
 
3
30
  /**
4
31
  * MCP capability key used by hosts to discover that this server emits
@@ -10,24 +37,76 @@ declare const MCP_UI_CAPABILITY_KEY: "io.modelcontextprotocol/ui";
10
37
  * advertises the MCP Apps profile (`text/html;profile=mcp-app`).
11
38
  */
12
39
  declare const MOSAIC_MIME_TYPE: "text/html;profile=mcp-app";
13
- type SupportedComponent = "ProgressBar" | "ConfirmDialog" | "TableView" | "MarkdownRenderer" | "TokenDisplayOnceModal" | "StatusBadge";
40
+ type SupportedComponent = "ProgressBar" | "ConfirmDialog" | "TableView" | "MarkdownRenderer" | "TokenDisplayOnceModal" | "StatusBadge" | "StatCard" | "BalanceCard" | "Timeline" | "MessageFeed" | "PipelineBoard" | "TransactionPreview";
14
41
  interface CreateMosaicResourceOptions {
15
42
  /** Optional override for the generated `ui://` URI. */
16
43
  uri?: `ui://${string}`;
17
- /** Optional override of the markdown fallback emitted under `_meta.ui.fallback`. */
44
+ /**
45
+ * Optional override of the markdown fallback emitted under `_meta.ui.fallback`. Default: the
46
+ * view's own `toMarkdown`, which carries the data.
47
+ */
18
48
  markdownFallback?: string;
49
+ /**
50
+ * Keep declared secret fields in the embedded HTML props. Default false: a secret never goes
51
+ * into a resource that may be placed in `content[]` (see {@link MOSAIC_NEVER_SERIALISE}).
52
+ */
53
+ includeSecrets?: boolean;
19
54
  }
20
55
  /**
21
56
  * Create a canonical MCP UI Apps `UIResource` for a Mosaic component.
22
57
  *
23
58
  * - Runtime-validates `props` with the component's Zod schema (throws on failure).
24
59
  * - Wraps the rendered HTML with `createUIResource()` from `@mcp-ui/server`.
25
- * - Emits canonical nested `_meta.ui.{ resourceUri, locale, componentName, fallback }`.
60
+ * - Emits canonical nested `_meta.ui.{ resourceUri, locale, componentName, fallback }`; `fallback`
61
+ * is kept (published contract) and now carries the view's data as markdown (it was a title and a
62
+ * note). The A-1 conformant place is the tool result `content[]`: see {@link createMosaicToolResult}.
26
63
  * - Uses MIME `text/html;profile=mcp-app` (Mosaic standard §2.1).
27
64
  *
28
65
  * @throws ZodError when `props` fails validation for `componentName`.
29
66
  */
30
- declare function createMosaicResource(componentName: SupportedComponent, props: unknown, locale?: "en" | "fr"): UIResource;
67
+ declare function createMosaicResource(componentName: SupportedComponent, props: unknown, locale?: "en" | "fr", options?: CreateMosaicResourceOptions): UIResource;
68
+ /**
69
+ * Fields whose VALUE must never be serialised into a tool result's `content[]` (text block or
70
+ * ui:// resource): that text reaches the model's context, and `annotations.audience` is only a
71
+ * hint hosts may ignore. Exhaustive by type: a new view cannot be added without answering. The
72
+ * value reaches the view through the tool result `_meta["mosaic/secrets"]` instead.
73
+ * (TableView additionally honours per-column `sensitive`.)
74
+ */
75
+ declare const MOSAIC_NEVER_SERIALISE: Record<SupportedComponent, readonly string[]>;
76
+ /**
77
+ * Thrown when a declared never-serialise field would reach `content[]`, or the fallback cannot be
78
+ * rendered once the field is removed. Names the field; never prints the value.
79
+ */
80
+ declare class MosaicSecretLeakError extends Error {
81
+ readonly field: string;
82
+ constructor(field: string, reason?: string);
83
+ }
84
+ type Secrets = Record<string, unknown>;
31
85
  declare const MOSAIC_SUPPORTED_COMPONENTS: readonly SupportedComponent[];
32
86
 
33
- export { type CreateMosaicResourceOptions, MCP_UI_CAPABILITY_KEY, MOSAIC_MIME_TYPE, MOSAIC_SUPPORTED_COMPONENTS, type SupportedComponent, createMosaicResource };
87
+ /**
88
+ * MCP tool result for a view, App standard A-1: a markdown text block carrying the view's DATA,
89
+ * next to the `ui://` resource, in `content[]` (reference handler, standard l.136-138):
90
+ * `{ content: [ { type: "text", text }, { type: "resource", resource } ] }`.
91
+ *
92
+ * FAIL CLOSED on secrets: `content[]` reaches the model, so the fields declared in
93
+ * {@link MOSAIC_NEVER_SERIALISE} (plus the caller's `neverSerialise`, plus TableView `sensitive`
94
+ * columns) are removed from the embedded props, delivered to the view through
95
+ * `_meta["mosaic/secrets"]`, and asserted absent from the serialised `content[]`; a leak throws
96
+ * {@link MosaicSecretLeakError}. A declared field the view does not have throws (a typo would
97
+ * otherwise assert nothing). The fallback is RENDERED FROM THE PUBLIC PROPS (declared secrets
98
+ * removed first), and every non-empty declared value is then checked at any length.
99
+ */
100
+ declare function createMosaicToolResult(componentName: SupportedComponent, props: unknown, locale?: "en" | "fr", options?: {
101
+ neverSerialise?: readonly string[];
102
+ }): {
103
+ content: [{
104
+ type: "text";
105
+ text: string;
106
+ }, UIResource];
107
+ _meta?: {
108
+ "mosaic/secrets": Secrets;
109
+ };
110
+ };
111
+
112
+ export { type CreateMosaicResourceOptions, MCP_UI_CAPABILITY_KEY, MOSAIC_MIME_TYPE, MOSAIC_NEVER_SERIALISE, MOSAIC_SUPPORTED_COMPONENTS, MosaicSecretLeakError, type SupportedComponent, confirmDialogToMarkdown, createMosaicResource, createMosaicToolResult, markdownRendererToMarkdown, progressBarToMarkdown, statusBadgeToMarkdown, tableViewToMarkdown, tokenDisplayOnceModalToMarkdown };