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,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MARKDOWN_SYSTEM_PROMPT = void 0;
|
|
4
|
+
const systemPrompt_js_1 = require("./systemPrompt.js");
|
|
5
|
+
/** System prompt for plain markdown chat answers. */
|
|
6
|
+
exports.MARKDOWN_SYSTEM_PROMPT = `${systemPrompt_js_1.BASE_SYSTEM_PROMPT}
|
|
7
|
+
|
|
8
|
+
You are answering in MARKDOWN mode. Reply with a normal, well-structured markdown message:
|
|
9
|
+
- Use headings, lists, and tables where they help.
|
|
10
|
+
- Use fenced code blocks for code.
|
|
11
|
+
- Be direct and avoid filler.
|
|
12
|
+
- Do NOT emit any <assistant_message> or <html_artifact> tags in this mode — just write the markdown answer.`;
|
|
13
|
+
//# sourceMappingURL=markdownPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdownPrompt.js","sourceRoot":"","sources":["../../src/prompts/markdownPrompt.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AAEvD,qDAAqD;AACxC,QAAA,sBAAsB,GAAG,GAAG,oCAAkB;;;;;;6GAMkD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BASE_SYSTEM_PROMPT = void 0;
|
|
4
|
+
/** Shared preamble identifying the assistant and its two output modes. */
|
|
5
|
+
exports.BASE_SYSTEM_PROMPT = `You are a helpful assistant that answers either as markdown text or as a single self-contained static HTML/CSS artifact. You never mix the two: a response is entirely one mode. You write clearly, accurately, and concisely.`;
|
|
6
|
+
//# sourceMappingURL=systemPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemPrompt.js","sourceRoot":"","sources":["../../src/prompts/systemPrompt.ts"],"names":[],"mappings":";;;AAAA,0EAA0E;AAC7D,QAAA,kBAAkB,GAAG,gOAAgO,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Regex building blocks for the static-HTML sanitizer. These are deliberately
|
|
4
|
+
* conservative: the sanitizer's job is to guarantee that no JavaScript can run
|
|
5
|
+
* inside the artifact iframe, regardless of how creative the model gets.
|
|
6
|
+
*
|
|
7
|
+
* The sanitizer is regex-based on purpose: it must run identically on the
|
|
8
|
+
* server (Node) and the client (browser) with zero DOM dependency.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.FORM_TAGS = exports.SVG_BLOCK = exports.INLINE_STYLE_ATTR = exports.STYLE_BLOCK = exports.CSS_IMPORT = exports.EXTERNAL_LINK = exports.STYLESHEET_LINK = exports.CSS_EXPRESSION = exports.DANGEROUS_URL_ATTR = exports.EVENT_HANDLER_ATTR = exports.META_REFRESH = exports.EMBED_OPEN = exports.EMBED_BLOCK = exports.SCRIPT_OPEN = exports.SCRIPT_BLOCK = void 0;
|
|
12
|
+
/** `<script>...</script>`, including attributes and across newlines. */
|
|
13
|
+
exports.SCRIPT_BLOCK = /<script\b[^>]*>[\s\S]*?<\/script\s*>/gi;
|
|
14
|
+
/** A dangling/self-closed `<script ...>` with no closing tag. */
|
|
15
|
+
exports.SCRIPT_OPEN = /<script\b[^>]*\/?>/gi;
|
|
16
|
+
/** `<iframe>`, `<object>`, `<embed>`, `<base>`, `<frame>`, `<frameset>`. */
|
|
17
|
+
exports.EMBED_BLOCK = /<(iframe|object|embed|frame|frameset)\b[^>]*>[\s\S]*?<\/\1\s*>/gi;
|
|
18
|
+
exports.EMBED_OPEN = /<(iframe|object|embed|frame|frameset|base)\b[^>]*\/?>/gi;
|
|
19
|
+
/** `<meta http-equiv="refresh" ...>` — used for redirect/navigation tricks. */
|
|
20
|
+
exports.META_REFRESH = /<meta\b[^>]*http-equiv\s*=\s*["']?refresh["']?[^>]*>/gi;
|
|
21
|
+
/**
|
|
22
|
+
* Inline event-handler attributes (`onclick`, `onload`, `onerror`, ...).
|
|
23
|
+
* Matches quoted, single-quoted, and unquoted values.
|
|
24
|
+
*/
|
|
25
|
+
exports.EVENT_HANDLER_ATTR = /\s+on[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi;
|
|
26
|
+
/** `javascript:` / `vbscript:` / `data:text/html` protocol URLs in attributes. */
|
|
27
|
+
exports.DANGEROUS_URL_ATTR = /\s+(href|src|action|formaction|xlink:href|background|poster)\s*=\s*(?:"\s*(?:javascript|vbscript|data:text\/html)[^"]*"|'\s*(?:javascript|vbscript|data:text\/html)[^']*'|\s*(?:javascript|vbscript):[^\s>]*)/gi;
|
|
28
|
+
/** `style="...:expression(...)..."` — legacy IE script-in-CSS vector. */
|
|
29
|
+
exports.CSS_EXPRESSION = /expression\s*\(/gi;
|
|
30
|
+
/** External stylesheet links: `<link rel="stylesheet" ...>`. */
|
|
31
|
+
exports.STYLESHEET_LINK = /<link\b[^>]*rel\s*=\s*["']?stylesheet["']?[^>]*>/gi;
|
|
32
|
+
/** Any `<link>` pointing at an http(s) resource (fonts, preconnect, etc.). */
|
|
33
|
+
exports.EXTERNAL_LINK = /<link\b[^>]*>/gi;
|
|
34
|
+
/** `@import url(...)` inside CSS. */
|
|
35
|
+
exports.CSS_IMPORT = /@import\b[^;]+;?/gi;
|
|
36
|
+
/** `<style>...</style>` blocks. */
|
|
37
|
+
exports.STYLE_BLOCK = /<style\b[^>]*>[\s\S]*?<\/style\s*>/gi;
|
|
38
|
+
/** Inline `style="..."` attributes. */
|
|
39
|
+
exports.INLINE_STYLE_ATTR = /\s+style\s*=\s*(?:"[^"]*"|'[^']*')/gi;
|
|
40
|
+
/** `<svg>...</svg>` blocks. */
|
|
41
|
+
exports.SVG_BLOCK = /<svg\b[^>]*>[\s\S]*?<\/svg\s*>/gi;
|
|
42
|
+
/** Form-related tags (open + close), used when forms are disallowed. */
|
|
43
|
+
exports.FORM_TAGS = /<\/?(form|input|button|label|textarea|select|option|fieldset|legend|datalist|output)\b[^>]*>/gi;
|
|
44
|
+
//# sourceMappingURL=dangerousPatterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dangerousPatterns.js","sourceRoot":"","sources":["../../src/sanitizer/dangerousPatterns.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,wEAAwE;AAC3D,QAAA,YAAY,GAAG,wCAAwC,CAAC;AACrE,iEAAiE;AACpD,QAAA,WAAW,GAAG,sBAAsB,CAAC;AAElD,4EAA4E;AAC/D,QAAA,WAAW,GACtB,kEAAkE,CAAC;AACxD,QAAA,UAAU,GACrB,yDAAyD,CAAC;AAE5D,+EAA+E;AAClE,QAAA,YAAY,GAAG,wDAAwD,CAAC;AAErF;;;GAGG;AACU,QAAA,kBAAkB,GAC7B,iDAAiD,CAAC;AAEpD,kFAAkF;AACrE,QAAA,kBAAkB,GAC7B,iNAAiN,CAAC;AAEpN,yEAAyE;AAC5D,QAAA,cAAc,GAAG,mBAAmB,CAAC;AAElD,gEAAgE;AACnD,QAAA,eAAe,GAC1B,oDAAoD,CAAC;AACvD,8EAA8E;AACjE,QAAA,aAAa,GAAG,iBAAiB,CAAC;AAE/C,qCAAqC;AACxB,QAAA,UAAU,GAAG,oBAAoB,CAAC;AAE/C,mCAAmC;AACtB,QAAA,WAAW,GAAG,sCAAsC,CAAC;AAElE,uCAAuC;AAC1B,QAAA,iBAAiB,GAAG,sCAAsC,CAAC;AAExE,+BAA+B;AAClB,QAAA,SAAS,GAAG,kCAAkC,CAAC;AAE5D,wEAAwE;AAC3D,QAAA,SAAS,GACpB,gGAAgG,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.dangerousPatterns = void 0;
|
|
40
|
+
__exportStar(require("./sanitizeHtml.js"), exports);
|
|
41
|
+
__exportStar(require("./sanitizeConfig.js"), exports);
|
|
42
|
+
exports.dangerousPatterns = __importStar(require("./dangerousPatterns.js"));
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sanitizer/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,sDAAoC;AACpC,4EAA4D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveSanitizeOptions = resolveSanitizeOptions;
|
|
4
|
+
const defaults_js_1 = require("../constants/defaults.js");
|
|
5
|
+
const mergeConfig_js_1 = require("../utils/mergeConfig.js");
|
|
6
|
+
/** Resolve partial sanitize options against the static-safe defaults. */
|
|
7
|
+
function resolveSanitizeOptions(options) {
|
|
8
|
+
const merged = (0, mergeConfig_js_1.mergeConfig)(defaults_js_1.DEFAULT_SANITIZE_OPTIONS, options);
|
|
9
|
+
// Scripts are never allowed, no matter what a caller passes.
|
|
10
|
+
merged.allowScripts = false;
|
|
11
|
+
return merged;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=sanitizeConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizeConfig.js","sourceRoot":"","sources":["../../src/sanitizer/sanitizeConfig.ts"],"names":[],"mappings":";;AAKA,wDAOC;AAZD,0DAAoE;AACpE,4DAAsD;AAGtD,yEAAyE;AACzE,SAAgB,sBAAsB,CACpC,OAAyB;IAEzB,MAAM,MAAM,GAAG,IAAA,4BAAW,EAAC,sCAAwB,EAAE,OAAO,CAAC,CAAC;IAC9D,6DAA6D;IAC7D,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sanitizeHtml = sanitizeHtml;
|
|
4
|
+
exports.sanitize = sanitize;
|
|
5
|
+
exports.escapeHtml = escapeHtml;
|
|
6
|
+
const sanitizeConfig_js_1 = require("./sanitizeConfig.js");
|
|
7
|
+
const dangerousPatterns_js_1 = require("./dangerousPatterns.js");
|
|
8
|
+
// A <link> is kept under allowExternalFonts only if its href starts with a
|
|
9
|
+
// Google Fonts host (covers stylesheet links and preconnect hints).
|
|
10
|
+
const ALLOWED_FONT_LINK = /href\s*=\s*["']https:\/\/fonts\.(googleapis|gstatic)\.com/i;
|
|
11
|
+
// An @import is kept only if it targets the Google Fonts CSS host.
|
|
12
|
+
const ALLOWED_FONT_IMPORT = /@import\s+(?:url\()?\s*["']?https:\/\/fonts\.googleapis\.com/i;
|
|
13
|
+
/**
|
|
14
|
+
* Strip everything that could execute or load JavaScript from an HTML string,
|
|
15
|
+
* keeping static markup, CSS, SVG, and forms according to `options`.
|
|
16
|
+
*
|
|
17
|
+
* Fail-open: if anything throws, we return the input HTML-escaped inside a
|
|
18
|
+
* `<pre>` so the iframe shows inert text rather than crashing the render.
|
|
19
|
+
*/
|
|
20
|
+
function sanitizeHtml(input, options) {
|
|
21
|
+
const opts = (0, sanitizeConfig_js_1.resolveSanitizeOptions)(options);
|
|
22
|
+
try {
|
|
23
|
+
if (typeof input !== "string") {
|
|
24
|
+
return { html: "", modified: false, failedOpen: false };
|
|
25
|
+
}
|
|
26
|
+
let html = input;
|
|
27
|
+
const before = html;
|
|
28
|
+
// 1. Scripts — always removed.
|
|
29
|
+
html = html.replace(dangerousPatterns_js_1.SCRIPT_BLOCK, "").replace(dangerousPatterns_js_1.SCRIPT_OPEN, "");
|
|
30
|
+
// 2. Nested browsing contexts & navigation tricks — always removed.
|
|
31
|
+
html = html
|
|
32
|
+
.replace(dangerousPatterns_js_1.EMBED_BLOCK, "")
|
|
33
|
+
.replace(dangerousPatterns_js_1.EMBED_OPEN, "")
|
|
34
|
+
.replace(dangerousPatterns_js_1.META_REFRESH, "");
|
|
35
|
+
// 3. Inline event handlers — always removed.
|
|
36
|
+
html = html.replace(dangerousPatterns_js_1.EVENT_HANDLER_ATTR, "");
|
|
37
|
+
// 4. javascript:/vbscript:/data:text/html URLs — always removed.
|
|
38
|
+
html = html.replace(dangerousPatterns_js_1.DANGEROUS_URL_ATTR, "");
|
|
39
|
+
// 5. CSS expression() — always removed.
|
|
40
|
+
html = html.replace(dangerousPatterns_js_1.CSS_EXPRESSION, "void(");
|
|
41
|
+
// 6. External CSS / fonts.
|
|
42
|
+
if (opts.allowExternalFonts) {
|
|
43
|
+
// Keep ONLY links/imports pointing at the Google Fonts hosts; strip the
|
|
44
|
+
// rest. This permits distinctive typography without opening a hole for
|
|
45
|
+
// arbitrary external stylesheets.
|
|
46
|
+
html = html
|
|
47
|
+
.replace(dangerousPatterns_js_1.EXTERNAL_LINK, (tag) => ALLOWED_FONT_LINK.test(tag) ? tag : "")
|
|
48
|
+
.replace(dangerousPatterns_js_1.CSS_IMPORT, (imp) => ALLOWED_FONT_IMPORT.test(imp) ? imp : "");
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
html = html.replace(dangerousPatterns_js_1.STYLESHEET_LINK, "").replace(dangerousPatterns_js_1.CSS_IMPORT, "");
|
|
52
|
+
// Remove any remaining <link> (preconnect/font links) too.
|
|
53
|
+
html = html.replace(dangerousPatterns_js_1.EXTERNAL_LINK, "");
|
|
54
|
+
}
|
|
55
|
+
// 7. Optional element classes.
|
|
56
|
+
if (!opts.allowStyleTags)
|
|
57
|
+
html = html.replace(dangerousPatterns_js_1.STYLE_BLOCK, "");
|
|
58
|
+
if (!opts.allowInlineStyles)
|
|
59
|
+
html = html.replace(dangerousPatterns_js_1.INLINE_STYLE_ATTR, "");
|
|
60
|
+
if (!opts.allowSvg)
|
|
61
|
+
html = html.replace(dangerousPatterns_js_1.SVG_BLOCK, "");
|
|
62
|
+
if (!opts.allowForms)
|
|
63
|
+
html = html.replace(dangerousPatterns_js_1.FORM_TAGS, "");
|
|
64
|
+
return { html, modified: html !== before, failedOpen: false };
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return {
|
|
68
|
+
html: `<pre>${escapeHtml(String(input))}</pre>`,
|
|
69
|
+
modified: true,
|
|
70
|
+
failedOpen: true,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Convenience wrapper returning only the sanitized string. */
|
|
75
|
+
function sanitize(input, options) {
|
|
76
|
+
return sanitizeHtml(input, options).html;
|
|
77
|
+
}
|
|
78
|
+
function escapeHtml(input) {
|
|
79
|
+
return input
|
|
80
|
+
.replace(/&/g, "&")
|
|
81
|
+
.replace(/</g, "<")
|
|
82
|
+
.replace(/>/g, ">")
|
|
83
|
+
.replace(/"/g, """)
|
|
84
|
+
.replace(/'/g, "'");
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=sanitizeHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizeHtml.js","sourceRoot":"","sources":["../../src/sanitizer/sanitizeHtml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveServerConfig = resolveServerConfig;
|
|
4
|
+
exports.latestUserText = latestUserText;
|
|
5
|
+
const defaults_js_1 = require("../constants/defaults.js");
|
|
6
|
+
const markdownPrompt_js_1 = require("../prompts/markdownPrompt.js");
|
|
7
|
+
const htmlArtifactPrompt_js_1 = require("../prompts/htmlArtifactPrompt.js");
|
|
8
|
+
/** Fill in defaults and precompute the prompts for a request. */
|
|
9
|
+
function resolveServerConfig(options) {
|
|
10
|
+
const allowForms = options.allowForms ?? true;
|
|
11
|
+
const allowInlineStyles = options.allowInlineStyles ?? true;
|
|
12
|
+
const allowStyleTags = options.allowStyleTags ?? true;
|
|
13
|
+
const allowSvg = options.allowSvg ?? true;
|
|
14
|
+
const allowExternalFonts = options.allowExternalFonts ?? false;
|
|
15
|
+
const htmlSystemPrompt = options.htmlSystemPrompt ??
|
|
16
|
+
(0, htmlArtifactPrompt_js_1.buildHtmlArtifactPrompt)({
|
|
17
|
+
styleProfile: options.styleProfile,
|
|
18
|
+
allowExternalFonts,
|
|
19
|
+
allowForms,
|
|
20
|
+
theme: options.theme,
|
|
21
|
+
presentation: options.presentation,
|
|
22
|
+
});
|
|
23
|
+
return {
|
|
24
|
+
messages: options.messages,
|
|
25
|
+
generateTextStream: options.generateTextStream,
|
|
26
|
+
mode: options.mode ?? "auto",
|
|
27
|
+
generateText: options.generateText,
|
|
28
|
+
classify: options.classify,
|
|
29
|
+
system: options.system,
|
|
30
|
+
markdownSystemPrompt: options.markdownSystemPrompt ?? markdownPrompt_js_1.MARKDOWN_SYSTEM_PROMPT,
|
|
31
|
+
htmlSystemPrompt,
|
|
32
|
+
htmlSystemPromptOverride: options.htmlSystemPrompt,
|
|
33
|
+
styleProfile: options.styleProfile,
|
|
34
|
+
theme: options.theme,
|
|
35
|
+
presentation: options.presentation,
|
|
36
|
+
sanitize: {
|
|
37
|
+
allowForms,
|
|
38
|
+
allowScripts: false,
|
|
39
|
+
allowInlineStyles,
|
|
40
|
+
allowStyleTags,
|
|
41
|
+
allowSvg,
|
|
42
|
+
allowExternalFonts,
|
|
43
|
+
},
|
|
44
|
+
temperature: options.temperature,
|
|
45
|
+
snapshotIntervalMs: options.snapshotIntervalMs ?? defaults_js_1.DEFAULT_SNAPSHOT_INTERVAL_MS,
|
|
46
|
+
abortSignal: options.abortSignal,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Extract the latest user message text for classification. */
|
|
50
|
+
function latestUserText(messages) {
|
|
51
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
52
|
+
const message = messages[i];
|
|
53
|
+
if (!message || message.role !== "user")
|
|
54
|
+
continue;
|
|
55
|
+
return messageToText(message.content);
|
|
56
|
+
}
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
function messageToText(content) {
|
|
60
|
+
if (typeof content === "string")
|
|
61
|
+
return content;
|
|
62
|
+
if (Array.isArray(content)) {
|
|
63
|
+
return content
|
|
64
|
+
.map((part) => typeof part === "object" && part && "text" in part
|
|
65
|
+
? String(part.text ?? "")
|
|
66
|
+
: "")
|
|
67
|
+
.join(" ")
|
|
68
|
+
.trim();
|
|
69
|
+
}
|
|
70
|
+
return "";
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":";;AAUA,kDA6CC;AAGD,wCAOC;AAjED,0DAAwE;AACxE,oEAAsE;AACtE,4EAA2E;AAO3E,iEAAiE;AACjE,SAAgB,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,IAAA,+CAAuB,EAAC;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,0CAAsB;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,0CAA4B;QAC5D,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,SAAgB,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,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createArtifactStreamResponse = createArtifactStreamResponse;
|
|
4
|
+
const classifyMode_js_1 = require("../classifier/classifyMode.js");
|
|
5
|
+
const rules_js_1 = require("../classifier/rules.js");
|
|
6
|
+
const circuitBreaker_js_1 = require("../circuit-breaker/circuitBreaker.js");
|
|
7
|
+
const events_js_1 = require("../stream/events.js");
|
|
8
|
+
const config_js_1 = require("./config.js");
|
|
9
|
+
const createSseResponse_js_1 = require("./createSseResponse.js");
|
|
10
|
+
const createHtmlArtifactStream_js_1 = require("./createHtmlArtifactStream.js");
|
|
11
|
+
const createMarkdownStream_js_1 = require("./createMarkdownStream.js");
|
|
12
|
+
const htmlArtifactPrompt_js_1 = require("../prompts/htmlArtifactPrompt.js");
|
|
13
|
+
// Shared breaker (process-memory). Falls back to markdown when HTML generation
|
|
14
|
+
// keeps failing, so a broken model/prompt doesn't repeatedly burn tokens.
|
|
15
|
+
const htmlBreaker = new circuitBreaker_js_1.CircuitBreaker({ key: "html_artifact" });
|
|
16
|
+
/**
|
|
17
|
+
* The package's primary server entry point. Classifies the request (unless a
|
|
18
|
+
* mode is forced), emits a `mode` event, then streams the appropriate response
|
|
19
|
+
* as Server-Sent Events. Returns a `Response` ready to return from a Next.js
|
|
20
|
+
* route handler (or any Web-standard handler).
|
|
21
|
+
*/
|
|
22
|
+
function createArtifactStreamResponse(options) {
|
|
23
|
+
const config = (0, config_js_1.resolveServerConfig)(options);
|
|
24
|
+
const producer = async (emit) => {
|
|
25
|
+
const mode = await resolveMode(config.mode, config);
|
|
26
|
+
emit(events_js_1.event.mode(mode));
|
|
27
|
+
if (mode === "markdown") {
|
|
28
|
+
await (0, createMarkdownStream_js_1.streamMarkdown)(config, emit);
|
|
29
|
+
emit(events_js_1.event.done());
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
await (0, createHtmlArtifactStream_js_1.streamHtmlArtifact)(resolveHtmlConfigForMode(config, mode), emit);
|
|
34
|
+
htmlBreaker.recordSuccess();
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
htmlBreaker.recordFailure();
|
|
38
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
39
|
+
// Recoverable: the client keeps the last valid snapshot it received.
|
|
40
|
+
emit(events_js_1.event.error(`Artifact generation failed: ${message}`, true));
|
|
41
|
+
}
|
|
42
|
+
emit(events_js_1.event.done());
|
|
43
|
+
};
|
|
44
|
+
return (0, createSseResponse_js_1.createSseResponse)(producer);
|
|
45
|
+
}
|
|
46
|
+
async function resolveMode(requested, config) {
|
|
47
|
+
if (requested === "markdown")
|
|
48
|
+
return "markdown";
|
|
49
|
+
if (requested === "artifact" || requested === "html_artifact") {
|
|
50
|
+
// Honor an explicit request, but still respect an open circuit.
|
|
51
|
+
return htmlBreaker.allowRequest() ? "artifact" : "markdown";
|
|
52
|
+
}
|
|
53
|
+
if (requested === "generative_ui") {
|
|
54
|
+
return htmlBreaker.allowRequest() ? "generative_ui" : "markdown";
|
|
55
|
+
}
|
|
56
|
+
// auto
|
|
57
|
+
const query = (0, config_js_1.latestUserText)(config.messages);
|
|
58
|
+
const classification = config.classify
|
|
59
|
+
? await config.classify({
|
|
60
|
+
query,
|
|
61
|
+
messages: config.messages,
|
|
62
|
+
abortSignal: config.abortSignal,
|
|
63
|
+
})
|
|
64
|
+
: await (0, classifyMode_js_1.classifyMode)({
|
|
65
|
+
generateText: config.generateText,
|
|
66
|
+
query,
|
|
67
|
+
abortSignal: config.abortSignal,
|
|
68
|
+
});
|
|
69
|
+
let mode = normalizeMode(typeof classification === "string" ? classification : classification.mode);
|
|
70
|
+
// Deterministic override: if the request explicitly signals an inline /
|
|
71
|
+
// camouflage / generative-UI intent, prefer that over a model "artifact" pick
|
|
72
|
+
// (the model often labels a UI showcase as a standalone document). This is
|
|
73
|
+
// what keeps "generative UI", "camouflage", "showcase", etc. transparent.
|
|
74
|
+
if (mode === "artifact" && (0, rules_js_1.classifyByRules)(query).mode === "generative_ui") {
|
|
75
|
+
mode = "generative_ui";
|
|
76
|
+
}
|
|
77
|
+
if ((mode === "artifact" || mode === "generative_ui") && !htmlBreaker.allowRequest()) {
|
|
78
|
+
return "markdown";
|
|
79
|
+
}
|
|
80
|
+
return mode;
|
|
81
|
+
}
|
|
82
|
+
function normalizeMode(mode) {
|
|
83
|
+
return mode === "html_artifact" ? "artifact" : mode;
|
|
84
|
+
}
|
|
85
|
+
function resolveHtmlConfigForMode(config, mode) {
|
|
86
|
+
const presentation = mode === "generative_ui" ? "seamless" : "card";
|
|
87
|
+
const seamless = presentation === "seamless";
|
|
88
|
+
if (config.htmlSystemPromptOverride) {
|
|
89
|
+
return { ...config, presentation };
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
...config,
|
|
93
|
+
htmlSystemPrompt: (0, htmlArtifactPrompt_js_1.buildHtmlArtifactPrompt)({
|
|
94
|
+
// Camouflage must match the host (theme + style profile). A standalone
|
|
95
|
+
// artifact is its OWN world: give it full creative freedom — no host
|
|
96
|
+
// theme and no imposed style profile, so it picks the best design
|
|
97
|
+
// (any palette, light/dark/vivid) per the request.
|
|
98
|
+
styleProfile: seamless ? config.styleProfile : undefined,
|
|
99
|
+
allowExternalFonts: config.sanitize.allowExternalFonts,
|
|
100
|
+
allowForms: config.sanitize.allowForms,
|
|
101
|
+
theme: seamless ? config.theme : undefined,
|
|
102
|
+
presentation,
|
|
103
|
+
}),
|
|
104
|
+
presentation,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# 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,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.streamHtmlArtifact = streamHtmlArtifact;
|
|
4
|
+
exports.streamHtmlArtifactFromTextStream = streamHtmlArtifactFromTextStream;
|
|
5
|
+
const lifecycle_js_1 = require("../core/lifecycle.js");
|
|
6
|
+
const artifactEnvelope_js_1 = require("../artifacts/artifactEnvelope.js");
|
|
7
|
+
const artifactEnvelope_js_2 = require("../artifacts/artifactEnvelope.js");
|
|
8
|
+
const buffering_js_1 = require("../stream/buffering.js");
|
|
9
|
+
const sanitizeHtml_js_1 = require("../sanitizer/sanitizeHtml.js");
|
|
10
|
+
function composeSystem(...parts) {
|
|
11
|
+
return parts.filter(Boolean).join("\n\n");
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate an HTML artifact. Streams a short assistant message, then the
|
|
15
|
+
* artifact: `artifact_start`, buffered `artifact_delta`s, periodic sanitized
|
|
16
|
+
* `artifact_snapshot`s, and finally a sanitized `artifact_done` derived from an
|
|
17
|
+
* authoritative full-text parse.
|
|
18
|
+
*/
|
|
19
|
+
async function streamHtmlArtifact(config, emit) {
|
|
20
|
+
const textStream = await config.generateTextStream({
|
|
21
|
+
system: composeSystem(config.system, config.htmlSystemPrompt),
|
|
22
|
+
messages: config.messages,
|
|
23
|
+
temperature: config.temperature,
|
|
24
|
+
abortSignal: config.abortSignal,
|
|
25
|
+
});
|
|
26
|
+
return streamHtmlArtifactFromTextStream({
|
|
27
|
+
textStream,
|
|
28
|
+
sanitize: config.sanitize,
|
|
29
|
+
snapshotIntervalMs: config.snapshotIntervalMs,
|
|
30
|
+
}, emit);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Provider-agnostic artifact streamer. Use this when a framework such as
|
|
34
|
+
* LangChain gives you an `AsyncIterable<string>`. The caller is responsible
|
|
35
|
+
* for prompting the model with
|
|
36
|
+
* `HTML_ARTIFACT_SYSTEM_PROMPT` (or equivalent) before passing chunks here.
|
|
37
|
+
*/
|
|
38
|
+
async function streamHtmlArtifactFromTextStream(options, emit) {
|
|
39
|
+
const message = new lifecycle_js_1.MessageLifecycle(emit);
|
|
40
|
+
const artifact = new lifecycle_js_1.ArtifactLifecycle(emit);
|
|
41
|
+
const parser = new artifactEnvelope_js_1.StreamingEnvelopeParser();
|
|
42
|
+
const buffer = new buffering_js_1.ArtifactBuffer();
|
|
43
|
+
const snapshotIntervalMs = options.snapshotIntervalMs ?? 0;
|
|
44
|
+
message.start();
|
|
45
|
+
let rawText = "";
|
|
46
|
+
let artifactStarted = false;
|
|
47
|
+
let lastSnapshotAt = 0;
|
|
48
|
+
const maybeSnapshot = (force = false) => {
|
|
49
|
+
const now = Date.now();
|
|
50
|
+
if (!force && now - lastSnapshotAt < snapshotIntervalMs)
|
|
51
|
+
return;
|
|
52
|
+
const candidate = buffer.commit();
|
|
53
|
+
if (!candidate)
|
|
54
|
+
return;
|
|
55
|
+
lastSnapshotAt = now;
|
|
56
|
+
const { html } = (0, sanitizeHtml_js_1.sanitizeHtml)(candidate, options.sanitize);
|
|
57
|
+
artifact.snapshot(html);
|
|
58
|
+
};
|
|
59
|
+
for await (const chunk of options.textStream) {
|
|
60
|
+
rawText += chunk;
|
|
61
|
+
for (const ev of parser.feed(chunk)) {
|
|
62
|
+
if (ev.kind === "message") {
|
|
63
|
+
message.delta(ev.delta);
|
|
64
|
+
}
|
|
65
|
+
else if (ev.kind === "artifact_open") {
|
|
66
|
+
// The short message ends as soon as the artifact begins.
|
|
67
|
+
message.done();
|
|
68
|
+
artifact.start(ev.title);
|
|
69
|
+
artifactStarted = true;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
buffer.append(ev.delta);
|
|
73
|
+
artifact.delta(ev.delta);
|
|
74
|
+
maybeSnapshot();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Drain any buffered tail.
|
|
79
|
+
for (const ev of parser.flush()) {
|
|
80
|
+
if (ev.kind === "message")
|
|
81
|
+
message.delta(ev.delta);
|
|
82
|
+
else if (ev.kind === "artifact_open") {
|
|
83
|
+
message.done();
|
|
84
|
+
artifact.start(ev.title);
|
|
85
|
+
artifactStarted = true;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
buffer.append(ev.delta);
|
|
89
|
+
artifact.delta(ev.delta);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Authoritative final parse over the entire model output.
|
|
93
|
+
const parsed = (0, artifactEnvelope_js_2.parseArtifactEnvelope)(rawText);
|
|
94
|
+
const finalSource = parsed.hasArtifact ? parsed.html : buffer.raw;
|
|
95
|
+
if (!artifactStarted && !finalSource.trim()) {
|
|
96
|
+
message.done(parsed.assistantMessage || rawText.trim() || "I couldn't generate an artifact for that request.");
|
|
97
|
+
return {
|
|
98
|
+
messageId: message.id,
|
|
99
|
+
artifactId: null,
|
|
100
|
+
finalHtml: "",
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (!artifactStarted) {
|
|
104
|
+
// The streaming split never opened an artifact; recover from the final parse.
|
|
105
|
+
message.done(parsed.assistantMessage || undefined);
|
|
106
|
+
artifact.start(parsed.title);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
message.done();
|
|
110
|
+
}
|
|
111
|
+
const { html: finalHtml } = (0, sanitizeHtml_js_1.sanitizeHtml)(finalSource, options.sanitize);
|
|
112
|
+
artifact.done(finalHtml);
|
|
113
|
+
return {
|
|
114
|
+
messageId: message.id,
|
|
115
|
+
artifactId: artifact.id,
|
|
116
|
+
finalHtml,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# 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,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.streamMarkdown = streamMarkdown;
|
|
4
|
+
exports.streamMarkdownFromTextStream = streamMarkdownFromTextStream;
|
|
5
|
+
const lifecycle_js_1 = require("../core/lifecycle.js");
|
|
6
|
+
function composeSystem(...parts) {
|
|
7
|
+
return parts.filter(Boolean).join("\n\n");
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Stream a plain markdown answer, emitting `message_start` / `message_delta` /
|
|
11
|
+
* `message_done`. Returns the full assistant text.
|
|
12
|
+
*/
|
|
13
|
+
async function streamMarkdown(config, emit, messageId) {
|
|
14
|
+
const textStream = await config.generateTextStream({
|
|
15
|
+
system: composeSystem(config.system, config.markdownSystemPrompt),
|
|
16
|
+
messages: config.messages,
|
|
17
|
+
temperature: config.temperature,
|
|
18
|
+
abortSignal: config.abortSignal,
|
|
19
|
+
});
|
|
20
|
+
return streamMarkdownFromTextStream({ textStream }, emit, messageId);
|
|
21
|
+
}
|
|
22
|
+
/** Provider-agnostic markdown streamer for any source of text chunks. */
|
|
23
|
+
async function streamMarkdownFromTextStream(options, emit, messageId) {
|
|
24
|
+
const message = new lifecycle_js_1.MessageLifecycle(emit, messageId);
|
|
25
|
+
message.start();
|
|
26
|
+
for await (const delta of options.textStream) {
|
|
27
|
+
message.delta(delta);
|
|
28
|
+
}
|
|
29
|
+
return message.done();
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=createMarkdownStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMarkdownStream.js","sourceRoot":"","sources":["../../src/server/createMarkdownStream.ts"],"names":[],"mappings":";;AAWA,wCAaC;AAOD,oEAaC;AA5CD,uDAAmE;AAGnE,SAAS,aAAa,CAAC,GAAG,KAA6B;IACrD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACI,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;AAClE,KAAK,UAAU,4BAA4B,CAChD,OAAkC,EAClC,IAAU,EACV,SAAkB;IAElB,MAAM,OAAO,GAAG,IAAI,+BAAgB,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,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSseResponse = createSseResponse;
|
|
4
|
+
const createArtifactStream_js_1 = require("../core/createArtifactStream.js");
|
|
5
|
+
const createArtifactResponse_js_1 = require("../core/createArtifactResponse.js");
|
|
6
|
+
/**
|
|
7
|
+
* Compose a producer into a ready-to-return SSE `Response`. This is the bridge
|
|
8
|
+
* between the framework-agnostic core stream and a route handler's return.
|
|
9
|
+
*/
|
|
10
|
+
function createSseResponse(producer, init) {
|
|
11
|
+
const stream = (0, createArtifactStream_js_1.createArtifactStream)(producer);
|
|
12
|
+
return (0, createArtifactResponse_js_1.createArtifactResponse)(stream, init);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=createSseResponse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSseResponse.js","sourceRoot":"","sources":["../../src/server/createSseResponse.ts"],"names":[],"mappings":";;AAQA,8CAMC;AAdD,6EAAuE;AACvE,iFAA2E;AAG3E;;;GAGG;AACH,SAAgB,iBAAiB,CAC/B,QAAgC,EAChC,IAAmB;IAEnB,MAAM,MAAM,GAAG,IAAA,8CAAoB,EAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,IAAA,kDAAsB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC"}
|