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,68 @@
|
|
|
1
|
+
import { DEFAULT_SNAPSHOT_INTERVAL_MS } from "../constants/defaults.js";
|
|
2
|
+
import { MARKDOWN_SYSTEM_PROMPT } from "../prompts/markdownPrompt.js";
|
|
3
|
+
import { buildHtmlArtifactPrompt } from "../prompts/htmlArtifactPrompt.js";
|
|
4
|
+
/** Fill in defaults and precompute the prompts for a request. */
|
|
5
|
+
export function resolveServerConfig(options) {
|
|
6
|
+
const allowForms = options.allowForms ?? true;
|
|
7
|
+
const allowInlineStyles = options.allowInlineStyles ?? true;
|
|
8
|
+
const allowStyleTags = options.allowStyleTags ?? true;
|
|
9
|
+
const allowSvg = options.allowSvg ?? true;
|
|
10
|
+
const allowExternalFonts = options.allowExternalFonts ?? false;
|
|
11
|
+
const htmlSystemPrompt = options.htmlSystemPrompt ??
|
|
12
|
+
buildHtmlArtifactPrompt({
|
|
13
|
+
styleProfile: options.styleProfile,
|
|
14
|
+
allowExternalFonts,
|
|
15
|
+
allowForms,
|
|
16
|
+
theme: options.theme,
|
|
17
|
+
presentation: options.presentation,
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
messages: options.messages,
|
|
21
|
+
generateTextStream: options.generateTextStream,
|
|
22
|
+
mode: options.mode ?? "auto",
|
|
23
|
+
generateText: options.generateText,
|
|
24
|
+
classify: options.classify,
|
|
25
|
+
system: options.system,
|
|
26
|
+
markdownSystemPrompt: options.markdownSystemPrompt ?? MARKDOWN_SYSTEM_PROMPT,
|
|
27
|
+
htmlSystemPrompt,
|
|
28
|
+
htmlSystemPromptOverride: options.htmlSystemPrompt,
|
|
29
|
+
styleProfile: options.styleProfile,
|
|
30
|
+
theme: options.theme,
|
|
31
|
+
presentation: options.presentation,
|
|
32
|
+
sanitize: {
|
|
33
|
+
allowForms,
|
|
34
|
+
allowScripts: false,
|
|
35
|
+
allowInlineStyles,
|
|
36
|
+
allowStyleTags,
|
|
37
|
+
allowSvg,
|
|
38
|
+
allowExternalFonts,
|
|
39
|
+
},
|
|
40
|
+
temperature: options.temperature,
|
|
41
|
+
snapshotIntervalMs: options.snapshotIntervalMs ?? DEFAULT_SNAPSHOT_INTERVAL_MS,
|
|
42
|
+
abortSignal: options.abortSignal,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** Extract the latest user message text for classification. */
|
|
46
|
+
export function latestUserText(messages) {
|
|
47
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
48
|
+
const message = messages[i];
|
|
49
|
+
if (!message || message.role !== "user")
|
|
50
|
+
continue;
|
|
51
|
+
return messageToText(message.content);
|
|
52
|
+
}
|
|
53
|
+
return "";
|
|
54
|
+
}
|
|
55
|
+
function messageToText(content) {
|
|
56
|
+
if (typeof content === "string")
|
|
57
|
+
return content;
|
|
58
|
+
if (Array.isArray(content)) {
|
|
59
|
+
return content
|
|
60
|
+
.map((part) => typeof part === "object" && part && "text" in part
|
|
61
|
+
? String(part.text ?? "")
|
|
62
|
+
: "")
|
|
63
|
+
.join(" ")
|
|
64
|
+
.trim();
|
|
65
|
+
}
|
|
66
|
+
return "";
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAO3E,iEAAiE;AACjE,MAAM,UAAU,mBAAmB,CACjC,OAA4C;IAE5C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAC9C,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC5D,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC1C,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC;IAE/D,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB;QACxB,uBAAuB,CAAC;YACtB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,kBAAkB;YAClB,UAAU;YACV,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;IAEL,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,sBAAsB;QAC5E,gBAAgB;QAChB,wBAAwB,EAAE,OAAO,CAAC,gBAAgB;QAClD,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,QAAQ,EAAE;YACR,UAAU;YACV,YAAY,EAAE,KAAK;YACnB,iBAAiB;YACjB,cAAc;YACd,QAAQ;YACR,kBAAkB;SACnB;QACD,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,kBAAkB,EAChB,OAAO,CAAC,kBAAkB,IAAI,4BAA4B;QAC5D,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,QAAuB;IACpD,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAClD,OAAO,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,OAA+B;IACpD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;YAChD,CAAC,CAAC,MAAM,CAAE,IAA0B,CAAC,IAAI,IAAI,EAAE,CAAC;YAChD,CAAC,CAAC,EAAE,CACP;aACA,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CreateArtifactStreamResponseOptions } from "../types/server.js";
|
|
2
|
+
/**
|
|
3
|
+
* The package's primary server entry point. Classifies the request (unless a
|
|
4
|
+
* mode is forced), emits a `mode` event, then streams the appropriate response
|
|
5
|
+
* as Server-Sent Events. Returns a `Response` ready to return from a Next.js
|
|
6
|
+
* route handler (or any Web-standard handler).
|
|
7
|
+
*/
|
|
8
|
+
export declare function createArtifactStreamResponse(options: CreateArtifactStreamResponseOptions): Response;
|
|
9
|
+
//# sourceMappingURL=createArtifactStreamResponse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createArtifactStreamResponse.d.ts","sourceRoot":"","sources":["../../src/server/createArtifactStreamResponse.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,mCAAmC,EAEpC,MAAM,oBAAoB,CAAC;AAQ5B;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mCAAmC,GAC3C,QAAQ,CA2BV"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { classifyMode } from "../classifier/classifyMode.js";
|
|
2
|
+
import { classifyByRules } from "../classifier/rules.js";
|
|
3
|
+
import { CircuitBreaker } from "../circuit-breaker/circuitBreaker.js";
|
|
4
|
+
import { event } from "../stream/events.js";
|
|
5
|
+
import { latestUserText, resolveServerConfig } from "./config.js";
|
|
6
|
+
import { createSseResponse } from "./createSseResponse.js";
|
|
7
|
+
import { streamHtmlArtifact } from "./createHtmlArtifactStream.js";
|
|
8
|
+
import { streamMarkdown } from "./createMarkdownStream.js";
|
|
9
|
+
import { buildHtmlArtifactPrompt } from "../prompts/htmlArtifactPrompt.js";
|
|
10
|
+
// Shared breaker (process-memory). Falls back to markdown when HTML generation
|
|
11
|
+
// keeps failing, so a broken model/prompt doesn't repeatedly burn tokens.
|
|
12
|
+
const htmlBreaker = new CircuitBreaker({ key: "html_artifact" });
|
|
13
|
+
/**
|
|
14
|
+
* The package's primary server entry point. Classifies the request (unless a
|
|
15
|
+
* mode is forced), emits a `mode` event, then streams the appropriate response
|
|
16
|
+
* as Server-Sent Events. Returns a `Response` ready to return from a Next.js
|
|
17
|
+
* route handler (or any Web-standard handler).
|
|
18
|
+
*/
|
|
19
|
+
export function createArtifactStreamResponse(options) {
|
|
20
|
+
const config = resolveServerConfig(options);
|
|
21
|
+
const producer = async (emit) => {
|
|
22
|
+
const mode = await resolveMode(config.mode, config);
|
|
23
|
+
emit(event.mode(mode));
|
|
24
|
+
if (mode === "markdown") {
|
|
25
|
+
await streamMarkdown(config, emit);
|
|
26
|
+
emit(event.done());
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
await streamHtmlArtifact(resolveHtmlConfigForMode(config, mode), emit);
|
|
31
|
+
htmlBreaker.recordSuccess();
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
htmlBreaker.recordFailure();
|
|
35
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
36
|
+
// Recoverable: the client keeps the last valid snapshot it received.
|
|
37
|
+
emit(event.error(`Artifact generation failed: ${message}`, true));
|
|
38
|
+
}
|
|
39
|
+
emit(event.done());
|
|
40
|
+
};
|
|
41
|
+
return createSseResponse(producer);
|
|
42
|
+
}
|
|
43
|
+
async function resolveMode(requested, config) {
|
|
44
|
+
if (requested === "markdown")
|
|
45
|
+
return "markdown";
|
|
46
|
+
if (requested === "artifact" || requested === "html_artifact") {
|
|
47
|
+
// Honor an explicit request, but still respect an open circuit.
|
|
48
|
+
return htmlBreaker.allowRequest() ? "artifact" : "markdown";
|
|
49
|
+
}
|
|
50
|
+
if (requested === "generative_ui") {
|
|
51
|
+
return htmlBreaker.allowRequest() ? "generative_ui" : "markdown";
|
|
52
|
+
}
|
|
53
|
+
// auto
|
|
54
|
+
const query = latestUserText(config.messages);
|
|
55
|
+
const classification = config.classify
|
|
56
|
+
? await config.classify({
|
|
57
|
+
query,
|
|
58
|
+
messages: config.messages,
|
|
59
|
+
abortSignal: config.abortSignal,
|
|
60
|
+
})
|
|
61
|
+
: await classifyMode({
|
|
62
|
+
generateText: config.generateText,
|
|
63
|
+
query,
|
|
64
|
+
abortSignal: config.abortSignal,
|
|
65
|
+
});
|
|
66
|
+
let mode = normalizeMode(typeof classification === "string" ? classification : classification.mode);
|
|
67
|
+
// Deterministic override: if the request explicitly signals an inline /
|
|
68
|
+
// camouflage / generative-UI intent, prefer that over a model "artifact" pick
|
|
69
|
+
// (the model often labels a UI showcase as a standalone document). This is
|
|
70
|
+
// what keeps "generative UI", "camouflage", "showcase", etc. transparent.
|
|
71
|
+
if (mode === "artifact" && classifyByRules(query).mode === "generative_ui") {
|
|
72
|
+
mode = "generative_ui";
|
|
73
|
+
}
|
|
74
|
+
if ((mode === "artifact" || mode === "generative_ui") && !htmlBreaker.allowRequest()) {
|
|
75
|
+
return "markdown";
|
|
76
|
+
}
|
|
77
|
+
return mode;
|
|
78
|
+
}
|
|
79
|
+
function normalizeMode(mode) {
|
|
80
|
+
return mode === "html_artifact" ? "artifact" : mode;
|
|
81
|
+
}
|
|
82
|
+
function resolveHtmlConfigForMode(config, mode) {
|
|
83
|
+
const presentation = mode === "generative_ui" ? "seamless" : "card";
|
|
84
|
+
const seamless = presentation === "seamless";
|
|
85
|
+
if (config.htmlSystemPromptOverride) {
|
|
86
|
+
return { ...config, presentation };
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
...config,
|
|
90
|
+
htmlSystemPrompt: buildHtmlArtifactPrompt({
|
|
91
|
+
// Camouflage must match the host (theme + style profile). A standalone
|
|
92
|
+
// artifact is its OWN world: give it full creative freedom — no host
|
|
93
|
+
// theme and no imposed style profile, so it picks the best design
|
|
94
|
+
// (any palette, light/dark/vivid) per the request.
|
|
95
|
+
styleProfile: seamless ? config.styleProfile : undefined,
|
|
96
|
+
allowExternalFonts: config.sanitize.allowExternalFonts,
|
|
97
|
+
allowForms: config.sanitize.allowForms,
|
|
98
|
+
theme: seamless ? config.theme : undefined,
|
|
99
|
+
presentation,
|
|
100
|
+
}),
|
|
101
|
+
presentation,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=createArtifactStreamResponse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createArtifactStreamResponse.js","sourceRoot":"","sources":["../../src/server/createArtifactStreamResponse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Emit } from "../core/lifecycle.js";
|
|
2
|
+
import type { ResolvedServerConfig } from "../types/server.js";
|
|
3
|
+
export interface HtmlArtifactStreamResult {
|
|
4
|
+
messageId: string;
|
|
5
|
+
artifactId: string | null;
|
|
6
|
+
finalHtml: string;
|
|
7
|
+
}
|
|
8
|
+
export interface HtmlArtifactTextStreamOptions {
|
|
9
|
+
/** Raw model text chunks, already prompted to emit the Netra envelope. */
|
|
10
|
+
textStream: AsyncIterable<string>;
|
|
11
|
+
/** Sanitizer config used for snapshots and final HTML. */
|
|
12
|
+
sanitize: ResolvedServerConfig["sanitize"];
|
|
13
|
+
/** Snapshot cadence in milliseconds. Use 0 for every renderable delta. */
|
|
14
|
+
snapshotIntervalMs?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generate an HTML artifact. Streams a short assistant message, then the
|
|
18
|
+
* artifact: `artifact_start`, buffered `artifact_delta`s, periodic sanitized
|
|
19
|
+
* `artifact_snapshot`s, and finally a sanitized `artifact_done` derived from an
|
|
20
|
+
* authoritative full-text parse.
|
|
21
|
+
*/
|
|
22
|
+
export declare function streamHtmlArtifact(config: ResolvedServerConfig, emit: Emit): Promise<HtmlArtifactStreamResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Provider-agnostic artifact streamer. Use this when a framework such as
|
|
25
|
+
* LangChain gives you an `AsyncIterable<string>`. The caller is responsible
|
|
26
|
+
* for prompting the model with
|
|
27
|
+
* `HTML_ARTIFACT_SYSTEM_PROMPT` (or equivalent) before passing chunks here.
|
|
28
|
+
*/
|
|
29
|
+
export declare function streamHtmlArtifactFromTextStream(options: HtmlArtifactTextStreamOptions, emit: Emit): Promise<HtmlArtifactStreamResult>;
|
|
30
|
+
//# sourceMappingURL=createHtmlArtifactStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createHtmlArtifactStream.d.ts","sourceRoot":"","sources":["../../src/server/createHtmlArtifactStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,IAAI,EACV,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAM/D,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,6BAA6B;IAC5C,0EAA0E;IAC1E,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,0DAA0D;IAC1D,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC3C,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,wBAAwB,CAAC,CAgBnC;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,6BAA6B,EACtC,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,wBAAwB,CAAC,CAmFnC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { ArtifactLifecycle, MessageLifecycle, } from "../core/lifecycle.js";
|
|
2
|
+
import { StreamingEnvelopeParser } from "../artifacts/artifactEnvelope.js";
|
|
3
|
+
import { parseArtifactEnvelope } from "../artifacts/artifactEnvelope.js";
|
|
4
|
+
import { ArtifactBuffer } from "../stream/buffering.js";
|
|
5
|
+
import { sanitizeHtml } from "../sanitizer/sanitizeHtml.js";
|
|
6
|
+
function composeSystem(...parts) {
|
|
7
|
+
return parts.filter(Boolean).join("\n\n");
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Generate an HTML artifact. Streams a short assistant message, then the
|
|
11
|
+
* artifact: `artifact_start`, buffered `artifact_delta`s, periodic sanitized
|
|
12
|
+
* `artifact_snapshot`s, and finally a sanitized `artifact_done` derived from an
|
|
13
|
+
* authoritative full-text parse.
|
|
14
|
+
*/
|
|
15
|
+
export async function streamHtmlArtifact(config, emit) {
|
|
16
|
+
const textStream = await config.generateTextStream({
|
|
17
|
+
system: composeSystem(config.system, config.htmlSystemPrompt),
|
|
18
|
+
messages: config.messages,
|
|
19
|
+
temperature: config.temperature,
|
|
20
|
+
abortSignal: config.abortSignal,
|
|
21
|
+
});
|
|
22
|
+
return streamHtmlArtifactFromTextStream({
|
|
23
|
+
textStream,
|
|
24
|
+
sanitize: config.sanitize,
|
|
25
|
+
snapshotIntervalMs: config.snapshotIntervalMs,
|
|
26
|
+
}, emit);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Provider-agnostic artifact streamer. Use this when a framework such as
|
|
30
|
+
* LangChain gives you an `AsyncIterable<string>`. The caller is responsible
|
|
31
|
+
* for prompting the model with
|
|
32
|
+
* `HTML_ARTIFACT_SYSTEM_PROMPT` (or equivalent) before passing chunks here.
|
|
33
|
+
*/
|
|
34
|
+
export async function streamHtmlArtifactFromTextStream(options, emit) {
|
|
35
|
+
const message = new MessageLifecycle(emit);
|
|
36
|
+
const artifact = new ArtifactLifecycle(emit);
|
|
37
|
+
const parser = new StreamingEnvelopeParser();
|
|
38
|
+
const buffer = new ArtifactBuffer();
|
|
39
|
+
const snapshotIntervalMs = options.snapshotIntervalMs ?? 0;
|
|
40
|
+
message.start();
|
|
41
|
+
let rawText = "";
|
|
42
|
+
let artifactStarted = false;
|
|
43
|
+
let lastSnapshotAt = 0;
|
|
44
|
+
const maybeSnapshot = (force = false) => {
|
|
45
|
+
const now = Date.now();
|
|
46
|
+
if (!force && now - lastSnapshotAt < snapshotIntervalMs)
|
|
47
|
+
return;
|
|
48
|
+
const candidate = buffer.commit();
|
|
49
|
+
if (!candidate)
|
|
50
|
+
return;
|
|
51
|
+
lastSnapshotAt = now;
|
|
52
|
+
const { html } = sanitizeHtml(candidate, options.sanitize);
|
|
53
|
+
artifact.snapshot(html);
|
|
54
|
+
};
|
|
55
|
+
for await (const chunk of options.textStream) {
|
|
56
|
+
rawText += chunk;
|
|
57
|
+
for (const ev of parser.feed(chunk)) {
|
|
58
|
+
if (ev.kind === "message") {
|
|
59
|
+
message.delta(ev.delta);
|
|
60
|
+
}
|
|
61
|
+
else if (ev.kind === "artifact_open") {
|
|
62
|
+
// The short message ends as soon as the artifact begins.
|
|
63
|
+
message.done();
|
|
64
|
+
artifact.start(ev.title);
|
|
65
|
+
artifactStarted = true;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
buffer.append(ev.delta);
|
|
69
|
+
artifact.delta(ev.delta);
|
|
70
|
+
maybeSnapshot();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Drain any buffered tail.
|
|
75
|
+
for (const ev of parser.flush()) {
|
|
76
|
+
if (ev.kind === "message")
|
|
77
|
+
message.delta(ev.delta);
|
|
78
|
+
else if (ev.kind === "artifact_open") {
|
|
79
|
+
message.done();
|
|
80
|
+
artifact.start(ev.title);
|
|
81
|
+
artifactStarted = true;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
buffer.append(ev.delta);
|
|
85
|
+
artifact.delta(ev.delta);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Authoritative final parse over the entire model output.
|
|
89
|
+
const parsed = parseArtifactEnvelope(rawText);
|
|
90
|
+
const finalSource = parsed.hasArtifact ? parsed.html : buffer.raw;
|
|
91
|
+
if (!artifactStarted && !finalSource.trim()) {
|
|
92
|
+
message.done(parsed.assistantMessage || rawText.trim() || "I couldn't generate an artifact for that request.");
|
|
93
|
+
return {
|
|
94
|
+
messageId: message.id,
|
|
95
|
+
artifactId: null,
|
|
96
|
+
finalHtml: "",
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (!artifactStarted) {
|
|
100
|
+
// The streaming split never opened an artifact; recover from the final parse.
|
|
101
|
+
message.done(parsed.assistantMessage || undefined);
|
|
102
|
+
artifact.start(parsed.title);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
message.done();
|
|
106
|
+
}
|
|
107
|
+
const { html: finalHtml } = sanitizeHtml(finalSource, options.sanitize);
|
|
108
|
+
artifact.done(finalHtml);
|
|
109
|
+
return {
|
|
110
|
+
messageId: message.id,
|
|
111
|
+
artifactId: artifact.id,
|
|
112
|
+
finalHtml,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=createHtmlArtifactStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createHtmlArtifactStream.js","sourceRoot":"","sources":["../../src/server/createHtmlArtifactStream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Emit } from "../core/lifecycle.js";
|
|
2
|
+
import type { ResolvedServerConfig } from "../types/server.js";
|
|
3
|
+
/**
|
|
4
|
+
* Stream a plain markdown answer, emitting `message_start` / `message_delta` /
|
|
5
|
+
* `message_done`. Returns the full assistant text.
|
|
6
|
+
*/
|
|
7
|
+
export declare function streamMarkdown(config: ResolvedServerConfig, emit: Emit, messageId?: string): Promise<string>;
|
|
8
|
+
export interface MarkdownTextStreamOptions {
|
|
9
|
+
textStream: AsyncIterable<string>;
|
|
10
|
+
}
|
|
11
|
+
/** Provider-agnostic markdown streamer for any source of text chunks. */
|
|
12
|
+
export declare function streamMarkdownFromTextStream(options: MarkdownTextStreamOptions, emit: Emit, messageId?: string): Promise<string>;
|
|
13
|
+
//# sourceMappingURL=createMarkdownStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMarkdownStream.d.ts","sourceRoot":"","sources":["../../src/server/createMarkdownStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAM/D;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,IAAI,EACV,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,yEAAyE;AACzE,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,yBAAyB,EAClC,IAAI,EAAE,IAAI,EACV,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CASjB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { MessageLifecycle } from "../core/lifecycle.js";
|
|
2
|
+
function composeSystem(...parts) {
|
|
3
|
+
return parts.filter(Boolean).join("\n\n");
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Stream a plain markdown answer, emitting `message_start` / `message_delta` /
|
|
7
|
+
* `message_done`. Returns the full assistant text.
|
|
8
|
+
*/
|
|
9
|
+
export async function streamMarkdown(config, emit, messageId) {
|
|
10
|
+
const textStream = await config.generateTextStream({
|
|
11
|
+
system: composeSystem(config.system, config.markdownSystemPrompt),
|
|
12
|
+
messages: config.messages,
|
|
13
|
+
temperature: config.temperature,
|
|
14
|
+
abortSignal: config.abortSignal,
|
|
15
|
+
});
|
|
16
|
+
return streamMarkdownFromTextStream({ textStream }, emit, messageId);
|
|
17
|
+
}
|
|
18
|
+
/** Provider-agnostic markdown streamer for any source of text chunks. */
|
|
19
|
+
export async function streamMarkdownFromTextStream(options, emit, messageId) {
|
|
20
|
+
const message = new MessageLifecycle(emit, messageId);
|
|
21
|
+
message.start();
|
|
22
|
+
for await (const delta of options.textStream) {
|
|
23
|
+
message.delta(delta);
|
|
24
|
+
}
|
|
25
|
+
return message.done();
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=createMarkdownStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMarkdownStream.js","sourceRoot":"","sources":["../../src/server/createMarkdownStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAa,MAAM,sBAAsB,CAAC;AAGnE,SAAS,aAAa,CAAC,GAAG,KAA6B;IACrD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA4B,EAC5B,IAAU,EACV,SAAkB;IAElB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC;QACjD,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC;QACjE,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;IAEH,OAAO,4BAA4B,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACvE,CAAC;AAMD,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAAkC,EAClC,IAAU,EACV,SAAkB;IAElB,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ArtifactStreamProducer } from "../core/lifecycle.js";
|
|
2
|
+
/**
|
|
3
|
+
* Compose a producer into a ready-to-return SSE `Response`. This is the bridge
|
|
4
|
+
* between the framework-agnostic core stream and a route handler's return.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createSseResponse(producer: ArtifactStreamProducer, init?: ResponseInit): Response;
|
|
7
|
+
//# sourceMappingURL=createSseResponse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSseResponse.d.ts","sourceRoot":"","sources":["../../src/server/createSseResponse.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,sBAAsB,EAChC,IAAI,CAAC,EAAE,YAAY,GAClB,QAAQ,CAGV"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createArtifactStream } from "../core/createArtifactStream.js";
|
|
2
|
+
import { createArtifactResponse } from "../core/createArtifactResponse.js";
|
|
3
|
+
/**
|
|
4
|
+
* Compose a producer into a ready-to-return SSE `Response`. This is the bridge
|
|
5
|
+
* between the framework-agnostic core stream and a route handler's return.
|
|
6
|
+
*/
|
|
7
|
+
export function createSseResponse(producer, init) {
|
|
8
|
+
const stream = createArtifactStream(producer);
|
|
9
|
+
return createArtifactResponse(stream, init);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=createSseResponse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSseResponse.js","sourceRoot":"","sources":["../../src/server/createSseResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAG3E;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAgC,EAChC,IAAmB;IAEnB,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { createArtifactStreamResponse } from "./createArtifactStreamResponse.js";
|
|
2
|
+
export { createSseResponse } from "./createSseResponse.js";
|
|
3
|
+
export { streamMarkdown, streamMarkdownFromTextStream, type MarkdownTextStreamOptions, } from "./createMarkdownStream.js";
|
|
4
|
+
export { streamHtmlArtifact, streamHtmlArtifactFromTextStream, type HtmlArtifactStreamResult, type HtmlArtifactTextStreamOptions, } from "./createHtmlArtifactStream.js";
|
|
5
|
+
export { resolveServerConfig, latestUserText } from "./config.js";
|
|
6
|
+
export { classifyMode, classifyByRules } from "../classifier/index.js";
|
|
7
|
+
export { CircuitBreaker, MemoryCircuitStore, } from "../circuit-breaker/index.js";
|
|
8
|
+
export { sanitizeHtml, sanitize } from "../sanitizer/index.js";
|
|
9
|
+
export { parseArtifactEnvelope, StreamingEnvelopeParser, } from "../artifacts/artifactEnvelope.js";
|
|
10
|
+
export { buildHtmlArtifactPrompt, HTML_ARTIFACT_SYSTEM_PROMPT, MARKDOWN_SYSTEM_PROMPT, } from "../prompts/index.js";
|
|
11
|
+
export type * from "../types/index.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,4BAA4B,EAC5B,KAAK,yBAAyB,GAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,gCAAgC,EAChC,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,GACnC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EACL,cAAc,EACd,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { createArtifactStreamResponse } from "./createArtifactStreamResponse.js";
|
|
2
|
+
export { createSseResponse } from "./createSseResponse.js";
|
|
3
|
+
export { streamMarkdown, streamMarkdownFromTextStream, } from "./createMarkdownStream.js";
|
|
4
|
+
export { streamHtmlArtifact, streamHtmlArtifactFromTextStream, } from "./createHtmlArtifactStream.js";
|
|
5
|
+
export { resolveServerConfig, latestUserText } from "./config.js";
|
|
6
|
+
// Re-export the pieces a server integrator commonly needs.
|
|
7
|
+
export { classifyMode, classifyByRules } from "../classifier/index.js";
|
|
8
|
+
export { CircuitBreaker, MemoryCircuitStore, } from "../circuit-breaker/index.js";
|
|
9
|
+
export { sanitizeHtml, sanitize } from "../sanitizer/index.js";
|
|
10
|
+
export { parseArtifactEnvelope, StreamingEnvelopeParser, } from "../artifacts/artifactEnvelope.js";
|
|
11
|
+
export { buildHtmlArtifactPrompt, HTML_ARTIFACT_SYSTEM_PROMPT, MARKDOWN_SYSTEM_PROMPT, } from "../prompts/index.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,cAAc,EACd,4BAA4B,GAE7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,gCAAgC,GAGjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElE,2DAA2D;AAC3D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EACL,cAAc,EACd,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,qBAAqB,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stateless one-shot wrapper over {@link PredictiveHtmlParser}. Given the full
|
|
3
|
+
* partial HTML received so far, it returns an always-valid, renderable document
|
|
4
|
+
* by predicting the missing closing tags. Equivalent in output to feeding the
|
|
5
|
+
* same bytes incrementally — use the parser directly for true incremental
|
|
6
|
+
* streaming (carrying state across chunks).
|
|
7
|
+
*
|
|
8
|
+
* Fail-open: never throws; returns the input untouched on error.
|
|
9
|
+
*/
|
|
10
|
+
export interface AssembledDocument {
|
|
11
|
+
/** A document/fragment safe to drop into an iframe right now. */
|
|
12
|
+
html: string;
|
|
13
|
+
/** True once a closing `</html>` has been seen (model finished). */
|
|
14
|
+
complete: boolean;
|
|
15
|
+
/** True when there is visible body content worth rendering. */
|
|
16
|
+
renderable: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function assembleStreamingHtml(partial: string): AssembledDocument;
|
|
19
|
+
/**
|
|
20
|
+
* Incremental, stateful counterpart to {@link assembleStreamingHtml}. Holds one
|
|
21
|
+
* {@link PredictiveHtmlParser} across the whole stream and feeds it only the
|
|
22
|
+
* newly-arrived tail on each {@link update}, so total parse cost is O(n) over
|
|
23
|
+
* the stream instead of O(n²) (one-shot re-parses everything every frame).
|
|
24
|
+
*
|
|
25
|
+
* Pass the full accumulated raw HTML received so far on every call — the
|
|
26
|
+
* projector slices off whatever it hasn't consumed yet, so skipped/throttled
|
|
27
|
+
* frames are fine: the next call simply catches up on the larger tail. The
|
|
28
|
+
* input is expected to be append-only; if a shorter, non-prefix string arrives
|
|
29
|
+
* (a reset/new artifact) the projector re-syncs from scratch.
|
|
30
|
+
*/
|
|
31
|
+
export declare class StreamingHtmlProjector {
|
|
32
|
+
private parser;
|
|
33
|
+
/** Offset in the raw stream where real content begins (-1 = undecided). */
|
|
34
|
+
private start;
|
|
35
|
+
/** Chars of the content region (raw.slice(start)) already pushed. */
|
|
36
|
+
private fed;
|
|
37
|
+
private lastRaw;
|
|
38
|
+
/** Feed the full accumulated raw HTML; returns the current projection. */
|
|
39
|
+
update(raw: string): AssembledDocument;
|
|
40
|
+
reset(): void;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=assembleDocument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assembleDocument.d.ts","sourceRoot":"","sources":["../../src/stream/assembleDocument.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,EAAE,OAAO,CAAC;IAClB,+DAA+D;IAC/D,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAmBxE;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAA8B;IAC5C,2EAA2E;IAC3E,OAAO,CAAC,KAAK,CAAM;IACnB,qEAAqE;IACrE,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAAM;IAErB,0EAA0E;IAC1E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;IAoCtC,KAAK,IAAI,IAAI;CAMd"}
|