bazis 0.96.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/LICENSE +21 -0
- package/README.md +146 -0
- package/cli/build.ts +147 -0
- package/cli/codegen.ts +40 -0
- package/cli/generateModule.ts +187 -0
- package/cli/generateProject.ts +183 -0
- package/cli/main.ts +125 -0
- package/cli/moduleRegistration.ts +127 -0
- package/cli/naming.ts +124 -0
- package/cli/parseCli.ts +151 -0
- package/cli/templates/module.ts +497 -0
- package/cli/templates/pack.ts +76 -0
- package/cli/templates/passport.ts +178 -0
- package/core/agent/AgentContextBuilder.ts +567 -0
- package/core/agent/AgentDataDefinition.ts +8 -0
- package/core/agent/AgentRegistry.ts +539 -0
- package/core/agent/AgentRuntime.ts +47 -0
- package/core/agent/AgentToolExecutor.ts +2130 -0
- package/core/agent/AgentToolHooks.ts +39 -0
- package/core/agent/ModelProvider.ts +21 -0
- package/core/agent/README.md +229 -0
- package/core/agent/Tool.contract.ts +20 -0
- package/core/agent/decorators/Agent.ts +11 -0
- package/core/agent/decorators/Prompt.ts +11 -0
- package/core/agent/decorators/Task.ts +29 -0
- package/core/agent/decorators/Tool.ts +12 -0
- package/core/agent/errors.ts +43 -0
- package/core/agent/generated/catalog.ts +26 -0
- package/core/agent/index.ts +170 -0
- package/core/agent/internal/AgentExecutionDriver.ts +1497 -0
- package/core/agent/internal/AgentExecutionState.ts +775 -0
- package/core/agent/internal/AgentJsonSchema.ts +150 -0
- package/core/agent/internal/AgentModelBinding.ts +57 -0
- package/core/agent/internal/Schema.contract.ts +36 -0
- package/core/agent/internal/ToolAudit.projector.ts +163 -0
- package/core/agent/internal/ToolContract.validator.ts +102 -0
- package/core/agent/metadata.ts +398 -0
- package/core/agent/moduleContributions-v1.ts +113 -0
- package/core/agent/semantic.ts +903 -0
- package/core/agent/session/codec.ts +33 -0
- package/core/agent/session/contracts.ts +96 -0
- package/core/agent/session/entities.ts +84 -0
- package/core/agent/session/protector.ts +92 -0
- package/core/app/index.ts +5 -0
- package/core/app/runApp.ts +293 -0
- package/core/app/ui/index.ts +29 -0
- package/core/app/ui/uiProfileResolver.ts +966 -0
- package/core/app/ui/uiSurfaceHosting.ts +38 -0
- package/core/app/ui/uiSurfaceHttp.ts +476 -0
- package/core/background/BackgroundService.ts +223 -0
- package/core/background/backgroundModule.ts +42 -0
- package/core/background/decorator.ts +43 -0
- package/core/background/delay.ts +27 -0
- package/core/background/index.ts +15 -0
- package/core/cache/COMPATIBILITY.md +13 -0
- package/core/cache/ICache.ts +71 -0
- package/core/cache/MemoryCache.ts +394 -0
- package/core/cache/README.md +83 -0
- package/core/cache/SPEC.md +1355 -0
- package/core/cache/cacheModule.ts +21 -0
- package/core/cache/decorators/Cacheable.ts +38 -0
- package/core/cache/decorators/CacheableRedis.ts +39 -0
- package/core/cache/decorators/OutputCache.ts +33 -0
- package/core/cache/decorators/OutputRedisCache.ts +33 -0
- package/core/cache/decorators/cacheableMetadata.ts +78 -0
- package/core/cache/decorators/cacheableRedisMetadata.ts +81 -0
- package/core/cache/decorators/outputCacheMetadata.ts +71 -0
- package/core/cache/decorators/outputRedisCacheMetadata.ts +77 -0
- package/core/cache/di/classProviderHook.ts +26 -0
- package/core/cache/distributed/CacheCodec.ts +5 -0
- package/core/cache/distributed/DistributedCache.ts +403 -0
- package/core/cache/distributed/DistributedCacheDriver.ts +83 -0
- package/core/cache/distributed/DistributedCacheStores.ts +28 -0
- package/core/cache/distributed/IDistributedCache.ts +40 -0
- package/core/cache/distributed/NamedCacheRegistry.ts +23 -0
- package/core/cache/distributed/codecs.ts +32 -0
- package/core/cache/distributed/index.ts +19 -0
- package/core/cache/errors/CacheError.ts +16 -0
- package/core/cache/http/CachedHttpPayload.ts +213 -0
- package/core/cache/http/applyClientCacheHeaders.ts +61 -0
- package/core/cache/http/buildOutputCacheKey.ts +154 -0
- package/core/cache/http/buildRedisOutputCacheKey.ts +16 -0
- package/core/cache/http/composeOutputCache.ts +130 -0
- package/core/cache/http/outputCacheMiddleware.ts +111 -0
- package/core/cache/http/outputCacheSecurityWarning.ts +58 -0
- package/core/cache/http/outputRedisCacheMiddleware.ts +118 -0
- package/core/cache/index.ts +97 -0
- package/core/cache/internal/AutomaticCacheKey.ts +106 -0
- package/core/cache/internal/CacheKeyGuard.ts +56 -0
- package/core/cache/internal/buildCacheProviders.ts +146 -0
- package/core/cache/internal/normalizeCacheKey.ts +9 -0
- package/core/cache/internal/resolveCachePolicy.ts +32 -0
- package/core/cache/internal/resolveCacheableRedisPolicy.ts +17 -0
- package/core/cache/internal/resolveOutputRedisCachePolicy.ts +17 -0
- package/core/cache/providers/cachedProviders.ts +68 -0
- package/core/cache/services/cacheProxy.ts +243 -0
- package/core/cache/tokens/CACHE_POLICIES.ts +5 -0
- package/core/cache/tokens/DISTRIBUTED_CACHE.ts +30 -0
- package/core/cache/types/CacheEntry.ts +7 -0
- package/core/cache/types/CacheOptions.ts +60 -0
- package/core/cache/types/CachePolicy.ts +74 -0
- package/core/cache/types/CacheableRedisOptions.ts +23 -0
- package/core/cache/types/OutputRedisCacheOptions.ts +25 -0
- package/core/di/README.md +104 -0
- package/core/di/ServiceCollection.ts +185 -0
- package/core/di/ServiceProvider.ts +689 -0
- package/core/di/ServiceScope.ts +61 -0
- package/core/di/container.ts +38 -0
- package/core/di/errors/AmbiguousNamedDependencyError.ts +10 -0
- package/core/di/errors/AsyncResolutionRequiredError.ts +12 -0
- package/core/di/errors/CircularDependencyError.ts +10 -0
- package/core/di/errors/ClassDependenciesMismatchError.ts +15 -0
- package/core/di/errors/DiError.ts +6 -0
- package/core/di/errors/InvalidProviderError.ts +9 -0
- package/core/di/errors/ModuleEncapsulationError.ts +7 -0
- package/core/di/errors/ModuleOwnedProviderConflictError.ts +8 -0
- package/core/di/errors/NamedDependencyNotFoundError.ts +7 -0
- package/core/di/errors/OptionsValidationError.ts +7 -0
- package/core/di/errors/ProviderNotFoundError.ts +10 -0
- package/core/di/errors/ScopeDisposedError.ts +7 -0
- package/core/di/errors/ScopedServiceFromRootError.ts +9 -0
- package/core/di/errors/ServiceValidationError.ts +7 -0
- package/core/di/errors/index.ts +14 -0
- package/core/di/extensions/activator.ts +39 -0
- package/core/di/extensions/application.ts +117 -0
- package/core/di/extensions/hosted-service.ts +124 -0
- package/core/di/extensions/index.ts +23 -0
- package/core/di/extensions/options-reloadable.ts +137 -0
- package/core/di/extensions/options.ts +91 -0
- package/core/di/extensions/service-provider-token.ts +21 -0
- package/core/di/index.ts +97 -0
- package/core/di/internal/GraphValidator.ts +119 -0
- package/core/di/internal/HostedServicePlan.ts +158 -0
- package/core/di/internal/NamedTokenIndex.ts +55 -0
- package/core/di/internal/OpenGenericRegistration.ts +14 -0
- package/core/di/internal/ResolutionPlan.ts +18 -0
- package/core/di/internal/ResolutionScopeState.ts +19 -0
- package/core/di/internal/ResolutionTracker.ts +153 -0
- package/core/di/internal/ScopeLifecycle.ts +159 -0
- package/core/di/internal/ServiceRegistration.ts +14 -0
- package/core/di/internal/ServiceRegistry.ts +252 -0
- package/core/di/internal/classDeps.ts +38 -0
- package/core/di/internal/disposal.ts +58 -0
- package/core/di/internal/providerDeps.ts +26 -0
- package/core/di/module/DI.ts +146 -0
- package/core/di/module/Global.ts +25 -0
- package/core/di/module/Module.ts +44 -0
- package/core/di/module/ModuleRegistrar.ts +69 -0
- package/core/di/module/autoDeps.ts +39 -0
- package/core/di/module/classProviderHooks.ts +66 -0
- package/core/di/module/collectModuleConfigs.ts +57 -0
- package/core/di/module/collectModuleControllers.ts +53 -0
- package/core/di/module/collectModuleUiProfiles.ts +53 -0
- package/core/di/module/createContainer.ts +261 -0
- package/core/di/module/encapsulation.ts +416 -0
- package/core/di/module/encapsulationHooks.ts +36 -0
- package/core/di/module/generatedProviderAttachments.ts +102 -0
- package/core/di/module/index.ts +41 -0
- package/core/di/module/moduleExtensions.ts +35 -0
- package/core/di/module/moduleNameBinding.ts +136 -0
- package/core/di/module/moduleOwnedProviderContributors.ts +409 -0
- package/core/di/module/providerSelection.ts +90 -0
- package/core/di/module/shortcuts.ts +111 -0
- package/core/di/module/types/BazisModule.ts +71 -0
- package/core/di/module/types/DiRegistrar.ts +24 -0
- package/core/di/module/types/index.ts +2 -0
- package/core/di/provider/index.ts +26 -0
- package/core/di/provider/providerGuards.ts +17 -0
- package/core/di/provider/types/AsyncFactoryProvider.ts +15 -0
- package/core/di/provider/types/ClassProvider.ts +18 -0
- package/core/di/provider/types/FactoryProvider.ts +20 -0
- package/core/di/provider/types/KeyedDependency.ts +20 -0
- package/core/di/provider/types/LazyDependency.ts +31 -0
- package/core/di/provider/types/NamedDependency.ts +16 -0
- package/core/di/provider/types/Provider.ts +10 -0
- package/core/di/provider/types/ProviderDefinition.ts +11 -0
- package/core/di/provider/types/ProviderDependencyList.ts +11 -0
- package/core/di/provider/types/ProviderLifetime.ts +1 -0
- package/core/di/provider/types/ProviderOwnership.ts +7 -0
- package/core/di/provider/types/ResolvedDeps.ts +18 -0
- package/core/di/provider/types/ValueProvider.ts +6 -0
- package/core/di/provider/types/index.ts +13 -0
- package/core/di/token.ts +84 -0
- package/core/di/types/BuildServiceProviderOptions.ts +4 -0
- package/core/di/types/ServiceKey.ts +1 -0
- package/core/di/types/ServiceResolver.ts +16 -0
- package/core/di/types/index.ts +3 -0
- package/core/generatedFingerprint.ts +60 -0
- package/core/generatedRuntime.ts +187 -0
- package/core/grpc/Grpc.module.ts +23 -0
- package/core/grpc/GrpcBinding.contract.ts +35 -0
- package/core/grpc/GrpcCall.ts +73 -0
- package/core/grpc/GrpcClient.ts +172 -0
- package/core/grpc/GrpcClientCall.ts +267 -0
- package/core/grpc/GrpcError.ts +19 -0
- package/core/grpc/GrpcRequest.binding.ts +45 -0
- package/core/grpc/GrpcServer.ts +204 -0
- package/core/grpc/GrpcStatus.ts +8 -0
- package/core/grpc/GrpcTransport.ts +174 -0
- package/core/grpc/Metadata.ts +73 -0
- package/core/grpc/ProtoCodec.ts +225 -0
- package/core/grpc/ProtoParser.ts +192 -0
- package/core/grpc/ProtoReader.ts +34 -0
- package/core/grpc/ProtoSchema.ts +52 -0
- package/core/grpc/ServerCredentials.ts +30 -0
- package/core/grpc/clientContracts.ts +39 -0
- package/core/grpc/contracts.ts +45 -0
- package/core/grpc/decorators.ts +82 -0
- package/core/grpc/grpcClientProvider.ts +9 -0
- package/core/grpc/index.ts +17 -0
- package/core/grpc/moduleControllers.ts +38 -0
- package/core/grpc/protobuf.ts +80 -0
- package/core/grpc/serviceDefinition.ts +20 -0
- package/core/http/Authorization/Authorize.ts +52 -0
- package/core/http/Authorization/authorizeComposer.ts +31 -0
- package/core/http/Authorization/metadata.ts +158 -0
- package/core/http/Binding/ParameterBinder.ts +109 -0
- package/core/http/Binding/RequestModel.ts +27 -0
- package/core/http/Binding/autoBindings.ts +125 -0
- package/core/http/Binding/bindings.ts +19 -0
- package/core/http/Binding/convert.ts +48 -0
- package/core/http/Binding/generatedSpec.ts +18 -0
- package/core/http/Binding/listModelRegistry.ts +47 -0
- package/core/http/Binding/modelBinder.ts +345 -0
- package/core/http/Binding/modelValidator.ts +30 -0
- package/core/http/Binding/requestModelRegistry.ts +117 -0
- package/core/http/Decorators/attributes.ts +92 -0
- package/core/http/Decorators/controller.ts +24 -0
- package/core/http/Decorators/metadata.ts +107 -0
- package/core/http/Decorators/routes.ts +131 -0
- package/core/http/Errors/HttpError.ts +92 -0
- package/core/http/HttpContext/HttpContext.ts +148 -0
- package/core/http/HttpContext/ResponseBuilder.ts +37 -0
- package/core/http/HttpContext/inspectableRedirects.ts +47 -0
- package/core/http/HttpContext/principal.ts +24 -0
- package/core/http/HttpContext/responseLifetime.ts +45 -0
- package/core/http/HttpServer.ts +627 -0
- package/core/http/Middleware/accessLog.ts +90 -0
- package/core/http/Middleware/cors.ts +160 -0
- package/core/http/Middleware/errorHandler.ts +100 -0
- package/core/http/Middleware/pipeline.ts +21 -0
- package/core/http/Middleware/rateLimit.ts +104 -0
- package/core/http/Middleware/securityHeaders.ts +118 -0
- package/core/http/Middleware/types.ts +19 -0
- package/core/http/OpenApi/generatedOpenApiRegistry.ts +102 -0
- package/core/http/OpenApi/openApiDocs.ts +75 -0
- package/core/http/OpenApi/openApiDocument.ts +356 -0
- package/core/http/README.md +139 -0
- package/core/http/Results/HttpResult.ts +19 -0
- package/core/http/Results/normalize.ts +93 -0
- package/core/http/Results/results.ts +70 -0
- package/core/http/Routing/Router.ts +201 -0
- package/core/http/Routing/RouterBuilder.ts +184 -0
- package/core/http/Routing/template.ts +112 -0
- package/core/http/SPEC.md +981 -0
- package/core/http/Versioning/VersionReader.ts +20 -0
- package/core/http/WebSocketUpgrade.ts +29 -0
- package/core/http/composeRouteMiddlewareComposers.ts +21 -0
- package/core/http/correlation/createCorrelationIdMiddleware.ts +79 -0
- package/core/http/httpModule.ts +48 -0
- package/core/http/index.ts +140 -0
- package/core/http/middlewareTokens.ts +48 -0
- package/core/http/options.ts +134 -0
- package/core/http-client/index.ts +105 -0
- package/core/infra/Infra.ts +158 -0
- package/core/infra/InfraConnector.ts +86 -0
- package/core/infra/InfraLifecycle.ts +86 -0
- package/core/infra/cache/RedisDistributedCacheBackend.ts +88 -0
- package/core/infra/cache/RedisDistributedCacheDriver.ts +186 -0
- package/core/infra/cache/index.ts +7 -0
- package/core/infra/connectorConfig.ts +29 -0
- package/core/infra/connectorIdentity.ts +39 -0
- package/core/infra/connectors/codex/CodexAppServer.ts +146 -0
- package/core/infra/connectors/codex/CodexAppServerClient.ts +258 -0
- package/core/infra/connectors/codex/CodexPolicy.ts +114 -0
- package/core/infra/connectors/codex/CodexTurn.ts +133 -0
- package/core/infra/connectors/codex/contracts.ts +82 -0
- package/core/infra/connectors/codex.ts +26 -0
- package/core/infra/connectors/llm.ts +78 -0
- package/core/infra/connectors/llmRouter.ts +443 -0
- package/core/infra/connectors/openaiCompatible.ts +590 -0
- package/core/infra/connectors/openaiTextStream.ts +134 -0
- package/core/infra/connectors/opensearch.ts +307 -0
- package/core/infra/connectors/postgres.ts +105 -0
- package/core/infra/connectors/redis.ts +132 -0
- package/core/infra/index.ts +58 -0
- package/core/kernel/ApplicationLifetime.ts +91 -0
- package/core/kernel/Bazis.ts +73 -0
- package/core/kernel/Environment.ts +53 -0
- package/core/kernel/Kernel.ts +391 -0
- package/core/kernel/KernelBuilder.ts +172 -0
- package/core/kernel/LifecycleCoordinator.ts +204 -0
- package/core/kernel/README.md +66 -0
- package/core/kernel/SupervisedHostedService.ts +147 -0
- package/core/kernel/config/ConfigRegistry.ts +48 -0
- package/core/kernel/config/Configuration.ts +110 -0
- package/core/kernel/config/README.md +62 -0
- package/core/kernel/config/Secret.ts +29 -0
- package/core/kernel/config/addConfigOptions.ts +63 -0
- package/core/kernel/config/defineConfig.ts +211 -0
- package/core/kernel/config/sources.ts +123 -0
- package/core/kernel/correlation/requestContext.ts +57 -0
- package/core/kernel/errors/ConfigKeyMissingError.ts +7 -0
- package/core/kernel/errors/KernelError.ts +7 -0
- package/core/kernel/errors/ShutdownTimeoutError.ts +7 -0
- package/core/kernel/errors/StartupAbortedError.ts +7 -0
- package/core/kernel/errors/StartupTimeoutError.ts +7 -0
- package/core/kernel/errors/index.ts +5 -0
- package/core/kernel/events/EventBus.ts +140 -0
- package/core/kernel/events/EventToken.ts +17 -0
- package/core/kernel/events/eventSubscribers.ts +126 -0
- package/core/kernel/events/kernelEvents.ts +16 -0
- package/core/kernel/events/onEvent.ts +32 -0
- package/core/kernel/health/HealthCheckContracts.ts +42 -0
- package/core/kernel/health/HealthService.ts +93 -0
- package/core/kernel/index.ts +96 -0
- package/core/kernel/internal/awaitAbortable.ts +18 -0
- package/core/kernel/internal/awaitShutdown.ts +21 -0
- package/core/kernel/internal/reportDiagnosticFailure.ts +8 -0
- package/core/kernel/internal/validateTimeout.ts +8 -0
- package/core/kernel/lifecycleHooks.ts +18 -0
- package/core/kernel/logging/ConsoleLogger.ts +68 -0
- package/core/kernel/logging/Logger.ts +22 -0
- package/core/kernel/types/ConfigSource.ts +9 -0
- package/core/kernel/types/EnvironmentName.ts +1 -0
- package/core/kernel/types/KernelOptions.ts +23 -0
- package/core/kernel/types/LifecycleHook.ts +18 -0
- package/core/kernel/types/index.ts +4 -0
- package/core/orm/DATABASE_PROVIDER.ts +5 -0
- package/core/orm/OrmHostedPlan.validator.ts +55 -0
- package/core/orm/OrmLifecycle.ts +146 -0
- package/core/orm/OrmOwnedStoreLifecycle.ts +96 -0
- package/core/orm/buildOrmProviders.ts +152 -0
- package/core/orm/databaseConnector.ts +108 -0
- package/core/orm/encapsulationHook.ts +19 -0
- package/core/orm/index.ts +95 -0
- package/core/orm/listQuery.ts +198 -0
- package/core/orm/ormModule.ts +173 -0
- package/core/orm/ownedStoreContributions.ts +195 -0
- package/core/orm/registerRepositories.ts +27 -0
- package/core/orm/repository.ts +45 -0
- package/core/orm/strictSchemaHostedIdentity.ts +17 -0
- package/core/scripts/agent-codegen.ts +1166 -0
- package/core/scripts/di-generate-target.ts +90 -0
- package/core/scripts/di-generate.ts +1837 -0
- package/core/scripts/orm-predicate-codegen.ts +33 -0
- package/core/scripts/request-model-codegen.ts +326 -0
- package/core/websocket/DESIGN.md +297 -0
- package/core/websocket/WsRateLimiter.ts +101 -0
- package/core/websocket/adapter/adapter.interface.ts +45 -0
- package/core/websocket/adapter/in-memory.adapter.ts +190 -0
- package/core/websocket/adapter/redis-delivery-scripts.ts +135 -0
- package/core/websocket/adapter/redis-delivery-store.ts +86 -0
- package/core/websocket/adapter/redis-operations.ts +33 -0
- package/core/websocket/adapter/redis.adapter.ts +218 -0
- package/core/websocket/codec/binary.codec.ts +87 -0
- package/core/websocket/codec/json.codec.ts +34 -0
- package/core/websocket/codec/packet-codec.interface.ts +17 -0
- package/core/websocket/decorators.ts +165 -0
- package/core/websocket/explorer.ts +126 -0
- package/core/websocket/index.ts +78 -0
- package/core/websocket/middleware.ts +146 -0
- package/core/websocket/packet-codec.ts +75 -0
- package/core/websocket/reliable-delivery.ts +56 -0
- package/core/websocket/session-creation.ts +16 -0
- package/core/websocket/session-manager.ts +856 -0
- package/core/websocket/socket-wrapper.ts +314 -0
- package/core/websocket/topic-cache.ts +59 -0
- package/core/websocket/types.ts +122 -0
- package/core/websocket/websocketModule.ts +96 -0
- package/core/websocket/ws-dispatch.ts +123 -0
- package/core/websocket/ws-server.ts +1707 -0
- package/index.ts +281 -0
- package/library/boundary/diagnostics-v1.ts +136 -0
- package/library/boundary/index.ts +73 -0
- package/library/boundary/json/decodeBoundedJsonV1.ts +518 -0
- package/library/boundary/json/limits-v1.ts +46 -0
- package/library/boundary/json/normalizeBoundedJsonV1.ts +256 -0
- package/library/boundary/json/types-v1.ts +11 -0
- package/library/boundary/schema/boundarySchemaHashV1.ts +6 -0
- package/library/boundary/schema/collectBoundaryValueDiagnosticsV1.ts +325 -0
- package/library/boundary/schema/decodeBoundarySchemaV1.ts +646 -0
- package/library/boundary/schema/index.ts +8 -0
- package/library/boundary/schema/types-v1.ts +99 -0
- package/library/boundary/schema/validateBoundaryValueV1.ts +58 -0
- package/library/boundary/serialization/canonicalJsonV1.ts +66 -0
- package/library/http-client/HttpClient.ts +969 -0
- package/library/http-client/HttpClientFactory.ts +45 -0
- package/library/http-client/errors.ts +68 -0
- package/library/http-client/index.ts +43 -0
- package/library/http-client/interceptors.ts +40 -0
- package/library/http-client/progress.ts +62 -0
- package/library/http-client/redirectProtocol.ts +6 -0
- package/library/http-client/serialize.ts +133 -0
- package/library/http-client/types.ts +174 -0
- package/library/jsonapi/ListQueryError.ts +25 -0
- package/library/jsonapi/ListRequest.ts +37 -0
- package/library/jsonapi/decorators.ts +161 -0
- package/library/jsonapi/document.ts +124 -0
- package/library/jsonapi/index.ts +40 -0
- package/library/jsonapi/parseListQuery.ts +291 -0
- package/library/jsonapi/types.ts +125 -0
- package/library/jwt/JwtEncoder.ts +40 -0
- package/library/jwt/JwtKeyRing.ts +164 -0
- package/library/jwt/JwtValidator.ts +210 -0
- package/library/jwt/TokenIssuer.ts +149 -0
- package/library/jwt/TokenService.ts +51 -0
- package/library/jwt/base64url.ts +61 -0
- package/library/jwt/claims.ts +36 -0
- package/library/jwt/errors.ts +44 -0
- package/library/jwt/index.ts +59 -0
- package/library/jwt/limits.ts +8 -0
- package/library/jwt/signing/Hs256Algorithm.ts +62 -0
- package/library/jwt/signing/Rs256Algorithm.ts +133 -0
- package/library/jwt/signing/SigningAlgorithm.ts +18 -0
- package/library/jwt/signing/pem.ts +30 -0
- package/library/openapi/codegen.ts +875 -0
- package/library/openapi/document.ts +326 -0
- package/library/openapi/index.ts +13 -0
- package/library/openapi/types.ts +69 -0
- package/library/openapi/ui.ts +182 -0
- package/library/orm/DatabaseFacade.ts +209 -0
- package/library/orm/DbContext.ts +107 -0
- package/library/orm/DbContextFactory.ts +25 -0
- package/library/orm/DbContextOptions.ts +33 -0
- package/library/orm/Metadata/DynamicModelBuilder.ts +497 -0
- package/library/orm/Metadata/KeyTuple.ts +36 -0
- package/library/orm/Metadata/ModelBuilder.ts +299 -0
- package/library/orm/Metadata/OrmModel.ts +80 -0
- package/library/orm/Metadata/ValueConverter.ts +57 -0
- package/library/orm/Metadata/conventions.ts +54 -0
- package/library/orm/Metadata/decorators.ts +396 -0
- package/library/orm/Metadata/types.ts +140 -0
- package/library/orm/Providers/OwnedStoreCatalog.reader.ts +1802 -0
- package/library/orm/Providers/PostgresDialect.ts +234 -0
- package/library/orm/Providers/PostgresProvider.ts +1494 -0
- package/library/orm/Providers/PostgresSchema.decoder.ts +107 -0
- package/library/orm/Providers/limits.ts +29 -0
- package/library/orm/Providers/operationDeadline.ts +43 -0
- package/library/orm/Providers/ormOwnedStoreRuntime.ts +19 -0
- package/library/orm/Providers/ormTransactionRuntime.ts +117 -0
- package/library/orm/Providers/propertyConversion.ts +14 -0
- package/library/orm/Providers/resolvedForeignKey.ts +16 -0
- package/library/orm/Providers/transactionCallbacks.ts +45 -0
- package/library/orm/Providers/transactionOutcome.ts +82 -0
- package/library/orm/Providers/transactionScopes.ts +78 -0
- package/library/orm/Providers/types.ts +207 -0
- package/library/orm/Query/DbSet.ts +78 -0
- package/library/orm/Query/EntityQuery.ts +247 -0
- package/library/orm/Query/ImmediateMutations.ts +226 -0
- package/library/orm/Query/IncludeLoader.ts +200 -0
- package/library/orm/Query/QueryPlan.ts +55 -0
- package/library/orm/Query/SqlTranslator.ts +195 -0
- package/library/orm/Query/conditions.ts +127 -0
- package/library/orm/Query/materialize.ts +39 -0
- package/library/orm/README.md +256 -0
- package/library/orm/Repository/README.md +684 -0
- package/library/orm/Repository/Repository.ts +68 -0
- package/library/orm/Saving/CommandBuilder.ts +139 -0
- package/library/orm/Saving/ExecutionStrategy.ts +128 -0
- package/library/orm/Saving/SaveExecutor.ts +413 -0
- package/library/orm/Saving/applyConventions.ts +64 -0
- package/library/orm/Schema/CheckExpression.ts +327 -0
- package/library/orm/Schema/ExactSchemaVerifier.ts +168 -0
- package/library/orm/Schema/ExpectedSchema.ts +43 -0
- package/library/orm/Schema/MigrationRunner.ts +146 -0
- package/library/orm/Schema/Migrator.ts +73 -0
- package/library/orm/Schema/OrmOwnedStore.ts +123 -0
- package/library/orm/Schema/OwnedStoreAdmission.ts +752 -0
- package/library/orm/Schema/OwnedStoreCanonical.ts +273 -0
- package/library/orm/Schema/OwnedStoreCatalog.ts +1325 -0
- package/library/orm/Schema/SafeAdditiveSchema.ts +100 -0
- package/library/orm/Schema/SchemaAdmission.ts +62 -0
- package/library/orm/Schema/SchemaDiffer.ts +78 -0
- package/library/orm/Schema/formatSchemaDifferences.ts +62 -0
- package/library/orm/Schema/introspection.ts +52 -0
- package/library/orm/Schema/physicalColumnTypes.ts +37 -0
- package/library/orm/Schema/tableKey.ts +26 -0
- package/library/orm/Tracking/ChangeTracker.ts +448 -0
- package/library/orm/Tracking/EntityState.ts +13 -0
- package/library/orm/Transactions/OrmTransaction.ts +30 -0
- package/library/orm/Transactions/TransactionScopeCoordinator.ts +377 -0
- package/library/orm/errors.ts +190 -0
- package/library/orm/index.ts +162 -0
- package/library/orm/runtime.ts +14 -0
- package/library/redaction/index.ts +166 -0
- package/library/ui/UiProfile.ts +77 -0
- package/library/ui/compiled-v1.ts +131 -0
- package/library/ui/compiler/compileUiSurfaceV1.ts +717 -0
- package/library/ui/compiler/contracts-v1.ts +25 -0
- package/library/ui/compiler/index.ts +12 -0
- package/library/ui/compiler/openApiIndex.ts +246 -0
- package/library/ui/defineUiProfile.ts +340 -0
- package/library/ui/diagnostics-v1.ts +33 -0
- package/library/ui/index.ts +129 -0
- package/library/ui/profile-v1.ts +191 -0
- package/library/ui/serialization.ts +130 -0
- package/library/ui/uiProfileAuthoring.ts +289 -0
- package/library/ui/uiProfileAuthoringMetadata.ts +78 -0
- package/library/validation/MessageRegistry.ts +144 -0
- package/library/validation/README.md +62 -0
- package/library/validation/RuleCompiler.ts +183 -0
- package/library/validation/RuleEngine.ts +401 -0
- package/library/validation/SPEC.md +579 -0
- package/library/validation/ValidationError.ts +37 -0
- package/library/validation/ValidationResult.ts +63 -0
- package/library/validation/Validator.ts +101 -0
- package/library/validation/index.ts +16 -0
- package/library/validation/metadata.ts +69 -0
- package/library/validation/modelValidatorAdapter.ts +119 -0
- package/library/validation/types/ValidationCode.ts +69 -0
- package/library/validation/types/ValidatorOptions.ts +153 -0
- package/package.json +80 -0
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
import { DiContainer, expandModuleMetadata, type Class, type BazisModuleRef, type ServiceProvider } from "../di";
|
|
2
|
+
import { loadBazisGeneratedAgentMetadata } from "../generatedRuntime";
|
|
3
|
+
import { AgentSetupError } from "./errors";
|
|
4
|
+
import type { AgentDataDefinition } from "./AgentDataDefinition";
|
|
5
|
+
import { getAgentModuleContributionsV1 } from "./moduleContributions-v1";
|
|
6
|
+
import {
|
|
7
|
+
agentMetadataOf,
|
|
8
|
+
promptMetadataOf,
|
|
9
|
+
toolMetadataOf,
|
|
10
|
+
type AgentMetadata,
|
|
11
|
+
type AgentTaskMetadata,
|
|
12
|
+
type PromptMetadata,
|
|
13
|
+
type ToolMetadata,
|
|
14
|
+
} from "./metadata";
|
|
15
|
+
|
|
16
|
+
export interface AgentDefinition {
|
|
17
|
+
readonly target: Class<object>;
|
|
18
|
+
readonly metadata: AgentMetadata;
|
|
19
|
+
readonly prompt?: PromptDefinition;
|
|
20
|
+
readonly tools: readonly ToolDefinition[];
|
|
21
|
+
readonly tasks: readonly AgentTaskDefinition[];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface ToolDefinition {
|
|
25
|
+
readonly target: Class<object>;
|
|
26
|
+
readonly metadata: ToolMetadata;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface PromptDefinition {
|
|
30
|
+
readonly target: Class<object>;
|
|
31
|
+
readonly metadata: PromptMetadata;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface AgentTaskDefinition {
|
|
35
|
+
readonly agent: AgentDefinition;
|
|
36
|
+
readonly metadata: AgentTaskMetadata;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface AgentCatalog {
|
|
40
|
+
readonly agents: readonly AgentDefinition[];
|
|
41
|
+
readonly tools: readonly ToolDefinition[];
|
|
42
|
+
readonly prompts: readonly PromptDefinition[];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface AgentCatalogExtras {
|
|
46
|
+
readonly agents?: readonly Class<object>[];
|
|
47
|
+
readonly tools?: readonly Class<object>[];
|
|
48
|
+
readonly prompts?: readonly Class<object>[];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface AgentMetadataIndex {
|
|
52
|
+
readonly agents: ReadonlyMap<Class<object>, AgentMetadata>;
|
|
53
|
+
readonly tools: ReadonlyMap<Class<object>, ToolMetadata>;
|
|
54
|
+
readonly prompts: ReadonlyMap<Class<object>, PromptMetadata>;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
interface AgentModuleFields {
|
|
58
|
+
readonly agents?: readonly Class<object>[];
|
|
59
|
+
readonly tools?: readonly Class<object>[];
|
|
60
|
+
readonly prompts?: readonly Class<object>[];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Compatibility identity for the class-based catalog contract. Never instantiated;
|
|
64
|
+
// data agents have no decorated tasks or module registrations.
|
|
65
|
+
class DataAgentTarget {}
|
|
66
|
+
|
|
67
|
+
const containerCatalogs = new WeakMap<DiContainer, AgentRegistry>();
|
|
68
|
+
|
|
69
|
+
function debugNameOf(target: Class<object>): string {
|
|
70
|
+
return target.name || "<anonymous class>";
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function appendClass(target: Class<object>, out: Class<object>[], seen: Set<Class<object>>): void {
|
|
74
|
+
if (!seen.has(target)) {
|
|
75
|
+
seen.add(target);
|
|
76
|
+
out.push(target);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function appendClasses(
|
|
81
|
+
values: readonly Class<object>[] | undefined,
|
|
82
|
+
out: Class<object>[],
|
|
83
|
+
seen: Set<Class<object>>,
|
|
84
|
+
): void {
|
|
85
|
+
if (values === undefined) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
for (let index = 0; index < values.length; index += 1) {
|
|
89
|
+
appendClass(values[index] as Class<object>, out, seen);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function assertUniqueName(
|
|
94
|
+
kind: "agent" | "tool" | "prompt",
|
|
95
|
+
name: string,
|
|
96
|
+
target: Class<object>,
|
|
97
|
+
names: Map<string, Class<object>>,
|
|
98
|
+
): void {
|
|
99
|
+
const existing = names.get(name);
|
|
100
|
+
if (existing && existing !== target) {
|
|
101
|
+
throw new AgentSetupError(
|
|
102
|
+
`Duplicate ${kind} name "${name}" on ${debugNameOf(existing)} and ${debugNameOf(target)}.`,
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
names.set(name, target);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function assertUniqueTaskName(agentName: string, task: AgentTaskMetadata, names: Map<string, AgentTaskMetadata>): void {
|
|
109
|
+
const existing = names.get(task.name);
|
|
110
|
+
if (existing && existing.methodName !== task.methodName) {
|
|
111
|
+
throw new AgentSetupError(
|
|
112
|
+
`Duplicate task name "${task.name}" on Agent "${agentName}" methods ` +
|
|
113
|
+
`"${existing.methodName}" and "${task.methodName}".`,
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
names.set(task.name, task);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function registerDefinition<TDefinition extends { readonly target: Class<object>; readonly metadata: { readonly name: string } }>(
|
|
120
|
+
kind: "agent" | "tool" | "prompt",
|
|
121
|
+
definition: TDefinition,
|
|
122
|
+
byName: Map<string, TDefinition>,
|
|
123
|
+
names: Map<string, Class<object>>,
|
|
124
|
+
): void {
|
|
125
|
+
assertUniqueName(kind, definition.metadata.name, definition.target, names);
|
|
126
|
+
byName.set(definition.metadata.name, definition);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function readAgentMetadata(target: Class<object>, metadataIndex?: AgentMetadataIndex): AgentMetadata | undefined {
|
|
130
|
+
return metadataIndex?.agents.get(target) ?? agentMetadataOf(target);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function readToolMetadata(target: Class<object>, metadataIndex?: AgentMetadataIndex): ToolMetadata | undefined {
|
|
134
|
+
return metadataIndex?.tools.get(target) ?? toolMetadataOf(target);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function readPromptMetadata(target: Class<object>, metadataIndex?: AgentMetadataIndex): PromptMetadata | undefined {
|
|
138
|
+
return metadataIndex?.prompts.get(target) ?? promptMetadataOf(target);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function requireAgentMetadata(target: Class<object>, metadataIndex?: AgentMetadataIndex): AgentMetadata {
|
|
142
|
+
const metadata = readAgentMetadata(target, metadataIndex);
|
|
143
|
+
if (!metadata) {
|
|
144
|
+
throw new AgentSetupError(`${debugNameOf(target)} is listed as an agent but is not decorated with @Agent(...).`);
|
|
145
|
+
}
|
|
146
|
+
return metadata;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function requireToolMetadata(target: Class<object>, owner?: string, metadataIndex?: AgentMetadataIndex): ToolMetadata {
|
|
150
|
+
const metadata = readToolMetadata(target, metadataIndex);
|
|
151
|
+
if (!metadata) {
|
|
152
|
+
const prefix = owner ? `${owner} references ` : "";
|
|
153
|
+
throw new AgentSetupError(`${prefix}${debugNameOf(target)} as a tool, but it is not decorated with @Tool(...).`);
|
|
154
|
+
}
|
|
155
|
+
return metadata;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function requirePromptMetadata(target: Class<object>, owner?: string, metadataIndex?: AgentMetadataIndex): PromptMetadata {
|
|
159
|
+
const metadata = readPromptMetadata(target, metadataIndex);
|
|
160
|
+
if (!metadata) {
|
|
161
|
+
const prefix = owner ? `${owner} references ` : "";
|
|
162
|
+
throw new AgentSetupError(`${prefix}${debugNameOf(target)} as a prompt, but it is not decorated with @Prompt(...).`);
|
|
163
|
+
}
|
|
164
|
+
return metadata;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function emptyCatalog(): AgentCatalog {
|
|
168
|
+
return Object.freeze({
|
|
169
|
+
agents: Object.freeze([]),
|
|
170
|
+
tools: Object.freeze([]),
|
|
171
|
+
prompts: Object.freeze([]),
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Collects agent declarations from a module tree. The collector follows
|
|
177
|
+
* `imports` and registered module metadata expanders, just like DI/container
|
|
178
|
+
* discovery, but it keeps the AI layer outside the DI foundation.
|
|
179
|
+
*/
|
|
180
|
+
export function collectAgentCatalog(
|
|
181
|
+
roots: readonly BazisModuleRef[],
|
|
182
|
+
extras: AgentCatalogExtras = {},
|
|
183
|
+
metadataIndex?: AgentMetadataIndex,
|
|
184
|
+
): AgentCatalog {
|
|
185
|
+
if (roots.length === 0 && !extras.agents?.length && !extras.tools?.length && !extras.prompts?.length) {
|
|
186
|
+
return emptyCatalog();
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const loaded = new Set<BazisModuleRef>();
|
|
190
|
+
const seenAgents = new Set<Class<object>>();
|
|
191
|
+
const seenTools = new Set<Class<object>>();
|
|
192
|
+
const seenPrompts = new Set<Class<object>>();
|
|
193
|
+
const agentClasses: Class<object>[] = [];
|
|
194
|
+
const toolClasses: Class<object>[] = [];
|
|
195
|
+
const promptClasses: Class<object>[] = [];
|
|
196
|
+
|
|
197
|
+
const visit = (moduleRef: BazisModuleRef): void => {
|
|
198
|
+
if (loaded.has(moduleRef)) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
loaded.add(moduleRef);
|
|
202
|
+
|
|
203
|
+
const agentFields = moduleRef as AgentModuleFields;
|
|
204
|
+
appendClasses(agentFields.agents, agentClasses, seenAgents);
|
|
205
|
+
appendClasses(agentFields.tools, toolClasses, seenTools);
|
|
206
|
+
appendClasses(agentFields.prompts, promptClasses, seenPrompts);
|
|
207
|
+
|
|
208
|
+
const imports = moduleRef.imports;
|
|
209
|
+
if (imports) {
|
|
210
|
+
for (let index = 0; index < imports.length; index += 1) {
|
|
211
|
+
visit(imports[index] as BazisModuleRef);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const expanded = expandModuleMetadata(moduleRef);
|
|
216
|
+
for (let index = 0; index < expanded.length; index += 1) {
|
|
217
|
+
visit(expanded[index] as BazisModuleRef);
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
for (let index = 0; index < roots.length; index += 1) {
|
|
222
|
+
visit(roots[index] as BazisModuleRef);
|
|
223
|
+
}
|
|
224
|
+
appendClasses(extras.agents, agentClasses, seenAgents);
|
|
225
|
+
appendClasses(extras.tools, toolClasses, seenTools);
|
|
226
|
+
appendClasses(extras.prompts, promptClasses, seenPrompts);
|
|
227
|
+
|
|
228
|
+
const agentNames = new Map<string, Class<object>>();
|
|
229
|
+
const agentsMeta = new Map<Class<object>, AgentMetadata>();
|
|
230
|
+
for (let index = 0; index < agentClasses.length; index += 1) {
|
|
231
|
+
const target = agentClasses[index] as Class<object>;
|
|
232
|
+
const metadata = requireAgentMetadata(target, metadataIndex);
|
|
233
|
+
assertUniqueName("agent", metadata.name, target, agentNames);
|
|
234
|
+
const taskNames = new Map<string, AgentTaskMetadata>();
|
|
235
|
+
for (let taskIndex = 0; taskIndex < metadata.tasks.length; taskIndex += 1) {
|
|
236
|
+
assertUniqueTaskName(metadata.name, metadata.tasks[taskIndex] as AgentTaskMetadata, taskNames);
|
|
237
|
+
}
|
|
238
|
+
agentsMeta.set(target, metadata);
|
|
239
|
+
const agentName = `Agent "${metadata.name}"`;
|
|
240
|
+
if (metadata.prompt) {
|
|
241
|
+
requirePromptMetadata(metadata.prompt, agentName, metadataIndex);
|
|
242
|
+
appendClass(metadata.prompt, promptClasses, seenPrompts);
|
|
243
|
+
}
|
|
244
|
+
for (let toolIndex = 0; toolIndex < metadata.tools.length; toolIndex += 1) {
|
|
245
|
+
requireToolMetadata(metadata.tools[toolIndex] as Class<object>, agentName, metadataIndex);
|
|
246
|
+
}
|
|
247
|
+
appendClasses(metadata.tools, toolClasses, seenTools);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const toolNames = new Map<string, Class<object>>();
|
|
251
|
+
const toolsByClass = new Map<Class<object>, ToolDefinition>();
|
|
252
|
+
const tools: ToolDefinition[] = [];
|
|
253
|
+
for (let index = 0; index < toolClasses.length; index += 1) {
|
|
254
|
+
const target = toolClasses[index] as Class<object>;
|
|
255
|
+
const metadata = requireToolMetadata(target, undefined, metadataIndex);
|
|
256
|
+
assertUniqueName("tool", metadata.name, target, toolNames);
|
|
257
|
+
const definition: ToolDefinition = Object.freeze({ target, metadata });
|
|
258
|
+
toolsByClass.set(target, definition);
|
|
259
|
+
tools.push(definition);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const promptNames = new Map<string, Class<object>>();
|
|
263
|
+
const promptsByClass = new Map<Class<object>, PromptDefinition>();
|
|
264
|
+
const prompts: PromptDefinition[] = [];
|
|
265
|
+
for (let index = 0; index < promptClasses.length; index += 1) {
|
|
266
|
+
const target = promptClasses[index] as Class<object>;
|
|
267
|
+
const metadata = requirePromptMetadata(target, undefined, metadataIndex);
|
|
268
|
+
assertUniqueName("prompt", metadata.name, target, promptNames);
|
|
269
|
+
const definition: PromptDefinition = Object.freeze({ target, metadata });
|
|
270
|
+
promptsByClass.set(target, definition);
|
|
271
|
+
prompts.push(definition);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const agents: AgentDefinition[] = [];
|
|
275
|
+
for (let index = 0; index < agentClasses.length; index += 1) {
|
|
276
|
+
const target = agentClasses[index] as Class<object>;
|
|
277
|
+
const metadata = agentsMeta.get(target) as AgentMetadata;
|
|
278
|
+
const agentName = `Agent "${metadata.name}"`;
|
|
279
|
+
const resolvedTools: ToolDefinition[] = [];
|
|
280
|
+
for (let toolIndex = 0; toolIndex < metadata.tools.length; toolIndex += 1) {
|
|
281
|
+
const toolTarget = metadata.tools[toolIndex] as Class<object>;
|
|
282
|
+
requireToolMetadata(toolTarget, agentName, metadataIndex);
|
|
283
|
+
resolvedTools.push(toolsByClass.get(toolTarget) as ToolDefinition);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
let prompt: PromptDefinition | undefined;
|
|
287
|
+
if (metadata.prompt) {
|
|
288
|
+
requirePromptMetadata(metadata.prompt, agentName, metadataIndex);
|
|
289
|
+
prompt = promptsByClass.get(metadata.prompt);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
const agentDefinition = {
|
|
293
|
+
target,
|
|
294
|
+
metadata,
|
|
295
|
+
prompt,
|
|
296
|
+
tools: Object.freeze(resolvedTools),
|
|
297
|
+
tasks: [] as AgentTaskDefinition[],
|
|
298
|
+
} as AgentDefinition & { tasks: AgentTaskDefinition[] };
|
|
299
|
+
for (let taskIndex = 0; taskIndex < metadata.tasks.length; taskIndex += 1) {
|
|
300
|
+
agentDefinition.tasks.push(Object.freeze({
|
|
301
|
+
agent: agentDefinition,
|
|
302
|
+
metadata: metadata.tasks[taskIndex] as AgentTaskMetadata,
|
|
303
|
+
}));
|
|
304
|
+
}
|
|
305
|
+
Object.freeze(agentDefinition.tasks);
|
|
306
|
+
agents.push(Object.freeze(agentDefinition));
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return Object.freeze({
|
|
310
|
+
agents: Object.freeze(agents),
|
|
311
|
+
tools: Object.freeze(tools),
|
|
312
|
+
prompts: Object.freeze(prompts),
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
export class AgentRegistry {
|
|
317
|
+
private readonly catalog: AgentCatalog;
|
|
318
|
+
private readonly agentsByName = new Map<string, AgentDefinition>();
|
|
319
|
+
private readonly toolsByName = new Map<string, ToolDefinition>();
|
|
320
|
+
private readonly promptsByName = new Map<string, PromptDefinition>();
|
|
321
|
+
private readonly tasksByAgentAndName = new Map<string, AgentTaskDefinition>();
|
|
322
|
+
|
|
323
|
+
constructor(catalog: AgentCatalog = emptyCatalog()) {
|
|
324
|
+
// The registry is a snapshot: callers must not be able to mutate its list
|
|
325
|
+
// view after indexes and task backlinks have been constructed.
|
|
326
|
+
// Definitions can be present only on an Agent. Memoization is intentionally
|
|
327
|
+
// by source object, not class: two source definitions for one class may
|
|
328
|
+
// carry different valid metadata, while a shared definition needs one
|
|
329
|
+
// shared immutable snapshot wherever it is referenced.
|
|
330
|
+
const toolSnapshots = new WeakMap<ToolDefinition, ToolDefinition>();
|
|
331
|
+
const promptSnapshots = new WeakMap<PromptDefinition, PromptDefinition>();
|
|
332
|
+
const taskMetadataSnapshots = new WeakMap<AgentTaskMetadata, AgentTaskMetadata>();
|
|
333
|
+
const snapshotTool = (definition: ToolDefinition): ToolDefinition => {
|
|
334
|
+
const existing = toolSnapshots.get(definition);
|
|
335
|
+
if (existing) return existing;
|
|
336
|
+
const snapshot = Object.freeze({
|
|
337
|
+
target: definition.target,
|
|
338
|
+
metadata: Object.freeze({ ...definition.metadata, tags: Object.freeze([...definition.metadata.tags]) }),
|
|
339
|
+
});
|
|
340
|
+
toolSnapshots.set(definition, snapshot);
|
|
341
|
+
return snapshot;
|
|
342
|
+
};
|
|
343
|
+
const snapshotPrompt = (definition: PromptDefinition): PromptDefinition => {
|
|
344
|
+
const existing = promptSnapshots.get(definition);
|
|
345
|
+
if (existing) return existing;
|
|
346
|
+
const snapshot = Object.freeze({
|
|
347
|
+
target: definition.target,
|
|
348
|
+
metadata: Object.freeze({
|
|
349
|
+
...definition.metadata,
|
|
350
|
+
instructions: Object.freeze([...definition.metadata.instructions]),
|
|
351
|
+
constraints: Object.freeze([...definition.metadata.constraints]),
|
|
352
|
+
sections: Object.freeze(definition.metadata.sections.map((section) => Object.freeze({ ...section, content: Object.freeze([...section.content]) }))),
|
|
353
|
+
}),
|
|
354
|
+
});
|
|
355
|
+
promptSnapshots.set(definition, snapshot);
|
|
356
|
+
return snapshot;
|
|
357
|
+
};
|
|
358
|
+
const snapshotTaskMetadata = (metadata: AgentTaskMetadata): AgentTaskMetadata => {
|
|
359
|
+
const existing = taskMetadataSnapshots.get(metadata);
|
|
360
|
+
if (existing) return existing;
|
|
361
|
+
const snapshot = Object.freeze({ ...metadata });
|
|
362
|
+
taskMetadataSnapshots.set(metadata, snapshot);
|
|
363
|
+
return snapshot;
|
|
364
|
+
};
|
|
365
|
+
const tools = Object.freeze(catalog.tools.map(snapshotTool));
|
|
366
|
+
const prompts = Object.freeze(catalog.prompts.map(snapshotPrompt));
|
|
367
|
+
const agents = Object.freeze(catalog.agents.map((definition) => {
|
|
368
|
+
const metadata = Object.freeze({
|
|
369
|
+
...definition.metadata,
|
|
370
|
+
instructions: Object.freeze([...definition.metadata.instructions]), constraints: Object.freeze([...definition.metadata.constraints]),
|
|
371
|
+
sections: Object.freeze(definition.metadata.sections.map((section) => Object.freeze({ ...section, content: Object.freeze([...section.content]) }))),
|
|
372
|
+
tools: Object.freeze([...definition.metadata.tools]),
|
|
373
|
+
tasks: Object.freeze(definition.metadata.tasks.map(snapshotTaskMetadata)),
|
|
374
|
+
});
|
|
375
|
+
const agent = { target: definition.target, metadata, prompt: definition.prompt === undefined ? undefined : snapshotPrompt(definition.prompt), tools: Object.freeze(definition.tools.map(snapshotTool)), tasks: [] as AgentTaskDefinition[] } as AgentDefinition & { tasks: AgentTaskDefinition[] };
|
|
376
|
+
agent.tasks.push(...definition.tasks.map((task) => Object.freeze({ agent, metadata: snapshotTaskMetadata(task.metadata) })));
|
|
377
|
+
Object.freeze(agent.tasks);
|
|
378
|
+
return Object.freeze(agent);
|
|
379
|
+
}));
|
|
380
|
+
this.catalog = Object.freeze({ agents, tools, prompts });
|
|
381
|
+
|
|
382
|
+
const agentNames = new Map<string, Class<object>>();
|
|
383
|
+
const toolNames = new Map<string, Class<object>>();
|
|
384
|
+
const promptNames = new Map<string, Class<object>>();
|
|
385
|
+
|
|
386
|
+
for (let index = 0; index < agents.length; index += 1) {
|
|
387
|
+
const definition = agents[index] as AgentDefinition;
|
|
388
|
+
registerDefinition("agent", definition, this.agentsByName, agentNames);
|
|
389
|
+
for (let taskIndex = 0; taskIndex < definition.tasks.length; taskIndex += 1) {
|
|
390
|
+
const task = definition.tasks[taskIndex] as AgentTaskDefinition;
|
|
391
|
+
this.tasksByAgentAndName.set(taskKey(definition.metadata.name, task.metadata.name), task);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
for (let index = 0; index < tools.length; index += 1) {
|
|
395
|
+
const definition = tools[index] as ToolDefinition;
|
|
396
|
+
registerDefinition("tool", definition, this.toolsByName, toolNames);
|
|
397
|
+
}
|
|
398
|
+
for (let index = 0; index < prompts.length; index += 1) {
|
|
399
|
+
const definition = prompts[index] as PromptDefinition;
|
|
400
|
+
registerDefinition("prompt", definition, this.promptsByName, promptNames);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/** Each invocation gets an immutable data snapshot and only host-approved tools. */
|
|
405
|
+
static fromDefinition(input: AgentDataDefinition, allowedTools: readonly ToolDefinition[] = []): AgentRegistry {
|
|
406
|
+
if (!input || typeof input.name !== "string" || !/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/.test(input.name)
|
|
407
|
+
|| typeof input.instructions !== "string" || input.instructions.length > 100_000
|
|
408
|
+
|| (input.description !== undefined && (typeof input.description !== "string" || input.description.length > 4000))
|
|
409
|
+
|| (input.modelProfile !== undefined && (typeof input.modelProfile !== "string" || !/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/.test(input.modelProfile)))
|
|
410
|
+
|| (input.toolNames !== undefined && (!Array.isArray(input.toolNames) || input.toolNames.length > 128))) {
|
|
411
|
+
throw new AgentSetupError("Invalid data agent definition.");
|
|
412
|
+
}
|
|
413
|
+
const available = new Map<string, ToolDefinition>();
|
|
414
|
+
for (const tool of allowedTools) {
|
|
415
|
+
if (available.has(tool.metadata.name)) throw new AgentSetupError("Duplicate host tool name.");
|
|
416
|
+
available.set(tool.metadata.name, tool);
|
|
417
|
+
}
|
|
418
|
+
const seen = new Set<string>();
|
|
419
|
+
const tools = (input.toolNames ?? []).map(name => {
|
|
420
|
+
const tool = available.get(name);
|
|
421
|
+
if (typeof name !== "string" || !tool || seen.has(name)) throw new AgentSetupError("Agent tool is unavailable or duplicated.");
|
|
422
|
+
seen.add(name);
|
|
423
|
+
return tool;
|
|
424
|
+
});
|
|
425
|
+
const metadata: AgentMetadata = {
|
|
426
|
+
name: input.name, description: input.description, modelProfile: input.modelProfile,
|
|
427
|
+
instructions: input.instructions.trim() ? [input.instructions] : [],
|
|
428
|
+
constraints: [], sections: [], tasks: [], tools: tools.map(tool => tool.target),
|
|
429
|
+
};
|
|
430
|
+
return new AgentRegistry({ agents: [{ target: DataAgentTarget, metadata, tools, tasks: [] }], tools, prompts: [] });
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
static fromModules(roots: readonly BazisModuleRef[], extras?: AgentCatalogExtras): AgentRegistry {
|
|
434
|
+
return new AgentRegistry(collectAgentCatalog(roots, extras));
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/** Host Tool catalog from actual owner-bound registrations, without constructing Tools or importing the app root. */
|
|
438
|
+
static fromContainer(services: ServiceProvider): AgentRegistry {
|
|
439
|
+
if (!(services instanceof DiContainer)) throw new AgentSetupError("A host Tool catalog requires a framework DiContainer.");
|
|
440
|
+
const existing = containerCatalogs.get(services);
|
|
441
|
+
if (existing) return existing;
|
|
442
|
+
const tools = getAgentModuleContributionsV1(services).tools.map(({ payload }) => ({
|
|
443
|
+
target: payload.target, metadata: requireToolMetadata(payload.target),
|
|
444
|
+
}));
|
|
445
|
+
const registry = new AgentRegistry({ agents: [], prompts: [], tools });
|
|
446
|
+
containerCatalogs.set(services, registry);
|
|
447
|
+
return registry;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
static async fromGeneratedModules(roots: readonly BazisModuleRef[], extras?: AgentCatalogExtras): Promise<AgentRegistry> {
|
|
451
|
+
const generated = await loadBazisGeneratedAgentMetadata(collectAgentMetadataTargets(roots, extras));
|
|
452
|
+
return new AgentRegistry(collectAgentCatalog(roots, extras, generated));
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
listAgents(): readonly AgentDefinition[] {
|
|
456
|
+
return this.catalog.agents;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
listTools(): readonly ToolDefinition[] {
|
|
460
|
+
return this.catalog.tools;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
listPrompts(): readonly PromptDefinition[] {
|
|
464
|
+
return this.catalog.prompts;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
getAgent(name: string): AgentDefinition | undefined {
|
|
468
|
+
return this.agentsByName.get(name);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
getTool(name: string): ToolDefinition | undefined {
|
|
472
|
+
return this.toolsByName.get(name);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
getPrompt(name: string): PromptDefinition | undefined {
|
|
476
|
+
return this.promptsByName.get(name);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
getTask(agentName: string, taskName: string): AgentTaskDefinition | undefined {
|
|
480
|
+
return this.tasksByAgentAndName.get(taskKey(agentName, taskName));
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
requireAgent(name: string): AgentDefinition {
|
|
484
|
+
const definition = this.getAgent(name);
|
|
485
|
+
if (!definition) {
|
|
486
|
+
throw new AgentSetupError(`Agent "${name}" is not registered.`);
|
|
487
|
+
}
|
|
488
|
+
return definition;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
requireTool(name: string): ToolDefinition {
|
|
492
|
+
const definition = this.getTool(name);
|
|
493
|
+
if (!definition) {
|
|
494
|
+
throw new AgentSetupError(`Tool "${name}" is not registered.`);
|
|
495
|
+
}
|
|
496
|
+
return definition;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
requirePrompt(name: string): PromptDefinition {
|
|
500
|
+
const definition = this.getPrompt(name);
|
|
501
|
+
if (!definition) {
|
|
502
|
+
throw new AgentSetupError(`Prompt "${name}" is not registered.`);
|
|
503
|
+
}
|
|
504
|
+
return definition;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
requireTask(agentName: string, taskName: string): AgentTaskDefinition {
|
|
508
|
+
const definition = this.getTask(agentName, taskName);
|
|
509
|
+
if (!definition) {
|
|
510
|
+
throw new AgentSetupError(`Task "${taskName}" is not registered on Agent "${agentName}".`);
|
|
511
|
+
}
|
|
512
|
+
return definition;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
function collectAgentMetadataTargets(roots: readonly BazisModuleRef[], extras: AgentCatalogExtras = {}): readonly Class<object>[] {
|
|
517
|
+
const loaded = new Set<BazisModuleRef>();
|
|
518
|
+
const targets: Class<object>[] = [];
|
|
519
|
+
const seen = new Set<Class<object>>();
|
|
520
|
+
const visit = (moduleRef: BazisModuleRef): void => {
|
|
521
|
+
if (loaded.has(moduleRef)) return;
|
|
522
|
+
loaded.add(moduleRef);
|
|
523
|
+
const fields = moduleRef as AgentModuleFields;
|
|
524
|
+
appendClasses(fields.agents, targets, seen);
|
|
525
|
+
appendClasses(fields.tools, targets, seen);
|
|
526
|
+
appendClasses(fields.prompts, targets, seen);
|
|
527
|
+
for (const imported of moduleRef.imports ?? []) visit(imported as BazisModuleRef);
|
|
528
|
+
for (const expanded of expandModuleMetadata(moduleRef)) visit(expanded as BazisModuleRef);
|
|
529
|
+
};
|
|
530
|
+
for (const root of roots) visit(root);
|
|
531
|
+
appendClasses(extras.agents, targets, seen);
|
|
532
|
+
appendClasses(extras.tools, targets, seen);
|
|
533
|
+
appendClasses(extras.prompts, targets, seen);
|
|
534
|
+
return targets;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
function taskKey(agentName: string, taskName: string): string {
|
|
538
|
+
return `${agentName}\u0000${taskName}`;
|
|
539
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ServiceProvider } from "../di";
|
|
2
|
+
import type { AgentRegistry } from "./AgentRegistry";
|
|
3
|
+
import {
|
|
4
|
+
AgentExecutionDriver,
|
|
5
|
+
type AgentRuntimeInvokeOptions,
|
|
6
|
+
type AgentRuntimeOptions,
|
|
7
|
+
type AgentRuntimeResult,
|
|
8
|
+
type AgentRuntimeTaskInvokeOptions,
|
|
9
|
+
} from "./internal/AgentExecutionDriver";
|
|
10
|
+
import type { AgentModelProvider } from "./ModelProvider";
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
type AgentRuntimeInvokeOptions,
|
|
14
|
+
type AgentRuntimeOptions,
|
|
15
|
+
type AgentRuntimeResult,
|
|
16
|
+
type AgentRuntimeStatus,
|
|
17
|
+
type AgentRuntimeTaskInvokeOptions,
|
|
18
|
+
type AgentRuntimeToolCallContext,
|
|
19
|
+
type AgentRuntimeToolExecutionOptions,
|
|
20
|
+
} from "./internal/AgentExecutionDriver";
|
|
21
|
+
|
|
22
|
+
/** Public compatibility facade for the owner-private execution driver. */
|
|
23
|
+
export class AgentRuntime {
|
|
24
|
+
private readonly driver: AgentExecutionDriver;
|
|
25
|
+
|
|
26
|
+
constructor(
|
|
27
|
+
services: ServiceProvider,
|
|
28
|
+
registry: AgentRegistry,
|
|
29
|
+
modelProvider: AgentModelProvider,
|
|
30
|
+
options: AgentRuntimeOptions = {},
|
|
31
|
+
) {
|
|
32
|
+
this.driver = new AgentExecutionDriver(services, registry, modelProvider, options);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
invoke(agentName: string, options: AgentRuntimeInvokeOptions = {}): Promise<AgentRuntimeResult> {
|
|
36
|
+
return this.driver.invoke(agentName, options);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
invokeTask(
|
|
40
|
+
agentName: string,
|
|
41
|
+
taskName: string,
|
|
42
|
+
input: unknown,
|
|
43
|
+
options: AgentRuntimeTaskInvokeOptions = {},
|
|
44
|
+
): Promise<AgentRuntimeResult> {
|
|
45
|
+
return this.driver.invokeTask(agentName, taskName, input, options);
|
|
46
|
+
}
|
|
47
|
+
}
|