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.
Files changed (513) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -0
  3. package/cli/build.ts +147 -0
  4. package/cli/codegen.ts +40 -0
  5. package/cli/generateModule.ts +187 -0
  6. package/cli/generateProject.ts +183 -0
  7. package/cli/main.ts +125 -0
  8. package/cli/moduleRegistration.ts +127 -0
  9. package/cli/naming.ts +124 -0
  10. package/cli/parseCli.ts +151 -0
  11. package/cli/templates/module.ts +497 -0
  12. package/cli/templates/pack.ts +76 -0
  13. package/cli/templates/passport.ts +178 -0
  14. package/core/agent/AgentContextBuilder.ts +567 -0
  15. package/core/agent/AgentDataDefinition.ts +8 -0
  16. package/core/agent/AgentRegistry.ts +539 -0
  17. package/core/agent/AgentRuntime.ts +47 -0
  18. package/core/agent/AgentToolExecutor.ts +2130 -0
  19. package/core/agent/AgentToolHooks.ts +39 -0
  20. package/core/agent/ModelProvider.ts +21 -0
  21. package/core/agent/README.md +229 -0
  22. package/core/agent/Tool.contract.ts +20 -0
  23. package/core/agent/decorators/Agent.ts +11 -0
  24. package/core/agent/decorators/Prompt.ts +11 -0
  25. package/core/agent/decorators/Task.ts +29 -0
  26. package/core/agent/decorators/Tool.ts +12 -0
  27. package/core/agent/errors.ts +43 -0
  28. package/core/agent/generated/catalog.ts +26 -0
  29. package/core/agent/index.ts +170 -0
  30. package/core/agent/internal/AgentExecutionDriver.ts +1497 -0
  31. package/core/agent/internal/AgentExecutionState.ts +775 -0
  32. package/core/agent/internal/AgentJsonSchema.ts +150 -0
  33. package/core/agent/internal/AgentModelBinding.ts +57 -0
  34. package/core/agent/internal/Schema.contract.ts +36 -0
  35. package/core/agent/internal/ToolAudit.projector.ts +163 -0
  36. package/core/agent/internal/ToolContract.validator.ts +102 -0
  37. package/core/agent/metadata.ts +398 -0
  38. package/core/agent/moduleContributions-v1.ts +113 -0
  39. package/core/agent/semantic.ts +903 -0
  40. package/core/agent/session/codec.ts +33 -0
  41. package/core/agent/session/contracts.ts +96 -0
  42. package/core/agent/session/entities.ts +84 -0
  43. package/core/agent/session/protector.ts +92 -0
  44. package/core/app/index.ts +5 -0
  45. package/core/app/runApp.ts +293 -0
  46. package/core/app/ui/index.ts +29 -0
  47. package/core/app/ui/uiProfileResolver.ts +966 -0
  48. package/core/app/ui/uiSurfaceHosting.ts +38 -0
  49. package/core/app/ui/uiSurfaceHttp.ts +476 -0
  50. package/core/background/BackgroundService.ts +223 -0
  51. package/core/background/backgroundModule.ts +42 -0
  52. package/core/background/decorator.ts +43 -0
  53. package/core/background/delay.ts +27 -0
  54. package/core/background/index.ts +15 -0
  55. package/core/cache/COMPATIBILITY.md +13 -0
  56. package/core/cache/ICache.ts +71 -0
  57. package/core/cache/MemoryCache.ts +394 -0
  58. package/core/cache/README.md +83 -0
  59. package/core/cache/SPEC.md +1355 -0
  60. package/core/cache/cacheModule.ts +21 -0
  61. package/core/cache/decorators/Cacheable.ts +38 -0
  62. package/core/cache/decorators/CacheableRedis.ts +39 -0
  63. package/core/cache/decorators/OutputCache.ts +33 -0
  64. package/core/cache/decorators/OutputRedisCache.ts +33 -0
  65. package/core/cache/decorators/cacheableMetadata.ts +78 -0
  66. package/core/cache/decorators/cacheableRedisMetadata.ts +81 -0
  67. package/core/cache/decorators/outputCacheMetadata.ts +71 -0
  68. package/core/cache/decorators/outputRedisCacheMetadata.ts +77 -0
  69. package/core/cache/di/classProviderHook.ts +26 -0
  70. package/core/cache/distributed/CacheCodec.ts +5 -0
  71. package/core/cache/distributed/DistributedCache.ts +403 -0
  72. package/core/cache/distributed/DistributedCacheDriver.ts +83 -0
  73. package/core/cache/distributed/DistributedCacheStores.ts +28 -0
  74. package/core/cache/distributed/IDistributedCache.ts +40 -0
  75. package/core/cache/distributed/NamedCacheRegistry.ts +23 -0
  76. package/core/cache/distributed/codecs.ts +32 -0
  77. package/core/cache/distributed/index.ts +19 -0
  78. package/core/cache/errors/CacheError.ts +16 -0
  79. package/core/cache/http/CachedHttpPayload.ts +213 -0
  80. package/core/cache/http/applyClientCacheHeaders.ts +61 -0
  81. package/core/cache/http/buildOutputCacheKey.ts +154 -0
  82. package/core/cache/http/buildRedisOutputCacheKey.ts +16 -0
  83. package/core/cache/http/composeOutputCache.ts +130 -0
  84. package/core/cache/http/outputCacheMiddleware.ts +111 -0
  85. package/core/cache/http/outputCacheSecurityWarning.ts +58 -0
  86. package/core/cache/http/outputRedisCacheMiddleware.ts +118 -0
  87. package/core/cache/index.ts +97 -0
  88. package/core/cache/internal/AutomaticCacheKey.ts +106 -0
  89. package/core/cache/internal/CacheKeyGuard.ts +56 -0
  90. package/core/cache/internal/buildCacheProviders.ts +146 -0
  91. package/core/cache/internal/normalizeCacheKey.ts +9 -0
  92. package/core/cache/internal/resolveCachePolicy.ts +32 -0
  93. package/core/cache/internal/resolveCacheableRedisPolicy.ts +17 -0
  94. package/core/cache/internal/resolveOutputRedisCachePolicy.ts +17 -0
  95. package/core/cache/providers/cachedProviders.ts +68 -0
  96. package/core/cache/services/cacheProxy.ts +243 -0
  97. package/core/cache/tokens/CACHE_POLICIES.ts +5 -0
  98. package/core/cache/tokens/DISTRIBUTED_CACHE.ts +30 -0
  99. package/core/cache/types/CacheEntry.ts +7 -0
  100. package/core/cache/types/CacheOptions.ts +60 -0
  101. package/core/cache/types/CachePolicy.ts +74 -0
  102. package/core/cache/types/CacheableRedisOptions.ts +23 -0
  103. package/core/cache/types/OutputRedisCacheOptions.ts +25 -0
  104. package/core/di/README.md +104 -0
  105. package/core/di/ServiceCollection.ts +185 -0
  106. package/core/di/ServiceProvider.ts +689 -0
  107. package/core/di/ServiceScope.ts +61 -0
  108. package/core/di/container.ts +38 -0
  109. package/core/di/errors/AmbiguousNamedDependencyError.ts +10 -0
  110. package/core/di/errors/AsyncResolutionRequiredError.ts +12 -0
  111. package/core/di/errors/CircularDependencyError.ts +10 -0
  112. package/core/di/errors/ClassDependenciesMismatchError.ts +15 -0
  113. package/core/di/errors/DiError.ts +6 -0
  114. package/core/di/errors/InvalidProviderError.ts +9 -0
  115. package/core/di/errors/ModuleEncapsulationError.ts +7 -0
  116. package/core/di/errors/ModuleOwnedProviderConflictError.ts +8 -0
  117. package/core/di/errors/NamedDependencyNotFoundError.ts +7 -0
  118. package/core/di/errors/OptionsValidationError.ts +7 -0
  119. package/core/di/errors/ProviderNotFoundError.ts +10 -0
  120. package/core/di/errors/ScopeDisposedError.ts +7 -0
  121. package/core/di/errors/ScopedServiceFromRootError.ts +9 -0
  122. package/core/di/errors/ServiceValidationError.ts +7 -0
  123. package/core/di/errors/index.ts +14 -0
  124. package/core/di/extensions/activator.ts +39 -0
  125. package/core/di/extensions/application.ts +117 -0
  126. package/core/di/extensions/hosted-service.ts +124 -0
  127. package/core/di/extensions/index.ts +23 -0
  128. package/core/di/extensions/options-reloadable.ts +137 -0
  129. package/core/di/extensions/options.ts +91 -0
  130. package/core/di/extensions/service-provider-token.ts +21 -0
  131. package/core/di/index.ts +97 -0
  132. package/core/di/internal/GraphValidator.ts +119 -0
  133. package/core/di/internal/HostedServicePlan.ts +158 -0
  134. package/core/di/internal/NamedTokenIndex.ts +55 -0
  135. package/core/di/internal/OpenGenericRegistration.ts +14 -0
  136. package/core/di/internal/ResolutionPlan.ts +18 -0
  137. package/core/di/internal/ResolutionScopeState.ts +19 -0
  138. package/core/di/internal/ResolutionTracker.ts +153 -0
  139. package/core/di/internal/ScopeLifecycle.ts +159 -0
  140. package/core/di/internal/ServiceRegistration.ts +14 -0
  141. package/core/di/internal/ServiceRegistry.ts +252 -0
  142. package/core/di/internal/classDeps.ts +38 -0
  143. package/core/di/internal/disposal.ts +58 -0
  144. package/core/di/internal/providerDeps.ts +26 -0
  145. package/core/di/module/DI.ts +146 -0
  146. package/core/di/module/Global.ts +25 -0
  147. package/core/di/module/Module.ts +44 -0
  148. package/core/di/module/ModuleRegistrar.ts +69 -0
  149. package/core/di/module/autoDeps.ts +39 -0
  150. package/core/di/module/classProviderHooks.ts +66 -0
  151. package/core/di/module/collectModuleConfigs.ts +57 -0
  152. package/core/di/module/collectModuleControllers.ts +53 -0
  153. package/core/di/module/collectModuleUiProfiles.ts +53 -0
  154. package/core/di/module/createContainer.ts +261 -0
  155. package/core/di/module/encapsulation.ts +416 -0
  156. package/core/di/module/encapsulationHooks.ts +36 -0
  157. package/core/di/module/generatedProviderAttachments.ts +102 -0
  158. package/core/di/module/index.ts +41 -0
  159. package/core/di/module/moduleExtensions.ts +35 -0
  160. package/core/di/module/moduleNameBinding.ts +136 -0
  161. package/core/di/module/moduleOwnedProviderContributors.ts +409 -0
  162. package/core/di/module/providerSelection.ts +90 -0
  163. package/core/di/module/shortcuts.ts +111 -0
  164. package/core/di/module/types/BazisModule.ts +71 -0
  165. package/core/di/module/types/DiRegistrar.ts +24 -0
  166. package/core/di/module/types/index.ts +2 -0
  167. package/core/di/provider/index.ts +26 -0
  168. package/core/di/provider/providerGuards.ts +17 -0
  169. package/core/di/provider/types/AsyncFactoryProvider.ts +15 -0
  170. package/core/di/provider/types/ClassProvider.ts +18 -0
  171. package/core/di/provider/types/FactoryProvider.ts +20 -0
  172. package/core/di/provider/types/KeyedDependency.ts +20 -0
  173. package/core/di/provider/types/LazyDependency.ts +31 -0
  174. package/core/di/provider/types/NamedDependency.ts +16 -0
  175. package/core/di/provider/types/Provider.ts +10 -0
  176. package/core/di/provider/types/ProviderDefinition.ts +11 -0
  177. package/core/di/provider/types/ProviderDependencyList.ts +11 -0
  178. package/core/di/provider/types/ProviderLifetime.ts +1 -0
  179. package/core/di/provider/types/ProviderOwnership.ts +7 -0
  180. package/core/di/provider/types/ResolvedDeps.ts +18 -0
  181. package/core/di/provider/types/ValueProvider.ts +6 -0
  182. package/core/di/provider/types/index.ts +13 -0
  183. package/core/di/token.ts +84 -0
  184. package/core/di/types/BuildServiceProviderOptions.ts +4 -0
  185. package/core/di/types/ServiceKey.ts +1 -0
  186. package/core/di/types/ServiceResolver.ts +16 -0
  187. package/core/di/types/index.ts +3 -0
  188. package/core/generatedFingerprint.ts +60 -0
  189. package/core/generatedRuntime.ts +187 -0
  190. package/core/grpc/Grpc.module.ts +23 -0
  191. package/core/grpc/GrpcBinding.contract.ts +35 -0
  192. package/core/grpc/GrpcCall.ts +73 -0
  193. package/core/grpc/GrpcClient.ts +172 -0
  194. package/core/grpc/GrpcClientCall.ts +267 -0
  195. package/core/grpc/GrpcError.ts +19 -0
  196. package/core/grpc/GrpcRequest.binding.ts +45 -0
  197. package/core/grpc/GrpcServer.ts +204 -0
  198. package/core/grpc/GrpcStatus.ts +8 -0
  199. package/core/grpc/GrpcTransport.ts +174 -0
  200. package/core/grpc/Metadata.ts +73 -0
  201. package/core/grpc/ProtoCodec.ts +225 -0
  202. package/core/grpc/ProtoParser.ts +192 -0
  203. package/core/grpc/ProtoReader.ts +34 -0
  204. package/core/grpc/ProtoSchema.ts +52 -0
  205. package/core/grpc/ServerCredentials.ts +30 -0
  206. package/core/grpc/clientContracts.ts +39 -0
  207. package/core/grpc/contracts.ts +45 -0
  208. package/core/grpc/decorators.ts +82 -0
  209. package/core/grpc/grpcClientProvider.ts +9 -0
  210. package/core/grpc/index.ts +17 -0
  211. package/core/grpc/moduleControllers.ts +38 -0
  212. package/core/grpc/protobuf.ts +80 -0
  213. package/core/grpc/serviceDefinition.ts +20 -0
  214. package/core/http/Authorization/Authorize.ts +52 -0
  215. package/core/http/Authorization/authorizeComposer.ts +31 -0
  216. package/core/http/Authorization/metadata.ts +158 -0
  217. package/core/http/Binding/ParameterBinder.ts +109 -0
  218. package/core/http/Binding/RequestModel.ts +27 -0
  219. package/core/http/Binding/autoBindings.ts +125 -0
  220. package/core/http/Binding/bindings.ts +19 -0
  221. package/core/http/Binding/convert.ts +48 -0
  222. package/core/http/Binding/generatedSpec.ts +18 -0
  223. package/core/http/Binding/listModelRegistry.ts +47 -0
  224. package/core/http/Binding/modelBinder.ts +345 -0
  225. package/core/http/Binding/modelValidator.ts +30 -0
  226. package/core/http/Binding/requestModelRegistry.ts +117 -0
  227. package/core/http/Decorators/attributes.ts +92 -0
  228. package/core/http/Decorators/controller.ts +24 -0
  229. package/core/http/Decorators/metadata.ts +107 -0
  230. package/core/http/Decorators/routes.ts +131 -0
  231. package/core/http/Errors/HttpError.ts +92 -0
  232. package/core/http/HttpContext/HttpContext.ts +148 -0
  233. package/core/http/HttpContext/ResponseBuilder.ts +37 -0
  234. package/core/http/HttpContext/inspectableRedirects.ts +47 -0
  235. package/core/http/HttpContext/principal.ts +24 -0
  236. package/core/http/HttpContext/responseLifetime.ts +45 -0
  237. package/core/http/HttpServer.ts +627 -0
  238. package/core/http/Middleware/accessLog.ts +90 -0
  239. package/core/http/Middleware/cors.ts +160 -0
  240. package/core/http/Middleware/errorHandler.ts +100 -0
  241. package/core/http/Middleware/pipeline.ts +21 -0
  242. package/core/http/Middleware/rateLimit.ts +104 -0
  243. package/core/http/Middleware/securityHeaders.ts +118 -0
  244. package/core/http/Middleware/types.ts +19 -0
  245. package/core/http/OpenApi/generatedOpenApiRegistry.ts +102 -0
  246. package/core/http/OpenApi/openApiDocs.ts +75 -0
  247. package/core/http/OpenApi/openApiDocument.ts +356 -0
  248. package/core/http/README.md +139 -0
  249. package/core/http/Results/HttpResult.ts +19 -0
  250. package/core/http/Results/normalize.ts +93 -0
  251. package/core/http/Results/results.ts +70 -0
  252. package/core/http/Routing/Router.ts +201 -0
  253. package/core/http/Routing/RouterBuilder.ts +184 -0
  254. package/core/http/Routing/template.ts +112 -0
  255. package/core/http/SPEC.md +981 -0
  256. package/core/http/Versioning/VersionReader.ts +20 -0
  257. package/core/http/WebSocketUpgrade.ts +29 -0
  258. package/core/http/composeRouteMiddlewareComposers.ts +21 -0
  259. package/core/http/correlation/createCorrelationIdMiddleware.ts +79 -0
  260. package/core/http/httpModule.ts +48 -0
  261. package/core/http/index.ts +140 -0
  262. package/core/http/middlewareTokens.ts +48 -0
  263. package/core/http/options.ts +134 -0
  264. package/core/http-client/index.ts +105 -0
  265. package/core/infra/Infra.ts +158 -0
  266. package/core/infra/InfraConnector.ts +86 -0
  267. package/core/infra/InfraLifecycle.ts +86 -0
  268. package/core/infra/cache/RedisDistributedCacheBackend.ts +88 -0
  269. package/core/infra/cache/RedisDistributedCacheDriver.ts +186 -0
  270. package/core/infra/cache/index.ts +7 -0
  271. package/core/infra/connectorConfig.ts +29 -0
  272. package/core/infra/connectorIdentity.ts +39 -0
  273. package/core/infra/connectors/codex/CodexAppServer.ts +146 -0
  274. package/core/infra/connectors/codex/CodexAppServerClient.ts +258 -0
  275. package/core/infra/connectors/codex/CodexPolicy.ts +114 -0
  276. package/core/infra/connectors/codex/CodexTurn.ts +133 -0
  277. package/core/infra/connectors/codex/contracts.ts +82 -0
  278. package/core/infra/connectors/codex.ts +26 -0
  279. package/core/infra/connectors/llm.ts +78 -0
  280. package/core/infra/connectors/llmRouter.ts +443 -0
  281. package/core/infra/connectors/openaiCompatible.ts +590 -0
  282. package/core/infra/connectors/openaiTextStream.ts +134 -0
  283. package/core/infra/connectors/opensearch.ts +307 -0
  284. package/core/infra/connectors/postgres.ts +105 -0
  285. package/core/infra/connectors/redis.ts +132 -0
  286. package/core/infra/index.ts +58 -0
  287. package/core/kernel/ApplicationLifetime.ts +91 -0
  288. package/core/kernel/Bazis.ts +73 -0
  289. package/core/kernel/Environment.ts +53 -0
  290. package/core/kernel/Kernel.ts +391 -0
  291. package/core/kernel/KernelBuilder.ts +172 -0
  292. package/core/kernel/LifecycleCoordinator.ts +204 -0
  293. package/core/kernel/README.md +66 -0
  294. package/core/kernel/SupervisedHostedService.ts +147 -0
  295. package/core/kernel/config/ConfigRegistry.ts +48 -0
  296. package/core/kernel/config/Configuration.ts +110 -0
  297. package/core/kernel/config/README.md +62 -0
  298. package/core/kernel/config/Secret.ts +29 -0
  299. package/core/kernel/config/addConfigOptions.ts +63 -0
  300. package/core/kernel/config/defineConfig.ts +211 -0
  301. package/core/kernel/config/sources.ts +123 -0
  302. package/core/kernel/correlation/requestContext.ts +57 -0
  303. package/core/kernel/errors/ConfigKeyMissingError.ts +7 -0
  304. package/core/kernel/errors/KernelError.ts +7 -0
  305. package/core/kernel/errors/ShutdownTimeoutError.ts +7 -0
  306. package/core/kernel/errors/StartupAbortedError.ts +7 -0
  307. package/core/kernel/errors/StartupTimeoutError.ts +7 -0
  308. package/core/kernel/errors/index.ts +5 -0
  309. package/core/kernel/events/EventBus.ts +140 -0
  310. package/core/kernel/events/EventToken.ts +17 -0
  311. package/core/kernel/events/eventSubscribers.ts +126 -0
  312. package/core/kernel/events/kernelEvents.ts +16 -0
  313. package/core/kernel/events/onEvent.ts +32 -0
  314. package/core/kernel/health/HealthCheckContracts.ts +42 -0
  315. package/core/kernel/health/HealthService.ts +93 -0
  316. package/core/kernel/index.ts +96 -0
  317. package/core/kernel/internal/awaitAbortable.ts +18 -0
  318. package/core/kernel/internal/awaitShutdown.ts +21 -0
  319. package/core/kernel/internal/reportDiagnosticFailure.ts +8 -0
  320. package/core/kernel/internal/validateTimeout.ts +8 -0
  321. package/core/kernel/lifecycleHooks.ts +18 -0
  322. package/core/kernel/logging/ConsoleLogger.ts +68 -0
  323. package/core/kernel/logging/Logger.ts +22 -0
  324. package/core/kernel/types/ConfigSource.ts +9 -0
  325. package/core/kernel/types/EnvironmentName.ts +1 -0
  326. package/core/kernel/types/KernelOptions.ts +23 -0
  327. package/core/kernel/types/LifecycleHook.ts +18 -0
  328. package/core/kernel/types/index.ts +4 -0
  329. package/core/orm/DATABASE_PROVIDER.ts +5 -0
  330. package/core/orm/OrmHostedPlan.validator.ts +55 -0
  331. package/core/orm/OrmLifecycle.ts +146 -0
  332. package/core/orm/OrmOwnedStoreLifecycle.ts +96 -0
  333. package/core/orm/buildOrmProviders.ts +152 -0
  334. package/core/orm/databaseConnector.ts +108 -0
  335. package/core/orm/encapsulationHook.ts +19 -0
  336. package/core/orm/index.ts +95 -0
  337. package/core/orm/listQuery.ts +198 -0
  338. package/core/orm/ormModule.ts +173 -0
  339. package/core/orm/ownedStoreContributions.ts +195 -0
  340. package/core/orm/registerRepositories.ts +27 -0
  341. package/core/orm/repository.ts +45 -0
  342. package/core/orm/strictSchemaHostedIdentity.ts +17 -0
  343. package/core/scripts/agent-codegen.ts +1166 -0
  344. package/core/scripts/di-generate-target.ts +90 -0
  345. package/core/scripts/di-generate.ts +1837 -0
  346. package/core/scripts/orm-predicate-codegen.ts +33 -0
  347. package/core/scripts/request-model-codegen.ts +326 -0
  348. package/core/websocket/DESIGN.md +297 -0
  349. package/core/websocket/WsRateLimiter.ts +101 -0
  350. package/core/websocket/adapter/adapter.interface.ts +45 -0
  351. package/core/websocket/adapter/in-memory.adapter.ts +190 -0
  352. package/core/websocket/adapter/redis-delivery-scripts.ts +135 -0
  353. package/core/websocket/adapter/redis-delivery-store.ts +86 -0
  354. package/core/websocket/adapter/redis-operations.ts +33 -0
  355. package/core/websocket/adapter/redis.adapter.ts +218 -0
  356. package/core/websocket/codec/binary.codec.ts +87 -0
  357. package/core/websocket/codec/json.codec.ts +34 -0
  358. package/core/websocket/codec/packet-codec.interface.ts +17 -0
  359. package/core/websocket/decorators.ts +165 -0
  360. package/core/websocket/explorer.ts +126 -0
  361. package/core/websocket/index.ts +78 -0
  362. package/core/websocket/middleware.ts +146 -0
  363. package/core/websocket/packet-codec.ts +75 -0
  364. package/core/websocket/reliable-delivery.ts +56 -0
  365. package/core/websocket/session-creation.ts +16 -0
  366. package/core/websocket/session-manager.ts +856 -0
  367. package/core/websocket/socket-wrapper.ts +314 -0
  368. package/core/websocket/topic-cache.ts +59 -0
  369. package/core/websocket/types.ts +122 -0
  370. package/core/websocket/websocketModule.ts +96 -0
  371. package/core/websocket/ws-dispatch.ts +123 -0
  372. package/core/websocket/ws-server.ts +1707 -0
  373. package/index.ts +281 -0
  374. package/library/boundary/diagnostics-v1.ts +136 -0
  375. package/library/boundary/index.ts +73 -0
  376. package/library/boundary/json/decodeBoundedJsonV1.ts +518 -0
  377. package/library/boundary/json/limits-v1.ts +46 -0
  378. package/library/boundary/json/normalizeBoundedJsonV1.ts +256 -0
  379. package/library/boundary/json/types-v1.ts +11 -0
  380. package/library/boundary/schema/boundarySchemaHashV1.ts +6 -0
  381. package/library/boundary/schema/collectBoundaryValueDiagnosticsV1.ts +325 -0
  382. package/library/boundary/schema/decodeBoundarySchemaV1.ts +646 -0
  383. package/library/boundary/schema/index.ts +8 -0
  384. package/library/boundary/schema/types-v1.ts +99 -0
  385. package/library/boundary/schema/validateBoundaryValueV1.ts +58 -0
  386. package/library/boundary/serialization/canonicalJsonV1.ts +66 -0
  387. package/library/http-client/HttpClient.ts +969 -0
  388. package/library/http-client/HttpClientFactory.ts +45 -0
  389. package/library/http-client/errors.ts +68 -0
  390. package/library/http-client/index.ts +43 -0
  391. package/library/http-client/interceptors.ts +40 -0
  392. package/library/http-client/progress.ts +62 -0
  393. package/library/http-client/redirectProtocol.ts +6 -0
  394. package/library/http-client/serialize.ts +133 -0
  395. package/library/http-client/types.ts +174 -0
  396. package/library/jsonapi/ListQueryError.ts +25 -0
  397. package/library/jsonapi/ListRequest.ts +37 -0
  398. package/library/jsonapi/decorators.ts +161 -0
  399. package/library/jsonapi/document.ts +124 -0
  400. package/library/jsonapi/index.ts +40 -0
  401. package/library/jsonapi/parseListQuery.ts +291 -0
  402. package/library/jsonapi/types.ts +125 -0
  403. package/library/jwt/JwtEncoder.ts +40 -0
  404. package/library/jwt/JwtKeyRing.ts +164 -0
  405. package/library/jwt/JwtValidator.ts +210 -0
  406. package/library/jwt/TokenIssuer.ts +149 -0
  407. package/library/jwt/TokenService.ts +51 -0
  408. package/library/jwt/base64url.ts +61 -0
  409. package/library/jwt/claims.ts +36 -0
  410. package/library/jwt/errors.ts +44 -0
  411. package/library/jwt/index.ts +59 -0
  412. package/library/jwt/limits.ts +8 -0
  413. package/library/jwt/signing/Hs256Algorithm.ts +62 -0
  414. package/library/jwt/signing/Rs256Algorithm.ts +133 -0
  415. package/library/jwt/signing/SigningAlgorithm.ts +18 -0
  416. package/library/jwt/signing/pem.ts +30 -0
  417. package/library/openapi/codegen.ts +875 -0
  418. package/library/openapi/document.ts +326 -0
  419. package/library/openapi/index.ts +13 -0
  420. package/library/openapi/types.ts +69 -0
  421. package/library/openapi/ui.ts +182 -0
  422. package/library/orm/DatabaseFacade.ts +209 -0
  423. package/library/orm/DbContext.ts +107 -0
  424. package/library/orm/DbContextFactory.ts +25 -0
  425. package/library/orm/DbContextOptions.ts +33 -0
  426. package/library/orm/Metadata/DynamicModelBuilder.ts +497 -0
  427. package/library/orm/Metadata/KeyTuple.ts +36 -0
  428. package/library/orm/Metadata/ModelBuilder.ts +299 -0
  429. package/library/orm/Metadata/OrmModel.ts +80 -0
  430. package/library/orm/Metadata/ValueConverter.ts +57 -0
  431. package/library/orm/Metadata/conventions.ts +54 -0
  432. package/library/orm/Metadata/decorators.ts +396 -0
  433. package/library/orm/Metadata/types.ts +140 -0
  434. package/library/orm/Providers/OwnedStoreCatalog.reader.ts +1802 -0
  435. package/library/orm/Providers/PostgresDialect.ts +234 -0
  436. package/library/orm/Providers/PostgresProvider.ts +1494 -0
  437. package/library/orm/Providers/PostgresSchema.decoder.ts +107 -0
  438. package/library/orm/Providers/limits.ts +29 -0
  439. package/library/orm/Providers/operationDeadline.ts +43 -0
  440. package/library/orm/Providers/ormOwnedStoreRuntime.ts +19 -0
  441. package/library/orm/Providers/ormTransactionRuntime.ts +117 -0
  442. package/library/orm/Providers/propertyConversion.ts +14 -0
  443. package/library/orm/Providers/resolvedForeignKey.ts +16 -0
  444. package/library/orm/Providers/transactionCallbacks.ts +45 -0
  445. package/library/orm/Providers/transactionOutcome.ts +82 -0
  446. package/library/orm/Providers/transactionScopes.ts +78 -0
  447. package/library/orm/Providers/types.ts +207 -0
  448. package/library/orm/Query/DbSet.ts +78 -0
  449. package/library/orm/Query/EntityQuery.ts +247 -0
  450. package/library/orm/Query/ImmediateMutations.ts +226 -0
  451. package/library/orm/Query/IncludeLoader.ts +200 -0
  452. package/library/orm/Query/QueryPlan.ts +55 -0
  453. package/library/orm/Query/SqlTranslator.ts +195 -0
  454. package/library/orm/Query/conditions.ts +127 -0
  455. package/library/orm/Query/materialize.ts +39 -0
  456. package/library/orm/README.md +256 -0
  457. package/library/orm/Repository/README.md +684 -0
  458. package/library/orm/Repository/Repository.ts +68 -0
  459. package/library/orm/Saving/CommandBuilder.ts +139 -0
  460. package/library/orm/Saving/ExecutionStrategy.ts +128 -0
  461. package/library/orm/Saving/SaveExecutor.ts +413 -0
  462. package/library/orm/Saving/applyConventions.ts +64 -0
  463. package/library/orm/Schema/CheckExpression.ts +327 -0
  464. package/library/orm/Schema/ExactSchemaVerifier.ts +168 -0
  465. package/library/orm/Schema/ExpectedSchema.ts +43 -0
  466. package/library/orm/Schema/MigrationRunner.ts +146 -0
  467. package/library/orm/Schema/Migrator.ts +73 -0
  468. package/library/orm/Schema/OrmOwnedStore.ts +123 -0
  469. package/library/orm/Schema/OwnedStoreAdmission.ts +752 -0
  470. package/library/orm/Schema/OwnedStoreCanonical.ts +273 -0
  471. package/library/orm/Schema/OwnedStoreCatalog.ts +1325 -0
  472. package/library/orm/Schema/SafeAdditiveSchema.ts +100 -0
  473. package/library/orm/Schema/SchemaAdmission.ts +62 -0
  474. package/library/orm/Schema/SchemaDiffer.ts +78 -0
  475. package/library/orm/Schema/formatSchemaDifferences.ts +62 -0
  476. package/library/orm/Schema/introspection.ts +52 -0
  477. package/library/orm/Schema/physicalColumnTypes.ts +37 -0
  478. package/library/orm/Schema/tableKey.ts +26 -0
  479. package/library/orm/Tracking/ChangeTracker.ts +448 -0
  480. package/library/orm/Tracking/EntityState.ts +13 -0
  481. package/library/orm/Transactions/OrmTransaction.ts +30 -0
  482. package/library/orm/Transactions/TransactionScopeCoordinator.ts +377 -0
  483. package/library/orm/errors.ts +190 -0
  484. package/library/orm/index.ts +162 -0
  485. package/library/orm/runtime.ts +14 -0
  486. package/library/redaction/index.ts +166 -0
  487. package/library/ui/UiProfile.ts +77 -0
  488. package/library/ui/compiled-v1.ts +131 -0
  489. package/library/ui/compiler/compileUiSurfaceV1.ts +717 -0
  490. package/library/ui/compiler/contracts-v1.ts +25 -0
  491. package/library/ui/compiler/index.ts +12 -0
  492. package/library/ui/compiler/openApiIndex.ts +246 -0
  493. package/library/ui/defineUiProfile.ts +340 -0
  494. package/library/ui/diagnostics-v1.ts +33 -0
  495. package/library/ui/index.ts +129 -0
  496. package/library/ui/profile-v1.ts +191 -0
  497. package/library/ui/serialization.ts +130 -0
  498. package/library/ui/uiProfileAuthoring.ts +289 -0
  499. package/library/ui/uiProfileAuthoringMetadata.ts +78 -0
  500. package/library/validation/MessageRegistry.ts +144 -0
  501. package/library/validation/README.md +62 -0
  502. package/library/validation/RuleCompiler.ts +183 -0
  503. package/library/validation/RuleEngine.ts +401 -0
  504. package/library/validation/SPEC.md +579 -0
  505. package/library/validation/ValidationError.ts +37 -0
  506. package/library/validation/ValidationResult.ts +63 -0
  507. package/library/validation/Validator.ts +101 -0
  508. package/library/validation/index.ts +16 -0
  509. package/library/validation/metadata.ts +69 -0
  510. package/library/validation/modelValidatorAdapter.ts +119 -0
  511. package/library/validation/types/ValidationCode.ts +69 -0
  512. package/library/validation/types/ValidatorOptions.ts +153 -0
  513. package/package.json +80 -0
@@ -0,0 +1,567 @@
1
+ import type { AgentDefinition } from "./AgentRegistry";
2
+ import { AgentRuntimeError } from "./errors";
3
+ import {
4
+ agentMessage,
5
+ type AgentContentPart,
6
+ type AgentMessage,
7
+ type AgentMessageRole,
8
+ type JsonObject,
9
+ type JsonValue,
10
+ } from "./semantic";
11
+
12
+ export interface AgentContextLimits {
13
+ readonly maxMessages?: number;
14
+ readonly maxChars?: number;
15
+ readonly maxTokens?: number;
16
+ }
17
+
18
+ export interface AgentContextBuildInput {
19
+ readonly invocationId: string;
20
+ readonly agent: AgentDefinition;
21
+ readonly messages: readonly AgentMessage[];
22
+ readonly metadata: JsonObject;
23
+ readonly limits?: AgentContextLimits;
24
+ }
25
+
26
+ export interface AgentContextTraceEntry {
27
+ readonly section: string;
28
+ readonly role?: AgentMessageRole;
29
+ readonly chars: number;
30
+ readonly tokens: number;
31
+ readonly included: boolean;
32
+ readonly reason?: string;
33
+ }
34
+
35
+ export interface AgentContext {
36
+ readonly messages: readonly AgentMessage[];
37
+ readonly trace: readonly AgentContextTraceEntry[];
38
+ readonly metadata: JsonObject;
39
+ }
40
+
41
+ export interface AgentContextBuilder {
42
+ build(input: AgentContextBuildInput): AgentContext;
43
+ }
44
+
45
+ export interface AgentContextTokenEstimator {
46
+ estimateMessage(message: AgentMessage): number;
47
+ }
48
+
49
+ export interface DefaultAgentContextBuilderOptions {
50
+ readonly tokenEstimator?: AgentContextTokenEstimator;
51
+ }
52
+
53
+ interface ContextCandidate {
54
+ readonly section: string;
55
+ readonly message: AgentMessage;
56
+ readonly chars: number;
57
+ readonly tokens: number;
58
+ }
59
+
60
+ function errorMessageOf(error: unknown): string {
61
+ try {
62
+ return error instanceof Error && typeof error.message === "string" ? error.message : String(error);
63
+ } catch {
64
+ return "Unknown error.";
65
+ }
66
+ }
67
+
68
+ function optionalPositiveInteger(value: number | undefined, field: string): number | undefined {
69
+ if (value === undefined) {
70
+ return undefined;
71
+ }
72
+ if (!Number.isInteger(value) || value <= 0) {
73
+ throw new AgentRuntimeError(`${field} must be a positive integer.`);
74
+ }
75
+ return value;
76
+ }
77
+
78
+ export function normalizeAgentContextLimits(
79
+ limits: AgentContextLimits | undefined,
80
+ field = "agentContext.limits",
81
+ ): AgentContextLimits | undefined {
82
+ if (limits === undefined) {
83
+ return undefined;
84
+ }
85
+
86
+ const normalized: { maxMessages?: number; maxChars?: number; maxTokens?: number } = {};
87
+ const maxMessages = optionalPositiveInteger(limits.maxMessages, `${field}.maxMessages`);
88
+ const maxChars = optionalPositiveInteger(limits.maxChars, `${field}.maxChars`);
89
+ const maxTokens = optionalPositiveInteger(limits.maxTokens, `${field}.maxTokens`);
90
+ if (maxMessages !== undefined) {
91
+ normalized.maxMessages = maxMessages;
92
+ }
93
+ if (maxChars !== undefined) {
94
+ normalized.maxChars = maxChars;
95
+ }
96
+ if (maxTokens !== undefined) {
97
+ normalized.maxTokens = maxTokens;
98
+ }
99
+ return Object.freeze(normalized);
100
+ }
101
+
102
+ export function mergeAgentContextLimits(
103
+ defaults: AgentContextLimits | undefined,
104
+ overrides: AgentContextLimits | undefined,
105
+ ): AgentContextLimits | undefined {
106
+ if (defaults === undefined && overrides === undefined) {
107
+ return undefined;
108
+ }
109
+ return Object.freeze({
110
+ ...(defaults ?? {}),
111
+ ...(overrides ?? {}),
112
+ });
113
+ }
114
+
115
+ function cloneMessage(message: AgentMessage, field: string): AgentMessage {
116
+ if (!message || typeof message !== "object") {
117
+ throw new AgentRuntimeError(`${field} must be an agent message.`);
118
+ }
119
+ try {
120
+ return agentMessage(message.role, message.content, {
121
+ id: message.id,
122
+ name: message.name,
123
+ toolCallId: message.toolCallId,
124
+ createdAtUnixMs: message.createdAtUnixMs,
125
+ metadata: message.metadata,
126
+ });
127
+ } catch (error) {
128
+ throw new AgentRuntimeError(`${field} is invalid: ${errorMessageOf(error)}`);
129
+ }
130
+ }
131
+
132
+ function jsonLength(value: unknown): number {
133
+ return JSON.stringify(value)?.length ?? 0;
134
+ }
135
+
136
+ function contentPartChars(part: AgentContentPart): number {
137
+ switch (part.kind) {
138
+ case "text":
139
+ return part.text.length;
140
+ case "data":
141
+ return jsonLength(part.value) + (part.name?.length ?? 0);
142
+ case "image":
143
+ return part.uri.length + (part.mediaType?.length ?? 0) + part.detail.length;
144
+ case "file":
145
+ return part.uri.length + (part.mediaType?.length ?? 0) + (part.name?.length ?? 0);
146
+ case "tool-result":
147
+ return jsonLength(part.result);
148
+ case "tool-call":
149
+ return jsonLength(part.call);
150
+ }
151
+ }
152
+
153
+ function textTokenCount(text: string): number {
154
+ const matches = text.match(/[\p{L}\p{N}_]+|[^\s]/gu);
155
+ return matches?.length ?? 0;
156
+ }
157
+
158
+ function contentPartTokens(part: AgentContentPart): number {
159
+ switch (part.kind) {
160
+ case "text":
161
+ return textTokenCount(part.text);
162
+ case "data":
163
+ return textTokenCount(JSON.stringify(part.value) ?? "") + (part.name === undefined ? 0 : textTokenCount(part.name));
164
+ case "image":
165
+ return textTokenCount(JSON.stringify({ uri: part.uri, mediaType: part.mediaType ?? null, detail: part.detail }));
166
+ case "file":
167
+ return textTokenCount(JSON.stringify({ uri: part.uri, mediaType: part.mediaType ?? null, name: part.name ?? null }));
168
+ case "tool-result":
169
+ return textTokenCount(JSON.stringify(part.result) ?? "");
170
+ case "tool-call":
171
+ return textTokenCount(JSON.stringify(part.call) ?? "");
172
+ }
173
+ }
174
+
175
+ function messageChars(message: AgentMessage): number {
176
+ let total = message.role.length;
177
+ if (message.id !== undefined) {
178
+ total += message.id.length;
179
+ }
180
+ if (message.name !== undefined) {
181
+ total += message.name.length;
182
+ }
183
+ if (message.toolCallId !== undefined) {
184
+ total += message.toolCallId.length;
185
+ }
186
+ for (let index = 0; index < message.content.length; index += 1) {
187
+ total += contentPartChars(message.content[index] as AgentContentPart);
188
+ }
189
+ return total;
190
+ }
191
+
192
+ export class ApproximateAgentContextTokenEstimator implements AgentContextTokenEstimator {
193
+ estimateMessage(message: AgentMessage): number {
194
+ let total = 1;
195
+ if (message.name !== undefined) {
196
+ total += textTokenCount(message.name);
197
+ }
198
+ if (message.toolCallId !== undefined) {
199
+ total += textTokenCount(message.toolCallId);
200
+ }
201
+ for (let index = 0; index < message.content.length; index += 1) {
202
+ total += contentPartTokens(message.content[index] as AgentContentPart);
203
+ }
204
+ return total;
205
+ }
206
+ }
207
+
208
+ function protectedIndexes(candidates: readonly ContextCandidate[]): ReadonlySet<number> {
209
+ const indexes = new Set<number>();
210
+ if (candidates.length === 0) {
211
+ return indexes;
212
+ }
213
+ if (candidates[0]?.section === "prompt") {
214
+ indexes.add(0);
215
+ }
216
+ for (let index = candidates.length - 1; index >= 0; index -= 1) {
217
+ if (candidates[index]?.section !== "prompt") {
218
+ indexes.add(index);
219
+ protectToolExchange(candidates, indexes, index);
220
+ break;
221
+ }
222
+ }
223
+ if (indexes.size === 0) {
224
+ indexes.add(0);
225
+ }
226
+ return indexes;
227
+ }
228
+
229
+ function toolCallIds(message: AgentMessage): ReadonlySet<string> {
230
+ const ids = new Set<string>();
231
+ for (const part of message.content) {
232
+ if (part.kind === "tool-call") {
233
+ ids.add(part.call.id);
234
+ }
235
+ }
236
+ return ids;
237
+ }
238
+
239
+ /** Keep the assistant call and all parallel tool results as one protocol unit. */
240
+ function protectToolExchange(
241
+ candidates: readonly ContextCandidate[],
242
+ indexes: Set<number>,
243
+ index: number,
244
+ ): void {
245
+ const current = candidates[index]?.message;
246
+ if (current?.role !== "tool") {
247
+ return;
248
+ }
249
+ const resultIds = new Set<string>();
250
+ for (let cursor = index; cursor >= 0; cursor -= 1) {
251
+ const message = candidates[cursor]?.message;
252
+ if (message?.role === "tool" && message.toolCallId !== undefined) {
253
+ resultIds.add(message.toolCallId);
254
+ indexes.add(cursor);
255
+ continue;
256
+ }
257
+ if (message?.role === "assistant") {
258
+ const callIds = toolCallIds(message);
259
+ if ([...resultIds].some((id) => callIds.has(id))) {
260
+ indexes.add(cursor);
261
+ }
262
+ }
263
+ break;
264
+ }
265
+ }
266
+
267
+ type ContextBudget = "maxMessages" | "maxChars" | "maxTokens";
268
+
269
+ /** A monotonic eviction cursor and safe integer totals keep normal trimming O(n). */
270
+ class ContextSelection {
271
+ private cursor = 0;
272
+ private readonly useRunningTokenTotal: boolean;
273
+ readonly totals = { maxMessages: 0, maxChars: 0, maxTokens: 0 };
274
+ private readonly minimum = { maxMessages: 0, maxChars: 0, maxTokens: 0 };
275
+
276
+ constructor(
277
+ private readonly candidates: readonly ContextCandidate[],
278
+ private readonly included: boolean[],
279
+ private readonly reasons: Array<string | undefined>,
280
+ private readonly protectedItems: ReadonlySet<number>,
281
+ ) {
282
+ candidates.forEach((candidate, index) => {
283
+ this.totals.maxMessages++;
284
+ this.totals.maxChars += candidate.chars;
285
+ this.totals.maxTokens += candidate.tokens;
286
+ if (protectedItems.has(index)) {
287
+ this.minimum.maxMessages++;
288
+ this.minimum.maxChars += candidate.chars;
289
+ this.minimum.maxTokens += candidate.tokens;
290
+ }
291
+ });
292
+ this.useRunningTokenTotal = Number.isSafeInteger(this.totals.maxTokens) && candidates.every((candidate) => Number.isSafeInteger(candidate.tokens));
293
+ }
294
+
295
+ apply(budget: ContextBudget, limit: number | undefined): void {
296
+ if (limit === undefined) return;
297
+ if (limit < this.minimum[budget]) {
298
+ throw new AgentRuntimeError(`agentContext.limits.${budget} is too small for protected context.`);
299
+ }
300
+ while (this.total(budget) > limit) {
301
+ if (!this.dropOldest(budget)) {
302
+ throw new AgentRuntimeError(`agentContext.limits.${budget} cannot be applied to protected context.`);
303
+ }
304
+ }
305
+ }
306
+
307
+ total(budget: ContextBudget): number {
308
+ if (budget !== "maxTokens" || this.useRunningTokenTotal) return this.totals[budget];
309
+ // Custom estimators historically accept fractions and huge finite values.
310
+ // Preserve their left-to-right sums instead of subtracting with rounding
311
+ // error or retaining Infinity after a large message has been removed.
312
+ let total = 0;
313
+ this.candidates.forEach((candidate, index) => { if (this.included[index]) total += candidate.tokens; });
314
+ return total;
315
+ }
316
+
317
+ private remove(index: number, reason: ContextBudget): void {
318
+ if (!this.included[index] || this.protectedItems.has(index)) return;
319
+ const candidate = this.candidates[index]!;
320
+ this.included[index] = false;
321
+ this.reasons[index] = reason;
322
+ this.totals.maxMessages--;
323
+ this.totals.maxChars -= candidate.chars;
324
+ this.totals.maxTokens -= candidate.tokens;
325
+ }
326
+
327
+ private dropOldest(reason: ContextBudget): boolean {
328
+ while (this.cursor < this.candidates.length) {
329
+ const index = this.cursor++;
330
+ if (!this.included[index] || this.protectedItems.has(index)) continue;
331
+ const message = this.candidates[index]!.message;
332
+ const callIds = message.role === "assistant" ? toolCallIds(message) : undefined;
333
+ this.remove(index, reason);
334
+ if (callIds !== undefined && callIds.size > 0) {
335
+ for (let nextIndex = index + 1; nextIndex < this.candidates.length; nextIndex++) {
336
+ const next = this.candidates[nextIndex]!.message;
337
+ if (next.role !== "tool") break;
338
+ if (next.toolCallId !== undefined && callIds.has(next.toolCallId)) this.remove(nextIndex, reason);
339
+ }
340
+ }
341
+ return true;
342
+ }
343
+ return false;
344
+ }
345
+ }
346
+
347
+ function traceEntry(
348
+ candidate: ContextCandidate,
349
+ included: boolean,
350
+ reason: string | undefined,
351
+ ): AgentContextTraceEntry {
352
+ const entry: AgentContextTraceEntry = {
353
+ section: candidate.section,
354
+ role: candidate.message.role,
355
+ chars: candidate.chars,
356
+ tokens: candidate.tokens,
357
+ included,
358
+ ...(reason !== undefined ? { reason } : {}),
359
+ };
360
+ return Object.freeze(entry);
361
+ }
362
+
363
+ function traceToJson(trace: readonly AgentContextTraceEntry[]): JsonValue {
364
+ return Object.freeze(trace.map((entry) => {
365
+ const json: Record<string, JsonValue> = {
366
+ section: entry.section,
367
+ chars: entry.chars,
368
+ tokens: entry.tokens,
369
+ included: entry.included,
370
+ };
371
+ if (entry.role !== undefined) {
372
+ json.role = entry.role;
373
+ }
374
+ if (entry.reason !== undefined) {
375
+ json.reason = entry.reason;
376
+ }
377
+ return Object.freeze(json) as JsonObject;
378
+ }));
379
+ }
380
+
381
+ export class DefaultAgentContextBuilder implements AgentContextBuilder {
382
+ private readonly tokenEstimator: AgentContextTokenEstimator;
383
+
384
+ constructor(options: DefaultAgentContextBuilderOptions = {}) {
385
+ this.tokenEstimator = options.tokenEstimator ?? new ApproximateAgentContextTokenEstimator();
386
+ }
387
+
388
+ build(input: AgentContextBuildInput): AgentContext {
389
+ const limits = normalizeAgentContextLimits(input.limits);
390
+ const candidates = this.candidates(input.agent, input.messages);
391
+ if (candidates.length === 0) {
392
+ throw new AgentRuntimeError("agent context requires at least one message.");
393
+ }
394
+
395
+ const included = candidates.map(() => true);
396
+ const reasons = candidates.map(() => undefined as string | undefined);
397
+ const protectedItems = protectedIndexes(candidates);
398
+ const selection = new ContextSelection(candidates, included, reasons, protectedItems);
399
+ selection.apply("maxMessages", limits?.maxMessages);
400
+ selection.apply("maxChars", limits?.maxChars);
401
+ selection.apply("maxTokens", limits?.maxTokens);
402
+
403
+ const messages: AgentMessage[] = [];
404
+ const trace: AgentContextTraceEntry[] = [];
405
+ for (let index = 0; index < candidates.length; index += 1) {
406
+ const candidate = candidates[index] as ContextCandidate;
407
+ const isIncluded = included[index] === true;
408
+ trace.push(traceEntry(candidate, isIncluded, reasons[index]));
409
+ if (isIncluded) {
410
+ messages.push(candidate.message);
411
+ }
412
+ }
413
+
414
+ const charCount = selection.totals.maxChars;
415
+ const tokenCount = selection.total("maxTokens");
416
+ return Object.freeze({
417
+ messages: Object.freeze(messages),
418
+ trace: Object.freeze(trace),
419
+ metadata: Object.freeze({
420
+ invocationId: input.invocationId,
421
+ messageCount: messages.length,
422
+ charCount,
423
+ tokenCount,
424
+ trace: traceToJson(trace),
425
+ }),
426
+ });
427
+ }
428
+
429
+ private candidates(agent: AgentDefinition, messages: readonly AgentMessage[]): readonly ContextCandidate[] {
430
+ const candidates: ContextCandidate[] = [];
431
+ const prompt = this.promptMessage(agent);
432
+ if (prompt !== undefined) {
433
+ const tokens = this.estimatedTokens(prompt, "prompt");
434
+ candidates.push(Object.freeze({
435
+ section: "prompt",
436
+ message: prompt,
437
+ chars: messageChars(prompt),
438
+ tokens,
439
+ }));
440
+ }
441
+
442
+ for (let index = 0; index < messages.length; index += 1) {
443
+ const message = cloneMessage(messages[index] as AgentMessage, `agentContext.messages[${index}]`);
444
+ const tokens = this.estimatedTokens(message, `conversation[${index}]`);
445
+ candidates.push(Object.freeze({
446
+ section: `conversation[${index}]`,
447
+ message,
448
+ chars: messageChars(message),
449
+ tokens,
450
+ }));
451
+ }
452
+ return Object.freeze(candidates);
453
+ }
454
+
455
+ private estimatedTokens(message: AgentMessage, field: string): number {
456
+ let estimate: unknown;
457
+ try { estimate = this.tokenEstimator.estimateMessage(message); } catch (error) {
458
+ throw new AgentRuntimeError(`agentContext token estimator failed for ${field}: ${errorMessageOf(error)}`);
459
+ }
460
+ if (!Number.isFinite(estimate) || typeof estimate !== "number" || estimate < 0) {
461
+ throw new AgentRuntimeError(`agentContext token estimator returned an invalid estimate for ${field}.`);
462
+ }
463
+ return estimate;
464
+ }
465
+
466
+ private promptMessage(agent: AgentDefinition): AgentMessage | undefined {
467
+ const lines: string[] = [];
468
+ if (agent.metadata.role !== undefined) {
469
+ lines.push(`Role: ${agent.metadata.role}`);
470
+ }
471
+ if (agent.metadata.description !== undefined) {
472
+ lines.push(`Description: ${agent.metadata.description}`);
473
+ }
474
+ if (agent.metadata.goal !== undefined) {
475
+ lines.push(`Goal: ${agent.metadata.goal}`);
476
+ }
477
+ if (agent.metadata.instructions.length > 0) {
478
+ lines.push("Instructions:");
479
+ lines.push(...agent.metadata.instructions.map((item) => `- ${item}`));
480
+ }
481
+ if (agent.metadata.constraints.length > 0) {
482
+ lines.push("Constraints:");
483
+ lines.push(...agent.metadata.constraints.map((item) => `- ${item}`));
484
+ }
485
+ for (let index = 0; index < agent.metadata.sections.length; index += 1) {
486
+ appendPromptSection(lines, agent.metadata.sections[index] as (typeof agent.metadata.sections)[number]);
487
+ }
488
+
489
+ const prompt = agent.prompt?.metadata;
490
+ if (prompt !== undefined) {
491
+ if (prompt.description !== undefined) {
492
+ lines.push(`Prompt description: ${prompt.description}`);
493
+ }
494
+ if (prompt.version !== undefined) {
495
+ lines.push(`Prompt version: ${prompt.version}`);
496
+ }
497
+ if (prompt.role !== undefined) {
498
+ lines.push(`Prompt role: ${prompt.role}`);
499
+ }
500
+ if (prompt.goal !== undefined) {
501
+ lines.push(`Goal: ${prompt.goal}`);
502
+ }
503
+ if (prompt.instructions.length > 0) {
504
+ lines.push("Instructions:");
505
+ lines.push(...prompt.instructions.map((item) => `- ${item}`));
506
+ }
507
+ if (prompt.constraints.length > 0) {
508
+ lines.push("Constraints:");
509
+ lines.push(...prompt.constraints.map((item) => `- ${item}`));
510
+ }
511
+ for (let index = 0; index < prompt.sections.length; index += 1) {
512
+ appendPromptSection(lines, prompt.sections[index] as (typeof prompt.sections)[number]);
513
+ }
514
+ }
515
+
516
+ return lines.length === 0
517
+ ? undefined
518
+ : agentMessage("system", lines.join("\n"), {
519
+ metadata: {
520
+ agentName: agent.metadata.name,
521
+ promptName: prompt?.name ?? null,
522
+ promptSectionKinds: prompt?.sections.map((section) => section.kind) ?? [],
523
+ },
524
+ });
525
+ }
526
+ }
527
+
528
+ function appendPromptSection(
529
+ lines: string[],
530
+ section: { readonly kind: string; readonly title?: string; readonly content: readonly string[] },
531
+ ): void {
532
+ lines.push(`${section.title ?? promptSectionTitle(section.kind)}:`);
533
+ if (section.content.length === 1) {
534
+ lines.push(section.content[0] as string);
535
+ return;
536
+ }
537
+ lines.push(...section.content.map((item) => `- ${item}`));
538
+ }
539
+
540
+ function promptSectionTitle(kind: string): string {
541
+ switch (kind) {
542
+ case "system":
543
+ return "System";
544
+ case "developer":
545
+ return "Developer";
546
+ case "role":
547
+ return "Role";
548
+ case "task":
549
+ return "Task";
550
+ case "instructions":
551
+ return "Instructions";
552
+ case "constraints":
553
+ return "Constraints";
554
+ case "examples":
555
+ return "Examples";
556
+ case "output":
557
+ return "Output format";
558
+ case "tool-policy":
559
+ return "Tool policy";
560
+ case "memory":
561
+ return "Memory";
562
+ case "knowledge":
563
+ return "Knowledge";
564
+ default:
565
+ return "Prompt section";
566
+ }
567
+ }
@@ -0,0 +1,8 @@
1
+ /** Serializable behaviour; executable tools remain an explicit host capability. */
2
+ export interface AgentDataDefinition {
3
+ readonly name: string;
4
+ readonly description?: string;
5
+ readonly instructions: string;
6
+ readonly toolNames?: readonly string[];
7
+ readonly modelProfile?: string;
8
+ }