netra-artifacts 0.1.0-alpha.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.
- package/CHANGELOG.md +25 -0
- package/LICENSE +21 -0
- package/README.md +239 -0
- package/dist/artifacts/artifactEnvelope.d.ts +46 -0
- package/dist/artifacts/artifactEnvelope.d.ts.map +1 -0
- package/dist/artifacts/artifactEnvelope.js +217 -0
- package/dist/artifacts/artifactEnvelope.js.map +1 -0
- package/dist/artifacts/artifactStatus.d.ts +9 -0
- package/dist/artifacts/artifactStatus.d.ts.map +1 -0
- package/dist/artifacts/artifactStatus.js +10 -0
- package/dist/artifacts/artifactStatus.js.map +1 -0
- package/dist/artifacts/artifactStore.d.ts +15 -0
- package/dist/artifacts/artifactStore.d.ts.map +1 -0
- package/dist/artifacts/artifactStore.js +35 -0
- package/dist/artifacts/artifactStore.js.map +1 -0
- package/dist/artifacts/htmlArtifact.d.ts +10 -0
- package/dist/artifacts/htmlArtifact.d.ts.map +1 -0
- package/dist/artifacts/htmlArtifact.js +20 -0
- package/dist/artifacts/htmlArtifact.js.map +1 -0
- package/dist/artifacts/index.d.ts +5 -0
- package/dist/artifacts/index.d.ts.map +1 -0
- package/dist/artifacts/index.js +5 -0
- package/dist/artifacts/index.js.map +1 -0
- package/dist/circuit-breaker/circuitBreaker.d.ts +35 -0
- package/dist/circuit-breaker/circuitBreaker.d.ts.map +1 -0
- package/dist/circuit-breaker/circuitBreaker.js +59 -0
- package/dist/circuit-breaker/circuitBreaker.js.map +1 -0
- package/dist/circuit-breaker/index.d.ts +3 -0
- package/dist/circuit-breaker/index.d.ts.map +1 -0
- package/dist/circuit-breaker/index.js +3 -0
- package/dist/circuit-breaker/index.js.map +1 -0
- package/dist/circuit-breaker/memoryCircuitStore.d.ts +24 -0
- package/dist/circuit-breaker/memoryCircuitStore.d.ts.map +1 -0
- package/dist/circuit-breaker/memoryCircuitStore.js +12 -0
- package/dist/circuit-breaker/memoryCircuitStore.js.map +1 -0
- package/dist/classifier/classifierPrompt.d.ts +7 -0
- package/dist/classifier/classifierPrompt.d.ts.map +1 -0
- package/dist/classifier/classifierPrompt.js +43 -0
- package/dist/classifier/classifierPrompt.js.map +1 -0
- package/dist/classifier/classifyMode.d.ts +21 -0
- package/dist/classifier/classifyMode.d.ts.map +1 -0
- package/dist/classifier/classifyMode.js +50 -0
- package/dist/classifier/classifyMode.js.map +1 -0
- package/dist/classifier/index.d.ts +4 -0
- package/dist/classifier/index.d.ts.map +1 -0
- package/dist/classifier/index.js +4 -0
- package/dist/classifier/index.js.map +1 -0
- package/dist/classifier/rules.d.ts +13 -0
- package/dist/classifier/rules.d.ts.map +1 -0
- package/dist/classifier/rules.js +118 -0
- package/dist/classifier/rules.js.map +1 -0
- package/dist/client/ArtifactChat.d.ts +15 -0
- package/dist/client/ArtifactChat.d.ts.map +1 -0
- package/dist/client/ArtifactChat.js +62 -0
- package/dist/client/ArtifactChat.js.map +1 -0
- package/dist/client/ArtifactMessage.d.ts +24 -0
- package/dist/client/ArtifactMessage.d.ts.map +1 -0
- package/dist/client/ArtifactMessage.js +29 -0
- package/dist/client/ArtifactMessage.js.map +1 -0
- package/dist/client/MarkdownMessage.d.ts +12 -0
- package/dist/client/MarkdownMessage.d.ts.map +1 -0
- package/dist/client/MarkdownMessage.js +141 -0
- package/dist/client/MarkdownMessage.js.map +1 -0
- package/dist/client/index.d.ts +8 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +8 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/useArtifactStream.d.ts +9 -0
- package/dist/client/useArtifactStream.d.ts.map +1 -0
- package/dist/client/useArtifactStream.js +210 -0
- package/dist/client/useArtifactStream.js.map +1 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +4 -0
- package/dist/client.js.map +1 -0
- package/dist/constants/defaults.d.ts +17 -0
- package/dist/constants/defaults.d.ts.map +1 -0
- package/dist/constants/defaults.js +38 -0
- package/dist/constants/defaults.js.map +1 -0
- package/dist/constants/events.d.ts +16 -0
- package/dist/constants/events.d.ts.map +1 -0
- package/dist/constants/events.js +16 -0
- package/dist/constants/events.js.map +1 -0
- package/dist/constants/index.d.ts +4 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +4 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/sandbox.d.ts +19 -0
- package/dist/constants/sandbox.d.ts.map +1 -0
- package/dist/constants/sandbox.js +24 -0
- package/dist/constants/sandbox.js.map +1 -0
- package/dist/core/createArtifactResponse.d.ts +5 -0
- package/dist/core/createArtifactResponse.d.ts.map +1 -0
- package/dist/core/createArtifactResponse.js +16 -0
- package/dist/core/createArtifactResponse.js.map +1 -0
- package/dist/core/createArtifactStream.d.ts +9 -0
- package/dist/core/createArtifactStream.d.ts.map +1 -0
- package/dist/core/createArtifactStream.js +34 -0
- package/dist/core/createArtifactStream.js.map +1 -0
- package/dist/core/createIds.d.ts +3 -0
- package/dist/core/createIds.d.ts.map +1 -0
- package/dist/core/createIds.js +13 -0
- package/dist/core/createIds.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lifecycle.d.ts +35 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +81 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/parseArtifactEnvelope.d.ts +2 -0
- package/dist/core/parseArtifactEnvelope.d.ts.map +1 -0
- package/dist/core/parseArtifactEnvelope.js +3 -0
- package/dist/core/parseArtifactEnvelope.js.map +1 -0
- package/dist/errors/ArtifactParseError.d.ts +10 -0
- package/dist/errors/ArtifactParseError.d.ts.map +1 -0
- package/dist/errors/ArtifactParseError.js +10 -0
- package/dist/errors/ArtifactParseError.js.map +1 -0
- package/dist/errors/ClassificationError.d.ts +13 -0
- package/dist/errors/ClassificationError.d.ts.map +1 -0
- package/dist/errors/ClassificationError.js +13 -0
- package/dist/errors/ClassificationError.js.map +1 -0
- package/dist/errors/StreamError.d.ts +11 -0
- package/dist/errors/StreamError.d.ts.map +1 -0
- package/dist/errors/StreamError.js +11 -0
- package/dist/errors/StreamError.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +4 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/iframe/HtmlArtifactCard.d.ts +9 -0
- package/dist/iframe/HtmlArtifactCard.d.ts.map +1 -0
- package/dist/iframe/HtmlArtifactCard.js +117 -0
- package/dist/iframe/HtmlArtifactCard.js.map +1 -0
- package/dist/iframe/HtmlArtifactCodeView.d.ts +7 -0
- package/dist/iframe/HtmlArtifactCodeView.d.ts.map +1 -0
- package/dist/iframe/HtmlArtifactCodeView.js +20 -0
- package/dist/iframe/HtmlArtifactCodeView.js.map +1 -0
- package/dist/iframe/HtmlArtifactModal.d.ts +16 -0
- package/dist/iframe/HtmlArtifactModal.d.ts.map +1 -0
- package/dist/iframe/HtmlArtifactModal.js +99 -0
- package/dist/iframe/HtmlArtifactModal.js.map +1 -0
- package/dist/iframe/HtmlArtifactPreview.d.ts +15 -0
- package/dist/iframe/HtmlArtifactPreview.d.ts.map +1 -0
- package/dist/iframe/HtmlArtifactPreview.js +214 -0
- package/dist/iframe/HtmlArtifactPreview.js.map +1 -0
- package/dist/iframe/HtmlArtifactToolbar.d.ts +20 -0
- package/dist/iframe/HtmlArtifactToolbar.d.ts.map +1 -0
- package/dist/iframe/HtmlArtifactToolbar.js +14 -0
- package/dist/iframe/HtmlArtifactToolbar.js.map +1 -0
- package/dist/iframe/iframeSizing.d.ts +22 -0
- package/dist/iframe/iframeSizing.d.ts.map +1 -0
- package/dist/iframe/iframeSizing.js +74 -0
- package/dist/iframe/iframeSizing.js.map +1 -0
- package/dist/iframe/iframeSrcDoc.d.ts +34 -0
- package/dist/iframe/iframeSrcDoc.d.ts.map +1 -0
- package/dist/iframe/iframeSrcDoc.js +236 -0
- package/dist/iframe/iframeSrcDoc.js.map +1 -0
- package/dist/iframe/index.d.ts +15 -0
- package/dist/iframe/index.d.ts.map +1 -0
- package/dist/iframe/index.js +9 -0
- package/dist/iframe/index.js.map +1 -0
- package/dist/iframe/styles.d.ts +10 -0
- package/dist/iframe/styles.d.ts.map +1 -0
- package/dist/iframe/styles.js +181 -0
- package/dist/iframe/styles.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/htmlArtifactPrompt.d.ts +15 -0
- package/dist/prompts/htmlArtifactPrompt.d.ts.map +1 -0
- package/dist/prompts/htmlArtifactPrompt.js +248 -0
- package/dist/prompts/htmlArtifactPrompt.js.map +1 -0
- package/dist/prompts/index.d.ts +4 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +4 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/markdownPrompt.d.ts +3 -0
- package/dist/prompts/markdownPrompt.d.ts.map +1 -0
- package/dist/prompts/markdownPrompt.js +10 -0
- package/dist/prompts/markdownPrompt.js.map +1 -0
- package/dist/prompts/systemPrompt.d.ts +3 -0
- package/dist/prompts/systemPrompt.d.ts.map +1 -0
- package/dist/prompts/systemPrompt.js +3 -0
- package/dist/prompts/systemPrompt.js.map +1 -0
- package/dist/sanitizer/dangerousPatterns.d.ts +41 -0
- package/dist/sanitizer/dangerousPatterns.d.ts.map +1 -0
- package/dist/sanitizer/dangerousPatterns.js +41 -0
- package/dist/sanitizer/dangerousPatterns.js.map +1 -0
- package/dist/sanitizer/index.d.ts +4 -0
- package/dist/sanitizer/index.d.ts.map +1 -0
- package/dist/sanitizer/index.js +4 -0
- package/dist/sanitizer/index.js.map +1 -0
- package/dist/sanitizer/sanitizeConfig.d.ts +4 -0
- package/dist/sanitizer/sanitizeConfig.d.ts.map +1 -0
- package/dist/sanitizer/sanitizeConfig.js +10 -0
- package/dist/sanitizer/sanitizeConfig.js.map +1 -0
- package/dist/sanitizer/sanitizeHtml.d.ts +20 -0
- package/dist/sanitizer/sanitizeHtml.d.ts.map +1 -0
- package/dist/sanitizer/sanitizeHtml.js +81 -0
- package/dist/sanitizer/sanitizeHtml.js.map +1 -0
- package/dist/server/config.d.ts +6 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +68 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/createArtifactStreamResponse.d.ts +9 -0
- package/dist/server/createArtifactStreamResponse.d.ts.map +1 -0
- package/dist/server/createArtifactStreamResponse.js +104 -0
- package/dist/server/createArtifactStreamResponse.js.map +1 -0
- package/dist/server/createHtmlArtifactStream.d.ts +30 -0
- package/dist/server/createHtmlArtifactStream.d.ts.map +1 -0
- package/dist/server/createHtmlArtifactStream.js +115 -0
- package/dist/server/createHtmlArtifactStream.js.map +1 -0
- package/dist/server/createMarkdownStream.d.ts +13 -0
- package/dist/server/createMarkdownStream.d.ts.map +1 -0
- package/dist/server/createMarkdownStream.js +27 -0
- package/dist/server/createMarkdownStream.js.map +1 -0
- package/dist/server/createSseResponse.d.ts +7 -0
- package/dist/server/createSseResponse.d.ts.map +1 -0
- package/dist/server/createSseResponse.js +11 -0
- package/dist/server/createSseResponse.js.map +1 -0
- package/dist/server/index.d.ts +12 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +12 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +3 -0
- package/dist/server.js.map +1 -0
- package/dist/stream/assembleDocument.d.ts +42 -0
- package/dist/stream/assembleDocument.d.ts.map +1 -0
- package/dist/stream/assembleDocument.js +104 -0
- package/dist/stream/assembleDocument.js.map +1 -0
- package/dist/stream/buffering.d.ts +37 -0
- package/dist/stream/buffering.d.ts.map +1 -0
- package/dist/stream/buffering.js +97 -0
- package/dist/stream/buffering.js.map +1 -0
- package/dist/stream/debounce.d.ts +12 -0
- package/dist/stream/debounce.d.ts.map +1 -0
- package/dist/stream/debounce.js +36 -0
- package/dist/stream/debounce.js.map +1 -0
- package/dist/stream/decoder.d.ts +17 -0
- package/dist/stream/decoder.d.ts.map +1 -0
- package/dist/stream/decoder.js +71 -0
- package/dist/stream/decoder.js.map +1 -0
- package/dist/stream/encoder.d.ts +12 -0
- package/dist/stream/encoder.d.ts.map +1 -0
- package/dist/stream/encoder.js +19 -0
- package/dist/stream/encoder.js.map +1 -0
- package/dist/stream/events.d.ts +20 -0
- package/dist/stream/events.d.ts.map +1 -0
- package/dist/stream/events.js +65 -0
- package/dist/stream/events.js.map +1 -0
- package/dist/stream/index.d.ts +9 -0
- package/dist/stream/index.d.ts.map +1 -0
- package/dist/stream/index.js +9 -0
- package/dist/stream/index.js.map +1 -0
- package/dist/stream/predictiveHtmlParser.d.ts +52 -0
- package/dist/stream/predictiveHtmlParser.d.ts.map +1 -0
- package/dist/stream/predictiveHtmlParser.js +252 -0
- package/dist/stream/predictiveHtmlParser.js.map +1 -0
- package/dist/stream/sse.d.ts +7 -0
- package/dist/stream/sse.d.ts.map +1 -0
- package/dist/stream/sse.js +33 -0
- package/dist/stream/sse.js.map +1 -0
- package/dist/types/artifact.d.ts +88 -0
- package/dist/types/artifact.d.ts.map +1 -0
- package/dist/types/artifact.js +2 -0
- package/dist/types/artifact.js.map +1 -0
- package/dist/types/client.d.ts +98 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/client.js +2 -0
- package/dist/types/client.js.map +1 -0
- package/dist/types/config.d.ts +23 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/errors.d.ts +9 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +2 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/server.d.ts +111 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/types/server.js +2 -0
- package/dist/types/server.js.map +1 -0
- package/dist/types/stream.d.ts +60 -0
- package/dist/types/stream.d.ts.map +1 -0
- package/dist/types/stream.js +7 -0
- package/dist/types/stream.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/invariant.d.ts +6 -0
- package/dist/utils/invariant.d.ts.map +1 -0
- package/dist/utils/invariant.js +10 -0
- package/dist/utils/invariant.js.map +1 -0
- package/dist/utils/isBrowser.d.ts +3 -0
- package/dist/utils/isBrowser.d.ts.map +1 -0
- package/dist/utils/isBrowser.js +3 -0
- package/dist/utils/isBrowser.js.map +1 -0
- package/dist/utils/mergeConfig.d.ts +6 -0
- package/dist/utils/mergeConfig.d.ts.map +1 -0
- package/dist/utils/mergeConfig.js +17 -0
- package/dist/utils/mergeConfig.js.map +1 -0
- package/dist/utils/noop.d.ts +3 -0
- package/dist/utils/noop.d.ts.map +1 -0
- package/dist/utils/noop.js +3 -0
- package/dist/utils/noop.js.map +1 -0
- package/dist/utils/safeJsonParse.d.ts +7 -0
- package/dist/utils/safeJsonParse.d.ts.map +1 -0
- package/dist/utils/safeJsonParse.js +62 -0
- package/dist/utils/safeJsonParse.js.map +1 -0
- package/dist-cjs/artifacts/artifactEnvelope.js +224 -0
- package/dist-cjs/artifacts/artifactEnvelope.js.map +1 -0
- package/dist-cjs/artifacts/artifactStatus.js +14 -0
- package/dist-cjs/artifacts/artifactStatus.js.map +1 -0
- package/dist-cjs/artifacts/artifactStore.js +39 -0
- package/dist-cjs/artifacts/artifactStore.js.map +1 -0
- package/dist-cjs/artifacts/htmlArtifact.js +24 -0
- package/dist-cjs/artifacts/htmlArtifact.js.map +1 -0
- package/dist-cjs/artifacts/index.js +21 -0
- package/dist-cjs/artifacts/index.js.map +1 -0
- package/dist-cjs/circuit-breaker/circuitBreaker.js +63 -0
- package/dist-cjs/circuit-breaker/circuitBreaker.js.map +1 -0
- package/dist-cjs/circuit-breaker/index.js +19 -0
- package/dist-cjs/circuit-breaker/index.js.map +1 -0
- package/dist-cjs/circuit-breaker/memoryCircuitStore.js +16 -0
- package/dist-cjs/circuit-breaker/memoryCircuitStore.js.map +1 -0
- package/dist-cjs/classifier/classifierPrompt.js +47 -0
- package/dist-cjs/classifier/classifierPrompt.js.map +1 -0
- package/dist-cjs/classifier/classifyMode.js +53 -0
- package/dist-cjs/classifier/classifyMode.js.map +1 -0
- package/dist-cjs/classifier/index.js +20 -0
- package/dist-cjs/classifier/index.js.map +1 -0
- package/dist-cjs/classifier/rules.js +121 -0
- package/dist-cjs/classifier/rules.js.map +1 -0
- package/dist-cjs/client/ArtifactChat.js +98 -0
- package/dist-cjs/client/ArtifactChat.js.map +1 -0
- package/dist-cjs/client/ArtifactMessage.js +32 -0
- package/dist-cjs/client/ArtifactMessage.js.map +1 -0
- package/dist-cjs/client/MarkdownMessage.js +177 -0
- package/dist-cjs/client/MarkdownMessage.js.map +1 -0
- package/dist-cjs/client/index.js +20 -0
- package/dist-cjs/client/index.js.map +1 -0
- package/dist-cjs/client/useArtifactStream.js +246 -0
- package/dist-cjs/client/useArtifactStream.js.map +1 -0
- package/dist-cjs/client.js +20 -0
- package/dist-cjs/client.js.map +1 -0
- package/dist-cjs/constants/defaults.js +41 -0
- package/dist-cjs/constants/defaults.js.map +1 -0
- package/dist-cjs/constants/events.js +19 -0
- package/dist-cjs/constants/events.js.map +1 -0
- package/dist-cjs/constants/index.js +20 -0
- package/dist-cjs/constants/index.js.map +1 -0
- package/dist-cjs/constants/sandbox.js +27 -0
- package/dist-cjs/constants/sandbox.js.map +1 -0
- package/dist-cjs/core/createArtifactResponse.js +20 -0
- package/dist-cjs/core/createArtifactResponse.js.map +1 -0
- package/dist-cjs/core/createArtifactStream.js +37 -0
- package/dist-cjs/core/createArtifactStream.js.map +1 -0
- package/dist-cjs/core/createIds.js +17 -0
- package/dist-cjs/core/createIds.js.map +1 -0
- package/dist-cjs/core/index.js +22 -0
- package/dist-cjs/core/index.js.map +1 -0
- package/dist-cjs/core/lifecycle.js +86 -0
- package/dist-cjs/core/lifecycle.js.map +1 -0
- package/dist-cjs/core/parseArtifactEnvelope.js +8 -0
- package/dist-cjs/core/parseArtifactEnvelope.js.map +1 -0
- package/dist-cjs/errors/ArtifactParseError.js +14 -0
- package/dist-cjs/errors/ArtifactParseError.js.map +1 -0
- package/dist-cjs/errors/ClassificationError.js +17 -0
- package/dist-cjs/errors/ClassificationError.js.map +1 -0
- package/dist-cjs/errors/StreamError.js +15 -0
- package/dist-cjs/errors/StreamError.js.map +1 -0
- package/dist-cjs/errors/index.js +20 -0
- package/dist-cjs/errors/index.js.map +1 -0
- package/dist-cjs/iframe/HtmlArtifactCard.js +153 -0
- package/dist-cjs/iframe/HtmlArtifactCard.js.map +1 -0
- package/dist-cjs/iframe/HtmlArtifactCodeView.js +23 -0
- package/dist-cjs/iframe/HtmlArtifactCodeView.js.map +1 -0
- package/dist-cjs/iframe/HtmlArtifactModal.js +135 -0
- package/dist-cjs/iframe/HtmlArtifactModal.js.map +1 -0
- package/dist-cjs/iframe/HtmlArtifactPreview.js +250 -0
- package/dist-cjs/iframe/HtmlArtifactPreview.js.map +1 -0
- package/dist-cjs/iframe/HtmlArtifactToolbar.js +17 -0
- package/dist-cjs/iframe/HtmlArtifactToolbar.js.map +1 -0
- package/dist-cjs/iframe/iframeSizing.js +77 -0
- package/dist-cjs/iframe/iframeSizing.js.map +1 -0
- package/dist-cjs/iframe/iframeSrcDoc.js +241 -0
- package/dist-cjs/iframe/iframeSrcDoc.js.map +1 -0
- package/dist-cjs/iframe/index.js +22 -0
- package/dist-cjs/iframe/index.js.map +1 -0
- package/dist-cjs/iframe/styles.js +218 -0
- package/dist-cjs/iframe/styles.js.map +1 -0
- package/dist-cjs/index.js +52 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/package.json +3 -0
- package/dist-cjs/prompts/htmlArtifactPrompt.js +252 -0
- package/dist-cjs/prompts/htmlArtifactPrompt.js.map +1 -0
- package/dist-cjs/prompts/index.js +20 -0
- package/dist-cjs/prompts/index.js.map +1 -0
- package/dist-cjs/prompts/markdownPrompt.js +13 -0
- package/dist-cjs/prompts/markdownPrompt.js.map +1 -0
- package/dist-cjs/prompts/systemPrompt.js +6 -0
- package/dist-cjs/prompts/systemPrompt.js.map +1 -0
- package/dist-cjs/sanitizer/dangerousPatterns.js +44 -0
- package/dist-cjs/sanitizer/dangerousPatterns.js.map +1 -0
- package/dist-cjs/sanitizer/index.js +43 -0
- package/dist-cjs/sanitizer/index.js.map +1 -0
- package/dist-cjs/sanitizer/sanitizeConfig.js +13 -0
- package/dist-cjs/sanitizer/sanitizeConfig.js.map +1 -0
- package/dist-cjs/sanitizer/sanitizeHtml.js +86 -0
- package/dist-cjs/sanitizer/sanitizeHtml.js.map +1 -0
- package/dist-cjs/server/config.js +72 -0
- package/dist-cjs/server/config.js.map +1 -0
- package/dist-cjs/server/createArtifactStreamResponse.js +107 -0
- package/dist-cjs/server/createArtifactStreamResponse.js.map +1 -0
- package/dist-cjs/server/createHtmlArtifactStream.js +119 -0
- package/dist-cjs/server/createHtmlArtifactStream.js.map +1 -0
- package/dist-cjs/server/createMarkdownStream.js +31 -0
- package/dist-cjs/server/createMarkdownStream.js.map +1 -0
- package/dist-cjs/server/createSseResponse.js +14 -0
- package/dist-cjs/server/createSseResponse.js.map +1 -0
- package/dist-cjs/server/index.js +34 -0
- package/dist-cjs/server/index.js.map +1 -0
- package/dist-cjs/server.js +19 -0
- package/dist-cjs/server.js.map +1 -0
- package/dist-cjs/stream/assembleDocument.js +109 -0
- package/dist-cjs/stream/assembleDocument.js.map +1 -0
- package/dist-cjs/stream/buffering.js +102 -0
- package/dist-cjs/stream/buffering.js.map +1 -0
- package/dist-cjs/stream/debounce.js +39 -0
- package/dist-cjs/stream/debounce.js.map +1 -0
- package/dist-cjs/stream/decoder.js +75 -0
- package/dist-cjs/stream/decoder.js.map +1 -0
- package/dist-cjs/stream/encoder.js +24 -0
- package/dist-cjs/stream/encoder.js.map +1 -0
- package/dist-cjs/stream/events.js +69 -0
- package/dist-cjs/stream/events.js.map +1 -0
- package/dist-cjs/stream/index.js +25 -0
- package/dist-cjs/stream/index.js.map +1 -0
- package/dist-cjs/stream/predictiveHtmlParser.js +256 -0
- package/dist-cjs/stream/predictiveHtmlParser.js.map +1 -0
- package/dist-cjs/stream/sse.js +36 -0
- package/dist-cjs/stream/sse.js.map +1 -0
- package/dist-cjs/types/artifact.js +3 -0
- package/dist-cjs/types/artifact.js.map +1 -0
- package/dist-cjs/types/client.js +3 -0
- package/dist-cjs/types/client.js.map +1 -0
- package/dist-cjs/types/config.js +3 -0
- package/dist-cjs/types/config.js.map +1 -0
- package/dist-cjs/types/errors.js +3 -0
- package/dist-cjs/types/errors.js.map +1 -0
- package/dist-cjs/types/index.js +3 -0
- package/dist-cjs/types/index.js.map +1 -0
- package/dist-cjs/types/server.js +3 -0
- package/dist-cjs/types/server.js.map +1 -0
- package/dist-cjs/types/stream.js +8 -0
- package/dist-cjs/types/stream.js.map +1 -0
- package/dist-cjs/utils/index.js +22 -0
- package/dist-cjs/utils/index.js.map +1 -0
- package/dist-cjs/utils/invariant.js +13 -0
- package/dist-cjs/utils/invariant.js.map +1 -0
- package/dist-cjs/utils/isBrowser.js +6 -0
- package/dist-cjs/utils/isBrowser.js.map +1 -0
- package/dist-cjs/utils/mergeConfig.js +20 -0
- package/dist-cjs/utils/mergeConfig.js.map +1 -0
- package/dist-cjs/utils/noop.js +7 -0
- package/dist-cjs/utils/noop.js.map +1 -0
- package/dist-cjs/utils/safeJsonParse.js +65 -0
- package/dist-cjs/utils/safeJsonParse.js.map +1 -0
- package/package.json +115 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Predictive HTML parser for streaming AI output.
|
|
3
|
+
*
|
|
4
|
+
* The core idea: keep the real streamed HTML as the immutable *truth*, but for
|
|
5
|
+
* rendering produce a temporary *projection* that predicts the missing closing
|
|
6
|
+
* tags from the current parser stack. The model can stream
|
|
7
|
+
*
|
|
8
|
+
* <section><div><h2>Hello
|
|
9
|
+
*
|
|
10
|
+
* and the renderer receives a valid document:
|
|
11
|
+
*
|
|
12
|
+
* <section><div><h2>Hello</h2></div></section>
|
|
13
|
+
*
|
|
14
|
+
* When the real `</h2></div></section>` arrives later, the stack matches them
|
|
15
|
+
* and nothing is duplicated — predicted closings are never written back into
|
|
16
|
+
* the committed truth.
|
|
17
|
+
*
|
|
18
|
+
* The parser is incremental: feed it chunks with {@link push}; it carries
|
|
19
|
+
* partial tokens (tags, comments, raw-text close) across chunk boundaries. It
|
|
20
|
+
* handles void elements, self-closing tags, quoted attributes containing
|
|
21
|
+
* `<`/`>`, comments, doctype, raw-text elements (`<style>`/`<script>`/… whose
|
|
22
|
+
* bodies aren't markup), implicit closing (`<li>`, `<td>`, `<p>`, …), and
|
|
23
|
+
* mis-nested close tags (`<div><p>x</div>` → closes `p` before `div`).
|
|
24
|
+
*
|
|
25
|
+
* It is purely structural — it does NOT sanitize or style. Run the output
|
|
26
|
+
* through the sanitizer before rendering (the iframe pipeline does this).
|
|
27
|
+
*
|
|
28
|
+
* Fail-open: malformed input degrades to text rather than throwing.
|
|
29
|
+
*/
|
|
30
|
+
const VOID_TAGS = new Set([
|
|
31
|
+
"area", "base", "br", "col", "embed", "hr", "img", "input",
|
|
32
|
+
"link", "meta", "param", "source", "track", "wbr",
|
|
33
|
+
]);
|
|
34
|
+
// Elements whose content is text, not markup. An unclosed one would otherwise
|
|
35
|
+
// swallow everything after it; we consume to the real closer instead.
|
|
36
|
+
const RAW_TEXT_TAGS = new Set(["script", "style", "textarea", "title"]);
|
|
37
|
+
// When the key element is open and one of its value elements opens, the key is
|
|
38
|
+
// implicitly closed first (mirrors the HTML parsing spec, pragmatically).
|
|
39
|
+
const IMPLICIT_CLOSE_RULES = {
|
|
40
|
+
p: new Set([
|
|
41
|
+
"p", "div", "section", "article", "main", "header", "footer", "nav",
|
|
42
|
+
"aside", "ul", "ol", "dl", "table", "form", "blockquote", "pre",
|
|
43
|
+
"h1", "h2", "h3", "h4", "h5", "h6", "figure", "hr",
|
|
44
|
+
]),
|
|
45
|
+
li: new Set(["li"]),
|
|
46
|
+
dt: new Set(["dt", "dd"]),
|
|
47
|
+
dd: new Set(["dt", "dd"]),
|
|
48
|
+
tr: new Set(["tr", "tbody", "tfoot", "thead"]),
|
|
49
|
+
td: new Set(["td", "th", "tr", "tbody", "tfoot", "thead"]),
|
|
50
|
+
th: new Set(["td", "th", "tr", "tbody", "tfoot", "thead"]),
|
|
51
|
+
thead: new Set(["tbody", "tfoot"]),
|
|
52
|
+
tbody: new Set(["tbody", "tfoot"]),
|
|
53
|
+
option: new Set(["option", "optgroup"]),
|
|
54
|
+
};
|
|
55
|
+
export class PredictiveHtmlParser {
|
|
56
|
+
committed = "";
|
|
57
|
+
pending = "";
|
|
58
|
+
stack = [];
|
|
59
|
+
insideRawText = null;
|
|
60
|
+
htmlClosed = false;
|
|
61
|
+
/** Feed a chunk; returns the current renderable projection. */
|
|
62
|
+
push(chunk) {
|
|
63
|
+
if (typeof chunk === "string" && chunk.length > 0) {
|
|
64
|
+
try {
|
|
65
|
+
this.process(this.pending + chunk);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Fail open: keep whatever we had, treat the chunk as text.
|
|
69
|
+
this.pending = "";
|
|
70
|
+
this.committed += chunk;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return this.render();
|
|
74
|
+
}
|
|
75
|
+
/** The current renderable projection: committed + predicted closings. */
|
|
76
|
+
render() {
|
|
77
|
+
let html = this.committed;
|
|
78
|
+
// Only append the held tail if it's plain text (CSS/text), never a partial
|
|
79
|
+
// tag fragment like "<div cla" or "</sty".
|
|
80
|
+
if (this.pending && !this.pending.startsWith("<"))
|
|
81
|
+
html += this.pending;
|
|
82
|
+
for (let i = this.stack.length - 1; i >= 0; i--) {
|
|
83
|
+
html += `</${this.stack[i]}>`;
|
|
84
|
+
}
|
|
85
|
+
return html;
|
|
86
|
+
}
|
|
87
|
+
/** The immutable, never-predicted truth committed so far. */
|
|
88
|
+
get committedHtml() {
|
|
89
|
+
return this.committed;
|
|
90
|
+
}
|
|
91
|
+
/** True once a real `</html>` has balanced the document. */
|
|
92
|
+
get complete() {
|
|
93
|
+
return this.htmlClosed;
|
|
94
|
+
}
|
|
95
|
+
/** Is there visible body content worth rendering yet? */
|
|
96
|
+
isRenderable() {
|
|
97
|
+
const body = /<body\b[^>]*>([\s\S]*)$/i.exec(this.committed);
|
|
98
|
+
if (body)
|
|
99
|
+
return /\S/.test(body[1] ?? "");
|
|
100
|
+
return /<(?:div|section|main|header|footer|h[1-6]|p|ul|ol|li|table|article|nav|svg|img|button|form|span|a|figure|blockquote)\b/i.test(this.committed);
|
|
101
|
+
}
|
|
102
|
+
reset() {
|
|
103
|
+
this.committed = "";
|
|
104
|
+
this.pending = "";
|
|
105
|
+
this.stack = [];
|
|
106
|
+
this.insideRawText = null;
|
|
107
|
+
this.htmlClosed = false;
|
|
108
|
+
}
|
|
109
|
+
process(buf) {
|
|
110
|
+
this.pending = "";
|
|
111
|
+
const n = buf.length;
|
|
112
|
+
let i = 0;
|
|
113
|
+
while (i < n) {
|
|
114
|
+
// Inside a raw-text element: consume verbatim until its real closer.
|
|
115
|
+
if (this.insideRawText) {
|
|
116
|
+
const tag = this.insideRawText;
|
|
117
|
+
const re = new RegExp(`</${tag}\\s*>`, "i");
|
|
118
|
+
const m = re.exec(buf.slice(i));
|
|
119
|
+
if (m) {
|
|
120
|
+
const end = i + m.index + m[0].length;
|
|
121
|
+
this.committed += buf.slice(i, end);
|
|
122
|
+
const idx = this.stack.lastIndexOf(tag);
|
|
123
|
+
if (idx !== -1)
|
|
124
|
+
this.stack.length = idx;
|
|
125
|
+
this.insideRawText = null;
|
|
126
|
+
i = end;
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// Closer not here yet: commit what we safely can, hold back enough to
|
|
130
|
+
// catch a closer split across the boundary (e.g. "</styl").
|
|
131
|
+
const holdback = `</${tag}>`.length - 1;
|
|
132
|
+
const safeEnd = Math.max(i, n - holdback);
|
|
133
|
+
if (safeEnd > i)
|
|
134
|
+
this.committed += buf.slice(i, safeEnd);
|
|
135
|
+
this.pending = buf.slice(safeEnd);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const lt = buf.indexOf("<", i);
|
|
139
|
+
if (lt === -1) {
|
|
140
|
+
this.committed += buf.slice(i);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (lt > i)
|
|
144
|
+
this.committed += buf.slice(i, lt);
|
|
145
|
+
// Comment.
|
|
146
|
+
if (buf.startsWith("<!--", lt)) {
|
|
147
|
+
const end = buf.indexOf("-->", lt + 4);
|
|
148
|
+
if (end === -1) {
|
|
149
|
+
this.pending = buf.slice(lt);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
this.committed += buf.slice(lt, end + 3);
|
|
153
|
+
i = end + 3;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
// Doctype / declaration / processing instruction.
|
|
157
|
+
if (buf.startsWith("<!", lt) || buf.startsWith("<?", lt)) {
|
|
158
|
+
const end = buf.indexOf(">", lt + 2);
|
|
159
|
+
if (end === -1) {
|
|
160
|
+
this.pending = buf.slice(lt);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this.committed += buf.slice(lt, end + 1);
|
|
164
|
+
i = end + 1;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
const gt = findTagEnd(buf, lt);
|
|
168
|
+
if (gt === -1) {
|
|
169
|
+
// Incomplete tag at the frontier — hold it for the next chunk.
|
|
170
|
+
this.pending = buf.slice(lt);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const raw = buf.slice(lt, gt + 1);
|
|
174
|
+
const name = tagName(raw);
|
|
175
|
+
if (!name) {
|
|
176
|
+
// Not a real tag ("<>" or "< x"); treat literally as text.
|
|
177
|
+
this.committed += raw;
|
|
178
|
+
i = gt + 1;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (raw[1] === "/")
|
|
182
|
+
this.handleClose(name, raw);
|
|
183
|
+
else
|
|
184
|
+
this.handleOpen(name, raw);
|
|
185
|
+
i = gt + 1;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
handleOpen(name, raw) {
|
|
189
|
+
this.autoCloseImplicit(name);
|
|
190
|
+
this.committed += raw;
|
|
191
|
+
const selfClosing = /\/\s*>$/.test(raw);
|
|
192
|
+
if (VOID_TAGS.has(name) || selfClosing)
|
|
193
|
+
return;
|
|
194
|
+
this.stack.push(name);
|
|
195
|
+
if (RAW_TEXT_TAGS.has(name))
|
|
196
|
+
this.insideRawText = name;
|
|
197
|
+
}
|
|
198
|
+
handleClose(name, raw) {
|
|
199
|
+
const idx = this.stack.lastIndexOf(name);
|
|
200
|
+
if (idx === -1)
|
|
201
|
+
return; // orphan close — ignore
|
|
202
|
+
// Close any unclosed descendants opened after the matched element.
|
|
203
|
+
while (this.stack.length > idx + 1) {
|
|
204
|
+
const node = this.stack.pop();
|
|
205
|
+
this.committed += `</${node}>`;
|
|
206
|
+
}
|
|
207
|
+
this.stack.pop();
|
|
208
|
+
this.committed += raw;
|
|
209
|
+
if (name === "html")
|
|
210
|
+
this.htmlClosed = true;
|
|
211
|
+
}
|
|
212
|
+
autoCloseImplicit(newTag) {
|
|
213
|
+
// A chain may close several elements (e.g. <td>…<tr> closes td then tr).
|
|
214
|
+
for (;;) {
|
|
215
|
+
const top = this.stack[this.stack.length - 1];
|
|
216
|
+
if (!top)
|
|
217
|
+
return;
|
|
218
|
+
const rule = IMPLICIT_CLOSE_RULES[top];
|
|
219
|
+
if (rule && rule.has(newTag)) {
|
|
220
|
+
this.stack.pop();
|
|
221
|
+
this.committed += `</${top}>`;
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/** Index of the `>` ending the tag opening at `lt`, skipping quoted attrs. */
|
|
230
|
+
function findTagEnd(input, lt) {
|
|
231
|
+
let quote = null;
|
|
232
|
+
for (let i = lt + 1; i < input.length; i++) {
|
|
233
|
+
const c = input[i];
|
|
234
|
+
if (quote) {
|
|
235
|
+
if (c === quote)
|
|
236
|
+
quote = null;
|
|
237
|
+
}
|
|
238
|
+
else if (c === '"' || c === "'") {
|
|
239
|
+
quote = c;
|
|
240
|
+
}
|
|
241
|
+
else if (c === ">") {
|
|
242
|
+
return i;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return -1;
|
|
246
|
+
}
|
|
247
|
+
/** Lowercase element name from a tag string, or "" if not a real tag. */
|
|
248
|
+
function tagName(tag) {
|
|
249
|
+
const m = /^<\/?\s*([a-zA-Z][a-zA-Z0-9:-]*)/.exec(tag);
|
|
250
|
+
return m ? m[1].toLowerCase() : "";
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=predictiveHtmlParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predictiveHtmlParser.js","sourceRoot":"","sources":["../../src/stream/predictiveHtmlParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ArtifactStreamEvent } from "../types/stream.js";
|
|
2
|
+
/**
|
|
3
|
+
* Consume a `fetch` Response body as a stream of protocol events. Yields each
|
|
4
|
+
* decoded {@link ArtifactStreamEvent} as it arrives.
|
|
5
|
+
*/
|
|
6
|
+
export declare function readArtifactStream(response: Response, signal?: AbortSignal): AsyncGenerator<ArtifactStreamEvent, void, unknown>;
|
|
7
|
+
//# sourceMappingURL=sse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/stream/sse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;;GAGG;AACH,wBAAuB,kBAAkB,CACvC,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,mBAAmB,EAAE,IAAI,EAAE,OAAO,CAAC,CAyBpD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { SseDecoder } from "./decoder.js";
|
|
2
|
+
/**
|
|
3
|
+
* Consume a `fetch` Response body as a stream of protocol events. Yields each
|
|
4
|
+
* decoded {@link ArtifactStreamEvent} as it arrives.
|
|
5
|
+
*/
|
|
6
|
+
export async function* readArtifactStream(response, signal) {
|
|
7
|
+
if (!response.body) {
|
|
8
|
+
throw new Error("Response has no readable body");
|
|
9
|
+
}
|
|
10
|
+
const reader = response.body.getReader();
|
|
11
|
+
const textDecoder = new TextDecoder();
|
|
12
|
+
const sseDecoder = new SseDecoder();
|
|
13
|
+
try {
|
|
14
|
+
while (true) {
|
|
15
|
+
if (signal?.aborted)
|
|
16
|
+
break;
|
|
17
|
+
const { done, value } = await reader.read();
|
|
18
|
+
if (done)
|
|
19
|
+
break;
|
|
20
|
+
const text = textDecoder.decode(value, { stream: true });
|
|
21
|
+
for (const event of sseDecoder.push(text)) {
|
|
22
|
+
yield event;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
for (const event of sseDecoder.flush()) {
|
|
26
|
+
yield event;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
reader.releaseLock();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=sse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/stream/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;;GAGG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,kBAAkB,CACvC,QAAkB,EAClB,MAAoB;IAEpB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAEpC,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM;YAC3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { ArtifactKind } from "./stream.js";
|
|
2
|
+
/** Lifecycle state of a single artifact on the client. */
|
|
3
|
+
export type ArtifactStatus = "idle" | "streaming" | "complete" | "error";
|
|
4
|
+
/**
|
|
5
|
+
* A client-side, reconstructed view of an HTML artifact. `html` is the raw
|
|
6
|
+
* aggregated stream output; `snapshot` is the last sanitized, render-safe
|
|
7
|
+
* version actually shown in the iframe.
|
|
8
|
+
*/
|
|
9
|
+
export interface HtmlArtifact {
|
|
10
|
+
id: string;
|
|
11
|
+
title: string;
|
|
12
|
+
type: ArtifactKind;
|
|
13
|
+
/** Latest aggregated raw HTML received from the stream. */
|
|
14
|
+
html: string;
|
|
15
|
+
/** Last valid sanitized snapshot suitable for rendering. */
|
|
16
|
+
snapshot: string;
|
|
17
|
+
status: ArtifactStatus;
|
|
18
|
+
createdAt: number;
|
|
19
|
+
updatedAt: number;
|
|
20
|
+
}
|
|
21
|
+
export type ArtifactAesthetic = "minimal" | "glass" | "luxury" | "startup" | "developer" | "playful" | "enterprise" | "dark" | "editorial";
|
|
22
|
+
export type ArtifactMood = "calm" | "premium" | "bold" | "friendly" | "technical" | "energetic";
|
|
23
|
+
export type ArtifactDensity = "compact" | "comfortable" | "spacious";
|
|
24
|
+
export type ArtifactRadius = "sm" | "md" | "xl" | "2xl" | "3xl";
|
|
25
|
+
export type ArtifactFont = "system" | "serif" | "mono" | "rounded";
|
|
26
|
+
export type ArtifactColorScheme = "auto" | "light" | "dark";
|
|
27
|
+
export type ArtifactVisualComplexity = "simple" | "balanced" | "rich";
|
|
28
|
+
/**
|
|
29
|
+
* Server-side generation hints. These are injected into the HTML generation
|
|
30
|
+
* prompt so the model produces CSS that matches the requested look and feel.
|
|
31
|
+
*/
|
|
32
|
+
export interface ArtifactStyleProfile {
|
|
33
|
+
aesthetic?: ArtifactAesthetic;
|
|
34
|
+
mood?: ArtifactMood;
|
|
35
|
+
density?: ArtifactDensity;
|
|
36
|
+
radius?: ArtifactRadius;
|
|
37
|
+
font?: ArtifactFont;
|
|
38
|
+
colorScheme?: ArtifactColorScheme;
|
|
39
|
+
visualComplexity?: ArtifactVisualComplexity;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* How an artifact is presented in the host UI.
|
|
43
|
+
* - `card`: a framed, windowed iframe with a toolbar (the default).
|
|
44
|
+
* - `seamless`: a chromeless, transparent iframe that sits inline in the chat
|
|
45
|
+
* as if it were native content — no border, no window, no background. Use this
|
|
46
|
+
* when the host wants artifacts to blend into a consistent UI ("camouflage").
|
|
47
|
+
*/
|
|
48
|
+
export type ArtifactPresentation = "card" | "seamless";
|
|
49
|
+
/**
|
|
50
|
+
* The host application's theme. Passed to the server it is injected into the
|
|
51
|
+
* generation prompt so the model produces artifacts that match the site exactly
|
|
52
|
+
* (instead of inventing an unrelated palette). Passed to the client it is
|
|
53
|
+
* injected into the iframe as CSS custom properties + sensible base styles, so
|
|
54
|
+
* artifacts inherit the host's colours and type — essential for seamless mode.
|
|
55
|
+
*/
|
|
56
|
+
export interface ArtifactTheme {
|
|
57
|
+
/** `dark` or `light` — anchors the model's contrast decisions. */
|
|
58
|
+
colorScheme?: "light" | "dark";
|
|
59
|
+
/** Page background. In seamless mode the iframe stays transparent regardless. */
|
|
60
|
+
background?: string;
|
|
61
|
+
/** Primary text colour. */
|
|
62
|
+
foreground?: string;
|
|
63
|
+
/** Brand / primary accent colour. */
|
|
64
|
+
primary?: string;
|
|
65
|
+
/** Secondary accent colour. */
|
|
66
|
+
accent?: string;
|
|
67
|
+
/** Muted/secondary text colour. */
|
|
68
|
+
muted?: string;
|
|
69
|
+
/** Hairline / border colour. */
|
|
70
|
+
border?: string;
|
|
71
|
+
/** Surface/card colour for raised elements. */
|
|
72
|
+
surface?: string;
|
|
73
|
+
/** Base corner radius, e.g. "16px". */
|
|
74
|
+
radius?: string;
|
|
75
|
+
/** Font family stack to match the host. */
|
|
76
|
+
fontFamily?: string;
|
|
77
|
+
/** Freeform extra brand guidance for the model (tone, do/don't). */
|
|
78
|
+
notes?: string;
|
|
79
|
+
}
|
|
80
|
+
/** Result of parsing a model envelope into an assistant message + artifact. */
|
|
81
|
+
export interface ParsedArtifactEnvelope {
|
|
82
|
+
assistantMessage: string;
|
|
83
|
+
title: string;
|
|
84
|
+
html: string;
|
|
85
|
+
/** True when a well-formed `<html_artifact>` block was found. */
|
|
86
|
+
hasArtifact: boolean;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=artifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../../src/types/artifact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,0DAA0D;AAC1D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,OAAO,GACP,QAAQ,GACR,SAAS,GACT,WAAW,GACX,SAAS,GACT,YAAY,GACZ,MAAM,GACN,WAAW,CAAC;AAEhB,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,SAAS,GACT,MAAM,GACN,UAAU,GACV,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AACrE,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AACnE,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAC5D,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtE;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,gBAAgB,CAAC,EAAE,wBAAwB,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+EAA+E;AAC/E,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,WAAW,EAAE,OAAO,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../src/types/artifact.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { HtmlArtifact, ArtifactPresentation, ArtifactTheme } from "./artifact.js";
|
|
2
|
+
import type { ArtifactMode } from "./stream.js";
|
|
3
|
+
export type ChatRole = "user" | "assistant" | "system";
|
|
4
|
+
/** A single chat message tracked by the client hook. */
|
|
5
|
+
export interface ChatMessage {
|
|
6
|
+
id: string;
|
|
7
|
+
role: ChatRole;
|
|
8
|
+
content: string;
|
|
9
|
+
/** Present on assistant messages once the mode is known. */
|
|
10
|
+
mode?: ArtifactMode;
|
|
11
|
+
/** Links an assistant message to the artifact it produced. */
|
|
12
|
+
artifactId?: string;
|
|
13
|
+
}
|
|
14
|
+
/** Overall status of the streaming connection. */
|
|
15
|
+
export type ArtifactStreamStatus = "idle" | "submitted" | "streaming" | "done" | "error";
|
|
16
|
+
export interface UseArtifactStreamOptions {
|
|
17
|
+
/** SSE endpoint that returns the `ArtifactStreamEvent` protocol. */
|
|
18
|
+
endpoint: string;
|
|
19
|
+
/** Extra fields merged into the POST body alongside `messages`. */
|
|
20
|
+
body?: Record<string, unknown>;
|
|
21
|
+
/** Extra request headers. */
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
/** Initial messages to seed the conversation. */
|
|
24
|
+
initialMessages?: ChatMessage[];
|
|
25
|
+
/** Called whenever a fatal error event or transport error occurs. */
|
|
26
|
+
onError?: (error: Error) => void;
|
|
27
|
+
}
|
|
28
|
+
export interface UseArtifactStreamReturn {
|
|
29
|
+
messages: ChatMessage[];
|
|
30
|
+
artifacts: Record<string, HtmlArtifact>;
|
|
31
|
+
status: ArtifactStreamStatus;
|
|
32
|
+
mode: ArtifactMode | null;
|
|
33
|
+
error: Error | null;
|
|
34
|
+
/** Append a user message and start streaming the assistant response. */
|
|
35
|
+
sendMessage: (text: string) => Promise<void>;
|
|
36
|
+
/** Abort any in-flight stream and clear all state. */
|
|
37
|
+
reset: () => void;
|
|
38
|
+
/** Abort the in-flight stream without clearing history. */
|
|
39
|
+
stop: () => void;
|
|
40
|
+
}
|
|
41
|
+
export type CardVariant = "plain" | "glass" | "elevated" | "minimal";
|
|
42
|
+
export type CardDensity = "compact" | "comfortable" | "spacious";
|
|
43
|
+
export type CardRadius = "md" | "xl" | "2xl" | "3xl";
|
|
44
|
+
export type CardShadow = "none" | "soft" | "medium";
|
|
45
|
+
export type ArtifactTab = "preview" | "code";
|
|
46
|
+
export type PreviewFallbackMode = "last-valid-snapshot" | "static-error" | "raw-html";
|
|
47
|
+
/** Per-iframe rendering options for {@link HtmlArtifactPreview}. */
|
|
48
|
+
export interface HtmlArtifactPreviewOptions {
|
|
49
|
+
/** Explicit sandbox attribute. Overrides the allow* flags if provided. */
|
|
50
|
+
sandbox?: string;
|
|
51
|
+
allowForms?: boolean;
|
|
52
|
+
/** Scripts are never enabled. */
|
|
53
|
+
allowScripts?: false;
|
|
54
|
+
allowInlineStyles?: boolean;
|
|
55
|
+
allowStyleTags?: boolean;
|
|
56
|
+
allowSvg?: boolean;
|
|
57
|
+
allowExternalFonts?: boolean;
|
|
58
|
+
/** Run the sanitizer before writing srcDoc. Default true. */
|
|
59
|
+
sanitize?: boolean;
|
|
60
|
+
/** Remove iframe chrome so it blends into the card. Default true. */
|
|
61
|
+
seamless?: boolean;
|
|
62
|
+
minHeight?: number;
|
|
63
|
+
maxHeight?: number;
|
|
64
|
+
/** Auto-size the iframe to its content height. Default true. */
|
|
65
|
+
autoResize?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Minimum interval (ms) between streamed repaints — a throttle, not a
|
|
68
|
+
* trailing debounce, so a continuous stream still renders steadily. Paints
|
|
69
|
+
* are also aligned to an animation frame. `0` means "every frame" (~60fps).
|
|
70
|
+
* Default 32 (~30fps).
|
|
71
|
+
*/
|
|
72
|
+
debounceMs?: number;
|
|
73
|
+
fallbackMode?: PreviewFallbackMode;
|
|
74
|
+
}
|
|
75
|
+
export interface HtmlArtifactCardProps {
|
|
76
|
+
artifact: HtmlArtifact;
|
|
77
|
+
variant?: CardVariant;
|
|
78
|
+
density?: CardDensity;
|
|
79
|
+
radius?: CardRadius;
|
|
80
|
+
shadow?: CardShadow;
|
|
81
|
+
showToolbar?: boolean;
|
|
82
|
+
defaultTab?: ArtifactTab;
|
|
83
|
+
allowFullscreen?: boolean;
|
|
84
|
+
allowCopy?: boolean;
|
|
85
|
+
allowDownload?: boolean;
|
|
86
|
+
/** Show the "Download PDF" action (native print-to-PDF). Default true. */
|
|
87
|
+
allowPdf?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* `card` (default) renders a framed, windowed iframe with a toolbar.
|
|
90
|
+
* `seamless` renders a chromeless, transparent iframe inline ("camouflage").
|
|
91
|
+
*/
|
|
92
|
+
presentation?: ArtifactPresentation;
|
|
93
|
+
/** Host theme injected into the iframe so the artifact matches the site. */
|
|
94
|
+
theme?: ArtifactTheme;
|
|
95
|
+
previewOptions?: HtmlArtifactPreviewOptions;
|
|
96
|
+
className?: string;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/types/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/types/client.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options that govern what the sanitizer is allowed to keep. Defaults are
|
|
3
|
+
* static-only and script-free: see `constants/defaults`.
|
|
4
|
+
*/
|
|
5
|
+
export interface SanitizeOptions {
|
|
6
|
+
/** Keep `<form>`, `<input>`, `<button>`, `<label>`, `<textarea>`, `<select>`. */
|
|
7
|
+
allowForms?: boolean;
|
|
8
|
+
/** Always coerced to `false`. Scripts are never permitted. */
|
|
9
|
+
allowScripts?: false;
|
|
10
|
+
/** Keep inline `style="..."` attributes. */
|
|
11
|
+
allowInlineStyles?: boolean;
|
|
12
|
+
/** Keep `<style>` tags. */
|
|
13
|
+
allowStyleTags?: boolean;
|
|
14
|
+
/** Keep inline `<svg>`. */
|
|
15
|
+
allowSvg?: boolean;
|
|
16
|
+
/** Permit `@import`/external font + stylesheet links. Off by default. */
|
|
17
|
+
allowExternalFonts?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Mode resolution strategy for the server helper. */
|
|
20
|
+
export type ArtifactModeOption = "auto" | "markdown" | "artifact" | "generative_ui"
|
|
21
|
+
/** @deprecated Use `artifact` or `generative_ui`. */
|
|
22
|
+
| "html_artifact";
|
|
23
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2BAA2B;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,sDAAsD;AACtD,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,UAAU,GACV,UAAU,GACV,eAAe;AACjB,qDAAqD;GACnD,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Discriminator codes for the package's typed errors. */
|
|
2
|
+
export type ArtifactErrorCode = "ARTIFACT_PARSE_ERROR" | "STREAM_ERROR" | "CLASSIFICATION_ERROR";
|
|
3
|
+
export interface SerializedArtifactError {
|
|
4
|
+
name: string;
|
|
5
|
+
code: ArtifactErrorCode;
|
|
6
|
+
message: string;
|
|
7
|
+
recoverable: boolean;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB,GACzB,sBAAsB,GACtB,cAAc,GACd,sBAAsB,CAAC;AAE3B,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,aAAa,CAAC;AACjC,mBAAmB,eAAe,CAAC;AACnC,mBAAmB,aAAa,CAAC;AACjC,mBAAmB,aAAa,CAAC;AACjC,mBAAmB,aAAa,CAAC;AACjC,mBAAmB,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|