@undefineds.co/xpod 0.3.58 → 0.3.62
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/README.md +3 -0
- package/config/cli.json +88 -0
- package/config/cloud.json +32 -1
- package/config/components-ignore.json +3 -0
- package/config/extensions.local.initializer.json +44 -0
- package/config/resolver.json +86 -0
- package/config/xpod.base.json +4 -0
- package/dist/agents/AgentExecutorFactory.d.ts +3 -3
- package/dist/agents/AgentExecutorFactory.js +28 -15
- package/dist/agents/AgentExecutorFactory.js.map +1 -1
- package/dist/agents/BaseAgentExecutor.d.ts +2 -1
- package/dist/agents/BaseAgentExecutor.js +1 -0
- package/dist/agents/BaseAgentExecutor.js.map +1 -1
- package/dist/agents/ClaudeExecutor.d.ts +3 -1
- package/dist/agents/ClaudeExecutor.js +18 -12
- package/dist/agents/ClaudeExecutor.js.map +1 -1
- package/dist/agents/config/resolve.js +0 -21
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/agents/config/types.d.ts +2 -7
- package/dist/agents/config/types.js +2 -1
- package/dist/agents/config/types.js.map +1 -1
- package/dist/agents/types.d.ts +18 -0
- package/dist/agents/types.js.map +1 -1
- package/dist/ai/schema/types.d.ts +2 -1
- package/dist/ai/schema/types.js +1 -0
- package/dist/ai/schema/types.js.map +1 -1
- package/dist/ai/service/CredentialReader.d.ts +3 -1
- package/dist/ai/service/CredentialReader.js.map +1 -1
- package/dist/ai/service/CredentialReaderImpl.d.ts +3 -1
- package/dist/ai/service/CredentialReaderImpl.js +24 -2
- package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
- package/dist/ai/service/EmbeddingServiceImpl.js +13 -2
- package/dist/ai/service/EmbeddingServiceImpl.js.map +1 -1
- package/dist/ai/service/ProviderRegistry.d.ts +4 -0
- package/dist/ai/service/ProviderRegistry.js.map +1 -1
- package/dist/ai/service/ProviderRegistry.jsonld +4 -0
- package/dist/ai/service/ProviderRegistryImpl.d.ts +4 -1
- package/dist/ai/service/ProviderRegistryImpl.js +26 -4
- package/dist/ai/service/ProviderRegistryImpl.js.map +1 -1
- package/dist/ai/service/ProviderRegistryImpl.jsonld +12 -0
- package/dist/ai/service/defaultEmbeddingProfile.d.ts +5 -0
- package/dist/ai/service/defaultEmbeddingProfile.js +31 -0
- package/dist/ai/service/defaultEmbeddingProfile.js.map +1 -0
- package/dist/ai/service/index.d.ts +1 -0
- package/dist/ai/service/index.js +1 -0
- package/dist/ai/service/index.js.map +1 -1
- package/dist/ai/service/types.d.ts +1 -0
- package/dist/ai/service/types.js.map +1 -1
- package/dist/api/ApiServer.js +17 -2
- package/dist/api/ApiServer.js.map +1 -1
- package/dist/api/ai-gateway/AiGatewayService.d.ts +106 -0
- package/dist/api/ai-gateway/AiGatewayService.js +527 -0
- package/dist/api/ai-gateway/AiGatewayService.js.map +1 -0
- package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.d.ts +38 -0
- package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js +128 -0
- package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js.map +1 -0
- package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.d.ts +25 -0
- package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js +91 -0
- package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayApiKey.d.ts +28 -0
- package/dist/api/ai-gateway/auth/GatewayApiKey.js +162 -0
- package/dist/api/ai-gateway/auth/GatewayApiKey.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.d.ts +56 -0
- package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js +143 -0
- package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.d.ts +26 -0
- package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js +97 -0
- package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayPrincipal.d.ts +20 -0
- package/dist/api/ai-gateway/auth/GatewayPrincipal.js +37 -0
- package/dist/api/ai-gateway/auth/GatewayPrincipal.js.map +1 -0
- package/dist/api/ai-gateway/auth/InvocationTokenCodec.d.ts +41 -0
- package/dist/api/ai-gateway/auth/InvocationTokenCodec.js +221 -0
- package/dist/api/ai-gateway/auth/InvocationTokenCodec.js.map +1 -0
- package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.d.ts +54 -0
- package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js +152 -0
- package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js.map +1 -0
- package/dist/api/ai-gateway/connect/index.d.ts +367 -0
- package/dist/api/ai-gateway/connect/index.js +1061 -0
- package/dist/api/ai-gateway/connect/index.js.map +1 -0
- package/dist/api/ai-gateway/credentials/CloudKmsWrapper.d.ts +40 -0
- package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js +59 -0
- package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/CredentialVault.d.ts +14 -0
- package/dist/api/ai-gateway/credentials/CredentialVault.js +11 -0
- package/dist/api/ai-gateway/credentials/CredentialVault.js.map +1 -0
- package/dist/api/ai-gateway/credentials/KeyWrapper.d.ts +27 -0
- package/dist/api/ai-gateway/credentials/KeyWrapper.js +3 -0
- package/dist/api/ai-gateway/credentials/KeyWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.d.ts +27 -0
- package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js +145 -0
- package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.d.ts +13 -0
- package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js +133 -0
- package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js.map +1 -0
- package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.d.ts +23 -0
- package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js +62 -0
- package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.d.ts +23 -0
- package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js +173 -0
- package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js.map +1 -0
- package/dist/api/ai-gateway/errors.d.ts +21 -0
- package/dist/api/ai-gateway/errors.js +50 -0
- package/dist/api/ai-gateway/errors.js.map +1 -0
- package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.d.ts +6 -0
- package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js +111 -0
- package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js.map +1 -0
- package/dist/api/ai-gateway/protocol/MessagesFrontend.d.ts +6 -0
- package/dist/api/ai-gateway/protocol/MessagesFrontend.js +99 -0
- package/dist/api/ai-gateway/protocol/MessagesFrontend.js.map +1 -0
- package/dist/api/ai-gateway/protocol/ResponsesFrontend.d.ts +6 -0
- package/dist/api/ai-gateway/protocol/ResponsesFrontend.js +232 -0
- package/dist/api/ai-gateway/protocol/ResponsesFrontend.js.map +1 -0
- package/dist/api/ai-gateway/protocol/index.d.ts +3 -0
- package/dist/api/ai-gateway/protocol/index.js +10 -0
- package/dist/api/ai-gateway/protocol/index.js.map +1 -0
- package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.d.ts +7 -0
- package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js +37 -0
- package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.d.ts +9 -0
- package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js +127 -0
- package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.d.ts +8 -0
- package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js +47 -0
- package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.d.ts +8 -0
- package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js +57 -0
- package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.d.ts +1 -0
- package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js +6 -0
- package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.d.ts +13 -0
- package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js +34 -0
- package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.d.ts +68 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.js +288 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.js.map +1 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.d.ts +88 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js +645 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.d.ts +13 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js +48 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js.map +1 -0
- package/dist/api/ai-gateway/providers/index.d.ts +9 -0
- package/dist/api/ai-gateway/providers/index.js +26 -0
- package/dist/api/ai-gateway/providers/index.js.map +1 -0
- package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.d.ts +5 -0
- package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js +21 -0
- package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/BailianQuotaAdapter.d.ts +5 -0
- package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js +21 -0
- package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.d.ts +10 -0
- package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js +83 -0
- package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/KimiQuotaAdapter.d.ts +10 -0
- package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js +70 -0
- package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.d.ts +5 -0
- package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js +21 -0
- package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.d.ts +214 -0
- package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js +511 -0
- package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/index.d.ts +6 -0
- package/dist/api/ai-gateway/quota/index.js +23 -0
- package/dist/api/ai-gateway/quota/index.js.map +1 -0
- package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.d.ts +26 -0
- package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js +67 -0
- package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js.map +1 -0
- package/dist/api/ai-gateway/routing/ModelRouter.d.ts +84 -0
- package/dist/api/ai-gateway/routing/ModelRouter.js +274 -0
- package/dist/api/ai-gateway/routing/ModelRouter.js.map +1 -0
- package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.d.ts +39 -0
- package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js +122 -0
- package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js.map +1 -0
- package/dist/api/ai-gateway/routing/SessionAffinityStore.d.ts +49 -0
- package/dist/api/ai-gateway/routing/SessionAffinityStore.js +66 -0
- package/dist/api/ai-gateway/routing/SessionAffinityStore.js.map +1 -0
- package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.d.ts +25 -0
- package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js +50 -0
- package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js.map +1 -0
- package/dist/api/ai-gateway/types.d.ts +112 -0
- package/dist/api/ai-gateway/types.js +305 -0
- package/dist/api/ai-gateway/types.js.map +1 -0
- package/dist/api/auth/AuthContext.d.ts +18 -3
- package/dist/api/auth/AuthContext.js +13 -2
- package/dist/api/auth/AuthContext.js.map +1 -1
- package/dist/api/auth/Authenticator.d.ts +3 -0
- package/dist/api/auth/Authenticator.js.map +1 -1
- package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +2 -6
- package/dist/api/auth/ClientCredentialsAuthenticator.js +12 -30
- package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
- package/dist/api/auth/SolidTokenAuthenticator.d.ts +2 -0
- package/dist/api/auth/SolidTokenAuthenticator.js +88 -2
- package/dist/api/auth/SolidTokenAuthenticator.js.map +1 -1
- package/dist/api/auth/TokenIdentity.d.ts +6 -0
- package/dist/api/auth/TokenIdentity.js +31 -0
- package/dist/api/auth/TokenIdentity.js.map +1 -0
- package/dist/api/chatkit/ai-provider.d.ts +9 -23
- package/dist/api/chatkit/ai-provider.js +30 -153
- package/dist/api/chatkit/ai-provider.js.map +1 -1
- package/dist/api/chatkit/default-agent.d.ts +24 -15
- package/dist/api/chatkit/default-agent.js +24 -83
- package/dist/api/chatkit/default-agent.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +2 -1
- package/dist/api/chatkit/index.js +3 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +13 -1
- package/dist/api/chatkit/pod-store.js +127 -7
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.d.ts +0 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +14 -51
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpRunner.js +2 -1
- package/dist/api/chatkit/runtime/AcpRunner.js.map +1 -1
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.d.ts +15 -1
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.js +52 -34
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.js.map +1 -1
- package/dist/api/chatkit/service.d.ts +8 -1
- package/dist/api/chatkit/service.js +46 -5
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/store.d.ts +23 -1
- package/dist/api/chatkit/store.js +56 -0
- package/dist/api/chatkit/store.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +1 -0
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/common.js +286 -13
- package/dist/api/container/common.js.map +1 -1
- package/dist/api/container/index.js +126 -6
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +50 -6
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/rdf.d.ts +15 -0
- package/dist/api/container/rdf.js +90 -0
- package/dist/api/container/rdf.js.map +1 -0
- package/dist/api/container/routes.js +151 -11
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +96 -0
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/AdminHandler.d.ts +25 -2
- package/dist/api/handlers/AdminHandler.js +60 -10
- package/dist/api/handlers/AdminHandler.js.map +1 -1
- package/dist/api/handlers/AiClientConfigurationHandler.d.ts +7 -0
- package/dist/api/handlers/AiClientConfigurationHandler.js +202 -0
- package/dist/api/handlers/AiClientConfigurationHandler.js.map +1 -0
- package/dist/api/handlers/AiGatewayHandler.d.ts +23 -0
- package/dist/api/handlers/AiGatewayHandler.js +231 -0
- package/dist/api/handlers/AiGatewayHandler.js.map +1 -0
- package/dist/api/handlers/AiGatewayManagementHandler.d.ts +24 -0
- package/dist/api/handlers/AiGatewayManagementHandler.js +503 -0
- package/dist/api/handlers/AiGatewayManagementHandler.js.map +1 -0
- package/dist/api/handlers/ChatHandler.d.ts +11 -12
- package/dist/api/handlers/ChatHandler.js +12 -219
- package/dist/api/handlers/ChatHandler.js.map +1 -1
- package/dist/api/handlers/DashboardHandler.js +22 -116
- package/dist/api/handlers/DashboardHandler.js.map +1 -1
- package/dist/api/handlers/NetworkSettingsHandler.d.ts +97 -0
- package/dist/api/handlers/NetworkSettingsHandler.js +511 -0
- package/dist/api/handlers/NetworkSettingsHandler.js.map +1 -0
- package/dist/api/handlers/PodSettingsHandler.d.ts +79 -0
- package/dist/api/handlers/PodSettingsHandler.js +162 -0
- package/dist/api/handlers/PodSettingsHandler.js.map +1 -0
- package/dist/api/handlers/ProvisionHandler.d.ts +3 -1
- package/dist/api/handlers/ProvisionHandler.js +22 -87
- package/dist/api/handlers/ProvisionHandler.js.map +1 -1
- package/dist/api/handlers/RdfStatsHandler.d.ts +6 -0
- package/dist/api/handlers/RdfStatsHandler.js +85 -0
- package/dist/api/handlers/RdfStatsHandler.js.map +1 -0
- package/dist/api/handlers/SettingsHandler.d.ts +5 -0
- package/dist/api/handlers/SettingsHandler.js +13 -0
- package/dist/api/handlers/SettingsHandler.js.map +1 -0
- package/dist/api/handlers/StaticSpaHandler.d.ts +8 -0
- package/dist/api/handlers/StaticSpaHandler.js +102 -0
- package/dist/api/handlers/StaticSpaHandler.js.map +1 -0
- package/dist/api/handlers/index.d.ts +1 -0
- package/dist/api/handlers/index.js +1 -0
- package/dist/api/handlers/index.js.map +1 -1
- package/dist/api/http/readBoundedJsonBody.d.ts +14 -0
- package/dist/api/http/readBoundedJsonBody.js +58 -0
- package/dist/api/http/readBoundedJsonBody.js.map +1 -0
- package/dist/api/middleware/AuthMiddleware.d.ts +1 -0
- package/dist/api/middleware/AuthMiddleware.js +33 -4
- package/dist/api/middleware/AuthMiddleware.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +18 -3
- package/dist/api/runs/AgentRuntimeTypes.js +61 -0
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +28 -3
- package/dist/api/runs/InngestRunExecutionBackend.js +26 -3
- package/dist/api/runs/InngestRunExecutionBackend.js.map +1 -1
- package/dist/api/runs/ManagedRunWorker.d.ts +4 -1
- package/dist/api/runs/ManagedRunWorker.js +39 -8
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +5 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js +94 -57
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/api/runs/RdfRunContextRetriever.d.ts +46 -0
- package/dist/api/runs/RdfRunContextRetriever.js +277 -0
- package/dist/api/runs/RdfRunContextRetriever.js.map +1 -0
- package/dist/api/runs/RunExecutionBackend.d.ts +38 -0
- package/dist/api/runs/RunExecutionBackend.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +18 -3
- package/dist/api/runs/RunStateCenter.js +85 -24
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runtime.js +163 -3
- package/dist/api/runtime.js.map +1 -1
- package/dist/api/service/AiClientConfigurationService.d.ts +97 -0
- package/dist/api/service/AiClientConfigurationService.js +379 -0
- package/dist/api/service/AiClientConfigurationService.js.map +1 -0
- package/dist/api/service/RdfBenchmarkReportCatalog.d.ts +86 -0
- package/dist/api/service/RdfBenchmarkReportCatalog.js +349 -0
- package/dist/api/service/RdfBenchmarkReportCatalog.js.map +1 -0
- package/dist/api/service/RdfBenchmarkReportGate.d.ts +78 -0
- package/dist/api/service/RdfBenchmarkReportGate.js +197 -0
- package/dist/api/service/RdfBenchmarkReportGate.js.map +1 -0
- package/dist/api/service/RdfSearchIndexingService.d.ts +113 -0
- package/dist/api/service/RdfSearchIndexingService.js +272 -0
- package/dist/api/service/RdfSearchIndexingService.js.map +1 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.d.ts +27 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js +90 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js.map +1 -0
- package/dist/api/service/RdfStorageStatsService.d.ts +31 -0
- package/dist/api/service/RdfStorageStatsService.js +97 -0
- package/dist/api/service/RdfStorageStatsService.js.map +1 -0
- package/dist/api/service/VectorStoreService.d.ts +2 -0
- package/dist/api/service/VectorStoreService.js +70 -2
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/service/VercelChatService.d.ts +27 -38
- package/dist/api/service/VercelChatService.js +153 -505
- package/dist/api/service/VercelChatService.js.map +1 -1
- package/dist/api/service/provider-http-transport.d.ts +21 -0
- package/dist/api/service/provider-http-transport.js +108 -2
- package/dist/api/service/provider-http-transport.js.map +1 -1
- package/dist/api/service/provider-registry.d.ts +5 -7
- package/dist/api/service/provider-registry.js +81 -64
- package/dist/api/service/provider-registry.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +44 -4
- package/dist/api/tasks/TaskMaterializer.d.ts +10 -1
- package/dist/api/tasks/TaskMaterializer.js +39 -4
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +5 -1
- package/dist/api/tasks/TaskService.js +3 -0
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/cli/commands/rdf.d.ts +9 -0
- package/dist/cli/commands/rdf.js +66 -1
- package/dist/cli/commands/rdf.js.map +1 -1
- package/dist/cli/commands/start.js +3 -0
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/lib/solid-auth.d.ts +3 -3
- package/dist/cli/lib/solid-auth.js +4 -4
- package/dist/cli/lib/solid-auth.js.map +1 -1
- package/dist/components/components.jsonld +16 -0
- package/dist/components/context.jsonld +815 -28
- package/dist/document/Chunker.jsonld +110 -0
- package/dist/document/{DocumentParser.d.ts → DocumentReader.d.ts} +23 -11
- package/dist/document/{DocumentParser.js → DocumentReader.js} +2 -2
- package/dist/document/DocumentReader.js.map +1 -0
- package/dist/document/DocumentReader.jsonld +82 -0
- package/dist/document/HeadingChunker.jsonld +41 -0
- package/dist/document/{JinaDocumentParser.d.ts → JinaReader.d.ts} +7 -7
- package/dist/document/{JinaDocumentParser.js → JinaReader.js} +12 -12
- package/dist/document/JinaReader.js.map +1 -0
- package/dist/document/JinaReader.jsonld +133 -0
- package/dist/document/L0SourceSummary.d.ts +103 -0
- package/dist/document/L0SourceSummary.js +157 -0
- package/dist/document/L0SourceSummary.js.map +1 -0
- package/dist/document/L0SourceSummary.jsonld +326 -0
- package/dist/document/PaddleOcrReader.d.ts +40 -0
- package/dist/document/PaddleOcrReader.js +53 -0
- package/dist/document/PaddleOcrReader.js.map +1 -0
- package/dist/document/PaddleOcrReader.jsonld +234 -0
- package/dist/document/ReaderAiConfig.d.ts +50 -0
- package/dist/document/ReaderAiConfig.js +109 -0
- package/dist/document/ReaderAiConfig.js.map +1 -0
- package/dist/document/ReaderAiConfig.jsonld +185 -0
- package/dist/document/ReaderPolicy.d.ts +89 -0
- package/dist/document/ReaderPolicy.js +158 -0
- package/dist/document/ReaderPolicy.js.map +1 -0
- package/dist/document/ReaderPolicy.jsonld +218 -0
- package/dist/document/index.d.ts +6 -2
- package/dist/document/index.js +6 -2
- package/dist/document/index.js.map +1 -1
- package/dist/edge/DdnsManager.d.ts +1 -1
- package/dist/edge/DdnsManager.js.map +1 -1
- package/dist/edge/EdgeNodeAgent.d.ts +4 -0
- package/dist/edge/EdgeNodeAgent.js +6 -0
- package/dist/edge/EdgeNodeAgent.js.map +1 -1
- package/dist/edge/EdgeNodeAgent.jsonld +8 -0
- package/dist/edge/EdgeNodeAgentInitializer.d.ts +16 -0
- package/dist/edge/EdgeNodeAgentInitializer.js +51 -0
- package/dist/edge/EdgeNodeAgentInitializer.js.map +1 -1
- package/dist/edge/EdgeNodeAgentInitializer.jsonld +250 -0
- package/dist/edge/EdgeNodeCertificateCapabilityBridge.d.ts +34 -0
- package/dist/edge/EdgeNodeCertificateCapabilityBridge.js +111 -0
- package/dist/edge/EdgeNodeCertificateCapabilityBridge.js.map +1 -0
- package/dist/edge/acme/AcmeCertificateManager.d.ts +14 -1
- package/dist/edge/acme/AcmeCertificateManager.js +67 -7
- package/dist/edge/acme/AcmeCertificateManager.js.map +1 -1
- package/dist/edge/acme/AcmeCertificateManager.jsonld +22 -2
- package/dist/edge/acme/ClusterCertificateManager.d.ts +12 -0
- package/dist/edge/acme/ClusterCertificateManager.js +38 -0
- package/dist/edge/acme/ClusterCertificateManager.js.map +1 -1
- package/dist/extensions/ExtensionRuntime.d.ts +17 -0
- package/dist/extensions/ExtensionRuntime.js +171 -0
- package/dist/extensions/ExtensionRuntime.js.map +1 -0
- package/dist/extensions/PodCredentialResolver.d.ts +23 -0
- package/dist/extensions/PodCredentialResolver.js +139 -0
- package/dist/extensions/PodCredentialResolver.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.js +20 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/types.d.ts +73 -0
- package/dist/extensions/types.js +3 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/http/SubgraphSparqlHttpHandler.d.ts +20 -1
- package/dist/http/SubgraphSparqlHttpHandler.js +324 -43
- package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
- package/dist/http/SubgraphSparqlHttpHandler.jsonld +87 -0
- package/dist/identity/drizzle/EdgeNodeRepository.js +3 -2
- package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.js +1 -1
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.js +1 -1
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +5 -5
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -1
- package/dist/index.d.ts +12 -2
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/main.js +3 -0
- package/dist/main.js.map +1 -1
- package/dist/provision/LocalProvisionState.d.ts +28 -0
- package/dist/provision/LocalProvisionState.js +124 -0
- package/dist/provision/LocalProvisionState.js.map +1 -0
- package/dist/provision/ProvisionCodeCodec.d.ts +7 -3
- package/dist/provision/ProvisionCodeCodec.js +10 -3
- package/dist/provision/ProvisionCodeCodec.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +15 -1
- package/dist/provision/ProvisionPodCreator.js +68 -1
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +31 -0
- package/dist/provision/ServiceAccessTokenCodec.d.ts +45 -0
- package/dist/provision/ServiceAccessTokenCodec.js +86 -0
- package/dist/provision/ServiceAccessTokenCodec.js.map +1 -0
- package/dist/runtime/GatewayAdminProxyAuth.d.ts +29 -0
- package/dist/runtime/GatewayAdminProxyAuth.js +108 -0
- package/dist/runtime/GatewayAdminProxyAuth.js.map +1 -0
- package/dist/runtime/Proxy.d.ts +10 -0
- package/dist/runtime/Proxy.js +64 -6
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/XpodRuntime.js +1 -0
- package/dist/runtime/XpodRuntime.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +1 -0
- package/dist/runtime/bootstrap.js +29 -0
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +1 -0
- package/dist/runtime/css-process.js +1 -0
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.js +3 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/lifecycle.d.ts +3 -1
- package/dist/runtime/lifecycle.js +3 -1
- package/dist/runtime/lifecycle.js.map +1 -1
- package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js +2 -0
- package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js.map +1 -1
- package/dist/runtime/runner/types.d.ts +3 -0
- package/dist/runtime/runner/types.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +2 -0
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/runtime/safe-env.d.ts +15 -0
- package/dist/runtime/safe-env.js +109 -0
- package/dist/runtime/safe-env.js.map +1 -0
- package/dist/security/index.d.ts +1 -0
- package/dist/security/index.js +18 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.d.ts +17 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.js +61 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.js.map +1 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +124 -0
- package/dist/security/secret-cell/SecretCellVault.d.ts +55 -0
- package/dist/security/secret-cell/SecretCellVault.js +242 -0
- package/dist/security/secret-cell/SecretCellVault.js.map +1 -0
- package/dist/security/secret-cell/SecretCellVault.jsonld +207 -0
- package/dist/security/secret-cell/index.d.ts +2 -0
- package/dist/security/secret-cell/index.js +11 -0
- package/dist/security/secret-cell/index.js.map +1 -0
- package/dist/solidfs/CompositeSolidFsSyncer.d.ts +18 -0
- package/dist/solidfs/CompositeSolidFsSyncer.js +32 -0
- package/dist/solidfs/CompositeSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/LocalSolidFS.js +25 -1
- package/dist/solidfs/LocalSolidFS.js.map +1 -1
- package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +41 -2
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +331 -21
- package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -1
- package/dist/solidfs/SolidFsMetaNotes.d.ts +25 -0
- package/dist/solidfs/SolidFsMetaNotes.js +103 -0
- package/dist/solidfs/SolidFsMetaNotes.js.map +1 -0
- package/dist/solidfs/SolidFsSyncJournal.d.ts +2 -2
- package/dist/solidfs/SolidFsSyncJournal.js +9 -4
- package/dist/solidfs/SolidFsSyncJournal.js.map +1 -1
- package/dist/solidfs/SolidFsSyncJournal.jsonld +119 -0
- package/dist/solidfs/WorkspacePrompt.d.ts +13 -0
- package/dist/solidfs/WorkspacePrompt.js +42 -0
- package/dist/solidfs/WorkspacePrompt.js.map +1 -0
- package/dist/solidfs/index.d.ts +3 -0
- package/dist/solidfs/index.js +3 -0
- package/dist/solidfs/index.js.map +1 -1
- package/dist/solidfs/types.d.ts +12 -2
- package/dist/solidfs/types.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.d.ts +36 -4
- package/dist/storage/accessors/MixDataAccessor.js +222 -23
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +89 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +6 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.js +35 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +20 -0
- package/dist/storage/database/PostgresPoolManager.d.ts +1 -0
- package/dist/storage/database/PostgresPoolManager.js +2 -2
- package/dist/storage/database/PostgresPoolManager.js.map +1 -1
- package/dist/storage/locking/UrlAwareRedisLocker.d.ts +2 -0
- package/dist/storage/locking/UrlAwareRedisLocker.js +65 -0
- package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -1
- package/dist/storage/locking/UrlAwareRedisLocker.jsonld +19 -0
- package/dist/storage/rdf/PostgresRdfEngine.d.ts +286 -9
- package/dist/storage/rdf/PostgresRdfEngine.js +10773 -2084
- package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
- package/dist/storage/rdf/PostgresRdfEngine.jsonld +1693 -89
- package/dist/storage/rdf/PostgresRdfSqlExecutor.d.ts +24 -0
- package/dist/storage/rdf/PostgresRdfSqlExecutor.js +131 -0
- package/dist/storage/rdf/PostgresRdfSqlExecutor.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +54 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.js +1255 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +487 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +46 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.js +1165 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +423 -0
- package/dist/storage/rdf/Rdf3xIndex.d.ts +14 -1
- package/dist/storage/rdf/Rdf3xIndex.js +286 -2
- package/dist/storage/rdf/Rdf3xIndex.js.map +1 -1
- package/dist/storage/rdf/Rdf3xIndex.jsonld +36 -0
- package/dist/storage/rdf/Rdf3xSchema.d.ts +5 -1
- package/dist/storage/rdf/Rdf3xSchema.js +17 -3
- package/dist/storage/rdf/Rdf3xSchema.js.map +1 -1
- package/dist/storage/rdf/RdfAccessScope.d.ts +22 -0
- package/dist/storage/rdf/RdfAccessScope.js +345 -0
- package/dist/storage/rdf/RdfAccessScope.js.map +1 -0
- package/dist/storage/rdf/RdfAccessScope.jsonld +45 -0
- package/dist/storage/rdf/RdfFusionRankPlan.d.ts +2 -0
- package/dist/storage/rdf/RdfFusionRankPlan.js +186 -0
- package/dist/storage/rdf/RdfFusionRankPlan.js.map +1 -0
- package/dist/storage/rdf/RdfJoinShape.d.ts +8 -0
- package/dist/storage/rdf/RdfJoinShape.js +31 -0
- package/dist/storage/rdf/RdfJoinShape.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +5 -2
- package/dist/storage/rdf/RdfQuadIndex.js +94 -6
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
- package/dist/storage/rdf/RdfQuadIndex.jsonld +12 -0
- package/dist/storage/rdf/RdfQueryExecutor.d.ts +3 -4
- package/dist/storage/rdf/RdfQueryExecutor.js +235 -8
- package/dist/storage/rdf/RdfQueryExecutor.js.map +1 -1
- package/dist/storage/rdf/RdfSearchSourceFilter.d.ts +10 -0
- package/dist/storage/rdf/RdfSearchSourceFilter.js +83 -0
- package/dist/storage/rdf/RdfSearchSourceFilter.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +27 -1
- package/dist/storage/rdf/RdfSparqlAdapter.js +265 -3
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +8 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +7 -1
- package/dist/storage/rdf/RdfTermDictionary.js +139 -0
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
- package/dist/storage/rdf/RdfTermDictionary.jsonld +4 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +45 -2
- package/dist/storage/rdf/RdfTextIndex.js +810 -114
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
- package/dist/storage/rdf/RdfTextIndex.jsonld +193 -0
- package/dist/storage/rdf/RdfTextProjection.d.ts +10 -0
- package/dist/storage/rdf/RdfTextProjection.js +258 -0
- package/dist/storage/rdf/RdfTextProjection.js.map +1 -0
- package/dist/storage/rdf/RdfVectorIndex.d.ts +30 -2
- package/dist/storage/rdf/RdfVectorIndex.js +461 -38
- package/dist/storage/rdf/RdfVectorIndex.js.map +1 -1
- package/dist/storage/rdf/RdfVectorIndex.jsonld +163 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +12 -9
- package/dist/storage/rdf/SolidRdfEngine.js +48 -22
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.jsonld +33 -43
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +19 -8
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +674 -44
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +51 -0
- package/dist/storage/rdf/index.d.ts +9 -5
- package/dist/storage/rdf/index.js +42 -1
- package/dist/storage/rdf/index.js.map +1 -1
- package/dist/storage/rdf/models-benchmark.d.ts +264 -2
- package/dist/storage/rdf/models-benchmark.js +4207 -155
- package/dist/storage/rdf/models-benchmark.js.map +1 -1
- package/dist/storage/rdf/types.d.ts +833 -4
- package/dist/storage/rdf/types.js.map +1 -1
- package/dist/storage/rdf/types.jsonld +348 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +14 -13
- package/dist/storage/sparql/CompatibilitySparqlEngine.js +24 -24
- package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -1
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +14 -13
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +30 -18
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -1
- package/dist/storage/sparql/SubgraphQueryEngine.d.ts +21 -12
- package/dist/storage/sparql/SubgraphQueryEngine.js +12 -12
- package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
- package/dist/terminal/sandbox/MacOSSandbox.js +2 -1
- package/dist/terminal/sandbox/MacOSSandbox.js.map +1 -1
- package/dist/terminal/sandbox/index.js +2 -1
- package/dist/terminal/sandbox/index.js.map +1 -1
- package/dist/test-utils/no-auth-xpod.js +3 -0
- package/dist/test-utils/no-auth-xpod.js.map +1 -1
- package/dist/tunnel/LocalTunnelProvider.d.ts +3 -0
- package/dist/tunnel/LocalTunnelProvider.js +17 -1
- package/dist/tunnel/LocalTunnelProvider.js.map +1 -1
- package/dist/tunnel/LocalTunnelProvider.jsonld +23 -0
- package/dist/tunnel/SakuraFrpTunnelProvider.d.ts +3 -0
- package/dist/tunnel/SakuraFrpTunnelProvider.js +18 -2
- package/dist/tunnel/SakuraFrpTunnelProvider.js.map +1 -1
- package/dist/tunnel/TunnelProfiles.d.ts +22 -0
- package/dist/tunnel/TunnelProfiles.js +208 -0
- package/dist/tunnel/TunnelProfiles.js.map +1 -0
- package/dist/tunnel/index.d.ts +2 -0
- package/dist/tunnel/index.js +4 -1
- package/dist/tunnel/index.js.map +1 -1
- package/dist/util/identifiers/ClusterIdentifierStrategy.d.ts +3 -0
- package/dist/util/identifiers/ClusterIdentifierStrategy.js +18 -2
- package/dist/util/identifiers/ClusterIdentifierStrategy.js.map +1 -1
- package/dist/util/identifiers/ClusterIdentifierStrategy.jsonld +5 -1
- package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.d.ts +55 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.js +167 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.d.ts +3 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.js +8 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.d.ts +4 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.js +36 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.d.ts +4 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.js +37 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.d.ts +3 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.js +7 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.d.ts +14 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.js +333 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.d.ts +22 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.js +43 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.d.ts +8 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.js +6 -0
- package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.d.ts +120 -0
- package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.js +414 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.d.ts +32 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.js +212 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.d.ts +14 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.js +90 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.cjs +668 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.d.ts +6 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.js +6 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.d.ts +21 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.js +82 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.d.ts +13 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.js +83 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.d.ts +17 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.js +153 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.d.ts +40 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.js +1 -0
- package/node_modules/@undefineds.co/ai-connection/dist/controller.d.ts +42 -0
- package/node_modules/@undefineds.co/ai-connection/dist/controller.js +289 -0
- package/node_modules/@undefineds.co/ai-connection/dist/index.d.ts +16 -0
- package/node_modules/@undefineds.co/ai-connection/dist/index.js +41 -0
- package/node_modules/@undefineds.co/ai-connection/dist/manifest.d.ts +1 -0
- package/node_modules/@undefineds.co/ai-connection/dist/manifest.js +18 -0
- package/node_modules/@undefineds.co/ai-connection/dist/service-access.d.ts +3 -0
- package/node_modules/@undefineds.co/ai-connection/dist/service-access.js +133 -0
- package/node_modules/@undefineds.co/ai-connection/package.json +50 -0
- package/node_modules/@undefineds.co/extension-sdk/README.md +299 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/index.d.ts +5 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/index.js +5 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/layout.d.ts +16 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/layout.js +36 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +27 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +79 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.d.ts +7 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.js +8 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.d.ts +27 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.js +49 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.d.ts +11 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.js +9 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.d.ts +38 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.js +132 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react.d.ts +12 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react.js +19 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/testing.d.ts +7 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/testing.js +27 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +225 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/web.js +142 -0
- package/node_modules/@undefineds.co/extension-sdk/package.json +49 -0
- package/node_modules/@undefineds.co/extensions/README.md +101 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.d.ts +25 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.js +45 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.d.ts +31 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.js +50 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/index.d.ts +7 -0
- package/node_modules/@undefineds.co/extensions/dist/index.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/index.js +7 -0
- package/node_modules/@undefineds.co/extensions/dist/index.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.d.ts +16 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.js +267 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.d.ts +18 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.js +39 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.d.ts +16 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.js +97 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/types.d.ts +141 -0
- package/node_modules/@undefineds.co/extensions/dist/types.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/types.js +2 -0
- package/node_modules/@undefineds.co/extensions/dist/types.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/package.json +38 -0
- package/node_modules/@undefineds.co/shared-ui/dist/badge.d.ts +8 -0
- package/node_modules/@undefineds.co/shared-ui/dist/badge.js +17 -0
- package/node_modules/@undefineds.co/shared-ui/dist/button.d.ts +10 -0
- package/node_modules/@undefineds.co/shared-ui/dist/button.js +30 -0
- package/node_modules/@undefineds.co/shared-ui/dist/card.d.ts +7 -0
- package/node_modules/@undefineds.co/shared-ui/dist/card.js +15 -0
- package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +6 -0
- package/node_modules/@undefineds.co/shared-ui/dist/index.js +6 -0
- package/node_modules/@undefineds.co/shared-ui/dist/input.d.ts +4 -0
- package/node_modules/@undefineds.co/shared-ui/dist/input.js +5 -0
- package/node_modules/@undefineds.co/shared-ui/dist/theme.css +121 -0
- package/node_modules/@undefineds.co/shared-ui/dist/utils.d.ts +2 -0
- package/node_modules/@undefineds.co/shared-ui/dist/utils.js +5 -0
- package/node_modules/@undefineds.co/shared-ui/dist/workspace.d.ts +23 -0
- package/node_modules/@undefineds.co/shared-ui/dist/workspace.js +38 -0
- package/node_modules/@undefineds.co/shared-ui/package.json +39 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/index.d.ts +3 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/index.js +3 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.d.ts +45 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.js +147 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/react.d.ts +15 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/react.js +15 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/session.d.ts +42 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/session.js +127 -0
- package/node_modules/@undefineds.co/solid-sdk/package.json +45 -0
- package/package.json +31 -13
- package/static/app/assets/index-BoYHJ6si.js +230 -0
- package/static/app/assets/inrupt-smoke.js +2 -2
- package/static/app/assets/main.css +1 -1
- package/static/app/assets/main.js +9 -9
- package/static/dashboard/assets/NetworkPage-Brt79fuQ.js +2 -0
- package/static/dashboard/assets/PaneListHeader-57nvMwH6.js +1 -0
- package/static/dashboard/assets/PodPage-CM6do1vB.js +2 -0
- package/static/dashboard/assets/ServicesPage-BUNxGJRz.js +1 -0
- package/static/dashboard/assets/card-B9Zjf_2p.js +1 -0
- package/static/dashboard/assets/dashboard-8C6o666W.js +305 -0
- package/static/dashboard/assets/dashboard-CSdewNeA.css +1 -0
- package/static/dashboard/assets/database-DPh9wDY9.js +1 -0
- package/static/dashboard/assets/external-link-VbMQvVMz.js +1 -0
- package/static/dashboard/assets/index-RfiFckzb.js +51 -0
- package/static/dashboard/assets/refresh-cw-BxVxNxNr.js +1 -0
- package/static/dashboard/assets/services-status-context-DKmJ7ISr.js +1 -0
- package/static/dashboard/dashboard.html +2 -2
- package/static/settings/assets/ModelsPage-D_IH7AH3.js +1 -0
- package/static/settings/assets/PaneListHeader-Bgaze006.js +1 -0
- package/static/settings/assets/PodPage-Cy1VNObw.js +2 -0
- package/static/settings/assets/ServicesPage-BsFaxVWC.js +1 -0
- package/static/settings/assets/SettingsPage-UafNWE_p.js +48 -0
- package/static/settings/assets/card-B_bXSIn-.js +1 -0
- package/static/settings/assets/services-status-context-DiX-AbrP.js +1 -0
- package/static/settings/assets/settings-B30oMfZq.js +305 -0
- package/static/settings/assets/settings-CSdewNeA.css +1 -0
- package/static/settings/assets/workspace-layout-Dv1Yn9Ci.js +1 -0
- package/static/settings/auth.html +21 -0
- package/static/settings/reachability.html +221 -0
- package/static/settings/reachability.svg +7 -0
- package/static/settings/reachability.webmanifest +18 -0
- package/static/settings/settings.html +13 -0
- package/static/settings/signal-pod.html +293 -0
- package/static/settings/vite.svg +1 -0
- package/dist/api/service/ai-gateway-transport.d.ts +0 -25
- package/dist/api/service/ai-gateway-transport.js +0 -136
- package/dist/api/service/ai-gateway-transport.js.map +0 -1
- package/dist/api/service/chat-protocol-adapters.d.ts +0 -5
- package/dist/api/service/chat-protocol-adapters.js +0 -146
- package/dist/api/service/chat-protocol-adapters.js.map +0 -1
- package/dist/api/service/chat-routing.d.ts +0 -8
- package/dist/api/service/chat-routing.js +0 -16
- package/dist/api/service/chat-routing.js.map +0 -1
- package/dist/api/service/platform-ai-config.d.ts +0 -10
- package/dist/api/service/platform-ai-config.js +0 -76
- package/dist/api/service/platform-ai-config.js.map +0 -1
- package/dist/document/DocumentParser.js.map +0 -1
- package/dist/document/JinaDocumentParser.js.map +0 -1
- package/static/app/assets/index-C1yksyT4.js +0 -171
- package/static/dashboard/assets/dashboard-BssaVKTn.css +0 -1
- package/static/dashboard/assets/dashboard-Ckuadl3C.js +0 -54
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
* - 流式输出
|
|
12
12
|
*
|
|
13
13
|
* 注意:
|
|
14
|
-
* - Claude Agent SDK
|
|
14
|
+
* - Claude Agent SDK 需要 Anthropic-compatible env,但值必须来自
|
|
15
|
+
* invocation-scoped Xpod AI Connection,不允许直接投递 Pod provider secret。
|
|
15
16
|
* - SDK 会自动处理复杂的交互逻辑
|
|
16
17
|
*/
|
|
17
18
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -41,11 +42,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
41
42
|
exports.ClaudeExecutor = exports.ClaudeAuthenticationError = void 0;
|
|
42
43
|
exports.createClaudeExecutor = createClaudeExecutor;
|
|
43
44
|
const BaseAgentExecutor_1 = require("./BaseAgentExecutor");
|
|
45
|
+
const safe_env_1 = require("../runtime/safe-env");
|
|
44
46
|
/**
|
|
45
47
|
* Claude 鉴权错误
|
|
46
48
|
*/
|
|
47
49
|
class ClaudeAuthenticationError extends Error {
|
|
48
|
-
constructor(message = 'Claude
|
|
50
|
+
constructor(message = 'Claude 未配置 AI Connection 认证') {
|
|
49
51
|
super(message);
|
|
50
52
|
this.name = 'ClaudeAuthenticationError';
|
|
51
53
|
}
|
|
@@ -79,12 +81,18 @@ class ClaudeExecutor extends BaseAgentExecutor_1.BaseAgentExecutor {
|
|
|
79
81
|
* 获取环境变量配置
|
|
80
82
|
*/
|
|
81
83
|
getEnvConfig() {
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
84
|
+
const connection = this.requireAiConnection();
|
|
85
|
+
return {
|
|
86
|
+
...(0, safe_env_1.sanitizeRuntimeEnv)(process.env),
|
|
87
|
+
...(0, safe_env_1.projectAnthropicCompatibleEnv)(connection),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
requireAiConnection() {
|
|
91
|
+
return (0, safe_env_1.requireAiConnectionRuntimeConfig)({
|
|
92
|
+
baseUrl: this.aiConnection?.baseUrl,
|
|
93
|
+
apiKey: this.aiConnection?.gatewayKey,
|
|
94
|
+
model: this.aiConnection?.model,
|
|
95
|
+
}, 'Claude executor');
|
|
88
96
|
}
|
|
89
97
|
/**
|
|
90
98
|
* 检查认证状态
|
|
@@ -92,9 +100,6 @@ class ClaudeExecutor extends BaseAgentExecutor_1.BaseAgentExecutor {
|
|
|
92
100
|
async checkAuthentication() {
|
|
93
101
|
try {
|
|
94
102
|
const env = this.getEnvConfig();
|
|
95
|
-
if (!env['ANTHROPIC_API_KEY']) {
|
|
96
|
-
throw new ClaudeAuthenticationError('API Key 未配置');
|
|
97
|
-
}
|
|
98
103
|
// 发送一个简单查询来验证认证
|
|
99
104
|
const claudeQuery = await loadClaudeQuery();
|
|
100
105
|
const q = claudeQuery({
|
|
@@ -133,10 +138,11 @@ class ClaudeExecutor extends BaseAgentExecutor_1.BaseAgentExecutor {
|
|
|
133
138
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
134
139
|
if (errorMsg.includes('authentication') ||
|
|
135
140
|
errorMsg.includes('api_key') ||
|
|
141
|
+
errorMsg.includes('AI Connection') ||
|
|
136
142
|
errorMsg.includes('invalid') ||
|
|
137
143
|
errorMsg.includes('401') ||
|
|
138
144
|
errorMsg.includes('unauthorized')) {
|
|
139
|
-
throw new ClaudeAuthenticationError(`Claude
|
|
145
|
+
throw new ClaudeAuthenticationError(`Claude AI Connection 无效: ${errorMsg}`);
|
|
140
146
|
}
|
|
141
147
|
throw error;
|
|
142
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeExecutor.js","sourceRoot":"","sources":["../../src/agents/ClaudeExecutor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Claude Executor\n *\n * 使用 Claude Agent SDK 执行任务。\n *\n * 支持功能:\n * - 完整的 Agent 能力(代码理解、文件编辑、命令执行等)\n * - 工具调用(MCP)\n * - 权限管理\n * - 流式输出\n *\n * 注意:\n * - Claude Agent SDK 需要在环境变量中设置 ANTHROPIC_API_KEY\n * - SDK 会自动处理复杂的交互逻辑\n */\n\ntype Options = any;\ntype SDKResultMessage = any;\nimport { BaseAgentExecutor } from './BaseAgentExecutor';\nimport type {\n ExecutorType,\n AuthType,\n AuthInfo,\n ExecutorConfig,\n ExecuteMessage,\n ChatMessage,\n ExecuteResult,\n BaseExecutorOptions,\n} from './types';\n\n/**\n * Claude 鉴权错误\n */\nexport class ClaudeAuthenticationError extends Error {\n public constructor(message: string = 'Claude 未配置认证,请在环境变量中设置 ANTHROPIC_API_KEY') {\n super(message);\n this.name = 'ClaudeAuthenticationError';\n }\n}\n\n/**\n * Claude Executor\n *\n * 封装 Claude Agent SDK 调用。\n */\nasync function loadClaudeQuery(): Promise<(args: { prompt: string; options: Options }) => AsyncIterable<any>> {\n const mod = await import('@anthropic-ai/claude-agent-sdk');\n const q = (mod as any)?.query;\n if (typeof q !== 'function') {\n throw new Error('Claude SDK is installed but query API is unavailable');\n }\n return q;\n}\n\nexport class ClaudeExecutor extends BaseAgentExecutor {\n public readonly executorType: ExecutorType = 'claude';\n\n /**\n * 获取认证类型\n */\n public getAuthType(): AuthType {\n return 'api-key';\n }\n\n /**\n * 获取环境变量配置\n */\n private getEnvConfig(): Record<string, string | undefined> {\n const env: Record<string, string | undefined> = { ...process.env };\n\n // 如果提供了 API Key,设置到环境变量\n if (this.credential.apiKey) {\n env['ANTHROPIC_API_KEY'] = this.credential.apiKey;\n }\n\n return env;\n }\n\n /**\n * 检查认证状态\n */\n public async checkAuthentication(): Promise<AuthInfo> {\n try {\n const env = this.getEnvConfig();\n\n if (!env['ANTHROPIC_API_KEY']) {\n throw new ClaudeAuthenticationError('API Key 未配置');\n }\n\n // 发送一个简单查询来验证认证\n const claudeQuery = await loadClaudeQuery();\n const q = claudeQuery({\n prompt: 'hi',\n options: {\n env,\n maxTurns: 1,\n permissionMode: 'dontAsk',\n tools: [], // 禁用所有工具\n persistSession: false,\n },\n });\n\n // 收集消息检查是否有认证错误\n for await (const message of q) {\n if (message.type === 'result') {\n const result = message as SDKResultMessage;\n if (result.subtype !== 'success') {\n // 检查是否是认证错误\n if (result.errors?.some((e: string) => e.includes('authentication') || e.includes('api_key') || e.includes('401'))) {\n throw new ClaudeAuthenticationError(`Claude API Key 无效: ${result.errors.join(', ')}`);\n }\n }\n }\n }\n\n return {\n authenticated: true,\n authType: 'api-key',\n providerId: this.providerId,\n executorType: this.executorType,\n };\n } catch (error) {\n if (error instanceof ClaudeAuthenticationError) {\n throw error;\n }\n\n const errorMsg = error instanceof Error ? error.message : String(error);\n\n if (\n errorMsg.includes('authentication') ||\n errorMsg.includes('api_key') ||\n errorMsg.includes('invalid') ||\n errorMsg.includes('401') ||\n errorMsg.includes('unauthorized')\n ) {\n throw new ClaudeAuthenticationError(`Claude API Key 无效: ${errorMsg}`);\n }\n\n throw error;\n }\n }\n\n /**\n * 构建 SDK Options\n */\n private buildOptions(config: ExecutorConfig, additionalOptions?: Partial<Options>): Options {\n const options: Options = {\n env: this.getEnvConfig(),\n model: config.model ?? 'claude-sonnet-4-20250514',\n cwd: config.workingDirectory ?? process.cwd(),\n includePartialMessages: true, // 启用流式输出\n persistSession: false, // 不持久化 session\n ...additionalOptions,\n };\n\n // 设置 system prompt\n if (config.systemPrompt) {\n options.systemPrompt = config.systemPrompt;\n }\n\n // 设置工具\n if (config.tools && config.tools.length > 0) {\n options.tools = config.tools;\n }\n\n // 设置允许的工具\n if (config.allowedTools && config.allowedTools.length > 0) {\n options.allowedTools = config.allowedTools;\n }\n\n // 设置权限模式\n if (config.permissionMode) {\n options.permissionMode = config.permissionMode as Options['permissionMode'];\n }\n\n // 设置 MCP 服务器\n if (config.mcpServers) {\n options.mcpServers = config.mcpServers as Options['mcpServers'];\n }\n\n // 设置 max tokens (通过 maxThinkingTokens)\n if (config.maxTokens) {\n options.maxThinkingTokens = config.maxTokens;\n }\n\n return options;\n }\n\n /**\n * 执行任务(流式)\n */\n public async *execute(config: ExecutorConfig, message: string): AsyncGenerator<ExecuteMessage> {\n this.logger.info(`[${config.name}] Executing with Claude Agent SDK: ${message.slice(0, 100)}...`);\n\n const startTime = Date.now();\n const modelName = config.model ?? 'claude-sonnet-4-20250514';\n\n try {\n yield { type: 'system', executorType: this.executorType, model: modelName };\n\n const options = this.buildOptions(config);\n const claudeQuery = await loadClaudeQuery();\n const q = claudeQuery({ prompt: message, options });\n\n let fullText = '';\n let promptTokens = 0;\n let completionTokens = 0;\n\n for await (const sdkMessage of q) {\n // 处理不同类型的消息\n switch (sdkMessage.type) {\n case 'assistant':\n // 完整的 assistant 消息\n for (const block of sdkMessage.message.content) {\n if (block.type === 'text') {\n fullText = block.text;\n }\n }\n // 更新 usage\n if (sdkMessage.message.usage) {\n promptTokens = sdkMessage.message.usage.input_tokens ?? 0;\n completionTokens = sdkMessage.message.usage.output_tokens ?? 0;\n }\n break;\n\n case 'stream_event':\n // 流式事件\n if (sdkMessage.event.type === 'content_block_delta') {\n const delta = sdkMessage.event.delta;\n if (delta.type === 'text_delta') {\n yield { type: 'text', content: delta.text };\n fullText += delta.text;\n }\n } else if (sdkMessage.event.type === 'message_delta') {\n // 更新 usage\n if (sdkMessage.event.usage) {\n completionTokens = sdkMessage.event.usage.output_tokens ?? 0;\n }\n } else if (sdkMessage.event.type === 'message_start') {\n // 初始 usage\n if (sdkMessage.event.message?.usage) {\n promptTokens = sdkMessage.event.message.usage.input_tokens ?? 0;\n }\n }\n break;\n\n case 'system':\n // 系统消息\n if ('subtype' in sdkMessage) {\n this.logger.debug(`[${config.name}] System message: ${sdkMessage.subtype}`);\n }\n break;\n\n case 'result':\n // 最终结果\n const result = sdkMessage as SDKResultMessage;\n if (result.subtype === 'success') {\n // 使用 result 中的信息更新\n if (result.usage) {\n promptTokens = result.usage.input_tokens ?? promptTokens;\n completionTokens = result.usage.output_tokens ?? completionTokens;\n }\n if (result.result && !fullText) {\n fullText = result.result;\n }\n } else {\n // 错误\n throw new Error(result.errors?.join(', ') ?? `执行失败: ${result.subtype}`);\n }\n break;\n }\n }\n\n const durationMs = Date.now() - startTime;\n\n yield {\n type: 'done',\n result: {\n success: true,\n result: fullText,\n usage: {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n durationMs,\n },\n },\n };\n } catch (error) {\n yield* this.yieldError(error, startTime);\n }\n }\n\n /**\n * 多轮对话\n *\n * 注意:Claude Agent SDK 主要设计用于单次查询模式,\n * 多轮对话需要通过 session API(V2,目前不稳定)或\n * 在 prompt 中包含历史消息。\n */\n public async chat(config: ExecutorConfig, messages: ChatMessage[]): Promise<ExecuteResult> {\n const startTime = Date.now();\n\n try {\n // 分离 system 消息和对话消息\n const systemMessages = messages.filter((m) => m.role === 'system');\n const chatMessages = messages.filter((m) => m.role !== 'system');\n\n // 构建完整的 prompt,包含历史消息\n const formattedMessages = chatMessages\n .map((m) => {\n const role = m.role === 'user' ? 'Human' : 'Assistant';\n return `${role}: ${m.content}`;\n })\n .join('\\n\\n');\n\n // 构建 options\n const options = this.buildOptions(config, {\n // 如果有 system 消息,使用第一个作为 system prompt\n systemPrompt:\n systemMessages.length > 0\n ? systemMessages.map((m) => m.content).join('\\n\\n')\n : config.systemPrompt,\n });\n\n // 使用最后一条用户消息作为 prompt(如果有历史则在 system prompt 中添加上下文)\n const lastUserMessage = chatMessages.filter((m) => m.role === 'user').pop();\n const prompt = lastUserMessage?.content ?? formattedMessages;\n\n // 如果有多条消息,在 system prompt 中添加对话历史\n if (chatMessages.length > 1 && options.systemPrompt) {\n options.systemPrompt = `${options.systemPrompt}\\n\\n## Conversation History\\n${formattedMessages}`;\n }\n\n const claudeQuery = await loadClaudeQuery();\n const q = claudeQuery({ prompt, options });\n\n let fullText = '';\n let promptTokens = 0;\n let completionTokens = 0;\n\n for await (const sdkMessage of q) {\n if (sdkMessage.type === 'assistant') {\n for (const block of sdkMessage.message.content) {\n if (block.type === 'text') {\n fullText = block.text;\n }\n }\n if (sdkMessage.message.usage) {\n promptTokens = sdkMessage.message.usage.input_tokens ?? 0;\n completionTokens = sdkMessage.message.usage.output_tokens ?? 0;\n }\n } else if (sdkMessage.type === 'result') {\n const result = sdkMessage as SDKResultMessage;\n if (result.subtype !== 'success') {\n throw new Error(result.errors?.join(', ') ?? `执行失败: ${result.subtype}`);\n }\n if (result.usage) {\n promptTokens = result.usage.input_tokens ?? promptTokens;\n completionTokens = result.usage.output_tokens ?? completionTokens;\n }\n if (result.result && !fullText) {\n fullText = result.result;\n }\n }\n }\n\n return {\n success: true,\n result: fullText,\n usage: {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n durationMs: Date.now() - startTime,\n },\n };\n } catch (error) {\n return this.wrapError(error, startTime);\n }\n }\n}\n\n/**\n * 创建 Claude executor 实例\n */\nexport function createClaudeExecutor(options?: BaseExecutorOptions): ClaudeExecutor {\n return new ClaudeExecutor(options);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ClaudeExecutor.js","sourceRoot":"","sources":["../../src/agents/ClaudeExecutor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Claude Executor\n *\n * 使用 Claude Agent SDK 执行任务。\n *\n * 支持功能:\n * - 完整的 Agent 能力(代码理解、文件编辑、命令执行等)\n * - 工具调用(MCP)\n * - 权限管理\n * - 流式输出\n *\n * 注意:\n * - Claude Agent SDK 需要 Anthropic-compatible env,但值必须来自\n * invocation-scoped Xpod AI Connection,不允许直接投递 Pod provider secret。\n * - SDK 会自动处理复杂的交互逻辑\n */\n\ntype Options = any;\ntype SDKResultMessage = any;\nimport { BaseAgentExecutor } from './BaseAgentExecutor';\nimport type {\n ExecutorType,\n AuthType,\n AuthInfo,\n ExecutorConfig,\n ExecuteMessage,\n ChatMessage,\n ExecuteResult,\n BaseExecutorOptions,\n} from './types';\nimport {\n projectAnthropicCompatibleEnv,\n requireAiConnectionRuntimeConfig,\n sanitizeRuntimeEnv,\n} from '../runtime/safe-env';\n\n/**\n * Claude 鉴权错误\n */\nexport class ClaudeAuthenticationError extends Error {\n public constructor(message: string = 'Claude 未配置 AI Connection 认证') {\n super(message);\n this.name = 'ClaudeAuthenticationError';\n }\n}\n\n/**\n * Claude Executor\n *\n * 封装 Claude Agent SDK 调用。\n */\nasync function loadClaudeQuery(): Promise<(args: { prompt: string; options: Options }) => AsyncIterable<any>> {\n const mod = await import('@anthropic-ai/claude-agent-sdk');\n const q = (mod as any)?.query;\n if (typeof q !== 'function') {\n throw new Error('Claude SDK is installed but query API is unavailable');\n }\n return q;\n}\n\nexport class ClaudeExecutor extends BaseAgentExecutor {\n public readonly executorType: ExecutorType = 'claude';\n\n /**\n * 获取认证类型\n */\n public getAuthType(): AuthType {\n return 'api-key';\n }\n\n /**\n * 获取环境变量配置\n */\n private getEnvConfig(): Record<string, string | undefined> {\n const connection = this.requireAiConnection();\n return {\n ...sanitizeRuntimeEnv(process.env),\n ...projectAnthropicCompatibleEnv(connection),\n };\n }\n\n private requireAiConnection() {\n return requireAiConnectionRuntimeConfig({\n baseUrl: this.aiConnection?.baseUrl,\n apiKey: this.aiConnection?.gatewayKey,\n model: this.aiConnection?.model,\n }, 'Claude executor');\n }\n\n /**\n * 检查认证状态\n */\n public async checkAuthentication(): Promise<AuthInfo> {\n try {\n const env = this.getEnvConfig();\n\n // 发送一个简单查询来验证认证\n const claudeQuery = await loadClaudeQuery();\n const q = claudeQuery({\n prompt: 'hi',\n options: {\n env,\n maxTurns: 1,\n permissionMode: 'dontAsk',\n tools: [], // 禁用所有工具\n persistSession: false,\n },\n });\n\n // 收集消息检查是否有认证错误\n for await (const message of q) {\n if (message.type === 'result') {\n const result = message as SDKResultMessage;\n if (result.subtype !== 'success') {\n // 检查是否是认证错误\n if (result.errors?.some((e: string) => e.includes('authentication') || e.includes('api_key') || e.includes('401'))) {\n throw new ClaudeAuthenticationError(`Claude API Key 无效: ${result.errors.join(', ')}`);\n }\n }\n }\n }\n\n return {\n authenticated: true,\n authType: 'api-key',\n providerId: this.providerId,\n executorType: this.executorType,\n };\n } catch (error) {\n if (error instanceof ClaudeAuthenticationError) {\n throw error;\n }\n\n const errorMsg = error instanceof Error ? error.message : String(error);\n\n if (\n errorMsg.includes('authentication') ||\n errorMsg.includes('api_key') ||\n errorMsg.includes('AI Connection') ||\n errorMsg.includes('invalid') ||\n errorMsg.includes('401') ||\n errorMsg.includes('unauthorized')\n ) {\n throw new ClaudeAuthenticationError(`Claude AI Connection 无效: ${errorMsg}`);\n }\n\n throw error;\n }\n }\n\n /**\n * 构建 SDK Options\n */\n private buildOptions(config: ExecutorConfig, additionalOptions?: Partial<Options>): Options {\n const options: Options = {\n env: this.getEnvConfig(),\n model: config.model ?? 'claude-sonnet-4-20250514',\n cwd: config.workingDirectory ?? process.cwd(),\n includePartialMessages: true, // 启用流式输出\n persistSession: false, // 不持久化 session\n ...additionalOptions,\n };\n\n // 设置 system prompt\n if (config.systemPrompt) {\n options.systemPrompt = config.systemPrompt;\n }\n\n // 设置工具\n if (config.tools && config.tools.length > 0) {\n options.tools = config.tools;\n }\n\n // 设置允许的工具\n if (config.allowedTools && config.allowedTools.length > 0) {\n options.allowedTools = config.allowedTools;\n }\n\n // 设置权限模式\n if (config.permissionMode) {\n options.permissionMode = config.permissionMode as Options['permissionMode'];\n }\n\n // 设置 MCP 服务器\n if (config.mcpServers) {\n options.mcpServers = config.mcpServers as Options['mcpServers'];\n }\n\n // 设置 max tokens (通过 maxThinkingTokens)\n if (config.maxTokens) {\n options.maxThinkingTokens = config.maxTokens;\n }\n\n return options;\n }\n\n /**\n * 执行任务(流式)\n */\n public async *execute(config: ExecutorConfig, message: string): AsyncGenerator<ExecuteMessage> {\n this.logger.info(`[${config.name}] Executing with Claude Agent SDK: ${message.slice(0, 100)}...`);\n\n const startTime = Date.now();\n const modelName = config.model ?? 'claude-sonnet-4-20250514';\n\n try {\n yield { type: 'system', executorType: this.executorType, model: modelName };\n\n const options = this.buildOptions(config);\n const claudeQuery = await loadClaudeQuery();\n const q = claudeQuery({ prompt: message, options });\n\n let fullText = '';\n let promptTokens = 0;\n let completionTokens = 0;\n\n for await (const sdkMessage of q) {\n // 处理不同类型的消息\n switch (sdkMessage.type) {\n case 'assistant':\n // 完整的 assistant 消息\n for (const block of sdkMessage.message.content) {\n if (block.type === 'text') {\n fullText = block.text;\n }\n }\n // 更新 usage\n if (sdkMessage.message.usage) {\n promptTokens = sdkMessage.message.usage.input_tokens ?? 0;\n completionTokens = sdkMessage.message.usage.output_tokens ?? 0;\n }\n break;\n\n case 'stream_event':\n // 流式事件\n if (sdkMessage.event.type === 'content_block_delta') {\n const delta = sdkMessage.event.delta;\n if (delta.type === 'text_delta') {\n yield { type: 'text', content: delta.text };\n fullText += delta.text;\n }\n } else if (sdkMessage.event.type === 'message_delta') {\n // 更新 usage\n if (sdkMessage.event.usage) {\n completionTokens = sdkMessage.event.usage.output_tokens ?? 0;\n }\n } else if (sdkMessage.event.type === 'message_start') {\n // 初始 usage\n if (sdkMessage.event.message?.usage) {\n promptTokens = sdkMessage.event.message.usage.input_tokens ?? 0;\n }\n }\n break;\n\n case 'system':\n // 系统消息\n if ('subtype' in sdkMessage) {\n this.logger.debug(`[${config.name}] System message: ${sdkMessage.subtype}`);\n }\n break;\n\n case 'result':\n // 最终结果\n const result = sdkMessage as SDKResultMessage;\n if (result.subtype === 'success') {\n // 使用 result 中的信息更新\n if (result.usage) {\n promptTokens = result.usage.input_tokens ?? promptTokens;\n completionTokens = result.usage.output_tokens ?? completionTokens;\n }\n if (result.result && !fullText) {\n fullText = result.result;\n }\n } else {\n // 错误\n throw new Error(result.errors?.join(', ') ?? `执行失败: ${result.subtype}`);\n }\n break;\n }\n }\n\n const durationMs = Date.now() - startTime;\n\n yield {\n type: 'done',\n result: {\n success: true,\n result: fullText,\n usage: {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n durationMs,\n },\n },\n };\n } catch (error) {\n yield* this.yieldError(error, startTime);\n }\n }\n\n /**\n * 多轮对话\n *\n * 注意:Claude Agent SDK 主要设计用于单次查询模式,\n * 多轮对话需要通过 session API(V2,目前不稳定)或\n * 在 prompt 中包含历史消息。\n */\n public async chat(config: ExecutorConfig, messages: ChatMessage[]): Promise<ExecuteResult> {\n const startTime = Date.now();\n\n try {\n // 分离 system 消息和对话消息\n const systemMessages = messages.filter((m) => m.role === 'system');\n const chatMessages = messages.filter((m) => m.role !== 'system');\n\n // 构建完整的 prompt,包含历史消息\n const formattedMessages = chatMessages\n .map((m) => {\n const role = m.role === 'user' ? 'Human' : 'Assistant';\n return `${role}: ${m.content}`;\n })\n .join('\\n\\n');\n\n // 构建 options\n const options = this.buildOptions(config, {\n // 如果有 system 消息,使用第一个作为 system prompt\n systemPrompt:\n systemMessages.length > 0\n ? systemMessages.map((m) => m.content).join('\\n\\n')\n : config.systemPrompt,\n });\n\n // 使用最后一条用户消息作为 prompt(如果有历史则在 system prompt 中添加上下文)\n const lastUserMessage = chatMessages.filter((m) => m.role === 'user').pop();\n const prompt = lastUserMessage?.content ?? formattedMessages;\n\n // 如果有多条消息,在 system prompt 中添加对话历史\n if (chatMessages.length > 1 && options.systemPrompt) {\n options.systemPrompt = `${options.systemPrompt}\\n\\n## Conversation History\\n${formattedMessages}`;\n }\n\n const claudeQuery = await loadClaudeQuery();\n const q = claudeQuery({ prompt, options });\n\n let fullText = '';\n let promptTokens = 0;\n let completionTokens = 0;\n\n for await (const sdkMessage of q) {\n if (sdkMessage.type === 'assistant') {\n for (const block of sdkMessage.message.content) {\n if (block.type === 'text') {\n fullText = block.text;\n }\n }\n if (sdkMessage.message.usage) {\n promptTokens = sdkMessage.message.usage.input_tokens ?? 0;\n completionTokens = sdkMessage.message.usage.output_tokens ?? 0;\n }\n } else if (sdkMessage.type === 'result') {\n const result = sdkMessage as SDKResultMessage;\n if (result.subtype !== 'success') {\n throw new Error(result.errors?.join(', ') ?? `执行失败: ${result.subtype}`);\n }\n if (result.usage) {\n promptTokens = result.usage.input_tokens ?? promptTokens;\n completionTokens = result.usage.output_tokens ?? completionTokens;\n }\n if (result.result && !fullText) {\n fullText = result.result;\n }\n }\n }\n\n return {\n success: true,\n result: fullText,\n usage: {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n durationMs: Date.now() - startTime,\n },\n };\n } catch (error) {\n return this.wrapError(error, startTime);\n }\n }\n}\n\n/**\n * 创建 Claude executor 实例\n */\nexport function createClaudeExecutor(options?: BaseExecutorOptions): ClaudeExecutor {\n return new ClaudeExecutor(options);\n}\n"]}
|
|
@@ -15,7 +15,6 @@ const drizzle_solid_1 = require("@undefineds.co/drizzle-solid");
|
|
|
15
15
|
const agent_meta_schema_1 = require("./agent-meta-schema");
|
|
16
16
|
const parse_agent_instructions_1 = require("./parse-agent-instructions");
|
|
17
17
|
const provider_1 = require("../../ai/schema/provider");
|
|
18
|
-
const tables_1 = require("../../credential/schema/tables");
|
|
19
18
|
const model_1 = require("../../ai/schema/model");
|
|
20
19
|
const logger = (0, global_logger_factory_1.getLoggerFor)('AgentConfigResolver');
|
|
21
20
|
const AGENT_META_RESOURCE_ID = '.meta#config';
|
|
@@ -34,7 +33,6 @@ function createPodDb(ctx, agentId) {
|
|
|
34
33
|
schema: {
|
|
35
34
|
agentConfig: agentMeta,
|
|
36
35
|
provider: provider_1.Provider,
|
|
37
|
-
credential: tables_1.Credential,
|
|
38
36
|
model: model_1.Model,
|
|
39
37
|
},
|
|
40
38
|
});
|
|
@@ -89,7 +87,6 @@ class AgentConfigResolver {
|
|
|
89
87
|
return null;
|
|
90
88
|
}
|
|
91
89
|
const profileResources = await this.resources.load(toStringArray(metaRecord.skills));
|
|
92
|
-
const credential = await this.resolveCredential(metaRecord.credential);
|
|
93
90
|
const modelName = await this.resolveModelName(provider, metaRecord.model);
|
|
94
91
|
const mcpServers = AgentMcpConfig.fromMeta(metaRecord.mcpServers).toRuntimeConfig();
|
|
95
92
|
const systemPrompt = profileResources.instructions || metaRecord.instructions || '';
|
|
@@ -99,9 +96,6 @@ class AgentConfigResolver {
|
|
|
99
96
|
description: metaRecord.description,
|
|
100
97
|
systemPrompt,
|
|
101
98
|
executorType: runtimeKind,
|
|
102
|
-
apiKey: credential.apiKey,
|
|
103
|
-
baseUrl: credential.baseUrl ?? provider.baseUrl ?? undefined,
|
|
104
|
-
proxyUrl: credential.proxyUrl,
|
|
105
99
|
model: modelName,
|
|
106
100
|
maxTurns: metaRecord.maxTurns,
|
|
107
101
|
allowedTools: toStringArray(metaRecord.allowedTools),
|
|
@@ -113,21 +107,6 @@ class AgentConfigResolver {
|
|
|
113
107
|
enabled: true,
|
|
114
108
|
};
|
|
115
109
|
}
|
|
116
|
-
async resolveCredential(credentialResource) {
|
|
117
|
-
if (!credentialResource) {
|
|
118
|
-
return { apiKey: '' };
|
|
119
|
-
}
|
|
120
|
-
const credential = await this.db.findByIri(tables_1.Credential, credentialResource);
|
|
121
|
-
if (!credential) {
|
|
122
|
-
logger.warn(`Credential not found: ${credentialResource}`);
|
|
123
|
-
return { apiKey: '' };
|
|
124
|
-
}
|
|
125
|
-
return {
|
|
126
|
-
apiKey: credential.apiKey ?? '',
|
|
127
|
-
baseUrl: credential.baseUrl ?? undefined,
|
|
128
|
-
proxyUrl: credential.proxyUrl ?? undefined,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
110
|
async resolveModelName(provider, modelResource) {
|
|
132
111
|
const explicit = await resolveModelId(this.db, modelResource);
|
|
133
112
|
if (explicit) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/agents/config/resolve.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Config Resolver\n *\n * Reads a Pod-hosted Agent Profile:\n * - /agents/{agentId}/AGENTS.md is plain Markdown guidance.\n * - /agents/{agentId}/.meta#config is RDF runtime config.\n * - Skill refs point at shared SKILL.md documents in Pod storage.\n * - MCP servers are structured config entries, not mcp/*.json files.\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport { drizzle } from '@undefineds.co/drizzle-solid';\nimport type { PodTable } from '@undefineds.co/drizzle-solid';\nimport { AgentMetaSchema } from './agent-meta-schema';\nimport { extractMarkdownBody, parseAgentInstructions } from './parse-agent-instructions';\nimport { Provider } from '../../ai/schema/provider';\nimport { Credential } from '../../credential/schema/tables';\nimport { Model } from '../../ai/schema/model';\nimport type {\n AgentMcpServerDef,\n AgentMetaRecord,\n AgentRuntimeKind,\n ResolvedAgentConfig,\n ResolvedAgentSkill,\n} from './types';\nimport type { McpServerConfig } from '../types';\n\nconst logger = getLoggerFor('AgentConfigResolver');\nconst AGENT_META_RESOURCE_ID = '.meta#config';\n\ninterface ResolveContext {\n podBaseUrl: string;\n authenticatedFetch: typeof fetch;\n webId?: string;\n}\n\ninterface AgentResourceLoaderOptions extends ResolveContext {\n agentId: string;\n}\n\ninterface AgentProfileResources {\n instructions: string;\n skills: ResolvedAgentSkill[];\n skillsContent?: string;\n}\n\nfunction isRuntimeKind(value: string | undefined): value is AgentRuntimeKind {\n return value === 'codebuddy' || value === 'claude' || value === 'codex';\n}\n\nfunction createPodDb(ctx: ResolveContext, agentId: string): any {\n const agentMeta = createAgentMetaTable(agentId);\n return drizzle({\n info: {\n isLoggedIn: true,\n webId: ctx.webId,\n },\n fetch: ctx.authenticatedFetch,\n } as any, {\n schema: {\n agentConfig: agentMeta,\n provider: Provider,\n credential: Credential,\n model: Model,\n },\n });\n}\n\nasync function resolveModelId(\n db: any,\n modelRef: string | null | undefined,\n): Promise<string | undefined> {\n if (!modelRef) {\n return undefined;\n }\n\n const modelRecord = await db.findByIri(Model, modelRef);\n return modelRecord?.id ?? undefined;\n}\n\n/**\n * Resolve a complete agent config from Pod storage.\n *\n * @param agentId - Agent folder name, for example \"secretary\"\n * @param ctx - Pod access context\n * @returns Fully resolved config, or null if agent is missing / disabled / invalid\n */\nexport async function resolveAgentConfig(\n agentId: string,\n ctx: ResolveContext,\n): Promise<ResolvedAgentConfig | null> {\n const db = createPodDb(ctx, agentId);\n return new AgentConfigResolver(\n agentId,\n db,\n db.schema?.agentConfig ?? createAgentMetaTable(agentId),\n new PodAgentResourceLoader({ agentId, ...ctx }),\n ).resolve();\n}\n\nclass AgentConfigResolver {\n public constructor(\n private readonly agentId: string,\n private readonly db: any,\n private readonly metaTable: PodTable,\n private readonly resources: PodAgentResourceLoader,\n ) {}\n\n public async resolve(): Promise<ResolvedAgentConfig | null> {\n const metaRecord = await this.db.findById(this.metaTable, AGENT_META_RESOURCE_ID) as AgentMetaRecord | null;\n if (!metaRecord) {\n logger.warn(`Agent config not found for ${this.agentId}: ${AGENT_META_RESOURCE_ID}`);\n return null;\n }\n\n if (metaRecord.enabled === 'false') {\n return null;\n }\n\n const providerResource = metaRecord.provider;\n if (!providerResource) {\n logger.error(`Agent ${this.agentId} has no provider in .meta`);\n return null;\n }\n\n const provider = await this.db.findByIri(Provider, providerResource);\n if (!provider) {\n logger.error(`Provider not found: ${providerResource}`);\n return null;\n }\n\n const runtimeKind = metaRecord.runtimeKind;\n if (!isRuntimeKind(runtimeKind)) {\n logger.error(`Agent ${this.agentId} has invalid runtimeKind: ${runtimeKind ?? '(missing)'}`);\n return null;\n }\n\n const profileResources = await this.resources.load(toStringArray(metaRecord.skills));\n const credential = await this.resolveCredential(metaRecord.credential);\n const modelName = await this.resolveModelName(provider, metaRecord.model);\n const mcpServers = AgentMcpConfig.fromMeta(metaRecord.mcpServers).toRuntimeConfig();\n const systemPrompt = profileResources.instructions || metaRecord.instructions || '';\n\n return {\n id: this.agentId,\n displayName: metaRecord.name ?? this.agentId,\n description: metaRecord.description,\n systemPrompt,\n executorType: runtimeKind,\n apiKey: credential.apiKey,\n baseUrl: credential.baseUrl ?? provider.baseUrl ?? undefined,\n proxyUrl: credential.proxyUrl,\n model: modelName,\n maxTurns: metaRecord.maxTurns,\n allowedTools: toStringArray(metaRecord.allowedTools),\n disallowedTools: toStringArray(metaRecord.disallowedTools),\n permissionMode: metaRecord.permissionMode,\n mcpServers,\n skillsContent: profileResources.skillsContent,\n skills: profileResources.skills,\n enabled: true,\n };\n }\n\n private async resolveCredential(credentialResource: string | undefined): Promise<{\n apiKey: string;\n baseUrl?: string;\n proxyUrl?: string;\n }> {\n if (!credentialResource) {\n return { apiKey: '' };\n }\n\n const credential = await this.db.findByIri(Credential, credentialResource);\n if (!credential) {\n logger.warn(`Credential not found: ${credentialResource}`);\n return { apiKey: '' };\n }\n\n return {\n apiKey: (credential as any).apiKey ?? '',\n baseUrl: (credential as any).baseUrl ?? undefined,\n proxyUrl: (credential as any).proxyUrl ?? undefined,\n };\n }\n\n private async resolveModelName(provider: any, modelResource: string | undefined): Promise<string | undefined> {\n const explicit = await resolveModelId(this.db, modelResource);\n if (explicit) {\n return explicit;\n }\n return resolveModelId(this.db, provider.defaultModel ?? provider.hasModel);\n }\n}\n\nfunction createAgentMetaTable(agentId: string): any {\n return AgentMetaSchema.table('AgentMeta', {\n base: `/agents/${agentId}/.meta`,\n subjectTemplate: '#{id}',\n });\n}\n\nclass PodAgentResourceLoader {\n private readonly skillRefs: AgentSkillRefResolver;\n\n public readonly agentId: string;\n public readonly podBaseUrl: string;\n public readonly authenticatedFetch: typeof fetch;\n\n public constructor(options: AgentResourceLoaderOptions) {\n this.agentId = options.agentId;\n this.podBaseUrl = options.podBaseUrl;\n this.authenticatedFetch = options.authenticatedFetch;\n this.skillRefs = new AgentSkillRefResolver(options.agentId);\n }\n\n public async load(skillRefs: string[]): Promise<AgentProfileResources> {\n const instructions = await this.fetchAgentInstructions();\n const skills = await this.resolveSkillRefs(skillRefs);\n const skillsContent = skills\n .map((skill) => extractMarkdownBody(skill.content))\n .filter(Boolean)\n .join('\\n\\n---\\n\\n');\n return { instructions, skills, skillsContent: skillsContent || undefined };\n }\n\n private async fetchAgentInstructions(): Promise<string> {\n const agentsMdUrl = new URL(`/agents/${this.agentId}/AGENTS.md`, this.podBaseUrl).href;\n const response = await this.authenticatedFetch(agentsMdUrl);\n if (!response.ok) {\n logger.warn(`AGENTS.md not found for ${this.agentId}: ${response.status}, fallback to Pod metadata`);\n return '';\n }\n\n return parseAgentInstructions(await response.text());\n }\n\n private async resolveSkillRefs(refs: string[]): Promise<ResolvedAgentSkill[]> {\n const skills: ResolvedAgentSkill[] = [];\n\n for (const ref of refs) {\n const skill = await this.resolveSkillRef(ref);\n if (skill) {\n skills.push(skill);\n }\n }\n\n return skills;\n }\n\n private async resolveSkillRef(ref: string): Promise<ResolvedAgentSkill | undefined> {\n const resolvedPath = this.skillRefs.resolvePath(ref);\n const url = new URL(resolvedPath, this.podBaseUrl).href;\n\n try {\n const response = await this.authenticatedFetch(url);\n if (!response.ok) {\n logger.warn(`Agent skill ref not found: ${ref} (${response.status})`);\n return undefined;\n }\n\n const content = (await response.text()).trim();\n if (!content) {\n return undefined;\n }\n\n return {\n name: this.skillRefs.resolveName(ref, resolvedPath),\n content,\n };\n } catch (error) {\n logger.warn(`Failed to fetch agent skill ref ${ref}:`, error);\n return undefined;\n }\n }\n}\n\nclass AgentMcpConfig {\n public static fromMeta(value: AgentMetaRecord['mcpServers']): AgentMcpConfig {\n return new AgentMcpConfig(this.toMcpServerDefs(value));\n }\n\n private static toMcpServerDefs(value: AgentMetaRecord['mcpServers']): AgentMcpServerDef[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const defs: AgentMcpServerDef[] = [];\n for (const item of value) {\n const parsed = AgentMcpConfig.parseMcpServerDef(item);\n if (parsed) {\n defs.push(parsed);\n }\n }\n return defs;\n }\n\n private static parseMcpServerDef(value: unknown): AgentMcpServerDef | undefined {\n if (AgentMcpConfig.isAgentMcpServerDef(value)) {\n return value;\n }\n if (typeof value !== 'string' || value.trim().length === 0) {\n return undefined;\n }\n\n const trimmed = value.trim();\n if (!trimmed.startsWith('{')) {\n logger.warn(`Ignoring MCP server file ref '${value}'. Store structured MCP config in .meta instead.`);\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(trimmed);\n return AgentMcpConfig.isAgentMcpServerDef(parsed) ? parsed : undefined;\n } catch (error) {\n logger.warn('Invalid MCP server JSON in .meta:', error);\n return undefined;\n }\n }\n\n private static isAgentMcpServerDef(value: unknown): value is AgentMcpServerDef {\n return Boolean(value && typeof value === 'object' && typeof (value as AgentMcpServerDef).name === 'string');\n }\n\n private constructor(private readonly defs: AgentMcpServerDef[]) {}\n\n public toRuntimeConfig(): Record<string, McpServerConfig> {\n const result: Record<string, McpServerConfig> = {};\n\n for (const def of this.defs) {\n result[def.name] = this.toRuntimeServerConfig(def);\n }\n\n return result;\n }\n\n private toRuntimeServerConfig(def: AgentMcpServerDef): McpServerConfig {\n const config: McpServerConfig = {};\n\n if (def.transport) {\n config.type = def.transport;\n } else if (def.command) {\n config.type = 'stdio';\n } else if (def.url) {\n config.type = 'sse';\n }\n\n if (def.command) config.command = def.command;\n if (def.args) config.args = def.args;\n if (def.env) config.env = def.env;\n if (def.url) config.url = def.url;\n if (def.headers) config.headers = def.headers;\n\n return config;\n }\n}\n\nclass AgentSkillRefResolver {\n public constructor(private readonly agentId: string) {}\n\n public resolvePath(ref: string): string {\n const normalized = this.normalizePackageRef(ref);\n if (normalized.startsWith('/')) {\n if (this.hasKnownMarkdownExtension(normalized)) {\n return normalized;\n }\n return `${normalized}/SKILL.md`;\n }\n\n const relative = normalized.startsWith('.codex/skills/') || normalized.startsWith('skills/')\n ? normalized\n : `skills/${normalized}`;\n if (this.hasKnownMarkdownExtension(relative)) {\n return `/agents/${this.agentId}/${relative}`;\n }\n return `/agents/${this.agentId}/${relative}/SKILL.md`;\n }\n\n public resolveName(ref: string, resolvedPath: string): string {\n const raw = this.normalizePackageRef(ref).replace(/\\/$/, '');\n if (raw.endsWith('/SKILL.md')) {\n return this.sanitizeSkillName(raw.split('/').slice(-2, -1)[0] ?? 'skill');\n }\n\n const withoutPrefix = raw\n .replace(/^\\/+/, '')\n .replace(/^\\.codex\\/skills\\//, '')\n .replace(/^skills\\//, '');\n if (withoutPrefix && !this.hasKnownMarkdownExtension(withoutPrefix)) {\n return this.sanitizeSkillName(withoutPrefix.split('/').filter(Boolean).pop() ?? withoutPrefix);\n }\n\n const segments = resolvedPath.split('/').filter(Boolean);\n const skillIndex = segments.lastIndexOf('SKILL.md');\n return this.sanitizeSkillName(skillIndex > 0 ? segments[skillIndex - 1] : 'skill');\n }\n\n private normalizePackageRef(ref: string): string {\n return ref.replace(/^\\.\\/+/, '').replace(/^\\/+agents\\/[^/]+\\//, '/');\n }\n\n private sanitizeSkillName(name: string): string {\n return name.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'skill';\n }\n\n private hasKnownMarkdownExtension(path: string): boolean {\n return /\\.(md|markdown)$/i.test(path);\n }\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.filter((item): item is string => typeof item === 'string' && item.length > 0);\n }\n if (typeof value === 'string' && value.length > 0) {\n return [value];\n }\n return [];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/agents/config/resolve.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Config Resolver\n *\n * Reads a Pod-hosted Agent Profile:\n * - /agents/{agentId}/AGENTS.md is plain Markdown guidance.\n * - /agents/{agentId}/.meta#config is RDF runtime config.\n * - Skill refs point at shared SKILL.md documents in Pod storage.\n * - MCP servers are structured config entries, not mcp/*.json files.\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport { drizzle } from '@undefineds.co/drizzle-solid';\nimport type { PodTable } from '@undefineds.co/drizzle-solid';\nimport { AgentMetaSchema } from './agent-meta-schema';\nimport { extractMarkdownBody, parseAgentInstructions } from './parse-agent-instructions';\nimport { Provider } from '../../ai/schema/provider';\nimport { Model } from '../../ai/schema/model';\nimport type {\n AgentMcpServerDef,\n AgentMetaRecord,\n AgentRuntimeKind,\n ResolvedAgentConfig,\n ResolvedAgentSkill,\n} from './types';\nimport type { McpServerConfig } from '../types';\n\nconst logger = getLoggerFor('AgentConfigResolver');\nconst AGENT_META_RESOURCE_ID = '.meta#config';\n\ninterface ResolveContext {\n podBaseUrl: string;\n authenticatedFetch: typeof fetch;\n webId?: string;\n}\n\ninterface AgentResourceLoaderOptions extends ResolveContext {\n agentId: string;\n}\n\ninterface AgentProfileResources {\n instructions: string;\n skills: ResolvedAgentSkill[];\n skillsContent?: string;\n}\n\nfunction isRuntimeKind(value: string | undefined): value is AgentRuntimeKind {\n return value === 'codebuddy' || value === 'claude' || value === 'codex';\n}\n\nfunction createPodDb(ctx: ResolveContext, agentId: string): any {\n const agentMeta = createAgentMetaTable(agentId);\n return drizzle({\n info: {\n isLoggedIn: true,\n webId: ctx.webId,\n },\n fetch: ctx.authenticatedFetch,\n } as any, {\n schema: {\n agentConfig: agentMeta,\n provider: Provider,\n model: Model,\n },\n });\n}\n\nasync function resolveModelId(\n db: any,\n modelRef: string | null | undefined,\n): Promise<string | undefined> {\n if (!modelRef) {\n return undefined;\n }\n\n const modelRecord = await db.findByIri(Model, modelRef);\n return modelRecord?.id ?? undefined;\n}\n\n/**\n * Resolve a complete agent config from Pod storage.\n *\n * @param agentId - Agent folder name, for example \"secretary\"\n * @param ctx - Pod access context\n * @returns Fully resolved config, or null if agent is missing / disabled / invalid\n */\nexport async function resolveAgentConfig(\n agentId: string,\n ctx: ResolveContext,\n): Promise<ResolvedAgentConfig | null> {\n const db = createPodDb(ctx, agentId);\n return new AgentConfigResolver(\n agentId,\n db,\n db.schema?.agentConfig ?? createAgentMetaTable(agentId),\n new PodAgentResourceLoader({ agentId, ...ctx }),\n ).resolve();\n}\n\nclass AgentConfigResolver {\n public constructor(\n private readonly agentId: string,\n private readonly db: any,\n private readonly metaTable: PodTable,\n private readonly resources: PodAgentResourceLoader,\n ) {}\n\n public async resolve(): Promise<ResolvedAgentConfig | null> {\n const metaRecord = await this.db.findById(this.metaTable, AGENT_META_RESOURCE_ID) as AgentMetaRecord | null;\n if (!metaRecord) {\n logger.warn(`Agent config not found for ${this.agentId}: ${AGENT_META_RESOURCE_ID}`);\n return null;\n }\n\n if (metaRecord.enabled === 'false') {\n return null;\n }\n\n const providerResource = metaRecord.provider;\n if (!providerResource) {\n logger.error(`Agent ${this.agentId} has no provider in .meta`);\n return null;\n }\n\n const provider = await this.db.findByIri(Provider, providerResource);\n if (!provider) {\n logger.error(`Provider not found: ${providerResource}`);\n return null;\n }\n\n const runtimeKind = metaRecord.runtimeKind;\n if (!isRuntimeKind(runtimeKind)) {\n logger.error(`Agent ${this.agentId} has invalid runtimeKind: ${runtimeKind ?? '(missing)'}`);\n return null;\n }\n\n const profileResources = await this.resources.load(toStringArray(metaRecord.skills));\n const modelName = await this.resolveModelName(provider, metaRecord.model);\n const mcpServers = AgentMcpConfig.fromMeta(metaRecord.mcpServers).toRuntimeConfig();\n const systemPrompt = profileResources.instructions || metaRecord.instructions || '';\n\n return {\n id: this.agentId,\n displayName: metaRecord.name ?? this.agentId,\n description: metaRecord.description,\n systemPrompt,\n executorType: runtimeKind,\n model: modelName,\n maxTurns: metaRecord.maxTurns,\n allowedTools: toStringArray(metaRecord.allowedTools),\n disallowedTools: toStringArray(metaRecord.disallowedTools),\n permissionMode: metaRecord.permissionMode,\n mcpServers,\n skillsContent: profileResources.skillsContent,\n skills: profileResources.skills,\n enabled: true,\n };\n }\n\n private async resolveModelName(provider: any, modelResource: string | undefined): Promise<string | undefined> {\n const explicit = await resolveModelId(this.db, modelResource);\n if (explicit) {\n return explicit;\n }\n return resolveModelId(this.db, provider.defaultModel ?? provider.hasModel);\n }\n}\n\nfunction createAgentMetaTable(agentId: string): any {\n return AgentMetaSchema.table('AgentMeta', {\n base: `/agents/${agentId}/.meta`,\n subjectTemplate: '#{id}',\n });\n}\n\nclass PodAgentResourceLoader {\n private readonly skillRefs: AgentSkillRefResolver;\n\n public readonly agentId: string;\n public readonly podBaseUrl: string;\n public readonly authenticatedFetch: typeof fetch;\n\n public constructor(options: AgentResourceLoaderOptions) {\n this.agentId = options.agentId;\n this.podBaseUrl = options.podBaseUrl;\n this.authenticatedFetch = options.authenticatedFetch;\n this.skillRefs = new AgentSkillRefResolver(options.agentId);\n }\n\n public async load(skillRefs: string[]): Promise<AgentProfileResources> {\n const instructions = await this.fetchAgentInstructions();\n const skills = await this.resolveSkillRefs(skillRefs);\n const skillsContent = skills\n .map((skill) => extractMarkdownBody(skill.content))\n .filter(Boolean)\n .join('\\n\\n---\\n\\n');\n return { instructions, skills, skillsContent: skillsContent || undefined };\n }\n\n private async fetchAgentInstructions(): Promise<string> {\n const agentsMdUrl = new URL(`/agents/${this.agentId}/AGENTS.md`, this.podBaseUrl).href;\n const response = await this.authenticatedFetch(agentsMdUrl);\n if (!response.ok) {\n logger.warn(`AGENTS.md not found for ${this.agentId}: ${response.status}, fallback to Pod metadata`);\n return '';\n }\n\n return parseAgentInstructions(await response.text());\n }\n\n private async resolveSkillRefs(refs: string[]): Promise<ResolvedAgentSkill[]> {\n const skills: ResolvedAgentSkill[] = [];\n\n for (const ref of refs) {\n const skill = await this.resolveSkillRef(ref);\n if (skill) {\n skills.push(skill);\n }\n }\n\n return skills;\n }\n\n private async resolveSkillRef(ref: string): Promise<ResolvedAgentSkill | undefined> {\n const resolvedPath = this.skillRefs.resolvePath(ref);\n const url = new URL(resolvedPath, this.podBaseUrl).href;\n\n try {\n const response = await this.authenticatedFetch(url);\n if (!response.ok) {\n logger.warn(`Agent skill ref not found: ${ref} (${response.status})`);\n return undefined;\n }\n\n const content = (await response.text()).trim();\n if (!content) {\n return undefined;\n }\n\n return {\n name: this.skillRefs.resolveName(ref, resolvedPath),\n content,\n };\n } catch (error) {\n logger.warn(`Failed to fetch agent skill ref ${ref}:`, error);\n return undefined;\n }\n }\n}\n\nclass AgentMcpConfig {\n public static fromMeta(value: AgentMetaRecord['mcpServers']): AgentMcpConfig {\n return new AgentMcpConfig(this.toMcpServerDefs(value));\n }\n\n private static toMcpServerDefs(value: AgentMetaRecord['mcpServers']): AgentMcpServerDef[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const defs: AgentMcpServerDef[] = [];\n for (const item of value) {\n const parsed = AgentMcpConfig.parseMcpServerDef(item);\n if (parsed) {\n defs.push(parsed);\n }\n }\n return defs;\n }\n\n private static parseMcpServerDef(value: unknown): AgentMcpServerDef | undefined {\n if (AgentMcpConfig.isAgentMcpServerDef(value)) {\n return value;\n }\n if (typeof value !== 'string' || value.trim().length === 0) {\n return undefined;\n }\n\n const trimmed = value.trim();\n if (!trimmed.startsWith('{')) {\n logger.warn(`Ignoring MCP server file ref '${value}'. Store structured MCP config in .meta instead.`);\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(trimmed);\n return AgentMcpConfig.isAgentMcpServerDef(parsed) ? parsed : undefined;\n } catch (error) {\n logger.warn('Invalid MCP server JSON in .meta:', error);\n return undefined;\n }\n }\n\n private static isAgentMcpServerDef(value: unknown): value is AgentMcpServerDef {\n return Boolean(value && typeof value === 'object' && typeof (value as AgentMcpServerDef).name === 'string');\n }\n\n private constructor(private readonly defs: AgentMcpServerDef[]) {}\n\n public toRuntimeConfig(): Record<string, McpServerConfig> {\n const result: Record<string, McpServerConfig> = {};\n\n for (const def of this.defs) {\n result[def.name] = this.toRuntimeServerConfig(def);\n }\n\n return result;\n }\n\n private toRuntimeServerConfig(def: AgentMcpServerDef): McpServerConfig {\n const config: McpServerConfig = {};\n\n if (def.transport) {\n config.type = def.transport;\n } else if (def.command) {\n config.type = 'stdio';\n } else if (def.url) {\n config.type = 'sse';\n }\n\n if (def.command) config.command = def.command;\n if (def.args) config.args = def.args;\n if (def.env) config.env = def.env;\n if (def.url) config.url = def.url;\n if (def.headers) config.headers = def.headers;\n\n return config;\n }\n}\n\nclass AgentSkillRefResolver {\n public constructor(private readonly agentId: string) {}\n\n public resolvePath(ref: string): string {\n const normalized = this.normalizePackageRef(ref);\n if (normalized.startsWith('/')) {\n if (this.hasKnownMarkdownExtension(normalized)) {\n return normalized;\n }\n return `${normalized}/SKILL.md`;\n }\n\n const relative = normalized.startsWith('.codex/skills/') || normalized.startsWith('skills/')\n ? normalized\n : `skills/${normalized}`;\n if (this.hasKnownMarkdownExtension(relative)) {\n return `/agents/${this.agentId}/${relative}`;\n }\n return `/agents/${this.agentId}/${relative}/SKILL.md`;\n }\n\n public resolveName(ref: string, resolvedPath: string): string {\n const raw = this.normalizePackageRef(ref).replace(/\\/$/, '');\n if (raw.endsWith('/SKILL.md')) {\n return this.sanitizeSkillName(raw.split('/').slice(-2, -1)[0] ?? 'skill');\n }\n\n const withoutPrefix = raw\n .replace(/^\\/+/, '')\n .replace(/^\\.codex\\/skills\\//, '')\n .replace(/^skills\\//, '');\n if (withoutPrefix && !this.hasKnownMarkdownExtension(withoutPrefix)) {\n return this.sanitizeSkillName(withoutPrefix.split('/').filter(Boolean).pop() ?? withoutPrefix);\n }\n\n const segments = resolvedPath.split('/').filter(Boolean);\n const skillIndex = segments.lastIndexOf('SKILL.md');\n return this.sanitizeSkillName(skillIndex > 0 ? segments[skillIndex - 1] : 'skill');\n }\n\n private normalizePackageRef(ref: string): string {\n return ref.replace(/^\\.\\/+/, '').replace(/^\\/+agents\\/[^/]+\\//, '/');\n }\n\n private sanitizeSkillName(name: string): string {\n return name.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'skill';\n }\n\n private hasKnownMarkdownExtension(path: string): boolean {\n return /\\.(md|markdown)$/i.test(path);\n }\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.filter((item): item is string => typeof item === 'string' && item.length > 0);\n }\n if (typeof value === 'string' && value.length > 0) {\n return [value];\n }\n return [];\n}\n"]}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* - AGENTS.md: user-editable plain Markdown guidance
|
|
6
6
|
* - .meta: RDF runtime config and references to shared skill documents
|
|
7
7
|
*
|
|
8
|
-
* The resolver combines both into
|
|
8
|
+
* The resolver combines both into non-secret agent profile data. Invocation
|
|
9
|
+
* credentials are supplied separately at the runtime boundary.
|
|
9
10
|
*/
|
|
10
11
|
import type { McpServerConfig, ExecutorType } from '../types';
|
|
11
12
|
export type AgentRuntimeKind = ExecutorType | 'codex';
|
|
@@ -69,12 +70,6 @@ export interface ResolvedAgentConfig {
|
|
|
69
70
|
systemPrompt: string;
|
|
70
71
|
/** Executor type (from Agent .meta runtimeKind) */
|
|
71
72
|
executorType: AgentRuntimeKind;
|
|
72
|
-
/** API key (from Credential) */
|
|
73
|
-
apiKey: string;
|
|
74
|
-
/** API base URL (from Credential or Provider) */
|
|
75
|
-
baseUrl?: string;
|
|
76
|
-
/** Proxy URL */
|
|
77
|
-
proxyUrl?: string;
|
|
78
73
|
/** Model name (resolved from Model URI) */
|
|
79
74
|
model?: string;
|
|
80
75
|
/** Max conversation turns */
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* - AGENTS.md: user-editable plain Markdown guidance
|
|
7
7
|
* - .meta: RDF runtime config and references to shared skill documents
|
|
8
8
|
*
|
|
9
|
-
* The resolver combines both into
|
|
9
|
+
* The resolver combines both into non-secret agent profile data. Invocation
|
|
10
|
+
* credentials are supplied separately at the runtime boundary.
|
|
10
11
|
*/
|
|
11
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
13
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agents/config/types.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agents/config/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG","sourcesContent":["/**\n * Agent Configuration Types\n *\n * Pod-hosted Agent Profile model:\n * - AGENTS.md: user-editable plain Markdown guidance\n * - .meta: RDF runtime config and references to shared skill documents\n *\n * The resolver combines both into non-secret agent profile data. Invocation\n * credentials are supplied separately at the runtime boundary.\n */\n\nimport type { McpServerConfig, ExecutorType } from '../types';\n\nexport type AgentRuntimeKind = ExecutorType | 'codex';\n\n/**\n * MCP server definition stored as structured RDF/JSON-like fields on .meta.\n */\nexport interface AgentMcpServerDef {\n name: string;\n transport?: 'stdio' | 'sse' | 'http';\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n url?: string;\n headers?: Record<string, string>;\n}\n\nexport type AgentMcpServerInput = string | AgentMcpServerDef;\n\n// ============================================\n// .meta (server-side, resolved from Pod TTL)\n// ============================================\n\n/**\n * Agent .meta record (from Pod TTL)\n */\nexport interface AgentMetaRecord {\n /** Agent ID (folder name) */\n id: string;\n name?: string;\n description?: string;\n instructions?: string;\n /** URI ref → Provider */\n provider?: string;\n /** Runtime class selection */\n runtimeKind?: AgentRuntimeKind;\n /** URI ref → Credential */\n credential?: string;\n /** URI ref → Model */\n model?: string;\n enabled?: string;\n maxTurns?: number;\n timeout?: number;\n /** ACP permission mode */\n permissionMode?: string;\n /** Tool names allowed without extra prompt-time negotiation */\n allowedTools?: string[];\n /** Tool names disabled for this agent */\n disallowedTools?: string[];\n /** Skill refs, for example skills/solid-modeling, .codex/skills/local, or /skills/shared */\n skills?: string[];\n /** Structured MCP server definitions; file refs are intentionally unsupported. */\n mcpServers?: AgentMcpServerInput[];\n}\n\n// ============================================\n// Resolved Agent Config (ready for runtime)\n// ============================================\n\n/**\n * Fully resolved agent configuration.\n * Combines AGENTS.md + .meta + resolved Pod references.\n * Ready to be passed to Agent Runtime / ACP session.\n */\nexport interface ResolvedAgentConfig {\n /** Agent ID (folder name) */\n id: string;\n /** Display name (from .meta) */\n displayName: string;\n /** Description (from .meta) */\n description?: string;\n /** System prompt (AGENTS.md body or .meta fallback) */\n systemPrompt: string;\n\n // --- Resolved from .meta ---\n /** Executor type (from Agent .meta runtimeKind) */\n executorType: AgentRuntimeKind;\n /** Model name (resolved from Model URI) */\n model?: string;\n\n /** Max conversation turns */\n maxTurns?: number;\n /** Allowed tools list */\n allowedTools?: string[];\n /** Disallowed tools list */\n disallowedTools?: string[];\n /** Permission mode */\n permissionMode?: string;\n /** MCP servers resolved from .meta structured definitions */\n mcpServers: Record<string, McpServerConfig>;\n /** Resolved skill contents (concatenated Markdown for runtimes without native skill loading) */\n skillsContent?: string;\n /** Resolved skill documents; runtime projectors choose their own native layout */\n skills: ResolvedAgentSkill[];\n\n /** Whether agent is enabled */\n enabled: boolean;\n}\n\nexport interface ResolvedAgentSkill {\n name: string;\n content: string;\n}\n"]}
|
package/dist/agents/types.d.ts
CHANGED
|
@@ -57,6 +57,22 @@ export interface AiCredential {
|
|
|
57
57
|
/** 组织 ID (OpenAI) */
|
|
58
58
|
organizationId?: string;
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Invocation-scoped AI Connection configuration.
|
|
62
|
+
*
|
|
63
|
+
* Gateway key is an Xpod-issued runtime key for the current invocation. It is
|
|
64
|
+
* not the user's raw Pod provider secret.
|
|
65
|
+
*/
|
|
66
|
+
export interface AIConnectionInvocationConfig {
|
|
67
|
+
/** Xpod AI Connection endpoint, usually the local /v1 gateway URL */
|
|
68
|
+
baseUrl: string;
|
|
69
|
+
/** Xpod-issued gateway key for this invocation */
|
|
70
|
+
gatewayKey: string;
|
|
71
|
+
/** ISO timestamp after which the invocation token must be refreshed */
|
|
72
|
+
expiresAt?: string;
|
|
73
|
+
/** Optional model routed through the gateway */
|
|
74
|
+
model?: string;
|
|
75
|
+
}
|
|
60
76
|
/**
|
|
61
77
|
* 供应商配置(Pod Provider + Agent runtime 的组合视图)
|
|
62
78
|
*/
|
|
@@ -261,6 +277,8 @@ export interface BaseExecutorOptions {
|
|
|
261
277
|
providerId: string;
|
|
262
278
|
/** 凭证 */
|
|
263
279
|
credential: AiCredential;
|
|
280
|
+
/** Invocation-scoped AI Connection runtime config */
|
|
281
|
+
aiConnection?: AIConnectionInvocationConfig;
|
|
264
282
|
/** 供应商配置(可选,用于覆盖默认值) */
|
|
265
283
|
providerConfig?: Partial<ProviderConfig>;
|
|
266
284
|
}
|
package/dist/agents/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG","sourcesContent":["/**\n * Agent Executor 类型定义\n *\n * 统一的 AI Agent 执行框架接口。\n * 供应商配置从 Pod 读取,不在代码中硬编码。\n */\n\n/**\n * 通用 MCP Server 配置类型\n *\n * 这是一个宽松的类型定义,各个 Executor 会在内部转换为对应 SDK 的具体类型。\n * 支持的配置类型:\n * - stdio: { command: string, args?: string[], env?: Record<string, string> }\n * - sse: { type: 'sse', url: string, headers?: Record<string, string> }\n * - http: { type: 'http', url: string, headers?: Record<string, string> }\n * - sdk: { type: 'sdk', name: string, instance?: McpServer }\n */\nexport type McpServerConfig = {\n type?: 'stdio' | 'sse' | 'http' | 'sdk';\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n url?: string;\n headers?: Record<string, string>;\n name?: string;\n [key: string]: unknown;\n};\n\n/**\n * 执行器类型(SDK 类型)\n *\n * 只支持有完整 Agent SDK 的供应商:\n * - codebuddy: @tencent-ai/agent-sdk\n * - claude: @anthropic-ai/claude-agent-sdk\n *\n * 不支持的原因:\n * - OpenAI: 没有完整的 Agent SDK,Codex CLI 通过 ACP runner 接入,不走这里\n * - Gemini: 没有完整的 Agent SDK,CLI core 使用 MCP 不使用 ACP\n */\nexport type ExecutorType = 'codebuddy' | 'claude';\n\n/**\n * 认证类型\n */\nexport type AuthType = 'api-key' | 'oidc';\n\n/**\n * AI 凭证(从 Pod 读取)\n */\nexport interface AiCredential {\n /** 提供商 ID(对应 Pod 中的 provider URI fragment) */\n providerId: string;\n /** API Key */\n apiKey: string;\n /** 自定义 API 端点 */\n baseUrl?: string;\n /** 代理 URL */\n proxyUrl?: string;\n /** 项目 ID (Gemini Vertex AI) */\n projectId?: string;\n /** 组织 ID (OpenAI) */\n organizationId?: string;\n}\n\n/**\n * 供应商配置(Pod Provider + Agent runtime 的组合视图)\n */\nexport interface ProviderConfig {\n /** 供应商 ID */\n id: string;\n /** 显示名称 */\n displayName: string;\n /** 运行时类型(来自 Agent .meta runtimeKind,不存储在 Provider 实体) */\n executorType: ExecutorType;\n /** API 端点 */\n baseUrl?: string;\n /** 默认模型 ID */\n defaultModel?: string;\n /** 是否启用 */\n enabled: boolean;\n}\n\n/**\n * 认证信息\n */\nexport interface AuthInfo {\n /** 是否已认证 */\n authenticated: boolean;\n /** 认证类型 */\n authType: AuthType;\n /** 供应商 ID */\n providerId: string;\n /** 执行器类型 */\n executorType: ExecutorType;\n /** 过期时间 */\n expiresAt?: Date;\n /** 账户信息 */\n account?: {\n email?: string;\n name?: string;\n };\n}\n\n/**\n * 执行器配置(基础)\n */\nexport interface ExecutorConfig {\n /** Agent 名称 */\n name: string;\n /** Agent 描述 */\n description?: string;\n /** System prompt */\n systemPrompt: string;\n /** 模型名称 */\n model?: string;\n /** 最大输出 tokens */\n maxTokens?: number;\n /** 温度参数 (0-2) */\n temperature?: number;\n /** Top-P 参数 */\n topP?: number;\n /** 工作目录 */\n workingDirectory?: string;\n /** 可用工具列表 */\n tools?: string[];\n /** 允许的工具列表(自动允许,不需要权限确认) */\n allowedTools?: string[];\n /** 禁用的工具列表 */\n disallowedTools?: string[];\n /** MCP 服务器配置 */\n mcpServers?: Record<string, McpServerConfig>;\n /** 最大轮数 */\n maxTurns?: number;\n /** 权限模式 */\n permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'dontAsk';\n}\n\n/**\n * CodeBuddy 扩展配置\n */\nexport interface CodeBuddyConfig extends ExecutorConfig {\n /** 工作目录(限制文件操作范围) */\n cwd?: string;\n /** 允许的工具列表 */\n allowedTools?: string[];\n /** 禁用的工具列表 */\n disallowedTools?: string[];\n /** MCP 服务器配置 */\n mcpServers?: Record<string, McpServerConfig>;\n /** 最大轮数 */\n maxTurns?: number;\n /** 权限模式 */\n permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions';\n}\n\n/**\n * CodeBuddy 执行选项\n */\nexport interface CodeBuddyOptions {\n /** Pod base URL */\n podBaseUrl?: string;\n /** OAuth access token(用于 MCP 访问 Pod) */\n accessToken?: string;\n /** 超时时间(毫秒) */\n timeout?: number;\n /** 额外上下文 */\n context?: Record<string, unknown>;\n}\n\n/**\n * 执行结果(基础)\n */\nexport interface ExecuteResult {\n /** 是否成功 */\n success: boolean;\n /** 结果文本 */\n result?: string;\n /** 错误信息 */\n error?: string;\n /** 结构化输出(CodeBuddy 专用) */\n structuredOutput?: unknown;\n /** 使用统计 */\n usage?: {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n durationMs: number;\n };\n}\n\n/**\n * 执行消息类型\n */\nexport type ExecuteMessage =\n | { type: 'system'; executorType: ExecutorType; model: string; tools?: string[] }\n | { type: 'text'; content: string }\n | { type: 'tool_call'; toolName: string; toolInput: unknown }\n | { type: 'tool_result'; toolName: string; result: string }\n | { type: 'error'; error: string }\n | { type: 'done'; result: ExecuteResult };\n\n/**\n * 聊天消息\n */\nexport interface ChatMessage {\n role: 'user' | 'assistant' | 'system';\n content: string;\n}\n\n/**\n * Agent 执行器接口\n *\n * 所有 AI 执行器都必须实现此接口。\n */\nexport interface IAgentExecutor {\n /** 执行器类型 */\n readonly executorType: ExecutorType;\n\n /** 供应商 ID */\n readonly providerId: string;\n\n /**\n * 获取认证类型\n */\n getAuthType(): AuthType;\n\n /**\n * 检查认证状态\n */\n checkAuthentication(): Promise<AuthInfo>;\n\n /**\n * 执行任务(流式)\n *\n * @param config 执行器配置\n * @param message 用户消息\n * @returns 异步迭代器,yield 执行过程中的消息\n */\n execute(config: ExecutorConfig, message: string): AsyncGenerator<ExecuteMessage>;\n\n /**\n * 执行任务并等待完成\n *\n * @param config 执行器配置\n * @param message 用户消息\n * @returns 执行结果\n */\n executeAndWait(config: ExecutorConfig, message: string): Promise<ExecuteResult>;\n\n /**\n * 多轮对话\n *\n * @param config 执行器配置\n * @param messages 对话历史\n * @returns 执行结果\n */\n chat(config: ExecutorConfig, messages: ChatMessage[]): Promise<ExecuteResult>;\n}\n\n/**\n * 执行器基类选项\n */\nexport interface BaseExecutorOptions {\n /** 供应商 ID */\n providerId: string;\n /** 凭证 */\n credential: AiCredential;\n /** 供应商配置(可选,用于覆盖默认值) */\n providerConfig?: Partial<ProviderConfig>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG","sourcesContent":["/**\n * Agent Executor 类型定义\n *\n * 统一的 AI Agent 执行框架接口。\n * 供应商配置从 Pod 读取,不在代码中硬编码。\n */\n\n/**\n * 通用 MCP Server 配置类型\n *\n * 这是一个宽松的类型定义,各个 Executor 会在内部转换为对应 SDK 的具体类型。\n * 支持的配置类型:\n * - stdio: { command: string, args?: string[], env?: Record<string, string> }\n * - sse: { type: 'sse', url: string, headers?: Record<string, string> }\n * - http: { type: 'http', url: string, headers?: Record<string, string> }\n * - sdk: { type: 'sdk', name: string, instance?: McpServer }\n */\nexport type McpServerConfig = {\n type?: 'stdio' | 'sse' | 'http' | 'sdk';\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n url?: string;\n headers?: Record<string, string>;\n name?: string;\n [key: string]: unknown;\n};\n\n/**\n * 执行器类型(SDK 类型)\n *\n * 只支持有完整 Agent SDK 的供应商:\n * - codebuddy: @tencent-ai/agent-sdk\n * - claude: @anthropic-ai/claude-agent-sdk\n *\n * 不支持的原因:\n * - OpenAI: 没有完整的 Agent SDK,Codex CLI 通过 ACP runner 接入,不走这里\n * - Gemini: 没有完整的 Agent SDK,CLI core 使用 MCP 不使用 ACP\n */\nexport type ExecutorType = 'codebuddy' | 'claude';\n\n/**\n * 认证类型\n */\nexport type AuthType = 'api-key' | 'oidc';\n\n/**\n * AI 凭证(从 Pod 读取)\n */\nexport interface AiCredential {\n /** 提供商 ID(对应 Pod 中的 provider URI fragment) */\n providerId: string;\n /** API Key */\n apiKey: string;\n /** 自定义 API 端点 */\n baseUrl?: string;\n /** 代理 URL */\n proxyUrl?: string;\n /** 项目 ID (Gemini Vertex AI) */\n projectId?: string;\n /** 组织 ID (OpenAI) */\n organizationId?: string;\n}\n\n/**\n * Invocation-scoped AI Connection configuration.\n *\n * Gateway key is an Xpod-issued runtime key for the current invocation. It is\n * not the user's raw Pod provider secret.\n */\nexport interface AIConnectionInvocationConfig {\n /** Xpod AI Connection endpoint, usually the local /v1 gateway URL */\n baseUrl: string;\n /** Xpod-issued gateway key for this invocation */\n gatewayKey: string;\n /** ISO timestamp after which the invocation token must be refreshed */\n expiresAt?: string;\n /** Optional model routed through the gateway */\n model?: string;\n}\n\n/**\n * 供应商配置(Pod Provider + Agent runtime 的组合视图)\n */\nexport interface ProviderConfig {\n /** 供应商 ID */\n id: string;\n /** 显示名称 */\n displayName: string;\n /** 运行时类型(来自 Agent .meta runtimeKind,不存储在 Provider 实体) */\n executorType: ExecutorType;\n /** API 端点 */\n baseUrl?: string;\n /** 默认模型 ID */\n defaultModel?: string;\n /** 是否启用 */\n enabled: boolean;\n}\n\n/**\n * 认证信息\n */\nexport interface AuthInfo {\n /** 是否已认证 */\n authenticated: boolean;\n /** 认证类型 */\n authType: AuthType;\n /** 供应商 ID */\n providerId: string;\n /** 执行器类型 */\n executorType: ExecutorType;\n /** 过期时间 */\n expiresAt?: Date;\n /** 账户信息 */\n account?: {\n email?: string;\n name?: string;\n };\n}\n\n/**\n * 执行器配置(基础)\n */\nexport interface ExecutorConfig {\n /** Agent 名称 */\n name: string;\n /** Agent 描述 */\n description?: string;\n /** System prompt */\n systemPrompt: string;\n /** 模型名称 */\n model?: string;\n /** 最大输出 tokens */\n maxTokens?: number;\n /** 温度参数 (0-2) */\n temperature?: number;\n /** Top-P 参数 */\n topP?: number;\n /** 工作目录 */\n workingDirectory?: string;\n /** 可用工具列表 */\n tools?: string[];\n /** 允许的工具列表(自动允许,不需要权限确认) */\n allowedTools?: string[];\n /** 禁用的工具列表 */\n disallowedTools?: string[];\n /** MCP 服务器配置 */\n mcpServers?: Record<string, McpServerConfig>;\n /** 最大轮数 */\n maxTurns?: number;\n /** 权限模式 */\n permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'dontAsk';\n}\n\n/**\n * CodeBuddy 扩展配置\n */\nexport interface CodeBuddyConfig extends ExecutorConfig {\n /** 工作目录(限制文件操作范围) */\n cwd?: string;\n /** 允许的工具列表 */\n allowedTools?: string[];\n /** 禁用的工具列表 */\n disallowedTools?: string[];\n /** MCP 服务器配置 */\n mcpServers?: Record<string, McpServerConfig>;\n /** 最大轮数 */\n maxTurns?: number;\n /** 权限模式 */\n permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions';\n}\n\n/**\n * CodeBuddy 执行选项\n */\nexport interface CodeBuddyOptions {\n /** Pod base URL */\n podBaseUrl?: string;\n /** OAuth access token(用于 MCP 访问 Pod) */\n accessToken?: string;\n /** 超时时间(毫秒) */\n timeout?: number;\n /** 额外上下文 */\n context?: Record<string, unknown>;\n}\n\n/**\n * 执行结果(基础)\n */\nexport interface ExecuteResult {\n /** 是否成功 */\n success: boolean;\n /** 结果文本 */\n result?: string;\n /** 错误信息 */\n error?: string;\n /** 结构化输出(CodeBuddy 专用) */\n structuredOutput?: unknown;\n /** 使用统计 */\n usage?: {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n durationMs: number;\n };\n}\n\n/**\n * 执行消息类型\n */\nexport type ExecuteMessage =\n | { type: 'system'; executorType: ExecutorType; model: string; tools?: string[] }\n | { type: 'text'; content: string }\n | { type: 'tool_call'; toolName: string; toolInput: unknown }\n | { type: 'tool_result'; toolName: string; result: string }\n | { type: 'error'; error: string }\n | { type: 'done'; result: ExecuteResult };\n\n/**\n * 聊天消息\n */\nexport interface ChatMessage {\n role: 'user' | 'assistant' | 'system';\n content: string;\n}\n\n/**\n * Agent 执行器接口\n *\n * 所有 AI 执行器都必须实现此接口。\n */\nexport interface IAgentExecutor {\n /** 执行器类型 */\n readonly executorType: ExecutorType;\n\n /** 供应商 ID */\n readonly providerId: string;\n\n /**\n * 获取认证类型\n */\n getAuthType(): AuthType;\n\n /**\n * 检查认证状态\n */\n checkAuthentication(): Promise<AuthInfo>;\n\n /**\n * 执行任务(流式)\n *\n * @param config 执行器配置\n * @param message 用户消息\n * @returns 异步迭代器,yield 执行过程中的消息\n */\n execute(config: ExecutorConfig, message: string): AsyncGenerator<ExecuteMessage>;\n\n /**\n * 执行任务并等待完成\n *\n * @param config 执行器配置\n * @param message 用户消息\n * @returns 执行结果\n */\n executeAndWait(config: ExecutorConfig, message: string): Promise<ExecuteResult>;\n\n /**\n * 多轮对话\n *\n * @param config 执行器配置\n * @param messages 对话历史\n * @returns 执行结果\n */\n chat(config: ExecutorConfig, messages: ChatMessage[]): Promise<ExecuteResult>;\n}\n\n/**\n * 执行器基类选项\n */\nexport interface BaseExecutorOptions {\n /** 供应商 ID */\n providerId: string;\n /** 凭证 */\n credential: AiCredential;\n /** Invocation-scoped AI Connection runtime config */\n aiConnection?: AIConnectionInvocationConfig;\n /** 供应商配置(可选,用于覆盖默认值) */\n providerConfig?: Partial<ProviderConfig>;\n}\n"]}
|
package/dist/ai/schema/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ai/schema/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH;;GAEG;AACH,IAAY,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ai/schema/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH;;GAEG;AACH,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,oCAAuB,CAAA;IACvB,0BAAa,CAAA;IACb,sCAAyB,CAAA;IACzB,8BAAiB,CAAA;AACnB,CAAC,EALW,SAAS,yBAAT,SAAS,QAKpB;AAED;;GAEG;AACH,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,sCAAuB,CAAA;IACvB,wCAAyB,CAAA;AAC3B,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAED;;GAEG;AACH,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,8CAA2B,CAAA;IAC3B,0CAAuB,CAAA;IACvB,oCAAiB,CAAA;AACnB,CAAC,EALW,eAAe,+BAAf,eAAe,QAK1B;AAED;;GAEG;AACH,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,gDAA2B,CAAA;IAC3B,4CAAuB,CAAA;IACvB,wCAAmB,CAAA;AACrB,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAED;;GAEG;AACH,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iCAAa,CAAA;IACb,qCAAiB,CAAA;AACnB,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AAED;;GAEG;AACH,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,8CAA2B,CAAA;IAC3B,0CAAuB,CAAA;IACvB,oCAAiB,CAAA;IACjB,0CAAuB,CAAA;AACzB,CAAC,EALW,eAAe,+BAAf,eAAe,QAK1B","sourcesContent":["/**\n * AI Schema 类型定义\n */\n\n/**\n * 模型类型\n */\nexport enum ModelType {\n EMBEDDING = 'embedding',\n CHAT = 'chat',\n COMPLETION = 'completion',\n READER = 'reader',\n}\n\n/**\n * 模型状态\n */\nexport enum ModelStatus {\n ACTIVE = 'active',\n MIGRATING = 'migrating',\n DEPRECATED = 'deprecated',\n}\n\n/**\n * 迁移状态\n */\nexport enum MigrationStatus {\n IDLE = 'idle',\n IN_PROGRESS = 'in_progress',\n COMPLETED = 'completed',\n FAILED = 'failed',\n}\n\n/**\n * Vector Store 状态\n */\nexport enum VectorStoreStatus {\n IN_PROGRESS = 'in_progress',\n COMPLETED = 'completed',\n EXPIRED = 'expired',\n}\n\n/**\n * Chunking 策略\n */\nexport enum ChunkingStrategy {\n AUTO = 'auto',\n STATIC = 'static',\n}\n\n/**\n * 文件索引状态\n */\nexport enum FileIndexStatus {\n IN_PROGRESS = 'in_progress',\n COMPLETED = 'completed',\n FAILED = 'failed',\n CANCELLED = 'cancelled',\n}\n"]}
|
|
@@ -3,5 +3,7 @@ import type { AiCredential } from './types';
|
|
|
3
3
|
* 凭据读取器抽象基类
|
|
4
4
|
*/
|
|
5
5
|
export declare abstract class CredentialReader {
|
|
6
|
-
abstract getAiCredential(podBaseUrl: string, providerId: string, authenticatedFetch: typeof fetch, webId?: string
|
|
6
|
+
abstract getAiCredential(podBaseUrl: string, providerId: string, authenticatedFetch: typeof fetch, webId?: string, options?: {
|
|
7
|
+
credentialId?: string;
|
|
8
|
+
}): Promise<AiCredential | null>;
|
|
7
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CredentialReader.js","sourceRoot":"","sources":["../../../src/ai/service/CredentialReader.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAsB,gBAAgB;
|
|
1
|
+
{"version":3,"file":"CredentialReader.js","sourceRoot":"","sources":["../../../src/ai/service/CredentialReader.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAsB,gBAAgB;CAQrC;AARD,4CAQC","sourcesContent":["import type { AiCredential } from './types';\n\n/**\n * 凭据读取器抽象基类\n */\nexport abstract class CredentialReader {\n public abstract getAiCredential(\n podBaseUrl: string,\n providerId: string,\n authenticatedFetch: typeof fetch,\n webId?: string,\n options?: { credentialId?: string },\n ): Promise<AiCredential | null>;\n}\n"]}
|
|
@@ -2,5 +2,7 @@ import { CredentialReader } from './CredentialReader';
|
|
|
2
2
|
import type { AiCredential } from './types';
|
|
3
3
|
export declare class CredentialReaderImpl extends CredentialReader {
|
|
4
4
|
protected readonly logger: import("global-logger-factory").Logger<unknown>;
|
|
5
|
-
getAiCredential(podBaseUrl: string, providerId: string, authenticatedFetch: typeof fetch, webId?: string
|
|
5
|
+
getAiCredential(podBaseUrl: string, providerId: string, authenticatedFetch: typeof fetch, webId?: string, options?: {
|
|
6
|
+
credentialId?: string;
|
|
7
|
+
}): Promise<AiCredential | null>;
|
|
6
8
|
}
|
|
@@ -17,7 +17,7 @@ class CredentialReaderImpl extends CredentialReader_1.CredentialReader {
|
|
|
17
17
|
super(...arguments);
|
|
18
18
|
this.logger = (0, global_logger_factory_1.getLoggerFor)(this);
|
|
19
19
|
}
|
|
20
|
-
async getAiCredential(podBaseUrl, providerId, authenticatedFetch, webId) {
|
|
20
|
+
async getAiCredential(podBaseUrl, providerId, authenticatedFetch, webId, options = {}) {
|
|
21
21
|
try {
|
|
22
22
|
const session = {
|
|
23
23
|
info: { isLoggedIn: true, webId },
|
|
@@ -28,7 +28,10 @@ class CredentialReaderImpl extends CredentialReader_1.CredentialReader {
|
|
|
28
28
|
where: (0, drizzle_solid_1.and)((0, drizzle_solid_1.eq)(tables_1.Credential.service, types_1.ServiceType.AI), (0, drizzle_solid_1.eq)(tables_1.Credential.status, types_1.CredentialStatus.ACTIVE)),
|
|
29
29
|
});
|
|
30
30
|
const providers = await db.query.provider.findMany();
|
|
31
|
-
const
|
|
31
|
+
const credentialRows = options.credentialId
|
|
32
|
+
? credentials.filter((credential) => matchesCredentialId(credential, options.credentialId))
|
|
33
|
+
: credentials;
|
|
34
|
+
const selection = (0, models_1.selectAIConfigCredential)(providerId, credentialRows, providers);
|
|
32
35
|
if (!selection) {
|
|
33
36
|
this.logger.debug(`No active credential found for provider: ${providerId}`);
|
|
34
37
|
return null;
|
|
@@ -36,6 +39,7 @@ class CredentialReaderImpl extends CredentialReader_1.CredentialReader {
|
|
|
36
39
|
return {
|
|
37
40
|
provider: selection.providerId,
|
|
38
41
|
apiKey: selection.apiKey,
|
|
42
|
+
credentialId: selection.credentialId,
|
|
39
43
|
baseUrl: selection.baseUrl,
|
|
40
44
|
proxyUrl: selection.proxyUrl,
|
|
41
45
|
};
|
|
@@ -47,4 +51,22 @@ class CredentialReaderImpl extends CredentialReader_1.CredentialReader {
|
|
|
47
51
|
}
|
|
48
52
|
}
|
|
49
53
|
exports.CredentialReaderImpl = CredentialReaderImpl;
|
|
54
|
+
function matchesCredentialId(credential, requestedId) {
|
|
55
|
+
if (!requestedId)
|
|
56
|
+
return true;
|
|
57
|
+
const normalizedRequested = normalizeCredentialId(requestedId);
|
|
58
|
+
return normalizeCredentialId(credential?.id) === normalizedRequested
|
|
59
|
+
|| normalizeCredentialId(credential?.['@id']) === normalizedRequested;
|
|
60
|
+
}
|
|
61
|
+
function normalizeCredentialId(value) {
|
|
62
|
+
if (typeof value !== 'string')
|
|
63
|
+
return '';
|
|
64
|
+
const trimmed = value.trim();
|
|
65
|
+
if (!trimmed)
|
|
66
|
+
return '';
|
|
67
|
+
if (trimmed.includes('#'))
|
|
68
|
+
return trimmed.split('#').pop() || trimmed;
|
|
69
|
+
const clean = trimmed.replace(/\/$/u, '');
|
|
70
|
+
return clean.split('/').filter(Boolean).pop() ?? clean;
|
|
71
|
+
}
|
|
50
72
|
//# sourceMappingURL=CredentialReaderImpl.js.map
|