glirastes 0.1.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 +468 -0
- package/README.md +651 -0
- package/dist/cli/bin.d.ts +2 -0
- package/dist/cli/bin.js +34 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/check-upgrade.d.ts +15 -0
- package/dist/cli/commands/check-upgrade.js +138 -0
- package/dist/cli/commands/check-upgrade.js.map +1 -0
- package/dist/cli/commands/test.d.ts +8 -0
- package/dist/cli/commands/test.js +76 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +609 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/changelog-parser.d.ts +13 -0
- package/dist/cli/utils/changelog-parser.js +89 -0
- package/dist/cli/utils/changelog-parser.js.map +1 -0
- package/dist/cli/utils/commit-parser.d.ts +8 -0
- package/dist/cli/utils/commit-parser.js +23 -0
- package/dist/cli/utils/commit-parser.js.map +1 -0
- package/dist/cli/utils/gap-detector.d.ts +14 -0
- package/dist/cli/utils/gap-detector.js +65 -0
- package/dist/cli/utils/gap-detector.js.map +1 -0
- package/dist/cli/utils/get-cli-version.d.ts +2 -0
- package/dist/cli/utils/get-cli-version.js +10 -0
- package/dist/cli/utils/get-cli-version.js.map +1 -0
- package/dist/codegen/asset-sync.d.ts +20 -0
- package/dist/codegen/asset-sync.js +26 -0
- package/dist/codegen/asset-sync.js.map +1 -0
- package/dist/codegen/coverage.d.ts +66 -0
- package/dist/codegen/coverage.js +372 -0
- package/dist/codegen/coverage.js.map +1 -0
- package/dist/codegen/endpoint-scanner.d.ts +16 -0
- package/dist/codegen/endpoint-scanner.js +161 -0
- package/dist/codegen/endpoint-scanner.js.map +1 -0
- package/dist/codegen/format.d.ts +17 -0
- package/dist/codegen/format.js +28 -0
- package/dist/codegen/format.js.map +1 -0
- package/dist/codegen/fs-utils.d.ts +45 -0
- package/dist/codegen/fs-utils.js +155 -0
- package/dist/codegen/fs-utils.js.map +1 -0
- package/dist/codegen/index.d.ts +13 -0
- package/dist/codegen/index.js +13 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/mcp-generator.d.ts +50 -0
- package/dist/codegen/mcp-generator.js +801 -0
- package/dist/codegen/mcp-generator.js.map +1 -0
- package/dist/codegen/module-generator.d.ts +11 -0
- package/dist/codegen/module-generator.js +351 -0
- package/dist/codegen/module-generator.js.map +1 -0
- package/dist/codegen/nestjs-scanner.d.ts +43 -0
- package/dist/codegen/nestjs-scanner.js +239 -0
- package/dist/codegen/nestjs-scanner.js.map +1 -0
- package/dist/codegen/output-recommender.d.ts +23 -0
- package/dist/codegen/output-recommender.js +31 -0
- package/dist/codegen/output-recommender.js.map +1 -0
- package/dist/codegen/scaffolder.d.ts +36 -0
- package/dist/codegen/scaffolder.js +259 -0
- package/dist/codegen/scaffolder.js.map +1 -0
- package/dist/codegen/skill-generator.d.ts +49 -0
- package/dist/codegen/skill-generator.js +965 -0
- package/dist/codegen/skill-generator.js.map +1 -0
- package/dist/codegen/types.d.ts +52 -0
- package/dist/codegen/types.js +14 -0
- package/dist/codegen/types.js.map +1 -0
- package/dist/codegen/ui-scanner.d.ts +24 -0
- package/dist/codegen/ui-scanner.js +197 -0
- package/dist/codegen/ui-scanner.js.map +1 -0
- package/dist/codegen/validator.d.ts +35 -0
- package/dist/codegen/validator.js +256 -0
- package/dist/codegen/validator.js.map +1 -0
- package/dist/openapi/demo-generate.d.ts +1 -0
- package/dist/openapi/demo-generate.js +15 -0
- package/dist/openapi/demo-generate.js.map +1 -0
- package/dist/openapi/index.d.ts +78 -0
- package/dist/openapi/index.js +341 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/react/audio-worklet-processor.d.ts +9 -0
- package/dist/react/audio-worklet-processor.js +28 -0
- package/dist/react/audio-worklet-processor.js.map +1 -0
- package/dist/react/bridges/rest-session-bridge.d.ts +113 -0
- package/dist/react/bridges/rest-session-bridge.js +207 -0
- package/dist/react/bridges/rest-session-bridge.js.map +1 -0
- package/dist/react/components/ai-chat-panel.d.ts +12 -0
- package/dist/react/components/ai-chat-panel.js +65 -0
- package/dist/react/components/ai-chat-panel.js.map +1 -0
- package/dist/react/components/ai-trigger-button.d.ts +2 -0
- package/dist/react/components/ai-trigger-button.js +239 -0
- package/dist/react/components/ai-trigger-button.js.map +1 -0
- package/dist/react/components/approval-card.d.ts +9 -0
- package/dist/react/components/approval-card.js +22 -0
- package/dist/react/components/approval-card.js.map +1 -0
- package/dist/react/components/bulk-approval-card.d.ts +9 -0
- package/dist/react/components/bulk-approval-card.js +34 -0
- package/dist/react/components/bulk-approval-card.js.map +1 -0
- package/dist/react/components/chat-input.d.ts +10 -0
- package/dist/react/components/chat-input.js +58 -0
- package/dist/react/components/chat-input.js.map +1 -0
- package/dist/react/components/chat-window.d.ts +2 -0
- package/dist/react/components/chat-window.js +132 -0
- package/dist/react/components/chat-window.js.map +1 -0
- package/dist/react/components/confirm-dialog.d.ts +32 -0
- package/dist/react/components/confirm-dialog.js +46 -0
- package/dist/react/components/confirm-dialog.js.map +1 -0
- package/dist/react/components/floating-chat-ui.d.ts +84 -0
- package/dist/react/components/floating-chat-ui.js +161 -0
- package/dist/react/components/floating-chat-ui.js.map +1 -0
- package/dist/react/components/mention-chip.d.ts +16 -0
- package/dist/react/components/mention-chip.js +39 -0
- package/dist/react/components/mention-chip.js.map +1 -0
- package/dist/react/components/mention-input.d.ts +8 -0
- package/dist/react/components/mention-input.js +115 -0
- package/dist/react/components/mention-input.js.map +1 -0
- package/dist/react/components/message-bubble.d.ts +11 -0
- package/dist/react/components/message-bubble.js +123 -0
- package/dist/react/components/message-bubble.js.map +1 -0
- package/dist/react/components/message-list.d.ts +8 -0
- package/dist/react/components/message-list.js +50 -0
- package/dist/react/components/message-list.js.map +1 -0
- package/dist/react/components/pipeline-timeline.d.ts +7 -0
- package/dist/react/components/pipeline-timeline.js +70 -0
- package/dist/react/components/pipeline-timeline.js.map +1 -0
- package/dist/react/components/recording-bar.d.ts +2 -0
- package/dist/react/components/recording-bar.js +81 -0
- package/dist/react/components/recording-bar.js.map +1 -0
- package/dist/react/components/recording-controls.d.ts +18 -0
- package/dist/react/components/recording-controls.js +35 -0
- package/dist/react/components/recording-controls.js.map +1 -0
- package/dist/react/components/rich-mention-input.d.ts +2 -0
- package/dist/react/components/rich-mention-input.js +569 -0
- package/dist/react/components/rich-mention-input.js.map +1 -0
- package/dist/react/components/session-switcher.d.ts +14 -0
- package/dist/react/components/session-switcher.js +131 -0
- package/dist/react/components/session-switcher.js.map +1 -0
- package/dist/react/components/suggestion-bar.d.ts +9 -0
- package/dist/react/components/suggestion-bar.js +45 -0
- package/dist/react/components/suggestion-bar.js.map +1 -0
- package/dist/react/components/suggestion-chip.d.ts +9 -0
- package/dist/react/components/suggestion-chip.js +12 -0
- package/dist/react/components/suggestion-chip.js.map +1 -0
- package/dist/react/components/voice-input-addon.d.ts +13 -0
- package/dist/react/components/voice-input-addon.js +29 -0
- package/dist/react/components/voice-input-addon.js.map +1 -0
- package/dist/react/components/voice-input-button.d.ts +2 -0
- package/dist/react/components/voice-input-button.js +53 -0
- package/dist/react/components/voice-input-button.js.map +1 -0
- package/dist/react/hooks/use-ai-chat.d.ts +22 -0
- package/dist/react/hooks/use-ai-chat.js +49 -0
- package/dist/react/hooks/use-ai-chat.js.map +1 -0
- package/dist/react/hooks/use-approvals.d.ts +23 -0
- package/dist/react/hooks/use-approvals.js +61 -0
- package/dist/react/hooks/use-approvals.js.map +1 -0
- package/dist/react/hooks/use-deepgram-transcription.d.ts +2 -0
- package/dist/react/hooks/use-deepgram-transcription.js +327 -0
- package/dist/react/hooks/use-deepgram-transcription.js.map +1 -0
- package/dist/react/hooks/use-drag-resize-panel.d.ts +48 -0
- package/dist/react/hooks/use-drag-resize-panel.js +306 -0
- package/dist/react/hooks/use-drag-resize-panel.js.map +1 -0
- package/dist/react/hooks/use-draggable-position.d.ts +25 -0
- package/dist/react/hooks/use-draggable-position.js +132 -0
- package/dist/react/hooks/use-draggable-position.js.map +1 -0
- package/dist/react/hooks/use-keyboard-shortcut.d.ts +20 -0
- package/dist/react/hooks/use-keyboard-shortcut.js +91 -0
- package/dist/react/hooks/use-keyboard-shortcut.js.map +1 -0
- package/dist/react/hooks/use-mentions.d.ts +23 -0
- package/dist/react/hooks/use-mentions.js +40 -0
- package/dist/react/hooks/use-mentions.js.map +1 -0
- package/dist/react/hooks/use-suggestions.d.ts +22 -0
- package/dist/react/hooks/use-suggestions.js +37 -0
- package/dist/react/hooks/use-suggestions.js.map +1 -0
- package/dist/react/index.d.ts +43 -0
- package/dist/react/index.js +53 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/provider/ai-chat-provider.d.ts +45 -0
- package/dist/react/provider/ai-chat-provider.js +1021 -0
- package/dist/react/provider/ai-chat-provider.js.map +1 -0
- package/dist/react/provider/chat-context.d.ts +84 -0
- package/dist/react/provider/chat-context.js +10 -0
- package/dist/react/provider/chat-context.js.map +1 -0
- package/dist/react/styles.css +897 -0
- package/dist/react/template.d.ts +84 -0
- package/dist/react/template.js +83 -0
- package/dist/react/template.js.map +1 -0
- package/dist/react/themes.d.ts +24 -0
- package/dist/react/themes.js +269 -0
- package/dist/react/themes.js.map +1 -0
- package/dist/react/transports/langgraph/index.d.ts +2 -0
- package/dist/react/transports/langgraph/index.js +3 -0
- package/dist/react/transports/langgraph/index.js.map +1 -0
- package/dist/react/transports/langgraph/langgraph-ai-chat.d.ts +62 -0
- package/dist/react/transports/langgraph/langgraph-ai-chat.js +92 -0
- package/dist/react/transports/langgraph/langgraph-ai-chat.js.map +1 -0
- package/dist/react/transports/langgraph.d.ts +71 -0
- package/dist/react/transports/langgraph.js +366 -0
- package/dist/react/transports/langgraph.js.map +1 -0
- package/dist/react/transports/vercel/index.d.ts +2 -0
- package/dist/react/transports/vercel/index.js +3 -0
- package/dist/react/transports/vercel/index.js.map +1 -0
- package/dist/react/transports/vercel/vercel-ai-chat.d.ts +49 -0
- package/dist/react/transports/vercel/vercel-ai-chat.js +79 -0
- package/dist/react/transports/vercel/vercel-ai-chat.js.map +1 -0
- package/dist/react/transports/vercel.d.ts +30 -0
- package/dist/react/transports/vercel.js +67 -0
- package/dist/react/transports/vercel.js.map +1 -0
- package/dist/react/types.d.ts +750 -0
- package/dist/react/types.js +2 -0
- package/dist/react/types.js.map +1 -0
- package/dist/react/ui.d.ts +73 -0
- package/dist/react/ui.js +170 -0
- package/dist/react/ui.js.map +1 -0
- package/dist/react/utils/create-approval-description.d.ts +53 -0
- package/dist/react/utils/create-approval-description.js +120 -0
- package/dist/react/utils/create-approval-description.js.map +1 -0
- package/dist/react/utils/create-tool-result-handler.d.ts +90 -0
- package/dist/react/utils/create-tool-result-handler.js +166 -0
- package/dist/react/utils/create-tool-result-handler.js.map +1 -0
- package/dist/react/utils/mention-markup.d.ts +13 -0
- package/dist/react/utils/mention-markup.js +111 -0
- package/dist/react/utils/mention-markup.js.map +1 -0
- package/dist/react/utils/merge-pipeline-steps.d.ts +19 -0
- package/dist/react/utils/merge-pipeline-steps.js +79 -0
- package/dist/react/utils/merge-pipeline-steps.js.map +1 -0
- package/dist/react/utils/sanitize-stored-messages.d.ts +23 -0
- package/dist/react/utils/sanitize-stored-messages.js +50 -0
- package/dist/react/utils/sanitize-stored-messages.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/ai-chat-auth.guard.d.ts +10 -0
- package/dist/server/adapters/nestjs/chat/ai-chat-auth.guard.js +40 -0
- package/dist/server/adapters/nestjs/chat/ai-chat-auth.guard.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/ai-chat-module-options.interface.d.ts +32 -0
- package/dist/server/adapters/nestjs/chat/ai-chat-module-options.interface.js +2 -0
- package/dist/server/adapters/nestjs/chat/ai-chat-module-options.interface.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.controller.d.ts +11 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.controller.js +78 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.controller.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.module.d.ts +9 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.module.js +116 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.module.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.service.d.ts +13 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.service.js +129 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.service.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/dto/ai-chat-request.dto.d.ts +7 -0
- package/dist/server/adapters/nestjs/chat/dto/ai-chat-request.dto.js +49 -0
- package/dist/server/adapters/nestjs/chat/dto/ai-chat-request.dto.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/dto/chat-message-part.dto.d.ts +19 -0
- package/dist/server/adapters/nestjs/chat/dto/chat-message-part.dto.js +105 -0
- package/dist/server/adapters/nestjs/chat/dto/chat-message-part.dto.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/dto/chat-message.dto.d.ts +8 -0
- package/dist/server/adapters/nestjs/chat/dto/chat-message.dto.js +56 -0
- package/dist/server/adapters/nestjs/chat/dto/chat-message.dto.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/dto/index.d.ts +3 -0
- package/dist/server/adapters/nestjs/chat/dto/index.js +4 -0
- package/dist/server/adapters/nestjs/chat/dto/index.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/index.d.ts +3 -0
- package/dist/server/adapters/nestjs/chat/index.js +3 -0
- package/dist/server/adapters/nestjs/chat/index.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/speech-stream.gateway.d.ts +4 -0
- package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js +69 -0
- package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js.map +1 -0
- package/dist/server/adapters/nestjs/decorators/ai-module.decorator.d.ts +6 -0
- package/dist/server/adapters/nestjs/decorators/ai-module.decorator.js +11 -0
- package/dist/server/adapters/nestjs/decorators/ai-module.decorator.js.map +1 -0
- package/dist/server/adapters/nestjs/decorators/ai-param.decorator.d.ts +5 -0
- package/dist/server/adapters/nestjs/decorators/ai-param.decorator.js +13 -0
- package/dist/server/adapters/nestjs/decorators/ai-param.decorator.js.map +1 -0
- package/dist/server/adapters/nestjs/decorators/ai-tool.decorator.d.ts +6 -0
- package/dist/server/adapters/nestjs/decorators/ai-tool.decorator.js +20 -0
- package/dist/server/adapters/nestjs/decorators/ai-tool.decorator.js.map +1 -0
- package/dist/server/adapters/nestjs/decorators/constants.d.ts +4 -0
- package/dist/server/adapters/nestjs/decorators/constants.js +5 -0
- package/dist/server/adapters/nestjs/decorators/constants.js.map +1 -0
- package/dist/server/adapters/nestjs/index.d.ts +14 -0
- package/dist/server/adapters/nestjs/index.js +20 -0
- package/dist/server/adapters/nestjs/index.js.map +1 -0
- package/dist/server/adapters/nestjs/metadata.d.ts +39 -0
- package/dist/server/adapters/nestjs/metadata.js +30 -0
- package/dist/server/adapters/nestjs/metadata.js.map +1 -0
- package/dist/server/adapters/nestjs/module/ai-tools-explorer.service.d.ts +36 -0
- package/dist/server/adapters/nestjs/module/ai-tools-explorer.service.js +156 -0
- package/dist/server/adapters/nestjs/module/ai-tools-explorer.service.js.map +1 -0
- package/dist/server/adapters/nestjs/module/ai-tools.module.d.ts +37 -0
- package/dist/server/adapters/nestjs/module/ai-tools.module.js +42 -0
- package/dist/server/adapters/nestjs/module/ai-tools.module.js.map +1 -0
- package/dist/server/adapters/nestjs/module/ai-tools.service.d.ts +28 -0
- package/dist/server/adapters/nestjs/module/ai-tools.service.js +38 -0
- package/dist/server/adapters/nestjs/module/ai-tools.service.js.map +1 -0
- package/dist/server/adapters/nestjs/scanner/nestjs-scanner.d.ts +16 -0
- package/dist/server/adapters/nestjs/scanner/nestjs-scanner.js +115 -0
- package/dist/server/adapters/nestjs/scanner/nestjs-scanner.js.map +1 -0
- package/dist/server/adapters/nestjs/scanner/schema-builder.d.ts +26 -0
- package/dist/server/adapters/nestjs/scanner/schema-builder.js +255 -0
- package/dist/server/adapters/nestjs/scanner/schema-builder.js.map +1 -0
- package/dist/server/adapters/nestjs/swagger.d.ts +7 -0
- package/dist/server/adapters/nestjs/swagger.js +37 -0
- package/dist/server/adapters/nestjs/swagger.js.map +1 -0
- package/dist/server/adapters/nextjs/context-helpers.d.ts +22 -0
- package/dist/server/adapters/nextjs/context-helpers.js +55 -0
- package/dist/server/adapters/nextjs/context-helpers.js.map +1 -0
- package/dist/server/adapters/nextjs/create-ai-chat-handler.d.ts +78 -0
- package/dist/server/adapters/nextjs/create-ai-chat-handler.js +950 -0
- package/dist/server/adapters/nextjs/create-ai-chat-handler.js.map +1 -0
- package/dist/server/adapters/nextjs/index.d.ts +8 -0
- package/dist/server/adapters/nextjs/index.js +9 -0
- package/dist/server/adapters/nextjs/index.js.map +1 -0
- package/dist/server/adapters/nextjs/prepare-model-messages.d.ts +58 -0
- package/dist/server/adapters/nextjs/prepare-model-messages.js +111 -0
- package/dist/server/adapters/nextjs/prepare-model-messages.js.map +1 -0
- package/dist/server/adapters/nextjs/sanitize-model-messages.d.ts +64 -0
- package/dist/server/adapters/nextjs/sanitize-model-messages.js +487 -0
- package/dist/server/adapters/nextjs/sanitize-model-messages.js.map +1 -0
- package/dist/server/adapters/nextjs/server-action-helper.d.ts +7 -0
- package/dist/server/adapters/nextjs/server-action-helper.js +38 -0
- package/dist/server/adapters/nextjs/server-action-helper.js.map +1 -0
- package/dist/server/adapters/nextjs/types.d.ts +246 -0
- package/dist/server/adapters/nextjs/types.js +2 -0
- package/dist/server/adapters/nextjs/types.js.map +1 -0
- package/dist/server/adapters/nextjs/with-ai-tool.d.ts +9 -0
- package/dist/server/adapters/nextjs/with-ai-tool.js +10 -0
- package/dist/server/adapters/nextjs/with-ai-tool.js.map +1 -0
- package/dist/server/core/followup-tool.d.ts +9 -0
- package/dist/server/core/followup-tool.js +80 -0
- package/dist/server/core/followup-tool.js.map +1 -0
- package/dist/server/core/index.d.ts +139 -0
- package/dist/server/core/index.js +787 -0
- package/dist/server/core/index.js.map +1 -0
- package/dist/server/core/intent-classifier.d.ts +94 -0
- package/dist/server/core/intent-classifier.js +314 -0
- package/dist/server/core/intent-classifier.js.map +1 -0
- package/dist/server/core/model-selector.d.ts +12 -0
- package/dist/server/core/model-selector.js +45 -0
- package/dist/server/core/model-selector.js.map +1 -0
- package/dist/server/core/module-router.d.ts +14 -0
- package/dist/server/core/module-router.js +107 -0
- package/dist/server/core/module-router.js.map +1 -0
- package/dist/server/core/zod-compact.d.ts +18 -0
- package/dist/server/core/zod-compact.js +127 -0
- package/dist/server/core/zod-compact.js.map +1 -0
- package/dist/server/index.d.ts +5 -0
- package/dist/server/index.js +8 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/lancer/cache.d.ts +9 -0
- package/dist/server/lancer/cache.js +30 -0
- package/dist/server/lancer/cache.js.map +1 -0
- package/dist/server/lancer/client.d.ts +2 -0
- package/dist/server/lancer/client.js +277 -0
- package/dist/server/lancer/client.js.map +1 -0
- package/dist/server/lancer/errors.d.ts +13 -0
- package/dist/server/lancer/errors.js +18 -0
- package/dist/server/lancer/errors.js.map +1 -0
- package/dist/server/lancer/index.d.ts +3 -0
- package/dist/server/lancer/index.js +3 -0
- package/dist/server/lancer/index.js.map +1 -0
- package/dist/server/lancer/telemetry-buffer.d.ts +15 -0
- package/dist/server/lancer/telemetry-buffer.js +61 -0
- package/dist/server/lancer/telemetry-buffer.js.map +1 -0
- package/dist/server/lancer/types.d.ts +201 -0
- package/dist/server/lancer/types.js +5 -0
- package/dist/server/lancer/types.js.map +1 -0
- package/dist/server/pii-shield/aegis-detector.d.ts +26 -0
- package/dist/server/pii-shield/aegis-detector.js +24 -0
- package/dist/server/pii-shield/aegis-detector.js.map +1 -0
- package/dist/server/pii-shield/create-pii-shield.d.ts +2 -0
- package/dist/server/pii-shield/create-pii-shield.js +189 -0
- package/dist/server/pii-shield/create-pii-shield.js.map +1 -0
- package/dist/server/pii-shield/deep-walk.d.ts +1 -0
- package/dist/server/pii-shield/deep-walk.js +17 -0
- package/dist/server/pii-shield/deep-walk.js.map +1 -0
- package/dist/server/pii-shield/fake-data.d.ts +5 -0
- package/dist/server/pii-shield/fake-data.js +168 -0
- package/dist/server/pii-shield/fake-data.js.map +1 -0
- package/dist/server/pii-shield/index.d.ts +4 -0
- package/dist/server/pii-shield/index.js +5 -0
- package/dist/server/pii-shield/index.js.map +1 -0
- package/dist/server/pii-shield/leakage.d.ts +1 -0
- package/dist/server/pii-shield/leakage.js +13 -0
- package/dist/server/pii-shield/leakage.js.map +1 -0
- package/dist/server/pii-shield/session-mapping.d.ts +12 -0
- package/dist/server/pii-shield/session-mapping.js +68 -0
- package/dist/server/pii-shield/session-mapping.js.map +1 -0
- package/dist/server/pipeline.d.ts +26 -0
- package/dist/server/pipeline.js +125 -0
- package/dist/server/pipeline.js.map +1 -0
- package/dist/server/testing/approvals.d.ts +11 -0
- package/dist/server/testing/approvals.js +39 -0
- package/dist/server/testing/approvals.js.map +1 -0
- package/dist/server/testing/combination.d.ts +3 -0
- package/dist/server/testing/combination.js +81 -0
- package/dist/server/testing/combination.js.map +1 -0
- package/dist/server/testing/create-test-suite.d.ts +29 -0
- package/dist/server/testing/create-test-suite.js +79 -0
- package/dist/server/testing/create-test-suite.js.map +1 -0
- package/dist/server/testing/edge-cases.d.ts +8 -0
- package/dist/server/testing/edge-cases.js +275 -0
- package/dist/server/testing/edge-cases.js.map +1 -0
- package/dist/server/testing/guardrails.d.ts +14 -0
- package/dist/server/testing/guardrails.js +150 -0
- package/dist/server/testing/guardrails.js.map +1 -0
- package/dist/server/testing/helpers.d.ts +14 -0
- package/dist/server/testing/helpers.js +114 -0
- package/dist/server/testing/helpers.js.map +1 -0
- package/dist/server/testing/index.d.ts +12 -0
- package/dist/server/testing/index.js +21 -0
- package/dist/server/testing/index.js.map +1 -0
- package/dist/server/testing/mock-executor.d.ts +8 -0
- package/dist/server/testing/mock-executor.js +38 -0
- package/dist/server/testing/mock-executor.js.map +1 -0
- package/dist/server/testing/regression.d.ts +7 -0
- package/dist/server/testing/regression.js +25 -0
- package/dist/server/testing/regression.js.map +1 -0
- package/dist/server/testing/routing.d.ts +12 -0
- package/dist/server/testing/routing.js +61 -0
- package/dist/server/testing/routing.js.map +1 -0
- package/dist/server/testing/schema-consistency.d.ts +6 -0
- package/dist/server/testing/schema-consistency.js +54 -0
- package/dist/server/testing/schema-consistency.js.map +1 -0
- package/dist/server/testing/smoke.d.ts +11 -0
- package/dist/server/testing/smoke.js +62 -0
- package/dist/server/testing/smoke.js.map +1 -0
- package/dist/server/testing/types.d.ts +156 -0
- package/dist/server/testing/types.js +2 -0
- package/dist/server/testing/types.js.map +1 -0
- package/dist/types.d.ts +696 -0
- package/dist/types.js +84 -0
- package/dist/types.js.map +1 -0
- package/package.json +187 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thrown by the Lancer client when a service is unreachable and the configured
|
|
3
|
+
* degradation action for that service is 'block'.
|
|
4
|
+
*
|
|
5
|
+
* Consumers (e.g. server-pro pipeline) should catch this error and treat the
|
|
6
|
+
* request as blocked rather than falling back silently.
|
|
7
|
+
*/
|
|
8
|
+
export class ServiceBlockedError extends Error {
|
|
9
|
+
service;
|
|
10
|
+
cause;
|
|
11
|
+
constructor(service, cause) {
|
|
12
|
+
super(`Service '${service}' blocked the request due to degradation policy`);
|
|
13
|
+
this.service = service;
|
|
14
|
+
this.name = 'ServiceBlockedError';
|
|
15
|
+
this.cause = cause;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/server/lancer/errors.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAI1B;IAHO,KAAK,CAAoB;IAElD,YACkB,OAA0B,EAC1C,KAAa;QAEb,KAAK,CAAC,YAAY,OAAO,iDAAiD,CAAC,CAAC;QAH5D,YAAO,GAAP,OAAO,CAAmB;QAI1C,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { createLancer } from './client.js';
|
|
2
|
+
export { ServiceBlockedError } from './errors.js';
|
|
3
|
+
export type { AegisNamespace, AnalyzeOptions, AnalyzeResult, ApprovalCheckResult, ApprovalDecideResult, ApprovalResolveResult, ApprovalsNamespace, CheckResult, ClassifyResult, ConfigNamespace, ConfigResult, DegradationAction, DegradationContext, DegradationDefaults, Lancer, LancerConfig, LancerServiceName, LeakageResult, OnServiceUnavailable, PiiEntity, PrimusNamespace, PromptOverride, TelemetryEvent, TelemetryNamespace, Violation, WardenNamespace, } from './types.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/lancer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TelemetryEvent } from './types.js';
|
|
2
|
+
export declare class TelemetryBuffer {
|
|
3
|
+
private readonly endpoint;
|
|
4
|
+
private readonly headers;
|
|
5
|
+
private readonly maxRetries;
|
|
6
|
+
private buffer;
|
|
7
|
+
private timer;
|
|
8
|
+
constructor(endpoint: string, headers: Record<string, string>, maxRetries: number);
|
|
9
|
+
/** Add an event to the buffer. Auto-flushes at threshold. */
|
|
10
|
+
add(event: TelemetryEvent): void;
|
|
11
|
+
/** Flush buffered events to the Proctor API. */
|
|
12
|
+
flush(): Promise<void>;
|
|
13
|
+
/** Tear down the auto-flush interval. */
|
|
14
|
+
destroy(): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Telemetry event buffer — batches events and flushes to the Proctor API
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
const FLUSH_THRESHOLD = 50;
|
|
5
|
+
const FLUSH_INTERVAL_MS = 5_000;
|
|
6
|
+
export class TelemetryBuffer {
|
|
7
|
+
endpoint;
|
|
8
|
+
headers;
|
|
9
|
+
maxRetries;
|
|
10
|
+
buffer = [];
|
|
11
|
+
timer = null;
|
|
12
|
+
constructor(endpoint, headers, maxRetries) {
|
|
13
|
+
this.endpoint = endpoint;
|
|
14
|
+
this.headers = headers;
|
|
15
|
+
this.maxRetries = maxRetries;
|
|
16
|
+
this.timer = setInterval(() => {
|
|
17
|
+
if (this.buffer.length > 0)
|
|
18
|
+
this.flush().catch(() => { });
|
|
19
|
+
}, FLUSH_INTERVAL_MS);
|
|
20
|
+
}
|
|
21
|
+
/** Add an event to the buffer. Auto-flushes at threshold. */
|
|
22
|
+
add(event) {
|
|
23
|
+
this.buffer.push(event);
|
|
24
|
+
if (this.buffer.length >= FLUSH_THRESHOLD) {
|
|
25
|
+
this.flush().catch(() => { });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Flush buffered events to the Proctor API. */
|
|
29
|
+
async flush() {
|
|
30
|
+
if (this.buffer.length === 0)
|
|
31
|
+
return;
|
|
32
|
+
const batch = this.buffer.splice(0);
|
|
33
|
+
let lastError;
|
|
34
|
+
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
35
|
+
try {
|
|
36
|
+
const res = await fetch(this.endpoint, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: this.headers,
|
|
39
|
+
body: JSON.stringify({ events: batch }),
|
|
40
|
+
});
|
|
41
|
+
if (res.ok)
|
|
42
|
+
return;
|
|
43
|
+
lastError = new Error(`HTTP ${res.status}`);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
lastError = err;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// All retries exhausted — push events back to the buffer
|
|
50
|
+
this.buffer.unshift(...batch);
|
|
51
|
+
throw lastError;
|
|
52
|
+
}
|
|
53
|
+
/** Tear down the auto-flush interval. */
|
|
54
|
+
destroy() {
|
|
55
|
+
if (this.timer) {
|
|
56
|
+
clearInterval(this.timer);
|
|
57
|
+
this.timer = null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=telemetry-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-buffer.js","sourceRoot":"","sources":["../../../src/server/lancer/telemetry-buffer.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAI9E,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,MAAM,OAAO,eAAe;IAKP;IACA;IACA;IANX,MAAM,GAAqB,EAAE,CAAC;IAC9B,KAAK,GAA0C,IAAI,CAAC;IAE5D,YACmB,QAAgB,EAChB,OAA+B,EAC/B,UAAkB;QAFlB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,YAAO,GAAP,OAAO,CAAwB;QAC/B,eAAU,GAAV,UAAU,CAAQ;QAEnC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAyC,CAAC,CAAC,CAAC;QAClG,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxB,CAAC;IAED,6DAA6D;IAC7D,GAAG,CAAC,KAAqB;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAkD,CAAC,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,SAAkB,CAAC;QACvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;oBACrC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;iBACxC,CAAC,CAAC;gBACH,IAAI,GAAG,CAAC,EAAE;oBAAE,OAAO;gBACnB,SAAS,GAAG,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,GAAG,GAAG,CAAC;YAClB,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9B,MAAM,SAAS,CAAC;IAClB,CAAC;IAED,yCAAyC;IACzC,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Names of Glirastes services that can be called by the Lancer client.
|
|
3
|
+
* Used to identify which service failed in degradation callbacks.
|
|
4
|
+
*/
|
|
5
|
+
export type LancerServiceName = 'warden' | 'primus' | 'aegis' | 'proctor' | 'config' | 'approvals';
|
|
6
|
+
/**
|
|
7
|
+
* What to do when a Glirastes service is unavailable:
|
|
8
|
+
* - 'fallback': Return the safe default value (calls onDegraded if set).
|
|
9
|
+
* - 'block': Throw a ServiceBlockedError — use for critical guardrails.
|
|
10
|
+
* - 'silent': Return the safe default value without calling onDegraded.
|
|
11
|
+
*/
|
|
12
|
+
export type DegradationAction = 'fallback' | 'block' | 'silent';
|
|
13
|
+
/** Context passed to the onServiceUnavailable callback. */
|
|
14
|
+
export interface DegradationContext {
|
|
15
|
+
/** Which Glirastes service could not be reached. */
|
|
16
|
+
service: LancerServiceName;
|
|
17
|
+
/** The underlying error from the failed API call. */
|
|
18
|
+
error: Error;
|
|
19
|
+
/** Arbitrary request context (e.g. ToolContext) forwarded by the caller, if available. */
|
|
20
|
+
requestContext?: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Static per-service degradation action overrides.
|
|
24
|
+
* Any service not listed falls back to the built-in default
|
|
25
|
+
* ('fallback' for all services except proctor, which defaults to 'silent').
|
|
26
|
+
*/
|
|
27
|
+
export interface DegradationDefaults {
|
|
28
|
+
warden?: DegradationAction;
|
|
29
|
+
primus?: DegradationAction;
|
|
30
|
+
aegis?: DegradationAction;
|
|
31
|
+
proctor?: DegradationAction;
|
|
32
|
+
config?: DegradationAction;
|
|
33
|
+
approvals?: DegradationAction;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Dynamic per-request degradation decision.
|
|
37
|
+
* Called after static defaults are resolved; its return value takes precedence.
|
|
38
|
+
* May be async (e.g. for remote policy lookups).
|
|
39
|
+
*/
|
|
40
|
+
export type OnServiceUnavailable = (ctx: DegradationContext) => DegradationAction | Promise<DegradationAction>;
|
|
41
|
+
/** Configuration for creating a Lancer client instance. */
|
|
42
|
+
export interface LancerConfig {
|
|
43
|
+
apiKey: string;
|
|
44
|
+
baseUrl?: string;
|
|
45
|
+
cache?: {
|
|
46
|
+
ttl: number;
|
|
47
|
+
};
|
|
48
|
+
retry?: {
|
|
49
|
+
maxRetries: number;
|
|
50
|
+
};
|
|
51
|
+
/** Called whenever any service falls back (action='fallback'). */
|
|
52
|
+
onDegraded?: () => void;
|
|
53
|
+
/**
|
|
54
|
+
* Static per-service degradation action overrides.
|
|
55
|
+
* Overrides the built-in defaults ('fallback' / 'silent') per service.
|
|
56
|
+
*/
|
|
57
|
+
degradation?: DegradationDefaults;
|
|
58
|
+
/**
|
|
59
|
+
* Dynamic degradation callback. Invoked on every service failure;
|
|
60
|
+
* its return value overrides both built-in and static defaults.
|
|
61
|
+
*/
|
|
62
|
+
onServiceUnavailable?: OnServiceUnavailable;
|
|
63
|
+
/** Identifies which agent is calling (e.g. "claude-code", "gpt-4o"). Sent as X-Agent-Id header. */
|
|
64
|
+
agentId?: string;
|
|
65
|
+
/** Broad agent category. Sent as X-Agent-Type header. */
|
|
66
|
+
agentType?: 'claude' | 'openai' | 'open-source' | 'custom';
|
|
67
|
+
}
|
|
68
|
+
export interface PromptOverride {
|
|
69
|
+
moduleId: string;
|
|
70
|
+
mode: 'replace' | 'patch';
|
|
71
|
+
systemPrompt: string | null;
|
|
72
|
+
promptPrefix: string | null;
|
|
73
|
+
promptSuffix: string | null;
|
|
74
|
+
modelTierOverride: string | null;
|
|
75
|
+
}
|
|
76
|
+
export interface ConfigResult {
|
|
77
|
+
modules: Record<string, unknown>;
|
|
78
|
+
prompts?: PromptOverride[];
|
|
79
|
+
models?: Record<string, string>;
|
|
80
|
+
etag?: string;
|
|
81
|
+
}
|
|
82
|
+
export interface ClassifyResult {
|
|
83
|
+
moduleId: string;
|
|
84
|
+
confidence: number;
|
|
85
|
+
modelTier: string;
|
|
86
|
+
}
|
|
87
|
+
export interface PiiEntity {
|
|
88
|
+
type: string;
|
|
89
|
+
value: string;
|
|
90
|
+
start: number;
|
|
91
|
+
end: number;
|
|
92
|
+
confidence?: number;
|
|
93
|
+
}
|
|
94
|
+
export interface AnalyzeResult {
|
|
95
|
+
entities: PiiEntity[];
|
|
96
|
+
anonymized: string;
|
|
97
|
+
mappingToken: string | null;
|
|
98
|
+
detector?: 'regex' | 'presidio';
|
|
99
|
+
}
|
|
100
|
+
export interface AnalyzeOptions {
|
|
101
|
+
locales?: string[];
|
|
102
|
+
mode?: 'anonymize' | 'pseudonymize';
|
|
103
|
+
sessionId?: string;
|
|
104
|
+
}
|
|
105
|
+
export interface LeakageResult {
|
|
106
|
+
leaked: boolean;
|
|
107
|
+
entities: PiiEntity[];
|
|
108
|
+
totalDetected: number;
|
|
109
|
+
filteredAsKnown: number;
|
|
110
|
+
}
|
|
111
|
+
export interface Violation {
|
|
112
|
+
rule: string;
|
|
113
|
+
severity: string;
|
|
114
|
+
message: string;
|
|
115
|
+
}
|
|
116
|
+
export interface CheckResult {
|
|
117
|
+
passed: boolean;
|
|
118
|
+
violations: Violation[];
|
|
119
|
+
}
|
|
120
|
+
export interface TelemetryEvent {
|
|
121
|
+
eventType: string;
|
|
122
|
+
traceId?: string;
|
|
123
|
+
toolId?: string;
|
|
124
|
+
tokensIn?: number;
|
|
125
|
+
tokensOut?: number;
|
|
126
|
+
latencyMs?: number;
|
|
127
|
+
modelId?: string;
|
|
128
|
+
modelTier?: string;
|
|
129
|
+
/** ISO-8601 timestamp of when the event occurred on the client. Used for accurate timeline ordering. */
|
|
130
|
+
timestamp?: string;
|
|
131
|
+
payload?: Record<string, unknown>;
|
|
132
|
+
actor?: Record<string, unknown>;
|
|
133
|
+
}
|
|
134
|
+
export interface PrimusNamespace {
|
|
135
|
+
classify(message: string, modules: {
|
|
136
|
+
moduleId: string;
|
|
137
|
+
}[]): Promise<ClassifyResult>;
|
|
138
|
+
}
|
|
139
|
+
export interface WardenNamespace {
|
|
140
|
+
check(input: string, policies: string[]): Promise<CheckResult>;
|
|
141
|
+
}
|
|
142
|
+
export interface AegisNamespace {
|
|
143
|
+
analyze(text: string, options?: AnalyzeOptions): Promise<AnalyzeResult>;
|
|
144
|
+
rehydrate(text: string, mappingToken: string): Promise<string>;
|
|
145
|
+
checkLeakage(text: string, mappingToken: string, locales?: string[]): Promise<LeakageResult>;
|
|
146
|
+
}
|
|
147
|
+
export interface ConfigNamespace {
|
|
148
|
+
fetch(modules: string[]): Promise<ConfigResult>;
|
|
149
|
+
/**
|
|
150
|
+
* Report the app's default model configuration to Glirastes.
|
|
151
|
+
* Fire-and-forget — errors are silently ignored.
|
|
152
|
+
* Called automatically by the SDK adapter on first request.
|
|
153
|
+
*/
|
|
154
|
+
reportModels(models: Record<string, string>): Promise<void>;
|
|
155
|
+
}
|
|
156
|
+
export interface TelemetryNamespace {
|
|
157
|
+
emit(event: TelemetryEvent): void;
|
|
158
|
+
flush(): Promise<void>;
|
|
159
|
+
}
|
|
160
|
+
export interface ApprovalCheckResult {
|
|
161
|
+
required: boolean;
|
|
162
|
+
requestId?: string | null;
|
|
163
|
+
status?: string;
|
|
164
|
+
}
|
|
165
|
+
export interface ApprovalDecideResult {
|
|
166
|
+
ok: boolean;
|
|
167
|
+
}
|
|
168
|
+
export interface ApprovalResolveResult {
|
|
169
|
+
resolved: boolean;
|
|
170
|
+
requestId?: string;
|
|
171
|
+
}
|
|
172
|
+
export interface ApprovalsNamespace {
|
|
173
|
+
check(req: {
|
|
174
|
+
toolId: string;
|
|
175
|
+
inputHash: string;
|
|
176
|
+
/** Optional trace/session ID forwarded to Glirastes for approval audit correlation. */
|
|
177
|
+
traceId?: string;
|
|
178
|
+
}): Promise<ApprovalCheckResult>;
|
|
179
|
+
decide(requestId: string, decision: {
|
|
180
|
+
decision: 'approved' | 'denied';
|
|
181
|
+
decidedBy: string;
|
|
182
|
+
}): Promise<ApprovalDecideResult>;
|
|
183
|
+
/** Resolve a pending approval by toolId + inputHash (no requestId needed). */
|
|
184
|
+
resolve(req: {
|
|
185
|
+
toolId: string;
|
|
186
|
+
inputHash: string;
|
|
187
|
+
decision: 'approved' | 'denied';
|
|
188
|
+
decidedBy: string;
|
|
189
|
+
}): Promise<ApprovalResolveResult>;
|
|
190
|
+
hashInput(args: Record<string, unknown>): string;
|
|
191
|
+
}
|
|
192
|
+
export interface Lancer {
|
|
193
|
+
primus: PrimusNamespace;
|
|
194
|
+
warden: WardenNamespace;
|
|
195
|
+
aegis: AegisNamespace;
|
|
196
|
+
config: ConfigNamespace;
|
|
197
|
+
telemetry: TelemetryNamespace;
|
|
198
|
+
/** Approval flows managed by Glirastes. Optional — only present when the Glirastes API supports approvals. */
|
|
199
|
+
approvals?: ApprovalsNamespace;
|
|
200
|
+
destroy(): void;
|
|
201
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/lancer/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { PiiDetector } from '../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Shape of an Aegis-compatible analyze method (duck-typed, no Lancer dep).
|
|
4
|
+
* Matches `lancer.aegis.analyze()`.
|
|
5
|
+
*/
|
|
6
|
+
export interface AegisLike {
|
|
7
|
+
analyze(text: string, locales: string[]): Promise<{
|
|
8
|
+
entities: Array<{
|
|
9
|
+
type: string;
|
|
10
|
+
start: number;
|
|
11
|
+
end: number;
|
|
12
|
+
value: string;
|
|
13
|
+
confidence?: number;
|
|
14
|
+
}>;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Creates a PiiDetector that delegates to a Lancer Aegis namespace.
|
|
19
|
+
*
|
|
20
|
+
* Usage:
|
|
21
|
+
* ```ts
|
|
22
|
+
* import { createAegisDetector } from './index.js';
|
|
23
|
+
* const detector = createAegisDetector(lancer.aegis);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function createAegisDetector(aegis: AegisLike): PiiDetector;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a PiiDetector that delegates to a Lancer Aegis namespace.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { createAegisDetector } from './index.js';
|
|
7
|
+
* const detector = createAegisDetector(lancer.aegis);
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
export function createAegisDetector(aegis) {
|
|
11
|
+
return {
|
|
12
|
+
async detect(text, locales) {
|
|
13
|
+
const result = await aegis.analyze(text, locales ?? ['de', 'en']);
|
|
14
|
+
return result.entities.map((e) => ({
|
|
15
|
+
type: e.type,
|
|
16
|
+
start: e.start,
|
|
17
|
+
end: e.end,
|
|
18
|
+
score: e.confidence ?? 1.0,
|
|
19
|
+
text: e.value,
|
|
20
|
+
}));
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=aegis-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aegis-detector.js","sourceRoot":"","sources":["../../../src/server/pii-shield/aegis-detector.ts"],"names":[],"mappings":"AAkBA;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgB;IAClD,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,OAAkB;YAC3C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,KAAK,EAAE,CAAC,CAAC,UAAU,IAAI,GAAG;gBAC1B,IAAI,EAAE,CAAC,CAAC,KAAK;aACd,CAAC,CAAC,CAAC;QACN,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { createSessionStore } from './session-mapping.js';
|
|
2
|
+
import { deepWalkReplace } from './deep-walk.js';
|
|
3
|
+
import { detectLeakage } from './leakage.js';
|
|
4
|
+
export function createPiiShield(config) {
|
|
5
|
+
const store = createSessionStore(config.locale);
|
|
6
|
+
const auditLog = new Map();
|
|
7
|
+
const sessionStats = new Map();
|
|
8
|
+
function getStats(sessionId) {
|
|
9
|
+
let stats = sessionStats.get(sessionId);
|
|
10
|
+
if (!stats) {
|
|
11
|
+
stats = { startedAt: Date.now(), totalMessages: 0, totalToolCalls: 0, leakageDetected: 0 };
|
|
12
|
+
sessionStats.set(sessionId, stats);
|
|
13
|
+
}
|
|
14
|
+
return stats;
|
|
15
|
+
}
|
|
16
|
+
function addAuditEntry(entry) {
|
|
17
|
+
let entries = auditLog.get(entry.sessionId);
|
|
18
|
+
if (!entries) {
|
|
19
|
+
entries = [];
|
|
20
|
+
auditLog.set(entry.sessionId, entries);
|
|
21
|
+
}
|
|
22
|
+
entries.push(entry);
|
|
23
|
+
config.onAudit?.(entry);
|
|
24
|
+
}
|
|
25
|
+
function buildAuditEntry(sessionId, direction, entities, opts) {
|
|
26
|
+
return {
|
|
27
|
+
sessionId,
|
|
28
|
+
timestamp: new Date().toISOString(),
|
|
29
|
+
direction,
|
|
30
|
+
leakage: opts?.leakage,
|
|
31
|
+
detections: entities.map((e) => ({
|
|
32
|
+
type: e.type,
|
|
33
|
+
detector: 'pii-shield',
|
|
34
|
+
confidence: e.score,
|
|
35
|
+
position: { start: e.start, end: e.end },
|
|
36
|
+
length: e.text.length,
|
|
37
|
+
})),
|
|
38
|
+
totalDetected: entities.length,
|
|
39
|
+
totalAnonymized: entities.length,
|
|
40
|
+
mode: 'pseudonymize',
|
|
41
|
+
locale: config.locale,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async function outbound(text, sessionId) {
|
|
45
|
+
const session = store.getOrCreate(sessionId);
|
|
46
|
+
const stats = getStats(sessionId);
|
|
47
|
+
stats.totalMessages++;
|
|
48
|
+
const detected = await config.detector.detect(text, [config.locale]);
|
|
49
|
+
if (detected.length === 0) {
|
|
50
|
+
addAuditEntry(buildAuditEntry(sessionId, 'outbound', []));
|
|
51
|
+
return text;
|
|
52
|
+
}
|
|
53
|
+
// Sort by start descending so replacements don't shift indices
|
|
54
|
+
const sorted = [...detected].sort((a, b) => b.start - a.start);
|
|
55
|
+
let result = text;
|
|
56
|
+
for (const entity of sorted) {
|
|
57
|
+
const pseudonym = session.getOrCreatePseudonym(entity.text, entity.type);
|
|
58
|
+
result = result.slice(0, entity.start) + pseudonym + result.slice(entity.end);
|
|
59
|
+
}
|
|
60
|
+
addAuditEntry(buildAuditEntry(sessionId, 'outbound', detected));
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
function inbound(text, sessionId) {
|
|
64
|
+
const session = store.getOrCreate(sessionId);
|
|
65
|
+
// Check for leakage BEFORE de-pseudonymization
|
|
66
|
+
if (config.leakageDetection) {
|
|
67
|
+
const originals = session.allOriginals();
|
|
68
|
+
const leaked = detectLeakage(text, originals);
|
|
69
|
+
if (leaked.length > 0) {
|
|
70
|
+
const stats = getStats(sessionId);
|
|
71
|
+
stats.leakageDetected += leaked.length;
|
|
72
|
+
const leakEntities = leaked.map((l) => ({
|
|
73
|
+
type: 'custom',
|
|
74
|
+
start: text.indexOf(l),
|
|
75
|
+
end: text.indexOf(l) + l.length,
|
|
76
|
+
score: 1.0,
|
|
77
|
+
text: l,
|
|
78
|
+
}));
|
|
79
|
+
addAuditEntry(buildAuditEntry(sessionId, 'inbound', leakEntities, { leakage: true }));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Replace pseudonyms with originals
|
|
83
|
+
const originals = session.allOriginals();
|
|
84
|
+
let result = text;
|
|
85
|
+
for (const original of originals) {
|
|
86
|
+
const pseudonym = session.getPseudonym(original);
|
|
87
|
+
if (!pseudonym)
|
|
88
|
+
continue;
|
|
89
|
+
result = result.split(pseudonym).join(original);
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
function rehydrateArgs(args, sessionId) {
|
|
94
|
+
const session = store.getOrCreate(sessionId);
|
|
95
|
+
const result = deepWalkReplace(args, (s) => {
|
|
96
|
+
// Check if the entire string is a known pseudonym
|
|
97
|
+
const original = session.resolveOriginal(s);
|
|
98
|
+
if (original)
|
|
99
|
+
return original;
|
|
100
|
+
// Check if any known pseudonyms appear as substrings
|
|
101
|
+
const originals = session.allOriginals();
|
|
102
|
+
let replaced = s;
|
|
103
|
+
for (const orig of originals) {
|
|
104
|
+
const pseudonym = session.getPseudonym(orig);
|
|
105
|
+
if (!pseudonym)
|
|
106
|
+
continue;
|
|
107
|
+
replaced = replaced.split(pseudonym).join(orig);
|
|
108
|
+
}
|
|
109
|
+
return replaced;
|
|
110
|
+
});
|
|
111
|
+
addAuditEntry(buildAuditEntry(sessionId, 'rehydrate-args', []));
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
async function anonymizeResult(result, sessionId) {
|
|
115
|
+
const session = store.getOrCreate(sessionId);
|
|
116
|
+
const stats = getStats(sessionId);
|
|
117
|
+
stats.totalToolCalls++;
|
|
118
|
+
// Detect PII in stringified result
|
|
119
|
+
const text = typeof result === 'string' ? result : JSON.stringify(result);
|
|
120
|
+
const detected = await config.detector.detect(text, [config.locale]);
|
|
121
|
+
// Ensure pseudonyms exist for all detected entities
|
|
122
|
+
for (const entity of detected) {
|
|
123
|
+
session.getOrCreatePseudonym(entity.text, entity.type);
|
|
124
|
+
}
|
|
125
|
+
// Deep-walk and replace originals with pseudonyms
|
|
126
|
+
const originals = session.allOriginals();
|
|
127
|
+
const anonymized = deepWalkReplace(result, (s) => {
|
|
128
|
+
let replaced = s;
|
|
129
|
+
for (const original of originals) {
|
|
130
|
+
const pseudonym = session.getPseudonym(original);
|
|
131
|
+
if (!pseudonym)
|
|
132
|
+
continue;
|
|
133
|
+
replaced = replaced.split(original).join(pseudonym);
|
|
134
|
+
}
|
|
135
|
+
return replaced;
|
|
136
|
+
});
|
|
137
|
+
addAuditEntry(buildAuditEntry(sessionId, 'anonymize-result', detected));
|
|
138
|
+
return anonymized;
|
|
139
|
+
}
|
|
140
|
+
function getComplianceSummary(sessionId) {
|
|
141
|
+
const stats = getStats(sessionId);
|
|
142
|
+
const entries = auditLog.get(sessionId) ?? [];
|
|
143
|
+
const byType = {};
|
|
144
|
+
const byDetector = {};
|
|
145
|
+
const byDirection = {};
|
|
146
|
+
let totalDetected = 0;
|
|
147
|
+
for (const entry of entries) {
|
|
148
|
+
totalDetected += entry.totalDetected;
|
|
149
|
+
byDirection[entry.direction] = (byDirection[entry.direction] ?? 0) + entry.totalDetected;
|
|
150
|
+
for (const det of entry.detections) {
|
|
151
|
+
byType[det.type] = (byType[det.type] ?? 0) + 1;
|
|
152
|
+
byDetector[det.detector] = (byDetector[det.detector] ?? 0) + 1;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const durationMs = Date.now() - stats.startedAt;
|
|
156
|
+
const durationSec = Math.floor(durationMs / 1000);
|
|
157
|
+
const minutes = Math.floor(durationSec / 60);
|
|
158
|
+
const seconds = durationSec % 60;
|
|
159
|
+
return {
|
|
160
|
+
sessionId,
|
|
161
|
+
duration: `${minutes}m ${seconds}s`,
|
|
162
|
+
totalMessages: stats.totalMessages,
|
|
163
|
+
totalToolCalls: stats.totalToolCalls,
|
|
164
|
+
piiStats: {
|
|
165
|
+
totalDetected,
|
|
166
|
+
byType,
|
|
167
|
+
byDetector,
|
|
168
|
+
byDirection,
|
|
169
|
+
},
|
|
170
|
+
mode: 'pseudonymize',
|
|
171
|
+
leakageDetected: stats.leakageDetected,
|
|
172
|
+
verdict: stats.leakageDetected > 0 ? 'LEAKAGE_DETECTED' : 'COMPLIANT',
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function clearSession(sessionId) {
|
|
176
|
+
store.clear(sessionId);
|
|
177
|
+
auditLog.delete(sessionId);
|
|
178
|
+
sessionStats.delete(sessionId);
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
outbound,
|
|
182
|
+
inbound,
|
|
183
|
+
rehydrateArgs,
|
|
184
|
+
anonymizeResult,
|
|
185
|
+
getComplianceSummary,
|
|
186
|
+
clearSession,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=create-pii-shield.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-pii-shield.js","sourceRoot":"","sources":["../../../src/server/pii-shield/create-pii-shield.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function deepWalkReplace(value: unknown, replacer: (s: string) => string): unknown;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function deepWalkReplace(value, replacer) {
|
|
2
|
+
if (typeof value === 'string') {
|
|
3
|
+
return replacer(value);
|
|
4
|
+
}
|
|
5
|
+
if (Array.isArray(value)) {
|
|
6
|
+
return value.map((item) => deepWalkReplace(item, replacer));
|
|
7
|
+
}
|
|
8
|
+
if (value !== null && typeof value === 'object') {
|
|
9
|
+
const result = {};
|
|
10
|
+
for (const [key, val] of Object.entries(value)) {
|
|
11
|
+
result[key] = deepWalkReplace(val, replacer);
|
|
12
|
+
}
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=deep-walk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-walk.js","sourceRoot":"","sources":["../../../src/server/pii-shield/deep-walk.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,QAA+B;IAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|