@undefineds.co/xpod 0.3.58 → 0.3.61
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/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 +32 -12
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenIdentity.js","sourceRoot":"","sources":["../../../src/api/auth/TokenIdentity.ts"],"names":[],"mappings":";;AAMA,gGAUC;AAVD,SAAgB,0CAA0C,CAAC,QAA+B;IACxF,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,0BAA0B,CAAC,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAW;IAC7C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA4B,CAAC;QAC5G,OAAO,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC","sourcesContent":["export type TokenIdentityResponse = {\n access_token?: unknown;\n webid?: unknown;\n webId?: unknown;\n};\n\nexport function extractAuthoritativeWebIdFromTokenResponse(response: TokenIdentityResponse): string | undefined {\n const bodyWebId = extractString(response.webid) ?? extractString(response.webId);\n if (bodyWebId) {\n return bodyWebId;\n }\n const accessToken = extractString(response.access_token);\n if (!accessToken) {\n return undefined;\n }\n return extractWebIdFromJwtPayload(accessToken);\n}\n\nfunction extractWebIdFromJwtPayload(jwt: string): string | undefined {\n try {\n const parts = jwt.split('.');\n if (parts.length !== 3 || !parts[1]) {\n return undefined;\n }\n const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf-8')) as Record<string, unknown>;\n return extractString(payload.webid) ?? extractString(payload.webId) ?? extractString(payload.sub);\n } catch {\n return undefined;\n }\n}\n\nfunction extractString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n"]}
|
|
@@ -1,27 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AI Provider Adapter
|
|
3
|
-
*
|
|
4
|
-
* Adapts existing AI services to the ChatKit AiProvider interface.
|
|
5
|
-
* Includes 429 rate limit handling with credential status backfill.
|
|
6
|
-
*/
|
|
7
1
|
import type { AiProvider } from './service';
|
|
8
2
|
import type { PodChatKitStore } from './pod-store';
|
|
3
|
+
import type { AiGatewayService } from '../ai-gateway/AiGatewayService';
|
|
9
4
|
export interface VercelAiProviderOptions {
|
|
10
5
|
store: PodChatKitStore;
|
|
6
|
+
aiGatewayService?: Pick<AiGatewayService, 'execute'>;
|
|
11
7
|
}
|
|
12
8
|
/**
|
|
13
|
-
*
|
|
9
|
+
* @deprecated Direct ChatKit AI fallback adapter.
|
|
14
10
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
11
|
+
* Product ChatKit traffic normally uses Agent Runtime. When direct fallback is
|
|
12
|
+
* explicitly enabled for tests/dev harnesses, this adapter still executes via
|
|
13
|
+
* AI Connection instead of reopening Pod provider credentials or platform env
|
|
14
|
+
* API-key fallbacks.
|
|
17
15
|
*/
|
|
18
16
|
export declare class VercelAiProvider implements AiProvider {
|
|
19
17
|
private readonly logger;
|
|
20
|
-
private readonly
|
|
18
|
+
private readonly aiGatewayService?;
|
|
21
19
|
constructor(options: VercelAiProviderOptions);
|
|
22
|
-
/**
|
|
23
|
-
* Stream a response for the given messages
|
|
24
|
-
*/
|
|
25
20
|
streamResponse(messages: Array<{
|
|
26
21
|
role: 'system' | 'user' | 'assistant';
|
|
27
22
|
content: string;
|
|
@@ -31,14 +26,5 @@ export declare class VercelAiProvider implements AiProvider {
|
|
|
31
26
|
maxTokens?: number;
|
|
32
27
|
context?: unknown;
|
|
33
28
|
}): AsyncIterable<string>;
|
|
34
|
-
|
|
35
|
-
* Check if error is a 429 rate limit error
|
|
36
|
-
*/
|
|
37
|
-
private isRateLimitError;
|
|
38
|
-
/**
|
|
39
|
-
* Handle 429 rate limit error by updating credential status
|
|
40
|
-
*/
|
|
41
|
-
private handleRateLimitError;
|
|
42
|
-
private getProviderConfig;
|
|
43
|
-
private createProvider;
|
|
29
|
+
private requireAiGatewayService;
|
|
44
30
|
}
|
|
@@ -1,174 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AI Provider Adapter
|
|
4
|
-
*
|
|
5
|
-
* Adapts existing AI services to the ChatKit AiProvider interface.
|
|
6
|
-
* Includes 429 rate limit handling with credential status backfill.
|
|
7
|
-
*/
|
|
8
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
3
|
exports.VercelAiProvider = void 0;
|
|
10
|
-
const openai_1 = require("@ai-sdk/openai");
|
|
11
|
-
const ai_1 = require("ai");
|
|
12
4
|
const global_logger_factory_1 = require("global-logger-factory");
|
|
13
|
-
const undici_1 = require("undici");
|
|
14
|
-
const AuthContext_1 = require("../auth/AuthContext");
|
|
15
|
-
const types_1 = require("../../credential/schema/types");
|
|
16
|
-
const provider_registry_1 = require("../service/provider-registry");
|
|
17
|
-
const platform_ai_config_1 = require("../service/platform-ai-config");
|
|
18
|
-
// Create a proxy-aware fetch function
|
|
19
|
-
function createProxyFetch(proxyUrl) {
|
|
20
|
-
const agent = new undici_1.ProxyAgent(proxyUrl);
|
|
21
|
-
return (url, init) => fetch(url, { ...init, dispatcher: agent });
|
|
22
|
-
}
|
|
23
5
|
/**
|
|
24
|
-
*
|
|
6
|
+
* @deprecated Direct ChatKit AI fallback adapter.
|
|
25
7
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
8
|
+
* Product ChatKit traffic normally uses Agent Runtime. When direct fallback is
|
|
9
|
+
* explicitly enabled for tests/dev harnesses, this adapter still executes via
|
|
10
|
+
* AI Connection instead of reopening Pod provider credentials or platform env
|
|
11
|
+
* API-key fallbacks.
|
|
28
12
|
*/
|
|
29
13
|
class VercelAiProvider {
|
|
30
14
|
constructor(options) {
|
|
31
15
|
this.logger = (0, global_logger_factory_1.getLoggerFor)(this);
|
|
32
|
-
|
|
16
|
+
void options.store;
|
|
17
|
+
this.aiGatewayService = options.aiGatewayService;
|
|
33
18
|
}
|
|
34
|
-
/**
|
|
35
|
-
* Stream a response for the given messages
|
|
36
|
-
*/
|
|
37
19
|
async *streamResponse(messages, options) {
|
|
38
|
-
|
|
20
|
+
const gateway = this.requireAiGatewayService();
|
|
39
21
|
const context = options?.context;
|
|
40
22
|
const auth = context?.auth;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
1. Help users with various tasks
|
|
60
|
-
2. Use user's configured provider/model to respond consistently
|
|
61
|
-
|
|
62
|
-
Current AI Provider: ${config.baseURL.includes('openrouter') ? 'OpenRouter (Free)' : 'Custom'}
|
|
63
|
-
Model: ${model}
|
|
64
|
-
`,
|
|
65
|
-
});
|
|
66
|
-
// Stream text chunks
|
|
67
|
-
for await (const chunk of result.textStream) {
|
|
68
|
-
yield chunk;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
// Handle 429 rate limit errors
|
|
73
|
-
if (this.isRateLimitError(error)) {
|
|
74
|
-
await this.handleRateLimitError(error, context, config.credentialId);
|
|
23
|
+
if (!auth) {
|
|
24
|
+
throw new Error('AuthContext is required for AI Connection inference');
|
|
25
|
+
}
|
|
26
|
+
this.logger.debug(`Streaming direct ChatKit fallback via AI Connection, model: ${options?.model ?? ''}`);
|
|
27
|
+
const execution = await gateway.execute({
|
|
28
|
+
auth,
|
|
29
|
+
protocol: 'chatCompletions',
|
|
30
|
+
body: {
|
|
31
|
+
model: options?.model ?? '',
|
|
32
|
+
messages,
|
|
33
|
+
stream: true,
|
|
34
|
+
...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),
|
|
35
|
+
...(options?.maxTokens !== undefined ? { max_tokens: options.maxTokens } : {}),
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
for await (const event of execution.events) {
|
|
39
|
+
if (event.type === 'text.delta') {
|
|
40
|
+
yield event.text;
|
|
75
41
|
}
|
|
76
|
-
throw error;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Check if error is a 429 rate limit error
|
|
81
|
-
*/
|
|
82
|
-
isRateLimitError(error) {
|
|
83
|
-
if (error instanceof ai_1.APICallError) {
|
|
84
|
-
return error.statusCode === 429;
|
|
85
|
-
}
|
|
86
|
-
if (error && typeof error === 'object') {
|
|
87
|
-
const err = error;
|
|
88
|
-
return err.status === 429 || err.statusCode === 429 || err.code === 'rate_limit_exceeded';
|
|
89
|
-
}
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Handle 429 rate limit error by updating credential status
|
|
94
|
-
*/
|
|
95
|
-
async handleRateLimitError(error, context, credentialId) {
|
|
96
|
-
if (!context || !credentialId) {
|
|
97
|
-
this.logger.debug('Cannot update credential status: missing context or credentialId');
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
let rateLimitResetAt;
|
|
101
|
-
if (error instanceof ai_1.APICallError && error.responseHeaders) {
|
|
102
|
-
const retryAfter = error.responseHeaders['retry-after'];
|
|
103
|
-
if (retryAfter) {
|
|
104
|
-
const seconds = parseInt(retryAfter, 10);
|
|
105
|
-
if (!isNaN(seconds)) {
|
|
106
|
-
rateLimitResetAt = new Date(Date.now() + seconds * 1000);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
const date = new Date(retryAfter);
|
|
110
|
-
if (!isNaN(date.getTime())) {
|
|
111
|
-
rateLimitResetAt = date;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (!rateLimitResetAt) {
|
|
117
|
-
rateLimitResetAt = new Date(Date.now() + 60 * 1000);
|
|
118
|
-
}
|
|
119
|
-
this.logger.warn(`Rate limited for credential ${credentialId}, reset at ${rateLimitResetAt.toISOString()}`);
|
|
120
|
-
try {
|
|
121
|
-
await this.store.updateCredentialStatus(context, credentialId, types_1.CredentialStatus.RATE_LIMITED, {
|
|
122
|
-
rateLimitResetAt,
|
|
123
|
-
incrementFailCount: true,
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
catch (updateError) {
|
|
127
|
-
this.logger.error(`Failed to update credential status: ${updateError}`);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
async getProviderConfig(context) {
|
|
131
|
-
let config;
|
|
132
|
-
if (context) {
|
|
133
|
-
try {
|
|
134
|
-
config = await this.store.getAiConfig(context);
|
|
135
|
-
this.logger.debug(`Pod config: ${JSON.stringify(config)}`);
|
|
136
|
-
}
|
|
137
|
-
catch (error) {
|
|
138
|
-
this.logger.debug(`Failed to get Pod config: ${error}`);
|
|
139
|
-
config = undefined;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
// 1. 用户 Pod 有配置,优先使用
|
|
143
|
-
if (config?.apiKey) {
|
|
144
|
-
return {
|
|
145
|
-
baseURL: config.baseUrl || (0, provider_registry_1.getDefaultBaseUrl)(),
|
|
146
|
-
apiKey: config.apiKey,
|
|
147
|
-
proxy: config.proxyUrl,
|
|
148
|
-
defaultModel: config.defaultModel,
|
|
149
|
-
credentialId: config.credentialId,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
// 2. 平台 Provider
|
|
153
|
-
const platformBase = (0, platform_ai_config_1.getPlatformApiBaseUrl)();
|
|
154
|
-
if (platformBase) {
|
|
155
|
-
return {
|
|
156
|
-
baseURL: platformBase,
|
|
157
|
-
apiKey: (0, platform_ai_config_1.getPlatformApiKey)(),
|
|
158
|
-
};
|
|
159
42
|
}
|
|
160
|
-
// 3. 无配置
|
|
161
|
-
this.logger.debug('No valid AI config found');
|
|
162
|
-
return null;
|
|
163
43
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
const options = { baseURL, apiKey };
|
|
168
|
-
if (proxy) {
|
|
169
|
-
options.fetch = createProxyFetch(proxy);
|
|
44
|
+
requireAiGatewayService() {
|
|
45
|
+
if (!this.aiGatewayService) {
|
|
46
|
+
throw new Error('AiGatewayService is required for ChatKit direct AI fallback');
|
|
170
47
|
}
|
|
171
|
-
return
|
|
48
|
+
return this.aiGatewayService;
|
|
172
49
|
}
|
|
173
50
|
}
|
|
174
51
|
exports.VercelAiProvider = VercelAiProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-provider.js","sourceRoot":"","sources":["../../../src/api/chatkit/ai-provider.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AI Provider Adapter\n *\n * Adapts existing AI services to the ChatKit AiProvider interface.\n * Includes 429 rate limit handling with credential status backfill.\n */\n\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { streamText, APICallError } from 'ai';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { ProxyAgent } from 'undici';\nimport type { AiProvider } from './service';\nimport type { StoreContext } from './store';\nimport type { PodChatKitStore } from './pod-store';\nimport type { AuthContext } from '../auth/AuthContext';\nimport { getWebId, getAccountId } from '../auth/AuthContext';\nimport { CredentialStatus } from '../../credential/schema/types';\nimport { getDefaultBaseUrl } from '../service/provider-registry';\nimport { getPlatformApiBaseUrl, getPlatformApiKey, getPlatformDefaultModel } from '../service/platform-ai-config';\n\n// Create a proxy-aware fetch function\nfunction createProxyFetch(proxyUrl: string): typeof fetch {\n const agent = new ProxyAgent(proxyUrl);\n return (url, init) => fetch(url, { ...init, dispatcher: agent } as any);\n}\n\nexport interface VercelAiProviderOptions {\n store: PodChatKitStore;\n}\n\n/**\n * Vercel AI SDK based provider\n *\n * Uses PodChatKitStore to get AI provider settings from Pod.\n * Reuses the same Session cached in StoreContext.\n */\nexport class VercelAiProvider implements AiProvider {\n private readonly logger = getLoggerFor(this);\n private readonly store: PodChatKitStore;\n\n public constructor(options: VercelAiProviderOptions) {\n this.store = options.store;\n }\n\n /**\n * Stream a response for the given messages\n */\n public async *streamResponse(\n messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }>,\n options?: {\n model?: string;\n temperature?: number;\n maxTokens?: number;\n context?: unknown;\n },\n ): AsyncIterable<string> {\n // Get context (contains auth and cached session)\n const context = options?.context as StoreContext | undefined;\n const auth = context?.auth as AuthContext | undefined;\n const userId = auth ? (getWebId(auth) ?? getAccountId(auth) ?? 'anonymous') : 'anonymous';\n\n // 从 Pod 获取配置\n const config = await this.getProviderConfig(context);\n\n if (!config) {\n throw new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n }\n\n const model = options?.model ?? config.defaultModel ?? getPlatformDefaultModel();\n\n this.logger.debug(`Streaming response for ${userId}, model: ${model}`);\n\n const provider = this.createProvider(config);\n\n try {\n const result = streamText({\n model: provider.chat(model),\n messages: messages as any,\n temperature: options?.temperature,\n maxTokens: options?.maxTokens,\n system: `You are a helpful AI assistant running on Xpod (a Solid Pod-based platform).\n\nYour capabilities:\n1. Help users with various tasks\n2. Use user's configured provider/model to respond consistently\n\nCurrent AI Provider: ${config.baseURL.includes('openrouter') ? 'OpenRouter (Free)' : 'Custom'}\nModel: ${model}\n`,\n } as any);\n\n // Stream text chunks\n for await (const chunk of result.textStream) {\n yield chunk;\n }\n } catch (error) {\n // Handle 429 rate limit errors\n if (this.isRateLimitError(error)) {\n await this.handleRateLimitError(error, context, config.credentialId);\n }\n throw error;\n }\n }\n\n /**\n * Check if error is a 429 rate limit error\n */\n private isRateLimitError(error: unknown): boolean {\n if (error instanceof APICallError) {\n return error.statusCode === 429;\n }\n if (error && typeof error === 'object') {\n const err = error as any;\n return err.status === 429 || err.statusCode === 429 || err.code === 'rate_limit_exceeded';\n }\n return false;\n }\n\n /**\n * Handle 429 rate limit error by updating credential status\n */\n private async handleRateLimitError(\n error: unknown,\n context: StoreContext | undefined,\n credentialId: string | undefined,\n ): Promise<void> {\n if (!context || !credentialId) {\n this.logger.debug('Cannot update credential status: missing context or credentialId');\n return;\n }\n\n let rateLimitResetAt: Date | undefined;\n if (error instanceof APICallError && error.responseHeaders) {\n const retryAfter = error.responseHeaders['retry-after'];\n if (retryAfter) {\n const seconds = parseInt(retryAfter, 10);\n if (!isNaN(seconds)) {\n rateLimitResetAt = new Date(Date.now() + seconds * 1000);\n } else {\n const date = new Date(retryAfter);\n if (!isNaN(date.getTime())) {\n rateLimitResetAt = date;\n }\n }\n }\n }\n\n if (!rateLimitResetAt) {\n rateLimitResetAt = new Date(Date.now() + 60 * 1000);\n }\n\n this.logger.warn(`Rate limited for credential ${credentialId}, reset at ${rateLimitResetAt.toISOString()}`);\n\n try {\n await this.store.updateCredentialStatus(context, credentialId, CredentialStatus.RATE_LIMITED, {\n rateLimitResetAt,\n incrementFailCount: true,\n });\n } catch (updateError) {\n this.logger.error(`Failed to update credential status: ${updateError}`);\n }\n }\n\n private async getProviderConfig(\n context: StoreContext | undefined,\n ): Promise<{\n baseURL: string;\n apiKey: string;\n proxy?: string;\n defaultModel?: string;\n credentialId?: string;\n } | null> {\n let config: Awaited<ReturnType<PodChatKitStore['getAiConfig']>> | undefined;\n\n if (context) {\n try {\n config = await this.store.getAiConfig(context);\n this.logger.debug(`Pod config: ${JSON.stringify(config)}`);\n } catch (error) {\n this.logger.debug(`Failed to get Pod config: ${error}`);\n config = undefined;\n }\n }\n\n // 1. 用户 Pod 有配置,优先使用\n if (config?.apiKey) {\n return {\n baseURL: config.baseUrl || getDefaultBaseUrl(),\n apiKey: config.apiKey,\n proxy: config.proxyUrl,\n defaultModel: config.defaultModel,\n credentialId: config.credentialId,\n };\n }\n\n // 2. 平台 Provider\n const platformBase = getPlatformApiBaseUrl();\n if (platformBase) {\n return {\n baseURL: platformBase,\n apiKey: getPlatformApiKey(),\n };\n }\n\n // 3. 无配置\n this.logger.debug('No valid AI config found');\n return null;\n }\n\n private createProvider(config: { baseURL: string; apiKey: string; proxy?: string }) {\n const { baseURL, apiKey, proxy } = config;\n\n this.logger.debug(`Using AI Provider: ${baseURL} (proxy: ${proxy || 'none'})`);\n\n const options: any = { baseURL, apiKey };\n if (proxy) {\n options.fetch = createProxyFetch(proxy);\n }\n\n return createOpenAI(options);\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ai-provider.js","sourceRoot":"","sources":["../../../src/api/chatkit/ai-provider.ts"],"names":[],"mappings":";;;AAAA,iEAAqD;AAYrD;;;;;;;GAOG;AACH,MAAa,gBAAgB;IAI3B,YAAmB,OAAgC;QAHlC,WAAM,GAAG,IAAA,oCAAY,EAAC,IAAI,CAAC,CAAC;QAI3C,KAAK,OAAO,CAAC,KAAK,CAAC;QACnB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,CAAC,cAAc,CAC1B,QAA2E,EAC3E,OAKC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,EAAE,OAAmC,CAAC;QAC7D,MAAM,IAAI,GAAG,OAAO,EAAE,IAA+B,CAAC;QACtD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;QACzG,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;YACtC,IAAI;YACJ,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE;gBACJ,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;gBAC3B,QAAQ;gBACR,MAAM,EAAE,IAAI;gBACZ,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/E;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,uBAAuB;QAC7B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAnDD,4CAmDC","sourcesContent":["import { getLoggerFor } from 'global-logger-factory';\nimport type { AiProvider } from './service';\nimport type { StoreContext } from './store';\nimport type { PodChatKitStore } from './pod-store';\nimport type { AuthContext } from '../auth/AuthContext';\nimport type { AiGatewayService } from '../ai-gateway/AiGatewayService';\n\nexport interface VercelAiProviderOptions {\n store: PodChatKitStore;\n aiGatewayService?: Pick<AiGatewayService, 'execute'>;\n}\n\n/**\n * @deprecated Direct ChatKit AI fallback adapter.\n *\n * Product ChatKit traffic normally uses Agent Runtime. When direct fallback is\n * explicitly enabled for tests/dev harnesses, this adapter still executes via\n * AI Connection instead of reopening Pod provider credentials or platform env\n * API-key fallbacks.\n */\nexport class VercelAiProvider implements AiProvider {\n private readonly logger = getLoggerFor(this);\n private readonly aiGatewayService?: Pick<AiGatewayService, 'execute'>;\n\n public constructor(options: VercelAiProviderOptions) {\n void options.store;\n this.aiGatewayService = options.aiGatewayService;\n }\n\n public async *streamResponse(\n messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }>,\n options?: {\n model?: string;\n temperature?: number;\n maxTokens?: number;\n context?: unknown;\n },\n ): AsyncIterable<string> {\n const gateway = this.requireAiGatewayService();\n const context = options?.context as StoreContext | undefined;\n const auth = context?.auth as AuthContext | undefined;\n if (!auth) {\n throw new Error('AuthContext is required for AI Connection inference');\n }\n\n this.logger.debug(`Streaming direct ChatKit fallback via AI Connection, model: ${options?.model ?? ''}`);\n const execution = await gateway.execute({\n auth,\n protocol: 'chatCompletions',\n body: {\n model: options?.model ?? '',\n messages,\n stream: true,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n ...(options?.maxTokens !== undefined ? { max_tokens: options.maxTokens } : {}),\n },\n });\n\n for await (const event of execution.events) {\n if (event.type === 'text.delta') {\n yield event.text;\n }\n }\n }\n\n private requireAiGatewayService(): Pick<AiGatewayService, 'execute'> {\n if (!this.aiGatewayService) {\n throw new Error('AiGatewayService is required for ChatKit direct AI fallback');\n }\n return this.aiGatewayService;\n }\n}\n"]}
|
|
@@ -12,12 +12,16 @@
|
|
|
12
12
|
export interface DefaultAgentConfig {
|
|
13
13
|
/** Claude Code 可执行文件路径 */
|
|
14
14
|
claudeCodePath?: string;
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
/**
|
|
15
|
+
/** AI Connection invocation endpoint/key */
|
|
16
|
+
connection?: DefaultAgentAiConnection;
|
|
17
|
+
/** 模型 */
|
|
18
18
|
model?: string;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
}
|
|
20
|
+
export interface DefaultAgentAiConnection {
|
|
21
|
+
/** Xpod AI Connection endpoint, usually the current /v1 gateway URL */
|
|
22
|
+
baseUrl: string;
|
|
23
|
+
/** Xpod-issued gateway key for this invocation */
|
|
24
|
+
gatewayKey: string;
|
|
21
25
|
}
|
|
22
26
|
/**
|
|
23
27
|
* Default Agent 会话上下文
|
|
@@ -45,25 +49,30 @@ export interface DefaultAgentResponse {
|
|
|
45
49
|
/** 花费(USD) */
|
|
46
50
|
costUsd?: number;
|
|
47
51
|
}
|
|
52
|
+
export interface DefaultAgentRunOptions {
|
|
53
|
+
timeout?: number;
|
|
54
|
+
maxTurns?: number;
|
|
55
|
+
connection?: DefaultAgentAiConnection;
|
|
56
|
+
model?: string;
|
|
57
|
+
}
|
|
48
58
|
/**
|
|
49
59
|
* 获取 Default Agent 配置
|
|
50
60
|
*/
|
|
51
|
-
export declare function getDefaultAgentConfig(
|
|
61
|
+
export declare function getDefaultAgentConfig(input?: {
|
|
62
|
+
connection?: DefaultAgentAiConnection;
|
|
63
|
+
model?: string;
|
|
64
|
+
}): DefaultAgentConfig;
|
|
52
65
|
/**
|
|
53
66
|
* 检查 Default Agent 是否可用
|
|
54
67
|
*/
|
|
55
|
-
export declare function isDefaultAgentAvailable(
|
|
68
|
+
export declare function isDefaultAgentAvailable(input?: {
|
|
69
|
+
connection?: DefaultAgentAiConnection;
|
|
70
|
+
}): boolean;
|
|
56
71
|
/**
|
|
57
72
|
* 运行 Default Agent
|
|
58
73
|
*/
|
|
59
|
-
export declare function runDefaultAgent(message: string, context: DefaultAgentContext, options?:
|
|
60
|
-
timeout?: number;
|
|
61
|
-
maxTurns?: number;
|
|
62
|
-
}): Promise<DefaultAgentResponse>;
|
|
74
|
+
export declare function runDefaultAgent(message: string, context: DefaultAgentContext, options?: DefaultAgentRunOptions): Promise<DefaultAgentResponse>;
|
|
63
75
|
/**
|
|
64
76
|
* 流式运行 Default Agent
|
|
65
77
|
*/
|
|
66
|
-
export declare function streamDefaultAgent(message: string, context: DefaultAgentContext, options?:
|
|
67
|
-
timeout?: number;
|
|
68
|
-
maxTurns?: number;
|
|
69
|
-
}): AsyncGenerator<string, void, unknown>;
|
|
78
|
+
export declare function streamDefaultAgent(message: string, context: DefaultAgentContext, options?: DefaultAgentRunOptions): AsyncGenerator<string, void, unknown>;
|
|
@@ -36,7 +36,7 @@ exports.isDefaultAgentAvailable = isDefaultAgentAvailable;
|
|
|
36
36
|
exports.runDefaultAgent = runDefaultAgent;
|
|
37
37
|
exports.streamDefaultAgent = streamDefaultAgent;
|
|
38
38
|
const global_logger_factory_1 = require("global-logger-factory");
|
|
39
|
-
const
|
|
39
|
+
const safe_env_1 = require("../../runtime/safe-env");
|
|
40
40
|
let cachedClaudeQuery;
|
|
41
41
|
async function loadClaudeQuery() {
|
|
42
42
|
if (cachedClaudeQuery) {
|
|
@@ -80,19 +80,18 @@ function getAssistantText(value) {
|
|
|
80
80
|
/**
|
|
81
81
|
* 获取 Default Agent 配置
|
|
82
82
|
*/
|
|
83
|
-
function getDefaultAgentConfig() {
|
|
83
|
+
function getDefaultAgentConfig(input = {}) {
|
|
84
84
|
return {
|
|
85
85
|
claudeCodePath: process.env.CLAUDE_CODE_PATH || undefined,
|
|
86
|
-
|
|
87
|
-
model:
|
|
88
|
-
apiKey: (0, platform_ai_config_1.getPlatformApiKey)(),
|
|
86
|
+
connection: input.connection,
|
|
87
|
+
model: input.model,
|
|
89
88
|
};
|
|
90
89
|
}
|
|
91
90
|
/**
|
|
92
91
|
* 检查 Default Agent 是否可用
|
|
93
92
|
*/
|
|
94
|
-
function isDefaultAgentAvailable() {
|
|
95
|
-
return (
|
|
93
|
+
function isDefaultAgentAvailable(input = {}) {
|
|
94
|
+
return Boolean(input.connection?.baseUrl?.trim() && input.connection?.gatewayKey?.trim());
|
|
96
95
|
}
|
|
97
96
|
/**
|
|
98
97
|
* Default Agent System Prompt
|
|
@@ -108,12 +107,9 @@ const DEFAULT_AGENT_SYSTEM_PROMPT = `你是 Xpod Default Agent,运行在用户
|
|
|
108
107
|
当用户的消息中包含以下类型的信息时,识别并保存:
|
|
109
108
|
|
|
110
109
|
### AI 配置(最重要)
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
- "我的 OpenAI key 是 sk-xxx"
|
|
115
|
-
- "用这个 API key: xxx"
|
|
116
|
-
- "anthropic 密钥 xxx"
|
|
110
|
+
- Provider、Model、Base URL 与认证方式
|
|
111
|
+
- 引导用户通过 AI Connection 的 Connect UI/API 完成授权或录入凭证
|
|
112
|
+
- 密钥由 SecretCell 安全保存;不要要求用户在聊天中发送密钥,也不要把明文凭证写入 Pod 资源
|
|
117
113
|
|
|
118
114
|
### 联系人
|
|
119
115
|
- 姓名、邮箱、电话、WebID
|
|
@@ -159,18 +155,6 @@ curl -s -X PUT \\
|
|
|
159
155
|
## 语义网规范
|
|
160
156
|
使用 Turtle 格式,优先使用标准词汇表。
|
|
161
157
|
|
|
162
|
-
### AI 配置示例
|
|
163
|
-
\`\`\`turtle
|
|
164
|
-
@prefix xpod: <http://xpod.dev/ns#> .
|
|
165
|
-
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
166
|
-
|
|
167
|
-
<#openai-credential> a xpod:AiCredential ;
|
|
168
|
-
rdfs:label "OpenAI" ;
|
|
169
|
-
xpod:provider "openai" ;
|
|
170
|
-
xpod:apiKey "sk-xxx" ;
|
|
171
|
-
xpod:baseUrl "https://api.openai.com/v1" .
|
|
172
|
-
\`\`\`
|
|
173
|
-
|
|
174
158
|
### 联系人示例
|
|
175
159
|
\`\`\`turtle
|
|
176
160
|
@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
|
|
@@ -184,64 +168,21 @@ curl -s -X PUT \\
|
|
|
184
168
|
## 交互原则
|
|
185
169
|
1. 识别到结构化数据时,直接保存(不需要确认)
|
|
186
170
|
2. 保存成功后简短告知用户
|
|
187
|
-
3. 如果是 AI
|
|
171
|
+
3. 如果是 AI 配置,引导用户打开 AI Connection 的 Connect UI 或调用 Connect API;不要代为收集或写入明文密钥
|
|
188
172
|
4. 其他情况正常对话即可
|
|
189
173
|
5. 回复使用中文`;
|
|
190
|
-
function getDefaultBaseUrl(provider) {
|
|
191
|
-
const normalized = (provider || 'openrouter').toLowerCase();
|
|
192
|
-
const urls = {
|
|
193
|
-
openai: 'https://api.openai.com/v1',
|
|
194
|
-
google: 'https://generativelanguage.googleapis.com/v1beta/openai',
|
|
195
|
-
anthropic: 'https://api.anthropic.com/v1',
|
|
196
|
-
deepseek: 'https://api.deepseek.com/v1',
|
|
197
|
-
openrouter: 'https://openrouter.ai/api/v1',
|
|
198
|
-
ollama: 'http://localhost:11434/v1',
|
|
199
|
-
mistral: 'https://api.mistral.ai/v1',
|
|
200
|
-
cohere: 'https://api.cohere.ai/v1',
|
|
201
|
-
zhipu: 'https://open.bigmodel.cn/api/paas/v4',
|
|
202
|
-
};
|
|
203
|
-
return urls[normalized] || urls.openrouter;
|
|
204
|
-
}
|
|
205
|
-
function normalizeClaudeBaseUrl(baseUrl) {
|
|
206
|
-
if (baseUrl.endsWith('/v1')) {
|
|
207
|
-
return baseUrl.slice(0, -3);
|
|
208
|
-
}
|
|
209
|
-
if (baseUrl.endsWith('/v1/')) {
|
|
210
|
-
return baseUrl.slice(0, -4);
|
|
211
|
-
}
|
|
212
|
-
return baseUrl;
|
|
213
|
-
}
|
|
214
174
|
function buildClaudeEnv(config, context) {
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
175
|
+
const connection = (0, safe_env_1.requireAiConnectionRuntimeConfig)({
|
|
176
|
+
baseUrl: config.connection?.baseUrl,
|
|
177
|
+
apiKey: config.connection?.gatewayKey,
|
|
178
|
+
model: config.model,
|
|
179
|
+
}, 'Default Agent');
|
|
180
|
+
return {
|
|
181
|
+
...(0, safe_env_1.sanitizeRuntimeEnv)(process.env),
|
|
182
|
+
...(0, safe_env_1.projectAnthropicCompatibleEnv)(connection),
|
|
221
183
|
SOLID_TOKEN: context.solidToken,
|
|
222
184
|
POD_BASE_URL: context.podBaseUrl,
|
|
223
185
|
};
|
|
224
|
-
if (isOpenRouterLike) {
|
|
225
|
-
// Claude Code expects Anthropic-shaped settings; OpenRouter is compatible after base path normalization.
|
|
226
|
-
env.ANTHROPIC_BASE_URL = normalizeClaudeBaseUrl(baseUrl);
|
|
227
|
-
if (config.apiKey) {
|
|
228
|
-
env.ANTHROPIC_AUTH_TOKEN = config.apiKey;
|
|
229
|
-
}
|
|
230
|
-
if (model) {
|
|
231
|
-
env.ANTHROPIC_DEFAULT_SONNET_MODEL = model;
|
|
232
|
-
env.ANTHROPIC_DEFAULT_HAIKU_MODEL = model;
|
|
233
|
-
env.ANTHROPIC_DEFAULT_OPUS_MODEL = model;
|
|
234
|
-
}
|
|
235
|
-
delete env.ANTHROPIC_API_KEY;
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
env.ANTHROPIC_BASE_URL = baseUrl;
|
|
239
|
-
if (config.apiKey) {
|
|
240
|
-
env.ANTHROPIC_API_KEY = config.apiKey;
|
|
241
|
-
}
|
|
242
|
-
delete env.ANTHROPIC_AUTH_TOKEN;
|
|
243
|
-
}
|
|
244
|
-
return env;
|
|
245
186
|
}
|
|
246
187
|
function resolveClaudeModel(config) {
|
|
247
188
|
const model = (config.model || '').trim();
|
|
@@ -258,12 +199,12 @@ function resolveClaudeModel(config) {
|
|
|
258
199
|
* 运行 Default Agent
|
|
259
200
|
*/
|
|
260
201
|
async function runDefaultAgent(message, context, options) {
|
|
261
|
-
const config = getDefaultAgentConfig();
|
|
262
|
-
if (!(
|
|
202
|
+
const config = getDefaultAgentConfig(options);
|
|
203
|
+
if (!isDefaultAgentAvailable(config)) {
|
|
263
204
|
return {
|
|
264
205
|
content: '',
|
|
265
206
|
success: false,
|
|
266
|
-
error: 'Default Agent not configured:
|
|
207
|
+
error: 'Default Agent not configured: AI Connection baseUrl and gateway key are required',
|
|
267
208
|
};
|
|
268
209
|
}
|
|
269
210
|
const abortController = new AbortController();
|
|
@@ -327,9 +268,9 @@ async function runDefaultAgent(message, context, options) {
|
|
|
327
268
|
* 流式运行 Default Agent
|
|
328
269
|
*/
|
|
329
270
|
async function* streamDefaultAgent(message, context, options) {
|
|
330
|
-
const config = getDefaultAgentConfig();
|
|
331
|
-
if (!(
|
|
332
|
-
throw new Error('Default Agent not configured:
|
|
271
|
+
const config = getDefaultAgentConfig(options);
|
|
272
|
+
if (!isDefaultAgentAvailable(config)) {
|
|
273
|
+
throw new Error('Default Agent not configured: AI Connection baseUrl and gateway key are required');
|
|
333
274
|
}
|
|
334
275
|
const abortController = new AbortController();
|
|
335
276
|
const timeout = options?.timeout || 60000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-agent.js","sourceRoot":"","sources":["../../../src/api/chatkit/default-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default Agent\n *\n * 基于 Claude Code SDK 的默认 AI Agent,用于:\n * 1. 用户未配置 AI 时的降级方案\n * 2. 帮助用户完成初始化配置\n * 3. 识别并收纳结构化数据到 Pod\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport {\n getPlatformApiBaseUrl,\n getPlatformApiKey,\n getPlatformDefaultModel,\n getPlatformProviderId,\n hasPlatformApiConfig,\n} from '../service/platform-ai-config';\n\n/**\n * CC SDK 运行时消息结构(避免直接静态导入 ESM 包导致 CJS 启动崩溃)\n */\ntype ClaudeAssistantBlock = { type: 'text'; text: string } | { type: string; [key: string]: unknown };\ntype ClaudeAssistantMessage = { type: 'assistant'; message: { content: ClaudeAssistantBlock[] | unknown } };\ntype ClaudeResultMessage = { type: 'result'; subtype?: string; result?: string; total_cost_usd?: number };\ntype ClaudeQueryMessage = ClaudeAssistantMessage | ClaudeResultMessage | { type: string; [key: string]: unknown };\ntype ClaudeQuery = (args: unknown) => AsyncIterable<ClaudeQueryMessage>;\n\nlet cachedClaudeQuery: ClaudeQuery | undefined;\n\nasync function loadClaudeQuery(): Promise<ClaudeQuery> {\n if (cachedClaudeQuery) {\n return cachedClaudeQuery;\n }\n\n // Keep native dynamic import so CJS build can load ESM-only SDK lazily.\n const mod = await import('@anthropic-ai/claude-agent-sdk') as Record<string, unknown>;\n const maybeQuery = (mod as { query?: unknown }).query;\n\n if (typeof maybeQuery !== 'function') {\n throw new Error('Invalid Claude Agent SDK: query() not found');\n }\n\n cachedClaudeQuery = maybeQuery as ClaudeQuery;\n return cachedClaudeQuery;\n}\n\nconst logger = getLoggerFor('DefaultAgent');\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isAssistantMessage(value: ClaudeQueryMessage): value is ClaudeAssistantMessage {\n return value.type === 'assistant' && isObject((value as { message?: unknown }).message);\n}\n\nfunction isResultMessage(value: ClaudeQueryMessage): value is ClaudeResultMessage {\n return value.type === 'result';\n}\n\nfunction getAssistantText(value: ClaudeQueryMessage): string {\n if (!isAssistantMessage(value)) {\n return '';\n }\n\n const content = value.message.content;\n if (!Array.isArray(content)) {\n return '';\n }\n\n let text = '';\n for (const block of content) {\n if (isObject(block) && block.type === 'text' && typeof block.text === 'string') {\n text += block.text;\n }\n }\n\n return text;\n}\n\n/**\n * Default Agent 配置\n */\nexport interface DefaultAgentConfig {\n /** Claude Code 可执行文件路径 */\n claudeCodePath?: string;\n /** 默认 AI 提供商 */\n provider?: string;\n /** 默认模型 */\n model?: string;\n /** API Key */\n apiKey?: string;\n}\n\n/**\n * Default Agent 会话上下文\n */\nexport interface DefaultAgentContext {\n /** 用户的访问令牌 */\n solidToken: string;\n /** 用户的 Pod 基础 URL */\n podBaseUrl: string;\n /** 用户 WebID */\n webId?: string;\n}\n\n/**\n * Default Agent 响应\n */\nexport interface DefaultAgentResponse {\n /** 响应内容 */\n content: string;\n /** 是否成功 */\n success: boolean;\n /** 错误信息 */\n error?: string;\n /** 使用的模型 */\n model?: string;\n /** 花费(USD) */\n costUsd?: number;\n}\n\n/**\n * 获取 Default Agent 配置\n */\nexport function getDefaultAgentConfig(): DefaultAgentConfig {\n return {\n claudeCodePath: process.env.CLAUDE_CODE_PATH || undefined,\n provider: getPlatformProviderId(),\n model: getPlatformDefaultModel(),\n apiKey: getPlatformApiKey(),\n };\n}\n\n/**\n * 检查 Default Agent 是否可用\n */\nexport function isDefaultAgentAvailable(): boolean {\n return hasPlatformApiConfig();\n}\n\n/**\n * Default Agent System Prompt\n */\nconst DEFAULT_AGENT_SYSTEM_PROMPT = `你是 Xpod Default Agent,运行在用户的 Solid Pod 上。\n\n## 你的职责\n1. 帮助用户完成初始化配置(特别是 AI 配置)\n2. 识别用户消息中的结构化数据并存储到 Pod\n3. 按语义网规范组织数据\n\n## 数据收纳能力\n当用户的消息中包含以下类型的信息时,识别并保存:\n\n### AI 配置(最重要)\n- API Key、Provider、Model、Base URL\n- 存储位置:/settings/credentials.ttl\n- 识别模式:\n - \"我的 OpenAI key 是 sk-xxx\"\n - \"用这个 API key: xxx\"\n - \"anthropic 密钥 xxx\"\n\n### 联系人\n- 姓名、邮箱、电话、WebID\n- 存储位置:/contacts/<name>.ttl\n- 词汇表:vCard (http://www.w3.org/2006/vcard/ns#)\n\n### 日程/事件\n- 时间、地点、标题\n- 存储位置:/calendar/events.ttl\n- 词汇表:schema:Event\n\n### 笔记\n- 标题、内容\n- 存储位置:/notes/<title>.ttl\n- 词汇表:schema:Note\n\n## Pod 访问方式\n使用 curl 访问用户 Pod,鉴权信息已在环境变量中:\n\n### 读取资源\n\\`\\`\\`bash\ncurl -s -H \"Authorization: Bearer $SOLID_TOKEN\" \"$POD_BASE_URL<path>\"\n\\`\\`\\`\n\n### 写入 Turtle 数据\n\\`\\`\\`bash\ncurl -s -X PUT \\\\\n -H \"Authorization: Bearer $SOLID_TOKEN\" \\\\\n -H \"Content-Type: text/turtle\" \\\\\n -d '<turtle-content>' \\\\\n \"$POD_BASE_URL<path>\"\n\\`\\`\\`\n\n### 创建容器(目录)\n\\`\\`\\`bash\ncurl -s -X PUT \\\\\n -H \"Authorization: Bearer $SOLID_TOKEN\" \\\\\n -H \"Content-Type: text/turtle\" \\\\\n -H \"Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel=\\\\\"type\\\\\"\" \\\\\n \"$POD_BASE_URL<path>/\"\n\\`\\`\\`\n\n## 语义网规范\n使用 Turtle 格式,优先使用标准词汇表。\n\n### AI 配置示例\n\\`\\`\\`turtle\n@prefix xpod: <http://xpod.dev/ns#> .\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n\n<#openai-credential> a xpod:AiCredential ;\n rdfs:label \"OpenAI\" ;\n xpod:provider \"openai\" ;\n xpod:apiKey \"sk-xxx\" ;\n xpod:baseUrl \"https://api.openai.com/v1\" .\n\\`\\`\\`\n\n### 联系人示例\n\\`\\`\\`turtle\n@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .\n\n<#person> a vcard:Individual ;\n vcard:fn \"张三\" ;\n vcard:hasEmail <mailto:zhangsan@example.com> ;\n vcard:hasTelephone <tel:+8613800138000> .\n\\`\\`\\`\n\n## 交互原则\n1. 识别到结构化数据时,直接保存(不需要确认)\n2. 保存成功后简短告知用户\n3. 如果是 AI 配置,提示用户\"已保存,后续对话将使用你的 AI 配置\"\n4. 其他情况正常对话即可\n5. 回复使用中文`;\n\n\nfunction getDefaultBaseUrl(provider?: string): string {\n const normalized = (provider || 'openrouter').toLowerCase();\n const urls: Record<string, string> = {\n openai: 'https://api.openai.com/v1',\n google: 'https://generativelanguage.googleapis.com/v1beta/openai',\n anthropic: 'https://api.anthropic.com/v1',\n deepseek: 'https://api.deepseek.com/v1',\n openrouter: 'https://openrouter.ai/api/v1',\n ollama: 'http://localhost:11434/v1',\n mistral: 'https://api.mistral.ai/v1',\n cohere: 'https://api.cohere.ai/v1',\n zhipu: 'https://open.bigmodel.cn/api/paas/v4',\n };\n return urls[normalized] || urls.openrouter;\n}\n\nfunction normalizeClaudeBaseUrl(baseUrl: string): string {\n if (baseUrl.endsWith('/v1')) {\n return baseUrl.slice(0, -3);\n }\n if (baseUrl.endsWith('/v1/')) {\n return baseUrl.slice(0, -4);\n }\n return baseUrl;\n}\n\nfunction buildClaudeEnv(config: DefaultAgentConfig, context: DefaultAgentContext): NodeJS.ProcessEnv {\n const provider = (config.provider || '').toLowerCase();\n const model = (config.model || '').trim();\n const baseUrl = getPlatformApiBaseUrl() || getDefaultBaseUrl(config.provider);\n const isOpenRouterLike = provider === 'openrouter' || baseUrl.includes('openrouter.ai');\n\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n SOLID_TOKEN: context.solidToken,\n POD_BASE_URL: context.podBaseUrl,\n };\n\n if (isOpenRouterLike) {\n // Claude Code expects Anthropic-shaped settings; OpenRouter is compatible after base path normalization.\n env.ANTHROPIC_BASE_URL = normalizeClaudeBaseUrl(baseUrl);\n if (config.apiKey) {\n env.ANTHROPIC_AUTH_TOKEN = config.apiKey;\n }\n if (model) {\n env.ANTHROPIC_DEFAULT_SONNET_MODEL = model;\n env.ANTHROPIC_DEFAULT_HAIKU_MODEL = model;\n env.ANTHROPIC_DEFAULT_OPUS_MODEL = model;\n }\n delete env.ANTHROPIC_API_KEY;\n } else {\n env.ANTHROPIC_BASE_URL = baseUrl;\n if (config.apiKey) {\n env.ANTHROPIC_API_KEY = config.apiKey;\n }\n delete env.ANTHROPIC_AUTH_TOKEN;\n }\n\n return env;\n}\n\nfunction resolveClaudeModel(config: DefaultAgentConfig): string {\n const model = (config.model || '').trim();\n if (!model) {\n return 'sonnet';\n }\n\n if (model.startsWith('claude') || model.includes('anthropic/')) {\n return model;\n }\n\n // Non-Anthropic models (OpenRouter route) are mapped via ANTHROPIC_DEFAULT_SONNET_MODEL.\n return 'sonnet';\n}\n\n/**\n * 运行 Default Agent\n */\nexport async function runDefaultAgent(\n message: string,\n context: DefaultAgentContext,\n options?: {\n timeout?: number;\n maxTurns?: number;\n },\n): Promise<DefaultAgentResponse> {\n const config = getDefaultAgentConfig();\n\n if (!hasPlatformApiConfig()) {\n return {\n content: '',\n success: false,\n error: 'Default Agent not configured: DEFAULT_API_KEY or DEFAULT_API_BASE is required',\n };\n }\n\n const abortController = new AbortController();\n const timeout = options?.timeout || 60000;\n\n const timeoutId = setTimeout(() => {\n logger.warn('Default Agent timeout, aborting...');\n abortController.abort();\n }, timeout);\n\n try {\n logger.info(`Running Default Agent for Pod: ${context.podBaseUrl}`);\n\n const queryFn = await loadClaudeQuery();\n const q = queryFn({\n prompt: message,\n options: {\n abortController,\n pathToClaudeCodeExecutable: config.claudeCodePath,\n env: buildClaudeEnv(config, context),\n systemPrompt: DEFAULT_AGENT_SYSTEM_PROMPT,\n model: resolveClaudeModel(config),\n permissionMode: 'acceptEdits',\n allowedTools: ['Bash', 'Read', 'Write'],\n maxTurns: options?.maxTurns || 10,\n },\n });\n\n let content = '';\n let costUsd: number | undefined;\n\n for await (const msg of q) {\n const assistantText = getAssistantText(msg);\n if (assistantText) {\n content += assistantText;\n }\n\n if (isResultMessage(msg)) {\n if (msg.subtype === 'success' && typeof msg.result === 'string' && msg.result.trim()) {\n content = msg.result;\n }\n if (typeof msg.total_cost_usd === 'number') {\n costUsd = msg.total_cost_usd;\n }\n }\n }\n\n clearTimeout(timeoutId);\n\n return {\n content,\n success: true,\n model: config.model || resolveClaudeModel(config),\n costUsd,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(`Default Agent error: ${errorMessage}`);\n\n return {\n content: '',\n success: false,\n error: errorMessage,\n };\n }\n}\n\n/**\n * 流式运行 Default Agent\n */\nexport async function* streamDefaultAgent(\n message: string,\n context: DefaultAgentContext,\n options?: {\n timeout?: number;\n maxTurns?: number;\n },\n): AsyncGenerator<string, void, unknown> {\n const config = getDefaultAgentConfig();\n\n if (!hasPlatformApiConfig()) {\n throw new Error('Default Agent not configured: DEFAULT_API_KEY or DEFAULT_API_BASE is required');\n }\n\n const abortController = new AbortController();\n const timeout = options?.timeout || 60000;\n\n const timeoutId = setTimeout(() => {\n logger.warn('Default Agent timeout, aborting...');\n abortController.abort();\n }, timeout);\n\n try {\n logger.info(`Streaming Default Agent for Pod: ${context.podBaseUrl}`);\n\n const queryFn = await loadClaudeQuery();\n const q = queryFn({\n prompt: message,\n options: {\n abortController,\n pathToClaudeCodeExecutable: config.claudeCodePath,\n env: buildClaudeEnv(config, context),\n systemPrompt: DEFAULT_AGENT_SYSTEM_PROMPT,\n model: resolveClaudeModel(config),\n permissionMode: 'acceptEdits',\n allowedTools: ['Bash', 'Read', 'Write'],\n maxTurns: options?.maxTurns || 10,\n includePartialMessages: true,\n },\n });\n\n for await (const msg of q) {\n const assistantText = getAssistantText(msg);\n if (assistantText) {\n yield assistantText;\n }\n }\n\n clearTimeout(timeoutId);\n } catch (error) {\n clearTimeout(timeoutId);\n throw error;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"default-agent.js","sourceRoot":"","sources":["../../../src/api/chatkit/default-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default Agent\n *\n * 基于 Claude Code SDK 的默认 AI Agent,用于:\n * 1. 用户未配置 AI 时的降级方案\n * 2. 帮助用户完成初始化配置\n * 3. 识别并收纳结构化数据到 Pod\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport {\n projectAnthropicCompatibleEnv,\n requireAiConnectionRuntimeConfig,\n sanitizeRuntimeEnv,\n} from '../../runtime/safe-env';\n\n/**\n * CC SDK 运行时消息结构(避免直接静态导入 ESM 包导致 CJS 启动崩溃)\n */\ntype ClaudeAssistantBlock = { type: 'text'; text: string } | { type: string; [key: string]: unknown };\ntype ClaudeAssistantMessage = { type: 'assistant'; message: { content: ClaudeAssistantBlock[] | unknown } };\ntype ClaudeResultMessage = { type: 'result'; subtype?: string; result?: string; total_cost_usd?: number };\ntype ClaudeQueryMessage = ClaudeAssistantMessage | ClaudeResultMessage | { type: string; [key: string]: unknown };\ntype ClaudeQuery = (args: unknown) => AsyncIterable<ClaudeQueryMessage>;\n\nlet cachedClaudeQuery: ClaudeQuery | undefined;\n\nasync function loadClaudeQuery(): Promise<ClaudeQuery> {\n if (cachedClaudeQuery) {\n return cachedClaudeQuery;\n }\n\n // Keep native dynamic import so CJS build can load ESM-only SDK lazily.\n const mod = await import('@anthropic-ai/claude-agent-sdk') as Record<string, unknown>;\n const maybeQuery = (mod as { query?: unknown }).query;\n\n if (typeof maybeQuery !== 'function') {\n throw new Error('Invalid Claude Agent SDK: query() not found');\n }\n\n cachedClaudeQuery = maybeQuery as ClaudeQuery;\n return cachedClaudeQuery;\n}\n\nconst logger = getLoggerFor('DefaultAgent');\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isAssistantMessage(value: ClaudeQueryMessage): value is ClaudeAssistantMessage {\n return value.type === 'assistant' && isObject((value as { message?: unknown }).message);\n}\n\nfunction isResultMessage(value: ClaudeQueryMessage): value is ClaudeResultMessage {\n return value.type === 'result';\n}\n\nfunction getAssistantText(value: ClaudeQueryMessage): string {\n if (!isAssistantMessage(value)) {\n return '';\n }\n\n const content = value.message.content;\n if (!Array.isArray(content)) {\n return '';\n }\n\n let text = '';\n for (const block of content) {\n if (isObject(block) && block.type === 'text' && typeof block.text === 'string') {\n text += block.text;\n }\n }\n\n return text;\n}\n\n/**\n * Default Agent 配置\n */\nexport interface DefaultAgentConfig {\n /** Claude Code 可执行文件路径 */\n claudeCodePath?: string;\n /** AI Connection invocation endpoint/key */\n connection?: DefaultAgentAiConnection;\n /** 模型 */\n model?: string;\n}\n\nexport interface DefaultAgentAiConnection {\n /** Xpod AI Connection endpoint, usually the current /v1 gateway URL */\n baseUrl: string;\n /** Xpod-issued gateway key for this invocation */\n gatewayKey: string;\n}\n\n/**\n * Default Agent 会话上下文\n */\nexport interface DefaultAgentContext {\n /** 用户的访问令牌 */\n solidToken: string;\n /** 用户的 Pod 基础 URL */\n podBaseUrl: string;\n /** 用户 WebID */\n webId?: string;\n}\n\n/**\n * Default Agent 响应\n */\nexport interface DefaultAgentResponse {\n /** 响应内容 */\n content: string;\n /** 是否成功 */\n success: boolean;\n /** 错误信息 */\n error?: string;\n /** 使用的模型 */\n model?: string;\n /** 花费(USD) */\n costUsd?: number;\n}\n\nexport interface DefaultAgentRunOptions {\n timeout?: number;\n maxTurns?: number;\n connection?: DefaultAgentAiConnection;\n model?: string;\n}\n\n/**\n * 获取 Default Agent 配置\n */\nexport function getDefaultAgentConfig(input: {\n connection?: DefaultAgentAiConnection;\n model?: string;\n} = {}): DefaultAgentConfig {\n return {\n claudeCodePath: process.env.CLAUDE_CODE_PATH || undefined,\n connection: input.connection,\n model: input.model,\n };\n}\n\n/**\n * 检查 Default Agent 是否可用\n */\nexport function isDefaultAgentAvailable(input: {\n connection?: DefaultAgentAiConnection;\n} = {}): boolean {\n return Boolean(input.connection?.baseUrl?.trim() && input.connection?.gatewayKey?.trim());\n}\n\n/**\n * Default Agent System Prompt\n */\nconst DEFAULT_AGENT_SYSTEM_PROMPT = `你是 Xpod Default Agent,运行在用户的 Solid Pod 上。\n\n## 你的职责\n1. 帮助用户完成初始化配置(特别是 AI 配置)\n2. 识别用户消息中的结构化数据并存储到 Pod\n3. 按语义网规范组织数据\n\n## 数据收纳能力\n当用户的消息中包含以下类型的信息时,识别并保存:\n\n### AI 配置(最重要)\n- Provider、Model、Base URL 与认证方式\n- 引导用户通过 AI Connection 的 Connect UI/API 完成授权或录入凭证\n- 密钥由 SecretCell 安全保存;不要要求用户在聊天中发送密钥,也不要把明文凭证写入 Pod 资源\n\n### 联系人\n- 姓名、邮箱、电话、WebID\n- 存储位置:/contacts/<name>.ttl\n- 词汇表:vCard (http://www.w3.org/2006/vcard/ns#)\n\n### 日程/事件\n- 时间、地点、标题\n- 存储位置:/calendar/events.ttl\n- 词汇表:schema:Event\n\n### 笔记\n- 标题、内容\n- 存储位置:/notes/<title>.ttl\n- 词汇表:schema:Note\n\n## Pod 访问方式\n使用 curl 访问用户 Pod,鉴权信息已在环境变量中:\n\n### 读取资源\n\\`\\`\\`bash\ncurl -s -H \"Authorization: Bearer $SOLID_TOKEN\" \"$POD_BASE_URL<path>\"\n\\`\\`\\`\n\n### 写入 Turtle 数据\n\\`\\`\\`bash\ncurl -s -X PUT \\\\\n -H \"Authorization: Bearer $SOLID_TOKEN\" \\\\\n -H \"Content-Type: text/turtle\" \\\\\n -d '<turtle-content>' \\\\\n \"$POD_BASE_URL<path>\"\n\\`\\`\\`\n\n### 创建容器(目录)\n\\`\\`\\`bash\ncurl -s -X PUT \\\\\n -H \"Authorization: Bearer $SOLID_TOKEN\" \\\\\n -H \"Content-Type: text/turtle\" \\\\\n -H \"Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel=\\\\\"type\\\\\"\" \\\\\n \"$POD_BASE_URL<path>/\"\n\\`\\`\\`\n\n## 语义网规范\n使用 Turtle 格式,优先使用标准词汇表。\n\n### 联系人示例\n\\`\\`\\`turtle\n@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .\n\n<#person> a vcard:Individual ;\n vcard:fn \"张三\" ;\n vcard:hasEmail <mailto:zhangsan@example.com> ;\n vcard:hasTelephone <tel:+8613800138000> .\n\\`\\`\\`\n\n## 交互原则\n1. 识别到结构化数据时,直接保存(不需要确认)\n2. 保存成功后简短告知用户\n3. 如果是 AI 配置,引导用户打开 AI Connection 的 Connect UI 或调用 Connect API;不要代为收集或写入明文密钥\n4. 其他情况正常对话即可\n5. 回复使用中文`;\n\n\nfunction buildClaudeEnv(config: DefaultAgentConfig, context: DefaultAgentContext): NodeJS.ProcessEnv {\n const connection = requireAiConnectionRuntimeConfig({\n baseUrl: config.connection?.baseUrl,\n apiKey: config.connection?.gatewayKey,\n model: config.model,\n }, 'Default Agent');\n\n return {\n ...sanitizeRuntimeEnv(process.env),\n ...projectAnthropicCompatibleEnv(connection),\n SOLID_TOKEN: context.solidToken,\n POD_BASE_URL: context.podBaseUrl,\n };\n}\n\nfunction resolveClaudeModel(config: DefaultAgentConfig): string {\n const model = (config.model || '').trim();\n if (!model) {\n return 'sonnet';\n }\n\n if (model.startsWith('claude') || model.includes('anthropic/')) {\n return model;\n }\n\n // Non-Anthropic models (OpenRouter route) are mapped via ANTHROPIC_DEFAULT_SONNET_MODEL.\n return 'sonnet';\n}\n\n/**\n * 运行 Default Agent\n */\nexport async function runDefaultAgent(\n message: string,\n context: DefaultAgentContext,\n options?: DefaultAgentRunOptions,\n): Promise<DefaultAgentResponse> {\n const config = getDefaultAgentConfig(options);\n\n if (!isDefaultAgentAvailable(config)) {\n return {\n content: '',\n success: false,\n error: 'Default Agent not configured: AI Connection baseUrl and gateway key are required',\n };\n }\n\n const abortController = new AbortController();\n const timeout = options?.timeout || 60000;\n\n const timeoutId = setTimeout(() => {\n logger.warn('Default Agent timeout, aborting...');\n abortController.abort();\n }, timeout);\n\n try {\n logger.info(`Running Default Agent for Pod: ${context.podBaseUrl}`);\n\n const queryFn = await loadClaudeQuery();\n const q = queryFn({\n prompt: message,\n options: {\n abortController,\n pathToClaudeCodeExecutable: config.claudeCodePath,\n env: buildClaudeEnv(config, context),\n systemPrompt: DEFAULT_AGENT_SYSTEM_PROMPT,\n model: resolveClaudeModel(config),\n permissionMode: 'acceptEdits',\n allowedTools: ['Bash', 'Read', 'Write'],\n maxTurns: options?.maxTurns || 10,\n },\n });\n\n let content = '';\n let costUsd: number | undefined;\n\n for await (const msg of q) {\n const assistantText = getAssistantText(msg);\n if (assistantText) {\n content += assistantText;\n }\n\n if (isResultMessage(msg)) {\n if (msg.subtype === 'success' && typeof msg.result === 'string' && msg.result.trim()) {\n content = msg.result;\n }\n if (typeof msg.total_cost_usd === 'number') {\n costUsd = msg.total_cost_usd;\n }\n }\n }\n\n clearTimeout(timeoutId);\n\n return {\n content,\n success: true,\n model: config.model || resolveClaudeModel(config),\n costUsd,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(`Default Agent error: ${errorMessage}`);\n\n return {\n content: '',\n success: false,\n error: errorMessage,\n };\n }\n}\n\n/**\n * 流式运行 Default Agent\n */\nexport async function* streamDefaultAgent(\n message: string,\n context: DefaultAgentContext,\n options?: DefaultAgentRunOptions,\n): AsyncGenerator<string, void, unknown> {\n const config = getDefaultAgentConfig(options);\n\n if (!isDefaultAgentAvailable(config)) {\n throw new Error('Default Agent not configured: AI Connection baseUrl and gateway key are required');\n }\n\n const abortController = new AbortController();\n const timeout = options?.timeout || 60000;\n\n const timeoutId = setTimeout(() => {\n logger.warn('Default Agent timeout, aborting...');\n abortController.abort();\n }, timeout);\n\n try {\n logger.info(`Streaming Default Agent for Pod: ${context.podBaseUrl}`);\n\n const queryFn = await loadClaudeQuery();\n const q = queryFn({\n prompt: message,\n options: {\n abortController,\n pathToClaudeCodeExecutable: config.claudeCodePath,\n env: buildClaudeEnv(config, context),\n systemPrompt: DEFAULT_AGENT_SYSTEM_PROMPT,\n model: resolveClaudeModel(config),\n permissionMode: 'acceptEdits',\n allowedTools: ['Bash', 'Read', 'Write'],\n maxTurns: options?.maxTurns || 10,\n includePartialMessages: true,\n },\n });\n\n for await (const msg of q) {\n const assistantText = getAssistantText(msg);\n if (assistantText) {\n yield assistantText;\n }\n }\n\n clearTimeout(timeoutId);\n } catch (error) {\n clearTimeout(timeoutId);\n throw error;\n }\n}\n"]}
|