glirastes 0.3.0 → 0.3.1
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 +63 -0
- package/README.md +146 -9
- package/codegen/package.json +5 -0
- package/dist/cjs/codegen/asset-sync.d.ts +20 -0
- package/dist/cjs/codegen/asset-sync.js +28 -0
- package/dist/cjs/codegen/coverage.d.ts +66 -0
- package/dist/cjs/codegen/coverage.js +408 -0
- package/dist/cjs/codegen/endpoint-scanner.d.ts +16 -0
- package/dist/cjs/codegen/endpoint-scanner.js +197 -0
- package/dist/cjs/codegen/format.d.ts +17 -0
- package/dist/cjs/codegen/format.js +34 -0
- package/dist/cjs/codegen/fs-utils.d.ts +45 -0
- package/dist/cjs/codegen/fs-utils.js +165 -0
- package/dist/cjs/codegen/index.d.ts +13 -0
- package/dist/cjs/codegen/index.js +33 -0
- package/dist/cjs/codegen/mcp-generator.d.ts +50 -0
- package/dist/cjs/codegen/mcp-generator.js +803 -0
- package/dist/cjs/codegen/module-generator.d.ts +11 -0
- package/dist/cjs/codegen/module-generator.js +353 -0
- package/dist/cjs/codegen/nestjs-scanner.d.ts +43 -0
- package/dist/cjs/codegen/nestjs-scanner.js +241 -0
- package/dist/cjs/codegen/output-recommender.d.ts +23 -0
- package/dist/cjs/codegen/output-recommender.js +33 -0
- package/dist/cjs/codegen/scaffolder.d.ts +36 -0
- package/dist/cjs/codegen/scaffolder.js +262 -0
- package/dist/cjs/codegen/skill-generator.d.ts +49 -0
- package/dist/cjs/codegen/skill-generator.js +967 -0
- package/dist/cjs/codegen/types.d.ts +52 -0
- package/dist/cjs/codegen/types.js +16 -0
- package/dist/cjs/codegen/ui-scanner.d.ts +24 -0
- package/dist/cjs/codegen/ui-scanner.js +202 -0
- package/dist/cjs/codegen/validator.d.ts +35 -0
- package/dist/cjs/codegen/validator.js +292 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +23 -0
- package/dist/cjs/openapi/index.d.ts +78 -0
- package/dist/cjs/openapi/index.js +347 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/react/audio-worklet-processor.d.ts +16 -0
- package/dist/cjs/react/audio-worklet-processor.js +27 -0
- package/dist/cjs/react/bridges/rest-session-bridge.d.ts +113 -0
- package/dist/cjs/react/bridges/rest-session-bridge.js +209 -0
- package/dist/cjs/react/components/ai-chat-panel.d.ts +12 -0
- package/dist/cjs/react/components/ai-chat-panel.js +67 -0
- package/dist/cjs/react/components/ai-trigger-button.d.ts +2 -0
- package/dist/cjs/react/components/ai-trigger-button.js +239 -0
- package/dist/cjs/react/components/approval-card.d.ts +9 -0
- package/dist/cjs/react/components/approval-card.js +24 -0
- package/dist/cjs/react/components/bulk-approval-card.d.ts +9 -0
- package/dist/cjs/react/components/bulk-approval-card.js +36 -0
- package/dist/cjs/react/components/chat-input.d.ts +10 -0
- package/dist/cjs/react/components/chat-input.js +60 -0
- package/dist/cjs/react/components/chat-window.d.ts +2 -0
- package/dist/cjs/react/components/chat-window.js +134 -0
- package/dist/cjs/react/components/confirm-dialog.d.ts +32 -0
- package/dist/cjs/react/components/confirm-dialog.js +48 -0
- package/dist/cjs/react/components/floating-chat-ui.d.ts +90 -0
- package/dist/cjs/react/components/floating-chat-ui.js +163 -0
- package/dist/cjs/react/components/mention-chip.d.ts +16 -0
- package/dist/cjs/react/components/mention-chip.js +42 -0
- package/dist/cjs/react/components/mention-input.d.ts +8 -0
- package/dist/cjs/react/components/mention-input.js +117 -0
- package/dist/cjs/react/components/message-bubble.d.ts +11 -0
- package/dist/cjs/react/components/message-bubble.js +171 -0
- package/dist/cjs/react/components/message-list.d.ts +8 -0
- package/dist/cjs/react/components/message-list.js +52 -0
- package/dist/cjs/react/components/pipeline-timeline.d.ts +7 -0
- package/dist/cjs/react/components/pipeline-timeline.js +72 -0
- package/dist/cjs/react/components/recording-bar.d.ts +2 -0
- package/dist/cjs/react/components/recording-bar.js +81 -0
- package/dist/cjs/react/components/recording-controls.d.ts +18 -0
- package/dist/cjs/react/components/recording-controls.js +38 -0
- package/dist/cjs/react/components/rich-mention-input.d.ts +2 -0
- package/dist/cjs/react/components/rich-mention-input.js +571 -0
- package/dist/cjs/react/components/session-switcher.d.ts +14 -0
- package/dist/cjs/react/components/session-switcher.js +133 -0
- package/dist/cjs/react/components/suggestion-bar.d.ts +9 -0
- package/dist/cjs/react/components/suggestion-bar.js +47 -0
- package/dist/cjs/react/components/suggestion-chip.d.ts +9 -0
- package/dist/cjs/react/components/suggestion-chip.js +14 -0
- package/dist/cjs/react/components/voice-input-addon.d.ts +13 -0
- package/dist/cjs/react/components/voice-input-addon.js +31 -0
- package/dist/cjs/react/components/voice-input-button.d.ts +2 -0
- package/dist/cjs/react/components/voice-input-button.js +55 -0
- package/dist/cjs/react/components/wavesurfer-loader.d.ts +5 -0
- package/dist/cjs/react/components/wavesurfer-loader.js +36 -0
- package/dist/cjs/react/hooks/use-ai-chat.d.ts +22 -0
- package/dist/cjs/react/hooks/use-ai-chat.js +51 -0
- package/dist/cjs/react/hooks/use-approvals.d.ts +23 -0
- package/dist/cjs/react/hooks/use-approvals.js +63 -0
- package/dist/cjs/react/hooks/use-deepgram-transcription.d.ts +2 -0
- package/dist/cjs/react/hooks/use-deepgram-transcription.js +329 -0
- package/dist/cjs/react/hooks/use-drag-resize-panel.d.ts +48 -0
- package/dist/cjs/react/hooks/use-drag-resize-panel.js +308 -0
- package/dist/cjs/react/hooks/use-draggable-position.d.ts +25 -0
- package/dist/cjs/react/hooks/use-draggable-position.js +134 -0
- package/dist/cjs/react/hooks/use-keyboard-shortcut.d.ts +20 -0
- package/dist/cjs/react/hooks/use-keyboard-shortcut.js +93 -0
- package/dist/cjs/react/hooks/use-mentions.d.ts +23 -0
- package/dist/cjs/react/hooks/use-mentions.js +42 -0
- package/dist/cjs/react/hooks/use-suggestions.d.ts +22 -0
- package/dist/cjs/react/hooks/use-suggestions.js +39 -0
- package/dist/cjs/react/index.d.ts +43 -0
- package/dist/cjs/react/index.js +111 -0
- package/dist/cjs/react/provider/ai-chat-provider.d.ts +45 -0
- package/dist/cjs/react/provider/ai-chat-provider.js +1024 -0
- package/dist/cjs/react/provider/chat-context.d.ts +84 -0
- package/dist/cjs/react/provider/chat-context.js +13 -0
- package/dist/cjs/react/template.d.ts +84 -0
- package/dist/cjs/react/template.js +90 -0
- package/dist/cjs/react/themes.d.ts +24 -0
- package/dist/cjs/react/themes.js +273 -0
- package/dist/cjs/react/transports/langgraph/index.d.ts +2 -0
- package/dist/cjs/react/transports/langgraph/index.js +8 -0
- package/dist/cjs/react/transports/langgraph/langgraph-ai-chat.d.ts +62 -0
- package/dist/cjs/react/transports/langgraph/langgraph-ai-chat.js +94 -0
- package/dist/cjs/react/transports/langgraph.d.ts +71 -0
- package/dist/cjs/react/transports/langgraph.js +369 -0
- package/dist/cjs/react/transports/vercel/index.d.ts +2 -0
- package/dist/cjs/react/transports/vercel/index.js +8 -0
- package/dist/cjs/react/transports/vercel/vercel-ai-chat.d.ts +49 -0
- package/dist/cjs/react/transports/vercel/vercel-ai-chat.js +81 -0
- package/dist/cjs/react/transports/vercel.d.ts +30 -0
- package/dist/cjs/react/transports/vercel.js +69 -0
- package/dist/cjs/react/types.d.ts +760 -0
- package/dist/cjs/react/types.js +2 -0
- package/dist/cjs/react/ui.d.ts +73 -0
- package/dist/cjs/react/ui.js +183 -0
- package/dist/cjs/react/utils/create-approval-description.d.ts +53 -0
- package/dist/cjs/react/utils/create-approval-description.js +122 -0
- package/dist/cjs/react/utils/create-tool-result-handler.d.ts +90 -0
- package/dist/cjs/react/utils/create-tool-result-handler.js +168 -0
- package/dist/cjs/react/utils/mention-markup.d.ts +13 -0
- package/dist/cjs/react/utils/mention-markup.js +117 -0
- package/dist/cjs/react/utils/merge-pipeline-steps.d.ts +19 -0
- package/dist/cjs/react/utils/merge-pipeline-steps.js +81 -0
- package/dist/cjs/react/utils/sanitize-stored-messages.d.ts +23 -0
- package/dist/cjs/react/utils/sanitize-stored-messages.js +52 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat-auth.guard.d.ts +10 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat-auth.guard.js +42 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat-module-options.interface.d.ts +32 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat-module-options.interface.js +4 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.controller.d.ts +11 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.controller.js +80 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.module.d.ts +9 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.module.js +119 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.service.d.ts +13 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.service.js +131 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/ai-chat-request.dto.d.ts +7 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/ai-chat-request.dto.js +52 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message-part.dto.d.ts +19 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message-part.dto.js +108 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message.dto.d.ts +8 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message.dto.js +59 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/index.d.ts +3 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/index.js +9 -0
- package/dist/cjs/server/adapters/nestjs/chat/index.d.ts +3 -0
- package/dist/cjs/server/adapters/nestjs/chat/index.js +9 -0
- package/dist/cjs/server/adapters/nestjs/chat/speech-stream.gateway.d.ts +4 -0
- package/dist/cjs/server/adapters/nestjs/chat/speech-stream.gateway.js +73 -0
- package/dist/cjs/server/adapters/nestjs/chat/ws-loader.d.ts +5 -0
- package/dist/cjs/server/adapters/nestjs/chat/ws-loader.js +72 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-module.decorator.d.ts +6 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-module.decorator.js +13 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-param.decorator.d.ts +5 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-param.decorator.js +15 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-tool.decorator.d.ts +6 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-tool.decorator.js +22 -0
- package/dist/cjs/server/adapters/nestjs/decorators/constants.d.ts +4 -0
- package/dist/cjs/server/adapters/nestjs/decorators/constants.js +7 -0
- package/dist/cjs/server/adapters/nestjs/index.d.ts +14 -0
- package/dist/cjs/server/adapters/nestjs/index.js +42 -0
- package/dist/cjs/server/adapters/nestjs/metadata.d.ts +39 -0
- package/dist/cjs/server/adapters/nestjs/metadata.js +36 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools-explorer.service.d.ts +36 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools-explorer.service.js +159 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools.module.d.ts +37 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools.module.js +44 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools.service.d.ts +28 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools.service.js +41 -0
- package/dist/cjs/server/adapters/nestjs/scanner/nestjs-scanner.d.ts +16 -0
- package/dist/cjs/server/adapters/nestjs/scanner/nestjs-scanner.js +117 -0
- package/dist/cjs/server/adapters/nestjs/scanner/schema-builder.d.ts +26 -0
- package/dist/cjs/server/adapters/nestjs/scanner/schema-builder.js +259 -0
- package/dist/cjs/server/adapters/nestjs/swagger.d.ts +7 -0
- package/dist/cjs/server/adapters/nestjs/swagger.js +39 -0
- package/dist/cjs/server/adapters/nextjs/context-helpers.d.ts +22 -0
- package/dist/cjs/server/adapters/nextjs/context-helpers.js +60 -0
- package/dist/cjs/server/adapters/nextjs/create-ai-chat-handler.d.ts +94 -0
- package/dist/cjs/server/adapters/nextjs/create-ai-chat-handler.js +965 -0
- package/dist/cjs/server/adapters/nextjs/filter-fallback-error.d.ts +11 -0
- package/dist/cjs/server/adapters/nextjs/filter-fallback-error.js +41 -0
- package/dist/cjs/server/adapters/nextjs/index.d.ts +8 -0
- package/dist/cjs/server/adapters/nextjs/index.js +22 -0
- package/dist/cjs/server/adapters/nextjs/prepare-model-messages.d.ts +58 -0
- package/dist/cjs/server/adapters/nextjs/prepare-model-messages.js +114 -0
- package/dist/cjs/server/adapters/nextjs/sanitize-model-messages.d.ts +64 -0
- package/dist/cjs/server/adapters/nextjs/sanitize-model-messages.js +489 -0
- package/dist/cjs/server/adapters/nextjs/server-action-helper.d.ts +7 -0
- package/dist/cjs/server/adapters/nextjs/server-action-helper.js +40 -0
- package/dist/cjs/server/adapters/nextjs/types.d.ts +246 -0
- package/dist/cjs/server/adapters/nextjs/types.js +2 -0
- package/dist/cjs/server/adapters/nextjs/with-ai-tool.d.ts +9 -0
- package/dist/cjs/server/adapters/nextjs/with-ai-tool.js +12 -0
- package/dist/cjs/server/core/followup-tool.d.ts +9 -0
- package/dist/cjs/server/core/followup-tool.js +82 -0
- package/dist/cjs/server/core/index.d.ts +139 -0
- package/dist/cjs/server/core/index.js +818 -0
- package/dist/cjs/server/core/intent-classifier.d.ts +94 -0
- package/dist/cjs/server/core/intent-classifier.js +324 -0
- package/dist/cjs/server/core/model-selector.d.ts +12 -0
- package/dist/cjs/server/core/model-selector.js +48 -0
- package/dist/cjs/server/core/module-router.d.ts +14 -0
- package/dist/cjs/server/core/module-router.js +110 -0
- package/dist/cjs/server/core/zod-compact.d.ts +18 -0
- package/dist/cjs/server/core/zod-compact.js +129 -0
- package/dist/cjs/server/index.d.ts +6 -0
- package/dist/cjs/server/index.js +28 -0
- package/dist/cjs/server/lancer/cache.d.ts +9 -0
- package/dist/cjs/server/lancer/cache.js +33 -0
- package/dist/cjs/server/lancer/client.d.ts +2 -0
- package/dist/cjs/server/lancer/client.js +279 -0
- package/dist/cjs/server/lancer/errors.d.ts +13 -0
- package/dist/cjs/server/lancer/errors.js +21 -0
- package/dist/cjs/server/lancer/index.d.ts +3 -0
- package/dist/cjs/server/lancer/index.js +7 -0
- package/dist/cjs/server/lancer/telemetry-buffer.d.ts +15 -0
- package/dist/cjs/server/lancer/telemetry-buffer.js +64 -0
- package/dist/cjs/server/lancer/types.d.ts +201 -0
- package/dist/cjs/server/lancer/types.js +5 -0
- package/dist/cjs/server/pii-shield/aegis-detector.d.ts +26 -0
- package/dist/cjs/server/pii-shield/aegis-detector.js +26 -0
- package/dist/cjs/server/pii-shield/create-pii-shield.d.ts +2 -0
- package/dist/cjs/server/pii-shield/create-pii-shield.js +191 -0
- package/dist/cjs/server/pii-shield/deep-walk.d.ts +1 -0
- package/dist/cjs/server/pii-shield/deep-walk.js +19 -0
- package/dist/cjs/server/pii-shield/fake-data.d.ts +5 -0
- package/dist/cjs/server/pii-shield/fake-data.js +170 -0
- package/dist/cjs/server/pii-shield/index.d.ts +4 -0
- package/dist/cjs/server/pii-shield/index.js +9 -0
- package/dist/cjs/server/pii-shield/leakage.d.ts +1 -0
- package/dist/cjs/server/pii-shield/leakage.js +15 -0
- package/dist/cjs/server/pii-shield/session-mapping.d.ts +12 -0
- package/dist/cjs/server/pii-shield/session-mapping.js +70 -0
- package/dist/cjs/server/pipeline.d.ts +26 -0
- package/dist/cjs/server/pipeline.js +127 -0
- package/dist/cjs/server/testing/approvals.d.ts +11 -0
- package/dist/cjs/server/testing/approvals.js +41 -0
- package/dist/cjs/server/testing/combination.d.ts +3 -0
- package/dist/cjs/server/testing/combination.js +83 -0
- package/dist/cjs/server/testing/create-test-suite.d.ts +29 -0
- package/dist/cjs/server/testing/create-test-suite.js +81 -0
- package/dist/cjs/server/testing/edge-cases.d.ts +8 -0
- package/dist/cjs/server/testing/edge-cases.js +277 -0
- package/dist/cjs/server/testing/guardrails.d.ts +14 -0
- package/dist/cjs/server/testing/guardrails.js +152 -0
- package/dist/cjs/server/testing/helpers.d.ts +14 -0
- package/dist/cjs/server/testing/helpers.js +119 -0
- package/dist/cjs/server/testing/index.d.ts +12 -0
- package/dist/cjs/server/testing/index.js +37 -0
- package/dist/cjs/server/testing/mock-executor.d.ts +8 -0
- package/dist/cjs/server/testing/mock-executor.js +40 -0
- package/dist/cjs/server/testing/regression.d.ts +7 -0
- package/dist/cjs/server/testing/regression.js +27 -0
- package/dist/cjs/server/testing/routing.d.ts +12 -0
- package/dist/cjs/server/testing/routing.js +63 -0
- package/dist/cjs/server/testing/schema-consistency.d.ts +6 -0
- package/dist/cjs/server/testing/schema-consistency.js +56 -0
- package/dist/cjs/server/testing/smoke.d.ts +11 -0
- package/dist/cjs/server/testing/smoke.js +64 -0
- package/dist/cjs/server/testing/types.d.ts +156 -0
- package/dist/cjs/server/testing/types.js +2 -0
- package/dist/cjs/types.d.ts +696 -0
- package/dist/cjs/types.js +91 -0
- package/dist/cli/commands/install-skills.d.ts +17 -0
- package/dist/cli/commands/install-skills.js +185 -0
- package/dist/cli/commands/install-skills.js.map +1 -0
- package/dist/cli/index.js +25 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/react/components/ai-trigger-button.js +4 -6
- package/dist/react/components/ai-trigger-button.js.map +1 -1
- package/dist/react/components/recording-bar.js +4 -6
- package/dist/react/components/recording-bar.js.map +1 -1
- package/dist/react/components/wavesurfer-loader.d.ts +5 -0
- package/dist/react/components/wavesurfer-loader.js +34 -0
- package/dist/react/components/wavesurfer-loader.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.module.d.ts +1 -1
- package/dist/server/adapters/nestjs/chat/ai-chat.module.js +3 -2
- package/dist/server/adapters/nestjs/chat/ai-chat.module.js.map +1 -1
- package/dist/server/adapters/nestjs/chat/speech-stream.gateway.d.ts +1 -1
- package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js +10 -8
- package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js.map +1 -1
- package/dist/server/adapters/nestjs/chat/ws-loader.d.ts +5 -0
- package/dist/server/adapters/nestjs/chat/ws-loader.js +37 -0
- package/dist/server/adapters/nestjs/chat/ws-loader.js.map +1 -0
- package/openapi/package.json +5 -0
- package/package.json +59 -16
- package/react/langgraph/package.json +5 -0
- package/react/package.json +5 -0
- package/react/vercel/package.json +5 -0
- package/server/nestjs/package.json +5 -0
- package/server/nextjs/package.json +5 -0
- package/server/package.json +5 -0
- package/server/testing/package.json +5 -0
- package/skills/README.md +107 -0
- package/skills/building-glirastes-chat-ui/SKILL.md +378 -0
- package/skills/integrating-glirastes-nestjs/SKILL.md +346 -0
- package/skills/integrating-glirastes-nextjs/SKILL.md +306 -0
- package/skills/integrating-glirastes-nextjs-with-nestjs-backend/SKILL.md +359 -0
- package/skills/maintaining-glirastes-tools/SKILL.md +463 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type ErrorChunk = {
|
|
2
|
+
type: 'error';
|
|
3
|
+
errorText: string;
|
|
4
|
+
};
|
|
5
|
+
declare function isErrorChunk(chunk: unknown): chunk is ErrorChunk;
|
|
6
|
+
export declare function filterFallbackError<T>(source: ReadableStream<T>): ReadableStream<T>;
|
|
7
|
+
export declare const __testing__: {
|
|
8
|
+
FALLBACK_ERROR_TEXT: string;
|
|
9
|
+
isErrorChunk: typeof isErrorChunk;
|
|
10
|
+
};
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.__testing__ = void 0;
|
|
4
|
+
exports.filterFallbackError = filterFallbackError;
|
|
5
|
+
/**
|
|
6
|
+
* The Vercel AI SDK emits a generic
|
|
7
|
+
* { type: 'error', errorText: 'No output generated. Check the stream for errors.' }
|
|
8
|
+
* chunk whenever `streamText` finishes with no text output — including the
|
|
9
|
+
* (very common) case where it already streamed a real error chunk earlier
|
|
10
|
+
* in the same response (e.g. an upstream provider rejection).
|
|
11
|
+
*
|
|
12
|
+
* That double-error confuses chat UIs: the first message says "API key
|
|
13
|
+
* invalid", the second says "no output, check the stream for errors", and
|
|
14
|
+
* users have no way to tell they describe the same incident.
|
|
15
|
+
*
|
|
16
|
+
* This transform drops the fallback error iff a more specific error chunk
|
|
17
|
+
* has already been forwarded in the same stream. The first error always
|
|
18
|
+
* passes through unchanged.
|
|
19
|
+
*/
|
|
20
|
+
const FALLBACK_ERROR_TEXT = 'No output generated. Check the stream for errors.';
|
|
21
|
+
function isErrorChunk(chunk) {
|
|
22
|
+
return (typeof chunk === 'object' &&
|
|
23
|
+
chunk !== null &&
|
|
24
|
+
chunk.type === 'error' &&
|
|
25
|
+
typeof chunk.errorText === 'string');
|
|
26
|
+
}
|
|
27
|
+
function filterFallbackError(source) {
|
|
28
|
+
let seenError = false;
|
|
29
|
+
return source.pipeThrough(new TransformStream({
|
|
30
|
+
transform(chunk, controller) {
|
|
31
|
+
if (isErrorChunk(chunk)) {
|
|
32
|
+
if (seenError && chunk.errorText === FALLBACK_ERROR_TEXT) {
|
|
33
|
+
return; // drop the duplicate fallback
|
|
34
|
+
}
|
|
35
|
+
seenError = true;
|
|
36
|
+
}
|
|
37
|
+
controller.enqueue(chunk);
|
|
38
|
+
},
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
exports.__testing__ = { FALLBACK_ERROR_TEXT, isErrorChunk };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { withAiTool } from './with-ai-tool.js';
|
|
2
|
+
export { createAiChatHandler, type StreamHandlerContext, type AiChatHandlerFullConfig, } from './create-ai-chat-handler.js';
|
|
3
|
+
export { extractOrigin, buildRuntimeContext, buildToolContext, createInternalApiCallerFromRequest, } from './context-helpers.js';
|
|
4
|
+
export { sanitizeModelMessages } from './sanitize-model-messages.js';
|
|
5
|
+
export { prepareModelMessages, wrapToolsForVercelAi, type PrepareModelMessagesOptions, } from './prepare-model-messages.js';
|
|
6
|
+
export { executeTool } from './server-action-helper.js';
|
|
7
|
+
export { createNextInternalApiCaller } from '../../core/index.js';
|
|
8
|
+
export type { WithAiToolOptions, AiToolRouteHandler, AiChatHandlerConfig, LoadTools, GuardrailResult, GuardrailHook, IntentRoutingResult, IntentRouter, StepLimitSource, StepUsage, PipelineStepReport, PipelineStreamStatus, PipelineStreamState, ExecuteToolOptions, ExecuteToolResult, AiPipeline, FollowupsConfig, PipelineResult, } from './types.js';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNextInternalApiCaller = exports.executeTool = exports.wrapToolsForVercelAi = exports.prepareModelMessages = exports.sanitizeModelMessages = exports.createInternalApiCallerFromRequest = exports.buildToolContext = exports.buildRuntimeContext = exports.extractOrigin = exports.createAiChatHandler = exports.withAiTool = void 0;
|
|
4
|
+
var with_ai_tool_js_1 = require("./with-ai-tool.js");
|
|
5
|
+
Object.defineProperty(exports, "withAiTool", { enumerable: true, get: function () { return with_ai_tool_js_1.withAiTool; } });
|
|
6
|
+
var create_ai_chat_handler_js_1 = require("./create-ai-chat-handler.js");
|
|
7
|
+
Object.defineProperty(exports, "createAiChatHandler", { enumerable: true, get: function () { return create_ai_chat_handler_js_1.createAiChatHandler; } });
|
|
8
|
+
var context_helpers_js_1 = require("./context-helpers.js");
|
|
9
|
+
Object.defineProperty(exports, "extractOrigin", { enumerable: true, get: function () { return context_helpers_js_1.extractOrigin; } });
|
|
10
|
+
Object.defineProperty(exports, "buildRuntimeContext", { enumerable: true, get: function () { return context_helpers_js_1.buildRuntimeContext; } });
|
|
11
|
+
Object.defineProperty(exports, "buildToolContext", { enumerable: true, get: function () { return context_helpers_js_1.buildToolContext; } });
|
|
12
|
+
Object.defineProperty(exports, "createInternalApiCallerFromRequest", { enumerable: true, get: function () { return context_helpers_js_1.createInternalApiCallerFromRequest; } });
|
|
13
|
+
var sanitize_model_messages_js_1 = require("./sanitize-model-messages.js");
|
|
14
|
+
Object.defineProperty(exports, "sanitizeModelMessages", { enumerable: true, get: function () { return sanitize_model_messages_js_1.sanitizeModelMessages; } });
|
|
15
|
+
var prepare_model_messages_js_1 = require("./prepare-model-messages.js");
|
|
16
|
+
Object.defineProperty(exports, "prepareModelMessages", { enumerable: true, get: function () { return prepare_model_messages_js_1.prepareModelMessages; } });
|
|
17
|
+
Object.defineProperty(exports, "wrapToolsForVercelAi", { enumerable: true, get: function () { return prepare_model_messages_js_1.wrapToolsForVercelAi; } });
|
|
18
|
+
var server_action_helper_js_1 = require("./server-action-helper.js");
|
|
19
|
+
Object.defineProperty(exports, "executeTool", { enumerable: true, get: function () { return server_action_helper_js_1.executeTool; } });
|
|
20
|
+
// Re-export from server-node for convenience
|
|
21
|
+
var index_js_1 = require("../../core/index.js");
|
|
22
|
+
Object.defineProperty(exports, "createNextInternalApiCaller", { enumerable: true, get: function () { return index_js_1.createNextInternalApiCaller; } });
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for preparing model messages and wrapping tools for Vercel AI SDK.
|
|
3
|
+
*
|
|
4
|
+
* - {@link prepareModelMessages} encapsulates the full pipeline:
|
|
5
|
+
* `convertToModelMessages` → `slice` → `pruneMessages` → `sanitizeModelMessages`
|
|
6
|
+
*
|
|
7
|
+
* - {@link wrapToolsForVercelAi} converts SDK tools (from `toolsToAiTools`) into
|
|
8
|
+
* Vercel AI SDK `tool()` instances ready for `streamText()`.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { type UIMessage } from 'ai';
|
|
13
|
+
export interface PrepareModelMessagesOptions {
|
|
14
|
+
/** Max model messages to keep after slicing (default: 12). */
|
|
15
|
+
maxContextMessages?: number;
|
|
16
|
+
/** Override pruneMessages config. */
|
|
17
|
+
pruneConfig?: {
|
|
18
|
+
/** How to handle reasoning blocks (default: 'none'). */
|
|
19
|
+
reasoning?: 'none' | 'keep';
|
|
20
|
+
/** Tool-call pruning strategy (default: 'before-last-3-messages'). */
|
|
21
|
+
toolCalls?: string;
|
|
22
|
+
/** Empty message handling (default: 'remove'). */
|
|
23
|
+
emptyMessages?: 'remove' | 'keep';
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Convert UI messages into sanitized model messages ready for `streamText()`.
|
|
28
|
+
*
|
|
29
|
+
* Pipeline:
|
|
30
|
+
* 1. `convertToModelMessages` (with `ignoreIncompleteToolCalls: true`)
|
|
31
|
+
* 2. Slice to `maxContextMessages`
|
|
32
|
+
* 3. `pruneMessages` — remove old reasoning / tool-calls / empty messages
|
|
33
|
+
* 4. `sanitizeModelMessages` — strip orphaned tool-calls for OpenAI compatibility
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* import { prepareModelMessages } from './index.js';
|
|
38
|
+
*
|
|
39
|
+
* const messages = await prepareModelMessages(uiMessages, {
|
|
40
|
+
* maxContextMessages: 12,
|
|
41
|
+
* });
|
|
42
|
+
* // messages is safe to pass to streamText()
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function prepareModelMessages(uiMessages: UIMessage[], options?: PrepareModelMessagesOptions): Promise<unknown[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Convert SDK AI tools (output of `toolsToAiTools`) into Vercel AI SDK
|
|
48
|
+
* `tool()` instances.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* import { wrapToolsForVercelAi } from './index.js';
|
|
53
|
+
*
|
|
54
|
+
* const vercelTools = wrapToolsForVercelAi(ctx.tools);
|
|
55
|
+
* const result = streamText({ tools: vercelTools, ... });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function wrapToolsForVercelAi(sdkTools: Record<string, unknown>): Record<string, unknown>;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utilities for preparing model messages and wrapping tools for Vercel AI SDK.
|
|
4
|
+
*
|
|
5
|
+
* - {@link prepareModelMessages} encapsulates the full pipeline:
|
|
6
|
+
* `convertToModelMessages` → `slice` → `pruneMessages` → `sanitizeModelMessages`
|
|
7
|
+
*
|
|
8
|
+
* - {@link wrapToolsForVercelAi} converts SDK tools (from `toolsToAiTools`) into
|
|
9
|
+
* Vercel AI SDK `tool()` instances ready for `streamText()`.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.prepareModelMessages = prepareModelMessages;
|
|
15
|
+
exports.wrapToolsForVercelAi = wrapToolsForVercelAi;
|
|
16
|
+
const ai_1 = require("ai");
|
|
17
|
+
const sanitize_model_messages_js_1 = require("./sanitize-model-messages.js");
|
|
18
|
+
/**
|
|
19
|
+
* Convert UI messages into sanitized model messages ready for `streamText()`.
|
|
20
|
+
*
|
|
21
|
+
* Pipeline:
|
|
22
|
+
* 1. `convertToModelMessages` (with `ignoreIncompleteToolCalls: true`)
|
|
23
|
+
* 2. Slice to `maxContextMessages`
|
|
24
|
+
* 3. `pruneMessages` — remove old reasoning / tool-calls / empty messages
|
|
25
|
+
* 4. `sanitizeModelMessages` — strip orphaned tool-calls for OpenAI compatibility
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { prepareModelMessages } from './index.js';
|
|
30
|
+
*
|
|
31
|
+
* const messages = await prepareModelMessages(uiMessages, {
|
|
32
|
+
* maxContextMessages: 12,
|
|
33
|
+
* });
|
|
34
|
+
* // messages is safe to pass to streamText()
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
async function prepareModelMessages(uiMessages, options) {
|
|
38
|
+
const maxCtx = options?.maxContextMessages ?? 12;
|
|
39
|
+
const raw = await (0, ai_1.convertToModelMessages)(uiMessages, {
|
|
40
|
+
ignoreIncompleteToolCalls: true,
|
|
41
|
+
});
|
|
42
|
+
const sliced = raw.slice(-maxCtx);
|
|
43
|
+
const pruned = (0, ai_1.pruneMessages)({
|
|
44
|
+
messages: sliced,
|
|
45
|
+
reasoning: (options?.pruneConfig?.reasoning ?? 'none'),
|
|
46
|
+
toolCalls: (options?.pruneConfig?.toolCalls ??
|
|
47
|
+
'before-last-3-messages'),
|
|
48
|
+
emptyMessages: (options?.pruneConfig?.emptyMessages ?? 'remove'),
|
|
49
|
+
});
|
|
50
|
+
const sanitized = (0, sanitize_model_messages_js_1.sanitizeModelMessages)(pruned);
|
|
51
|
+
// Strip uiAction from tool-result parts — the LLM doesn't need them
|
|
52
|
+
// (uiActions are auto-generated by SDK templates and consumed by the client)
|
|
53
|
+
return stripUiActionsFromToolResults(sanitized);
|
|
54
|
+
}
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// stripUiActionsFromToolResults
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
/**
|
|
59
|
+
* Remove `uiAction` fields from tool-result parts in model messages.
|
|
60
|
+
*
|
|
61
|
+
* UI actions are auto-generated by SDK templates (uiActionOnSuccess, uiPattern)
|
|
62
|
+
* and consumed by the client for toasts, navigation, and refreshes. The LLM
|
|
63
|
+
* doesn't generate or use them — keeping them wastes 100-500 tokens per call.
|
|
64
|
+
*
|
|
65
|
+
* This runs AFTER sanitization so it doesn't interfere with orphan detection.
|
|
66
|
+
*/
|
|
67
|
+
function stripUiActionsFromToolResults(messages) {
|
|
68
|
+
return messages.map((msg) => {
|
|
69
|
+
const m = msg;
|
|
70
|
+
if (m.role !== 'tool' || !Array.isArray(m.content))
|
|
71
|
+
return msg;
|
|
72
|
+
const newContent = m.content.map((part) => {
|
|
73
|
+
if (part.type !== 'tool-result' || !isPlainObject(part.result)) {
|
|
74
|
+
return part;
|
|
75
|
+
}
|
|
76
|
+
const result = part.result;
|
|
77
|
+
if (!('uiAction' in result))
|
|
78
|
+
return part;
|
|
79
|
+
const { uiAction: _stripped, ...rest } = result;
|
|
80
|
+
return { ...part, result: rest };
|
|
81
|
+
});
|
|
82
|
+
return { ...m, content: newContent };
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function isPlainObject(v) {
|
|
86
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Convert SDK AI tools (output of `toolsToAiTools`) into Vercel AI SDK
|
|
90
|
+
* `tool()` instances.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* import { wrapToolsForVercelAi } from './index.js';
|
|
95
|
+
*
|
|
96
|
+
* const vercelTools = wrapToolsForVercelAi(ctx.tools);
|
|
97
|
+
* const result = streamText({ tools: vercelTools, ... });
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
function wrapToolsForVercelAi(sdkTools) {
|
|
101
|
+
const wrapped = {};
|
|
102
|
+
for (const [name, raw] of Object.entries(sdkTools)) {
|
|
103
|
+
const sdkTool = raw;
|
|
104
|
+
wrapped[name] = (0, ai_1.tool)({
|
|
105
|
+
description: sdkTool.description,
|
|
106
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
107
|
+
inputSchema: (0, ai_1.zodSchema)(sdkTool.parameters),
|
|
108
|
+
needsApproval: sdkTool.needsApproval,
|
|
109
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
110
|
+
execute: sdkTool.execute,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return wrapped;
|
|
114
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitize model messages for OpenAI compatibility.
|
|
3
|
+
*
|
|
4
|
+
* Handles three classes of problems that occur after convertToModelMessages +
|
|
5
|
+
* pruneMessages from the Vercel AI SDK:
|
|
6
|
+
*
|
|
7
|
+
* 1. **Orphaned tool-calls** — assistant has tool-call but no matching
|
|
8
|
+
* tool-result anywhere (pruneMessages stripped it).
|
|
9
|
+
* 2. **Orphaned tool-approval-requests** — approval request without matching
|
|
10
|
+
* response, or whose linked tool-call was removed.
|
|
11
|
+
* 3. **Ordering violations** — OpenAI requires tool-result messages to
|
|
12
|
+
* IMMEDIATELY follow their assistant message. After pruning, the ordering
|
|
13
|
+
* can break.
|
|
14
|
+
*
|
|
15
|
+
* **Important:** The OpenAI provider silently drops `tool-approval-response`
|
|
16
|
+
* parts during serialization. A tool message containing ONLY approval-responses
|
|
17
|
+
* (no tool-result) produces zero OpenAI messages. Therefore, a tool-call is
|
|
18
|
+
* only considered "safe" when it has an adjacent `tool-result` — a
|
|
19
|
+
* `tool-approval-response` alone does NOT satisfy this requirement.
|
|
20
|
+
*
|
|
21
|
+
* **Exception:** When the LAST message is a tool message containing
|
|
22
|
+
* `tool-approval-response` parts, those tool-calls are preserved. The Vercel
|
|
23
|
+
* AI SDK's `streamText` runs `collectToolApprovals()` on the last message
|
|
24
|
+
* and executes approved tools BEFORE sending anything to OpenAI. Stripping
|
|
25
|
+
* these would break the approval flow (causing an infinite loop where the
|
|
26
|
+
* model re-generates the same tool call).
|
|
27
|
+
*
|
|
28
|
+
* The public API is {@link sanitizeModelMessages}, which runs two passes:
|
|
29
|
+
* - Primary pass: adjacency-based orphan removal
|
|
30
|
+
* - Safety-net pass: strict re-check for any remaining orphans
|
|
31
|
+
*
|
|
32
|
+
* @module
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* Sanitize model messages by removing orphaned tool-calls and
|
|
36
|
+
* tool-approval-requests.
|
|
37
|
+
*
|
|
38
|
+
* A tool-call is considered orphaned when it does not have an adjacent
|
|
39
|
+
* `tool-result` in the immediately following tool message(s). A
|
|
40
|
+
* `tool-approval-response` alone does NOT count — the OpenAI provider
|
|
41
|
+
* silently drops these during serialization.
|
|
42
|
+
*
|
|
43
|
+
* **Exception:** Tool-calls with a `tool-approval-response` in the LAST
|
|
44
|
+
* message are preserved. The Vercel AI SDK's `streamText` runs
|
|
45
|
+
* `collectToolApprovals()` to execute approved tools before calling the
|
|
46
|
+
* model provider, so these are safe to keep.
|
|
47
|
+
*
|
|
48
|
+
* Call this on the output of `pruneMessages()` (from the `ai` SDK) before
|
|
49
|
+
* passing messages to `streamText()`. Or use {@link prepareModelMessages}
|
|
50
|
+
* which calls this automatically.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```ts
|
|
54
|
+
* import { sanitizeModelMessages } from './index.js';
|
|
55
|
+
*
|
|
56
|
+
* const raw = await convertToModelMessages(uiMessages, {
|
|
57
|
+
* ignoreIncompleteToolCalls: true,
|
|
58
|
+
* });
|
|
59
|
+
* const pruned = pruneMessages({ messages: raw.slice(-12), ... });
|
|
60
|
+
* const clean = sanitizeModelMessages(pruned);
|
|
61
|
+
* // clean is safe to pass to streamText()
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function sanitizeModelMessages<T>(messages: T[]): T[];
|