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,398 @@
|
|
|
1
|
+
import type { Class } from "../di";
|
|
2
|
+
import { AgentSetupError } from "./errors";
|
|
3
|
+
|
|
4
|
+
// Bun executes TC39 decorators natively, but Symbol.metadata may be absent in
|
|
5
|
+
// the runtime. Keep the same tiny polyfill used by HTTP/background metadata.
|
|
6
|
+
(Symbol as { metadata?: symbol }).metadata ??= Symbol.for("Symbol.metadata");
|
|
7
|
+
|
|
8
|
+
const AGENT_META = Symbol.for("bazis:agent:agent");
|
|
9
|
+
const TOOL_META = Symbol.for("bazis:agent:tool");
|
|
10
|
+
const PROMPT_META = Symbol.for("bazis:agent:prompt");
|
|
11
|
+
const TASK_META = Symbol.for("bazis:agent:task");
|
|
12
|
+
|
|
13
|
+
export type ToolSideEffect = "none" | "read" | "write" | "external";
|
|
14
|
+
export type ToolApproval = "never" | "policy" | "required";
|
|
15
|
+
export type PromptSectionKind =
|
|
16
|
+
| "system"
|
|
17
|
+
| "developer"
|
|
18
|
+
| "role"
|
|
19
|
+
| "task"
|
|
20
|
+
| "instructions"
|
|
21
|
+
| "constraints"
|
|
22
|
+
| "examples"
|
|
23
|
+
| "output"
|
|
24
|
+
| "tool-policy"
|
|
25
|
+
| "memory"
|
|
26
|
+
| "knowledge";
|
|
27
|
+
|
|
28
|
+
export interface AgentOptions {
|
|
29
|
+
readonly name?: string;
|
|
30
|
+
readonly description?: string;
|
|
31
|
+
readonly role?: string;
|
|
32
|
+
readonly goal?: string;
|
|
33
|
+
readonly instructions?: readonly string[];
|
|
34
|
+
readonly constraints?: readonly string[];
|
|
35
|
+
readonly sections?: readonly PromptSectionOptions[];
|
|
36
|
+
readonly prompt?: Class<object>;
|
|
37
|
+
readonly tools?: readonly Class<object>[];
|
|
38
|
+
readonly input?: Class<object>;
|
|
39
|
+
readonly output?: Class<object>;
|
|
40
|
+
readonly modelProfile?: string;
|
|
41
|
+
readonly maxSteps?: number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface AgentMetadata {
|
|
45
|
+
readonly name: string;
|
|
46
|
+
readonly description?: string;
|
|
47
|
+
readonly role?: string;
|
|
48
|
+
readonly goal?: string;
|
|
49
|
+
readonly instructions: readonly string[];
|
|
50
|
+
readonly constraints: readonly string[];
|
|
51
|
+
readonly sections: readonly PromptSectionMetadata[];
|
|
52
|
+
readonly prompt?: Class<object>;
|
|
53
|
+
readonly tools: readonly Class<object>[];
|
|
54
|
+
readonly input?: Class<object>;
|
|
55
|
+
readonly output?: Class<object>;
|
|
56
|
+
readonly modelProfile?: string;
|
|
57
|
+
readonly maxSteps?: number;
|
|
58
|
+
readonly tasks: readonly AgentTaskMetadata[];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface AgentTaskOptions {
|
|
62
|
+
readonly name?: string;
|
|
63
|
+
readonly description?: string;
|
|
64
|
+
readonly input?: Class<object>;
|
|
65
|
+
readonly output?: Class<object>;
|
|
66
|
+
readonly modelProfile?: string;
|
|
67
|
+
readonly maxSteps?: number;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface AgentTaskMetadata {
|
|
71
|
+
readonly name: string;
|
|
72
|
+
readonly methodName: string;
|
|
73
|
+
readonly description?: string;
|
|
74
|
+
readonly input?: Class<object>;
|
|
75
|
+
readonly output?: Class<object>;
|
|
76
|
+
readonly modelProfile?: string;
|
|
77
|
+
readonly maxSteps?: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface ToolOptions {
|
|
81
|
+
readonly name: string;
|
|
82
|
+
readonly description: string;
|
|
83
|
+
readonly input?: Class<object>;
|
|
84
|
+
readonly output?: Class<object>;
|
|
85
|
+
readonly sideEffect?: ToolSideEffect;
|
|
86
|
+
readonly approval?: ToolApproval;
|
|
87
|
+
readonly timeoutMs?: number;
|
|
88
|
+
readonly tags?: readonly string[];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface ToolMetadata {
|
|
92
|
+
readonly name: string;
|
|
93
|
+
readonly description: string;
|
|
94
|
+
readonly input?: Class<object>;
|
|
95
|
+
readonly output?: Class<object>;
|
|
96
|
+
readonly sideEffect: ToolSideEffect;
|
|
97
|
+
readonly approval: ToolApproval;
|
|
98
|
+
readonly timeoutMs?: number;
|
|
99
|
+
readonly tags: readonly string[];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface PromptOptions {
|
|
103
|
+
readonly name?: string;
|
|
104
|
+
readonly description?: string;
|
|
105
|
+
readonly version?: string;
|
|
106
|
+
readonly role?: string;
|
|
107
|
+
readonly goal?: string;
|
|
108
|
+
readonly instructions?: readonly string[];
|
|
109
|
+
readonly constraints?: readonly string[];
|
|
110
|
+
readonly sections?: readonly PromptSectionOptions[];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface PromptMetadata {
|
|
114
|
+
readonly name: string;
|
|
115
|
+
readonly description?: string;
|
|
116
|
+
readonly version?: string;
|
|
117
|
+
readonly role?: string;
|
|
118
|
+
readonly goal?: string;
|
|
119
|
+
readonly instructions: readonly string[];
|
|
120
|
+
readonly constraints: readonly string[];
|
|
121
|
+
readonly sections: readonly PromptSectionMetadata[];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export interface PromptSectionOptions {
|
|
125
|
+
readonly kind: PromptSectionKind;
|
|
126
|
+
readonly title?: string;
|
|
127
|
+
readonly content: string | readonly string[];
|
|
128
|
+
readonly priority?: number;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export interface PromptSectionMetadata {
|
|
132
|
+
readonly kind: PromptSectionKind;
|
|
133
|
+
readonly title?: string;
|
|
134
|
+
readonly content: readonly string[];
|
|
135
|
+
readonly priority?: number;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
interface MetadataCarrier {
|
|
139
|
+
[AGENT_META]?: AgentMetadata;
|
|
140
|
+
[TOOL_META]?: ToolMetadata;
|
|
141
|
+
[PROMPT_META]?: PromptMetadata;
|
|
142
|
+
[TASK_META]?: readonly AgentTaskMetadata[];
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
interface NamedConstructor {
|
|
146
|
+
readonly name?: string;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function classNameOf(target: object): string {
|
|
150
|
+
return (target as NamedConstructor).name ?? "<anonymous class>";
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function text(value: string | undefined, fallback: string, field: string): string {
|
|
154
|
+
const resolved = value ?? fallback;
|
|
155
|
+
const trimmed = resolved.trim();
|
|
156
|
+
if (trimmed.length === 0) {
|
|
157
|
+
throw new AgentSetupError(`${field} must be a non-empty string.`);
|
|
158
|
+
}
|
|
159
|
+
return trimmed;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function optionalText(value: string | undefined, field: string): string | undefined {
|
|
163
|
+
if (value === undefined) {
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
const trimmed = value.trim();
|
|
167
|
+
if (trimmed.length === 0) {
|
|
168
|
+
throw new AgentSetupError(`${field} must be a non-empty string when provided.`);
|
|
169
|
+
}
|
|
170
|
+
return trimmed;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function readonlyTextList(values: readonly string[] | undefined, field: string): readonly string[] {
|
|
174
|
+
if (values === undefined) {
|
|
175
|
+
return Object.freeze([]);
|
|
176
|
+
}
|
|
177
|
+
const normalized: string[] = [];
|
|
178
|
+
for (let index = 0; index < values.length; index += 1) {
|
|
179
|
+
normalized.push(text(values[index] as string, "", field));
|
|
180
|
+
}
|
|
181
|
+
return Object.freeze(normalized);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function promptSectionKind(value: string, field: string): PromptSectionKind {
|
|
185
|
+
if (
|
|
186
|
+
value !== "system" &&
|
|
187
|
+
value !== "developer" &&
|
|
188
|
+
value !== "role" &&
|
|
189
|
+
value !== "task" &&
|
|
190
|
+
value !== "instructions" &&
|
|
191
|
+
value !== "constraints" &&
|
|
192
|
+
value !== "examples" &&
|
|
193
|
+
value !== "output" &&
|
|
194
|
+
value !== "tool-policy" &&
|
|
195
|
+
value !== "memory" &&
|
|
196
|
+
value !== "knowledge"
|
|
197
|
+
) {
|
|
198
|
+
throw new AgentSetupError(
|
|
199
|
+
`${field} must be system, developer, role, task, instructions, constraints, examples, output, tool-policy, memory or knowledge.`,
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
return value;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function readonlyPromptSectionContent(value: string | readonly string[], field: string): readonly string[] {
|
|
206
|
+
if (typeof value === "string") {
|
|
207
|
+
return Object.freeze([text(value, "", field)]);
|
|
208
|
+
}
|
|
209
|
+
if (!Array.isArray(value)) {
|
|
210
|
+
throw new AgentSetupError(`${field} must be a string or an array of strings.`);
|
|
211
|
+
}
|
|
212
|
+
return readonlyTextList(value, field);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function readonlyPromptSections(
|
|
216
|
+
values: readonly PromptSectionOptions[] | undefined,
|
|
217
|
+
field: string,
|
|
218
|
+
): readonly PromptSectionMetadata[] {
|
|
219
|
+
if (values === undefined) {
|
|
220
|
+
return Object.freeze([]);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const normalized: PromptSectionMetadata[] = [];
|
|
224
|
+
for (let index = 0; index < values.length; index += 1) {
|
|
225
|
+
const value = values[index] as PromptSectionOptions;
|
|
226
|
+
if (!value || typeof value !== "object") {
|
|
227
|
+
throw new AgentSetupError(`${field}[${index}] must be a prompt section object.`);
|
|
228
|
+
}
|
|
229
|
+
normalized.push(freezeWithoutUndefined({
|
|
230
|
+
kind: promptSectionKind(value.kind, `${field}[${index}].kind`),
|
|
231
|
+
title: optionalText(value.title, `${field}[${index}].title`),
|
|
232
|
+
content: readonlyPromptSectionContent(value.content, `${field}[${index}].content`),
|
|
233
|
+
priority: positiveInteger(value.priority, `${field}[${index}].priority`),
|
|
234
|
+
}));
|
|
235
|
+
}
|
|
236
|
+
return Object.freeze(normalized);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
function readonlyClassList(values: readonly Class<object>[] | undefined): readonly Class<object>[] {
|
|
240
|
+
if (values === undefined) {
|
|
241
|
+
return Object.freeze([]);
|
|
242
|
+
}
|
|
243
|
+
return Object.freeze([...values]);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function readonlyTaskList(values: readonly AgentTaskMetadata[] | undefined): readonly AgentTaskMetadata[] {
|
|
247
|
+
if (values === undefined) {
|
|
248
|
+
return Object.freeze([]);
|
|
249
|
+
}
|
|
250
|
+
return Object.freeze([...values]);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function positiveInteger(value: number | undefined, field: string): number | undefined {
|
|
254
|
+
if (value === undefined) {
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
258
|
+
throw new AgentSetupError(`${field} must be a positive integer.`);
|
|
259
|
+
}
|
|
260
|
+
return value;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
function freezeWithoutUndefined<T extends Record<string, unknown>>(value: T): T {
|
|
264
|
+
const copy: Record<string, unknown> = {};
|
|
265
|
+
for (const [key, item] of Object.entries(value)) {
|
|
266
|
+
if (item !== undefined) {
|
|
267
|
+
copy[key] = item;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return Object.freeze(copy) as T;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
function approvalFor(sideEffect: ToolSideEffect, requested: ToolApproval | undefined): ToolApproval {
|
|
274
|
+
if (requested === undefined) {
|
|
275
|
+
return sideEffect === "write" || sideEffect === "external" ? "required" : "policy";
|
|
276
|
+
}
|
|
277
|
+
if ((sideEffect === "write" || sideEffect === "external") && requested === "never") {
|
|
278
|
+
throw new AgentSetupError(
|
|
279
|
+
`Tools with "${sideEffect}" side effects cannot use approval: "never". Use "policy" or "required".`,
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
return requested;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function ownCarrier(metadata: object): MetadataCarrier {
|
|
286
|
+
return metadata as MetadataCarrier;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function readCarrier(ctor: object): MetadataCarrier | undefined {
|
|
290
|
+
return (ctor as { [key: symbol]: unknown })[Symbol.metadata as unknown as symbol] as MetadataCarrier | undefined;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function hasOwnMeta(carrier: MetadataCarrier, key: symbol): boolean {
|
|
294
|
+
return Object.prototype.hasOwnProperty.call(carrier, key);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
export function defineAgentMetadata(target: object, metadata: object, options: AgentOptions): void {
|
|
298
|
+
const carrier = ownCarrier(metadata);
|
|
299
|
+
const normalized: AgentMetadata = Object.freeze({
|
|
300
|
+
name: text(options.name, classNameOf(target), "@Agent.name"),
|
|
301
|
+
description: optionalText(options.description, "@Agent.description"),
|
|
302
|
+
role: optionalText(options.role, "@Agent.role"),
|
|
303
|
+
goal: optionalText(options.goal, "@Agent.goal"),
|
|
304
|
+
instructions: readonlyTextList(options.instructions, "@Agent.instructions"),
|
|
305
|
+
constraints: readonlyTextList(options.constraints, "@Agent.constraints"),
|
|
306
|
+
sections: readonlyPromptSections(options.sections, "@Agent.sections"),
|
|
307
|
+
prompt: options.prompt,
|
|
308
|
+
tools: readonlyClassList(options.tools),
|
|
309
|
+
input: options.input,
|
|
310
|
+
output: options.output,
|
|
311
|
+
modelProfile: optionalText(options.modelProfile, "@Agent.modelProfile"),
|
|
312
|
+
maxSteps: positiveInteger(options.maxSteps, "@Agent.maxSteps"),
|
|
313
|
+
tasks: readonlyTaskList(carrier[TASK_META]),
|
|
314
|
+
});
|
|
315
|
+
carrier[AGENT_META] = normalized;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
export function defineAgentTaskMetadata(methodName: string | symbol, metadata: object, options: AgentTaskOptions): void {
|
|
319
|
+
if (typeof methodName !== "string") {
|
|
320
|
+
throw new AgentSetupError("@Task supports string method names only.");
|
|
321
|
+
}
|
|
322
|
+
const normalized: AgentTaskMetadata = freezeWithoutUndefined({
|
|
323
|
+
name: text(options.name, methodName, "@Task.name"),
|
|
324
|
+
methodName,
|
|
325
|
+
description: optionalText(options.description, "@Task.description"),
|
|
326
|
+
input: options.input,
|
|
327
|
+
output: options.output,
|
|
328
|
+
modelProfile: optionalText(options.modelProfile, "@Task.modelProfile"),
|
|
329
|
+
maxSteps: positiveInteger(options.maxSteps, "@Task.maxSteps"),
|
|
330
|
+
});
|
|
331
|
+
const carrier = ownCarrier(metadata);
|
|
332
|
+
const existing = carrier[TASK_META] ?? Object.freeze([]);
|
|
333
|
+
carrier[TASK_META] = Object.freeze([...existing, normalized]);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export function defineToolMetadata(_target: object, metadata: object, options: ToolOptions): void {
|
|
337
|
+
const sideEffect = options.sideEffect ?? "none";
|
|
338
|
+
if (sideEffect !== "none" && sideEffect !== "read" && sideEffect !== "write" && sideEffect !== "external") {
|
|
339
|
+
throw new AgentSetupError("@Tool.sideEffect must be none, read, write or external.");
|
|
340
|
+
}
|
|
341
|
+
if (options.approval !== undefined && options.approval !== "never" && options.approval !== "policy" && options.approval !== "required") {
|
|
342
|
+
throw new AgentSetupError("@Tool.approval must be never, policy or required.");
|
|
343
|
+
}
|
|
344
|
+
const normalized: ToolMetadata = Object.freeze({
|
|
345
|
+
name: text(options.name, "", "@Tool.name"),
|
|
346
|
+
description: text(options.description, "", "@Tool.description"),
|
|
347
|
+
input: options.input,
|
|
348
|
+
output: options.output,
|
|
349
|
+
sideEffect,
|
|
350
|
+
approval: approvalFor(sideEffect, options.approval),
|
|
351
|
+
timeoutMs: positiveInteger(options.timeoutMs, "@Tool.timeoutMs"),
|
|
352
|
+
tags: readonlyTextList(options.tags, "@Tool.tags"),
|
|
353
|
+
});
|
|
354
|
+
ownCarrier(metadata)[TOOL_META] = normalized;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
export function definePromptMetadata(target: object, metadata: object, options: PromptOptions): void {
|
|
358
|
+
const normalized: PromptMetadata = Object.freeze({
|
|
359
|
+
name: text(options.name, classNameOf(target), "@Prompt.name"),
|
|
360
|
+
description: optionalText(options.description, "@Prompt.description"),
|
|
361
|
+
version: optionalText(options.version, "@Prompt.version"),
|
|
362
|
+
role: optionalText(options.role, "@Prompt.role"),
|
|
363
|
+
goal: optionalText(options.goal, "@Prompt.goal"),
|
|
364
|
+
instructions: readonlyTextList(options.instructions, "@Prompt.instructions"),
|
|
365
|
+
constraints: readonlyTextList(options.constraints, "@Prompt.constraints"),
|
|
366
|
+
sections: readonlyPromptSections(options.sections, "@Prompt.sections"),
|
|
367
|
+
});
|
|
368
|
+
ownCarrier(metadata)[PROMPT_META] = normalized;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
export function agentMetadataOf(ctor: object): AgentMetadata | undefined {
|
|
372
|
+
const metadata = readCarrier(ctor);
|
|
373
|
+
if (!metadata || !hasOwnMeta(metadata, AGENT_META)) {
|
|
374
|
+
return undefined;
|
|
375
|
+
}
|
|
376
|
+
return metadata[AGENT_META];
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
export function agentTaskMetadataOf(ctor: object): readonly AgentTaskMetadata[] {
|
|
380
|
+
const metadata = readCarrier(ctor);
|
|
381
|
+
return metadata?.[TASK_META] ?? Object.freeze([]);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
export function toolMetadataOf(ctor: object): ToolMetadata | undefined {
|
|
385
|
+
const metadata = readCarrier(ctor);
|
|
386
|
+
if (!metadata || !hasOwnMeta(metadata, TOOL_META)) {
|
|
387
|
+
return undefined;
|
|
388
|
+
}
|
|
389
|
+
return metadata[TOOL_META];
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
export function promptMetadataOf(ctor: object): PromptMetadata | undefined {
|
|
393
|
+
const metadata = readCarrier(ctor);
|
|
394
|
+
if (!metadata || !hasOwnMeta(metadata, PROMPT_META)) {
|
|
395
|
+
return undefined;
|
|
396
|
+
}
|
|
397
|
+
return metadata[PROMPT_META];
|
|
398
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createModuleOwnedProviderChannel,
|
|
3
|
+
registerModuleOwnedContributionValidator,
|
|
4
|
+
registerModuleOwnedProviderContributor,
|
|
5
|
+
scoped,
|
|
6
|
+
type Class,
|
|
7
|
+
type DiContainer,
|
|
8
|
+
type ModuleOwnedContributionSnapshot,
|
|
9
|
+
type ModuleOwnedProviderContribution,
|
|
10
|
+
type BazisModuleMetadata,
|
|
11
|
+
type BazisModuleRef,
|
|
12
|
+
} from "../di";
|
|
13
|
+
import { AgentSetupError } from "./errors";
|
|
14
|
+
import { toolMetadataOf } from "./metadata";
|
|
15
|
+
import type { AgentToolHookRegistrationV1 } from "./AgentToolHooks";
|
|
16
|
+
|
|
17
|
+
export interface AgentOwnedToolContributionV1 { readonly target: Class<object>; readonly owner: BazisModuleRef; }
|
|
18
|
+
export interface AgentOwnedHookContributionV1 { readonly registration: AgentToolHookRegistrationV1; readonly owner: BazisModuleRef; }
|
|
19
|
+
export type AgentOwnedToolRegistrationV1 = ModuleOwnedProviderContribution<AgentOwnedToolContributionV1, object>;
|
|
20
|
+
export type AgentOwnedHookRegistrationV1 = ModuleOwnedProviderContribution<AgentOwnedHookContributionV1, object>;
|
|
21
|
+
|
|
22
|
+
const TOOL_CHANNEL = createModuleOwnedProviderChannel<AgentOwnedToolContributionV1, object>("agent.tool/v1");
|
|
23
|
+
const HOOK_CHANNEL = createModuleOwnedProviderChannel<AgentOwnedHookContributionV1, object>("agent.tool-hook/v1");
|
|
24
|
+
|
|
25
|
+
// Internal imports (including generatedRuntime's type-only AgentRegistry import)
|
|
26
|
+
// must not depend on the public barrel having augmented DI's metadata interface.
|
|
27
|
+
interface AgentModuleFields {
|
|
28
|
+
readonly tools?: readonly Class<object>[];
|
|
29
|
+
readonly agentToolHooks?: readonly AgentToolHookRegistrationV1[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function classValues(value: unknown, field: string): readonly Class<object>[] {
|
|
33
|
+
if (value === undefined) return [];
|
|
34
|
+
if (!Array.isArray(value) || value.some((entry) => typeof entry !== "function")) {
|
|
35
|
+
throw new AgentSetupError(`${field} must be an array of classes.`);
|
|
36
|
+
}
|
|
37
|
+
return value as readonly Class<object>[];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function assertAgentToolHookIdV1(id: unknown): asserts id is string {
|
|
41
|
+
if (typeof id !== "string" || !/^[\x20-\x7e]{1,128}$/.test(id)) {
|
|
42
|
+
throw new AgentSetupError("Agent Tool hook id must contain 1 to 128 printable ASCII characters.");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function assertHook(registration: AgentToolHookRegistrationV1): void {
|
|
47
|
+
if (registration.kind !== "enforcement" && registration.kind !== "settlement" && registration.kind !== "observer") throw new AgentSetupError("Agent Tool hook kind is invalid.");
|
|
48
|
+
assertAgentToolHookIdV1(registration.id);
|
|
49
|
+
if (!Number.isSafeInteger(registration.version) || registration.version <= 0) throw new AgentSetupError(`Agent Tool hook "${registration.id}" version must be a positive safe integer.`);
|
|
50
|
+
if (registration.order !== undefined && !Number.isSafeInteger(registration.order)) throw new AgentSetupError(`Agent Tool hook "${registration.id}" order must be a safe integer.`);
|
|
51
|
+
if (registration.timeoutMs !== undefined && (!Number.isSafeInteger(registration.timeoutMs) || registration.timeoutMs <= 0)) throw new AgentSetupError(`Agent Tool hook "${registration.id}" timeoutMs must be a positive safe integer.`);
|
|
52
|
+
if (typeof registration.handler !== "function") throw new AgentSetupError(`Agent Tool hook "${registration.id}" handler must be a class.`);
|
|
53
|
+
const method = registration.kind === "enforcement" ? "enforce" : registration.kind === "settlement" ? "settle" : "observe";
|
|
54
|
+
if (typeof (registration.handler as { prototype?: Record<string, unknown> }).prototype?.[method] !== "function") {
|
|
55
|
+
throw new AgentSetupError(`Agent Tool hook "${registration.id}" handler must expose ${method}(...).`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
registerModuleOwnedProviderContributor((metadata: BazisModuleMetadata, context) => {
|
|
60
|
+
const owner = metadata as BazisModuleRef;
|
|
61
|
+
const fields = metadata as BazisModuleMetadata & AgentModuleFields;
|
|
62
|
+
for (const target of classValues(fields.tools, "tools")) {
|
|
63
|
+
if (!toolMetadataOf(target)) throw new AgentSetupError(`${target.name || "<anonymous class>"} is listed as a tool but is not decorated with @Tool(...).`);
|
|
64
|
+
try {
|
|
65
|
+
context.registerScoped(TOOL_CHANNEL, scoped(target), Object.freeze({ target, owner }));
|
|
66
|
+
} catch (error) {
|
|
67
|
+
throw new AgentSetupError(error instanceof Error ? error.message : "Agent Tool provider ownership is invalid.");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (fields.agentToolHooks === undefined) return;
|
|
71
|
+
if (!Array.isArray(fields.agentToolHooks)) throw new AgentSetupError("agentToolHooks must be an array.");
|
|
72
|
+
for (const registration of fields.agentToolHooks) {
|
|
73
|
+
assertHook(registration);
|
|
74
|
+
context.addScoped(HOOK_CHANNEL, scoped(registration.handler), Object.freeze({ registration, owner }));
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
registerModuleOwnedContributionValidator((snapshot: ModuleOwnedContributionSnapshot) => {
|
|
79
|
+
const toolNames = new Set<string>();
|
|
80
|
+
for (const contribution of snapshot.getProviderContributions(TOOL_CHANNEL)) {
|
|
81
|
+
const name = toolMetadataOf(contribution.payload.target)!.name;
|
|
82
|
+
if (toolNames.has(name)) throw new AgentSetupError(`Duplicate Tool registration "${name}".`);
|
|
83
|
+
toolNames.add(name);
|
|
84
|
+
}
|
|
85
|
+
const seen = new Set<string>();
|
|
86
|
+
const versions = new Map<string, number>();
|
|
87
|
+
for (const contribution of snapshot.getProviderContributions(HOOK_CHANNEL)) {
|
|
88
|
+
const registration = contribution.payload.registration;
|
|
89
|
+
const identity = `${registration.kind}:${registration.id}:${registration.version}`;
|
|
90
|
+
if (seen.has(identity)) throw new AgentSetupError(`Duplicate Agent Tool hook identity "${identity}".`);
|
|
91
|
+
seen.add(identity);
|
|
92
|
+
const versionKey = `${registration.kind}:${registration.id}`;
|
|
93
|
+
const existingVersion = versions.get(versionKey);
|
|
94
|
+
if (existingVersion !== undefined && existingVersion !== registration.version) throw new AgentSetupError(`Agent Tool hook "${versionKey}" has incompatible active versions.`);
|
|
95
|
+
versions.set(versionKey, registration.version);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
export interface AgentModuleContributionSnapshotV1 {
|
|
100
|
+
readonly tools: readonly AgentOwnedToolRegistrationV1[];
|
|
101
|
+
readonly hooks: readonly AgentOwnedHookRegistrationV1[];
|
|
102
|
+
}
|
|
103
|
+
const snapshots = new WeakMap<DiContainer, AgentModuleContributionSnapshotV1>();
|
|
104
|
+
export function getAgentModuleContributionsV1(container: DiContainer): AgentModuleContributionSnapshotV1 {
|
|
105
|
+
const existing = snapshots.get(container);
|
|
106
|
+
if (existing) return existing;
|
|
107
|
+
const snapshot = Object.freeze({
|
|
108
|
+
tools: Object.freeze([...container.getModuleOwnedProviderContributions(TOOL_CHANNEL)]),
|
|
109
|
+
hooks: Object.freeze([...container.getModuleOwnedProviderContributions(HOOK_CHANNEL)]),
|
|
110
|
+
});
|
|
111
|
+
snapshots.set(container, snapshot);
|
|
112
|
+
return snapshot;
|
|
113
|
+
}
|