@xenosystem/agent-conversation 0.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +67 -0
- package/dist/adapters/xenoAgentCompatibilityBridge.d.ts +14 -0
- package/dist/adapters/xenoAgentCompatibilityBridge.d.ts.map +1 -0
- package/dist/adapters/xenoAgentCompatibilityBridge.js +247 -0
- package/dist/adapters/xenoAgentCompatibilityBridge.js.map +1 -0
- package/dist/adapters/xenoAgentHostCatalog.d.ts +40 -0
- package/dist/adapters/xenoAgentHostCatalog.d.ts.map +1 -0
- package/dist/adapters/xenoAgentHostCatalog.js +231 -0
- package/dist/adapters/xenoAgentHostCatalog.js.map +1 -0
- package/dist/components/agent/AIStatusIndicator.d.ts +25 -0
- package/dist/components/agent/AIStatusIndicator.d.ts.map +1 -0
- package/dist/components/agent/AIStatusIndicator.js +85 -0
- package/dist/components/agent/AIStatusIndicator.js.map +1 -0
- package/dist/components/agent/AgentNotificationBanner.d.ts +10 -0
- package/dist/components/agent/AgentNotificationBanner.d.ts.map +1 -0
- package/dist/components/agent/AgentNotificationBanner.js +28 -0
- package/dist/components/agent/AgentNotificationBanner.js.map +1 -0
- package/dist/components/agent/AgentView.d.ts +185 -0
- package/dist/components/agent/AgentView.d.ts.map +1 -0
- package/dist/components/agent/AgentView.js +7850 -0
- package/dist/components/agent/AgentView.js.map +1 -0
- package/dist/components/agent/AssistantTurnStatusNotice.d.ts +16 -0
- package/dist/components/agent/AssistantTurnStatusNotice.d.ts.map +1 -0
- package/dist/components/agent/AssistantTurnStatusNotice.js +54 -0
- package/dist/components/agent/AssistantTurnStatusNotice.js.map +1 -0
- package/dist/components/agent/CommandToolCard.d.ts +11 -0
- package/dist/components/agent/CommandToolCard.d.ts.map +1 -0
- package/dist/components/agent/CommandToolCard.js +29 -0
- package/dist/components/agent/CommandToolCard.js.map +1 -0
- package/dist/components/agent/GhostTextArea.d.ts +13 -0
- package/dist/components/agent/GhostTextArea.d.ts.map +1 -0
- package/dist/components/agent/GhostTextArea.js +21 -0
- package/dist/components/agent/GhostTextArea.js.map +1 -0
- package/dist/components/agent/LiveConversationCollaboration.d.ts +27 -0
- package/dist/components/agent/LiveConversationCollaboration.d.ts.map +1 -0
- package/dist/components/agent/LiveConversationCollaboration.js +127 -0
- package/dist/components/agent/LiveConversationCollaboration.js.map +1 -0
- package/dist/components/agent/SdkSessionPanel.d.ts +25 -0
- package/dist/components/agent/SdkSessionPanel.d.ts.map +1 -0
- package/dist/components/agent/SdkSessionPanel.js +15 -0
- package/dist/components/agent/SdkSessionPanel.js.map +1 -0
- package/dist/components/agent/SlashCommandAutocomplete.d.ts +12 -0
- package/dist/components/agent/SlashCommandAutocomplete.d.ts.map +1 -0
- package/dist/components/agent/SlashCommandAutocomplete.js +33 -0
- package/dist/components/agent/SlashCommandAutocomplete.js.map +1 -0
- package/dist/components/agent/collaborationWindow.d.ts +11 -0
- package/dist/components/agent/collaborationWindow.d.ts.map +1 -0
- package/dist/components/agent/collaborationWindow.js +10 -0
- package/dist/components/agent/collaborationWindow.js.map +1 -0
- package/dist/components/agent/conversationCollaborationAppendJournal.d.ts +25 -0
- package/dist/components/agent/conversationCollaborationAppendJournal.d.ts.map +1 -0
- package/dist/components/agent/conversationCollaborationAppendJournal.js +118 -0
- package/dist/components/agent/conversationCollaborationAppendJournal.js.map +1 -0
- package/dist/components/agent/conversationCollaborationController.d.ts +96 -0
- package/dist/components/agent/conversationCollaborationController.d.ts.map +1 -0
- package/dist/components/agent/conversationCollaborationController.js +597 -0
- package/dist/components/agent/conversationCollaborationController.js.map +1 -0
- package/dist/components/agent/destructiveConfirmation.d.ts +76 -0
- package/dist/components/agent/destructiveConfirmation.d.ts.map +1 -0
- package/dist/components/agent/destructiveConfirmation.js +231 -0
- package/dist/components/agent/destructiveConfirmation.js.map +1 -0
- package/dist/components/agent/editorOperationAuthority.d.ts +29 -0
- package/dist/components/agent/editorOperationAuthority.d.ts.map +1 -0
- package/dist/components/agent/editorOperationAuthority.js +73 -0
- package/dist/components/agent/editorOperationAuthority.js.map +1 -0
- package/dist/components/agent/mainAssistant.d.ts +24 -0
- package/dist/components/agent/mainAssistant.d.ts.map +1 -0
- package/dist/components/agent/mainAssistant.js +24 -0
- package/dist/components/agent/mainAssistant.js.map +1 -0
- package/dist/components/agent/nativeTuiComposerInput.d.ts +42 -0
- package/dist/components/agent/nativeTuiComposerInput.d.ts.map +1 -0
- package/dist/components/agent/nativeTuiComposerInput.js +51 -0
- package/dist/components/agent/nativeTuiComposerInput.js.map +1 -0
- package/dist/components/agent/settings/shared/InAppConfirmationDialog.d.ts +25 -0
- package/dist/components/agent/settings/shared/InAppConfirmationDialog.d.ts.map +1 -0
- package/dist/components/agent/settings/shared/InAppConfirmationDialog.js +89 -0
- package/dist/components/agent/settings/shared/InAppConfirmationDialog.js.map +1 -0
- package/dist/components/agent/toolCardDisplay.d.ts +24 -0
- package/dist/components/agent/toolCardDisplay.d.ts.map +1 -0
- package/dist/components/agent/toolCardDisplay.js +85 -0
- package/dist/components/agent/toolCardDisplay.js.map +1 -0
- package/dist/components/agent/webJobProgressView.d.ts +90 -0
- package/dist/components/agent/webJobProgressView.d.ts.map +1 -0
- package/dist/components/agent/webJobProgressView.js +104 -0
- package/dist/components/agent/webJobProgressView.js.map +1 -0
- package/dist/components/agent/workbenchPanelTabs.d.ts +12 -0
- package/dist/components/agent/workbenchPanelTabs.d.ts.map +1 -0
- package/dist/components/agent/workbenchPanelTabs.js +35 -0
- package/dist/components/agent/workbenchPanelTabs.js.map +1 -0
- package/dist/components/ui/CodeBlock.d.ts +8 -0
- package/dist/components/ui/CodeBlock.d.ts.map +1 -0
- package/dist/components/ui/CodeBlock.js +89 -0
- package/dist/components/ui/CodeBlock.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/platformApiTypes.d.ts +4176 -0
- package/dist/platformApiTypes.d.ts.map +1 -0
- package/dist/platformApiTypes.js +2 -0
- package/dist/platformApiTypes.js.map +1 -0
- package/dist/platformBridge.d.ts +43 -0
- package/dist/platformBridge.d.ts.map +1 -0
- package/dist/platformBridge.js +67 -0
- package/dist/platformBridge.js.map +1 -0
- package/dist/providerSelector.d.ts +28 -0
- package/dist/providerSelector.d.ts.map +1 -0
- package/dist/providerSelector.js +104 -0
- package/dist/providerSelector.js.map +1 -0
- package/dist/services/connectionMode.d.ts +13 -0
- package/dist/services/connectionMode.d.ts.map +1 -0
- package/dist/services/connectionMode.js +31 -0
- package/dist/services/connectionMode.js.map +1 -0
- package/dist/sessionTabs.d.ts +48 -0
- package/dist/sessionTabs.d.ts.map +1 -0
- package/dist/sessionTabs.js +106 -0
- package/dist/sessionTabs.js.map +1 -0
- package/dist/stores/acpAgentStore.d.ts +264 -0
- package/dist/stores/acpAgentStore.d.ts.map +1 -0
- package/dist/stores/acpAgentStore.js +825 -0
- package/dist/stores/acpAgentStore.js.map +1 -0
- package/dist/stores/agentChatStore.d.ts +693 -0
- package/dist/stores/agentChatStore.d.ts.map +1 -0
- package/dist/stores/agentChatStore.js +5876 -0
- package/dist/stores/agentChatStore.js.map +1 -0
- package/dist/stores/authStore.d.ts +26 -0
- package/dist/stores/authStore.d.ts.map +1 -0
- package/dist/stores/authStore.js +163 -0
- package/dist/stores/authStore.js.map +1 -0
- package/dist/stores/suggestionStore.d.ts +36 -0
- package/dist/stores/suggestionStore.d.ts.map +1 -0
- package/dist/stores/suggestionStore.js +187 -0
- package/dist/stores/suggestionStore.js.map +1 -0
- package/dist/stores/tabStore.d.ts +30 -0
- package/dist/stores/tabStore.d.ts.map +1 -0
- package/dist/stores/tabStore.js +252 -0
- package/dist/stores/tabStore.js.map +1 -0
- package/dist/stores/xenoChatStore.d.ts +88 -0
- package/dist/stores/xenoChatStore.d.ts.map +1 -0
- package/dist/stores/xenoChatStore.js +583 -0
- package/dist/stores/xenoChatStore.js.map +1 -0
- package/dist/types/agentEditor.d.ts +40 -0
- package/dist/types/agentEditor.d.ts.map +1 -0
- package/dist/types/agentEditor.js +2 -0
- package/dist/types/agentEditor.js.map +1 -0
- package/dist/types/agentPermissions.d.ts +45 -0
- package/dist/types/agentPermissions.d.ts.map +1 -0
- package/dist/types/agentPermissions.js +15 -0
- package/dist/types/agentPermissions.js.map +1 -0
- package/dist/types/agentRuntimeProvider.d.ts +2 -0
- package/dist/types/agentRuntimeProvider.d.ts.map +1 -0
- package/dist/types/agentRuntimeProvider.js +2 -0
- package/dist/types/agentRuntimeProvider.js.map +1 -0
- package/dist/utils/acpExecutionAuthority.d.ts +26 -0
- package/dist/utils/acpExecutionAuthority.d.ts.map +1 -0
- package/dist/utils/acpExecutionAuthority.js +46 -0
- package/dist/utils/acpExecutionAuthority.js.map +1 -0
- package/dist/utils/advertisedReasoning.d.ts +25 -0
- package/dist/utils/advertisedReasoning.d.ts.map +1 -0
- package/dist/utils/advertisedReasoning.js +62 -0
- package/dist/utils/advertisedReasoning.js.map +1 -0
- package/dist/utils/agentAttachedContextPrompt.d.ts +2 -0
- package/dist/utils/agentAttachedContextPrompt.d.ts.map +1 -0
- package/dist/utils/agentAttachedContextPrompt.js +2 -0
- package/dist/utils/agentAttachedContextPrompt.js.map +1 -0
- package/dist/utils/agentModelContext.d.ts +2 -0
- package/dist/utils/agentModelContext.d.ts.map +1 -0
- package/dist/utils/agentModelContext.js +2 -0
- package/dist/utils/agentModelContext.js.map +1 -0
- package/dist/utils/agentReasoningEffort.d.ts +3 -0
- package/dist/utils/agentReasoningEffort.d.ts.map +1 -0
- package/dist/utils/agentReasoningEffort.js +2 -0
- package/dist/utils/agentReasoningEffort.js.map +1 -0
- package/dist/utils/agentRuntimeProvider.d.ts +3 -0
- package/dist/utils/agentRuntimeProvider.d.ts.map +1 -0
- package/dist/utils/agentRuntimeProvider.js +2 -0
- package/dist/utils/agentRuntimeProvider.js.map +1 -0
- package/dist/utils/clipboardCopy.d.ts +4 -0
- package/dist/utils/clipboardCopy.d.ts.map +1 -0
- package/dist/utils/clipboardCopy.js +27 -0
- package/dist/utils/clipboardCopy.js.map +1 -0
- package/dist/utils/cloudModels.d.ts +3 -0
- package/dist/utils/cloudModels.d.ts.map +1 -0
- package/dist/utils/cloudModels.js +181 -0
- package/dist/utils/cloudModels.js.map +1 -0
- package/dist/utils/conversationRuntime.d.ts +3 -0
- package/dist/utils/conversationRuntime.d.ts.map +1 -0
- package/dist/utils/conversationRuntime.js +2 -0
- package/dist/utils/conversationRuntime.js.map +1 -0
- package/dist/utils/fileCreateIntent.d.ts +16 -0
- package/dist/utils/fileCreateIntent.d.ts.map +1 -0
- package/dist/utils/fileCreateIntent.js +123 -0
- package/dist/utils/fileCreateIntent.js.map +1 -0
- package/dist/utils/legacyAgentRuntimeEvents.d.ts +2 -0
- package/dist/utils/legacyAgentRuntimeEvents.d.ts.map +1 -0
- package/dist/utils/legacyAgentRuntimeEvents.js +2 -0
- package/dist/utils/legacyAgentRuntimeEvents.js.map +1 -0
- package/dist/utils/markdownWindowsPaths.d.ts +2 -0
- package/dist/utils/markdownWindowsPaths.d.ts.map +1 -0
- package/dist/utils/markdownWindowsPaths.js +2 -0
- package/dist/utils/markdownWindowsPaths.js.map +1 -0
- package/dist/utils/modelAvailability.d.ts +11 -0
- package/dist/utils/modelAvailability.d.ts.map +1 -0
- package/dist/utils/modelAvailability.js +10 -0
- package/dist/utils/modelAvailability.js.map +1 -0
- package/dist/utils/providerAvailability.d.ts +8 -0
- package/dist/utils/providerAvailability.d.ts.map +1 -0
- package/dist/utils/providerAvailability.js +13 -0
- package/dist/utils/providerAvailability.js.map +1 -0
- package/dist/utils/providerCommandArgs.d.ts +11 -0
- package/dist/utils/providerCommandArgs.d.ts.map +1 -0
- package/dist/utils/providerCommandArgs.js +18 -0
- package/dist/utils/providerCommandArgs.js.map +1 -0
- package/dist/utils/workspaceSelectionContinuation.d.ts +2 -0
- package/dist/utils/workspaceSelectionContinuation.d.ts.map +1 -0
- package/dist/utils/workspaceSelectionContinuation.js +2 -0
- package/dist/utils/workspaceSelectionContinuation.js.map +1 -0
- package/package.json +55 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
XENO Agent — Proprietary Software License
|
|
2
|
+
Copyright © 2026 XENO Corporation. All rights reserved.
|
|
3
|
+
|
|
4
|
+
This software, including its source code, compiled binaries, published packages,
|
|
5
|
+
assets, and accompanying documentation (collectively, the "Software"), is the
|
|
6
|
+
proprietary and confidential property of XENO Corporation ("XENO"). The Software
|
|
7
|
+
is licensed for use, not sold, and no title to or ownership of the Software is
|
|
8
|
+
transferred to any user.
|
|
9
|
+
|
|
10
|
+
1. GRANT OF USE
|
|
11
|
+
Subject to a separate written agreement and/or the terms of service published
|
|
12
|
+
at https://xenostudio.ai, XENO grants the end user a limited, non-exclusive,
|
|
13
|
+
non-transferable, revocable license to install and use the Software for its
|
|
14
|
+
intended purpose. The standalone desktop application ("the Agent") may be used
|
|
15
|
+
locally at no charge; connected platform features — hosted agent runs, model
|
|
16
|
+
inference, credits, and account services — are governed by the applicable
|
|
17
|
+
subscription and the XENO terms of service.
|
|
18
|
+
|
|
19
|
+
2. PACKAGE DISTRIBUTION
|
|
20
|
+
The `@xeno-corporation/xeno-agent-interface-*` and
|
|
21
|
+
`@xeno-corporation/xeno-agents-client` packages are published to a PRIVATE
|
|
22
|
+
registry and are licensed for use solely by XENO products and by parties
|
|
23
|
+
holding a separate written agreement with XENO. Access credentials to that
|
|
24
|
+
registry do not grant redistribution rights. Publication of any package in
|
|
25
|
+
this repository to a public registry is prohibited without written
|
|
26
|
+
authorization from XENO.
|
|
27
|
+
|
|
28
|
+
3. RESTRICTIONS
|
|
29
|
+
Except to the extent expressly permitted by applicable law or by a separate
|
|
30
|
+
written agreement with XENO, you may NOT: (a) copy, redistribute, sell, rent,
|
|
31
|
+
lease, sublicense, or otherwise transfer the Software; (b) modify, adapt,
|
|
32
|
+
translate, or create derivative works of the Software; (c) reverse-engineer,
|
|
33
|
+
decompile, or disassemble the Software, or attempt to derive its source code;
|
|
34
|
+
(d) remove, obscure, or alter any proprietary notices; or (e) use the Software
|
|
35
|
+
to build a competing product.
|
|
36
|
+
|
|
37
|
+
4. RESERVATION OF RIGHTS
|
|
38
|
+
All rights not expressly granted are reserved by XENO Corporation. The Software
|
|
39
|
+
is protected by copyright and other intellectual-property laws and treaties.
|
|
40
|
+
|
|
41
|
+
5. DISCLAIMER OF WARRANTY
|
|
42
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND "AS AVAILABLE", WITHOUT WARRANTY OF ANY
|
|
43
|
+
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
44
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THE
|
|
45
|
+
SOFTWARE EXECUTES AGENT-DIRECTED OPERATIONS AGAINST A USER-SELECTED WORKSPACE,
|
|
46
|
+
INCLUDING FILE AND PROCESS ACTIONS; THE USER IS RESPONSIBLE FOR THE WORKSPACES
|
|
47
|
+
AND PERMISSIONS THEY GRANT IT.
|
|
48
|
+
|
|
49
|
+
6. LIMITATION OF LIABILITY
|
|
50
|
+
TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL XENO CORPORATION BE
|
|
51
|
+
LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE
|
|
52
|
+
DAMAGES, OR ANY LOSS OF PROFITS OR DATA, ARISING FROM OR RELATED TO THE USE OF
|
|
53
|
+
OR INABILITY TO USE THE SOFTWARE.
|
|
54
|
+
|
|
55
|
+
7. THIRD-PARTY COMPONENTS
|
|
56
|
+
The Software includes third-party open-source components, each licensed under
|
|
57
|
+
its own terms; those terms govern those components and are not superseded by
|
|
58
|
+
this license. It also composes third-party agent providers over the Agent
|
|
59
|
+
Client Protocol and hosted APIs; use of those providers is governed by their
|
|
60
|
+
own terms.
|
|
61
|
+
|
|
62
|
+
For licensing inquiries, contact: legal@xenostudio.ai
|
|
63
|
+
|
|
64
|
+
NOTE TO OPERATOR: confirm the exact legal entity name and notice/contact details
|
|
65
|
+
with counsel before public distribution and code-signing (the code-signing
|
|
66
|
+
publisher name must match the registered entity). No public distribution of this
|
|
67
|
+
product is authorized by this file — see docs/PRODUCT_STATUS.md.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { HubAgentCompatibilityBridge } from '@xenosystem/agent-interface-hub-adapter';
|
|
2
|
+
import type { XenoAPI } from '../platformApiTypes.js';
|
|
3
|
+
/**
|
|
4
|
+
* Temporary compatibility boundary between the versioned Agent host client
|
|
5
|
+
* and XENO Hub's mature preload services.
|
|
6
|
+
*
|
|
7
|
+
* Shared UI code consumes the host client. This bridge is the only renderer
|
|
8
|
+
* migration layer allowed to translate that protocol back to legacy Hub IPC
|
|
9
|
+
* while each main-process service moves behind the real per-user host.
|
|
10
|
+
*/
|
|
11
|
+
export type HubXenoAgentCompatibilityBridge = HubAgentCompatibilityBridge;
|
|
12
|
+
export type HubPreloadApi = Pick<XenoAPI, 'llm' | 'acp' | 'runtimeEvents' | 'agent' | 'workspaceStorage' | 'agentStorage' | 'workspace'>;
|
|
13
|
+
export declare function createHubXenoAgentCompatibilityBridge(api: HubPreloadApi): HubXenoAgentCompatibilityBridge;
|
|
14
|
+
//# sourceMappingURL=xenoAgentCompatibilityBridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xenoAgentCompatibilityBridge.d.ts","sourceRoot":"","sources":["../../src/adapters/xenoAgentCompatibilityBridge.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAA;AAC1F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD;;;;;;;GAOG;AACH,MAAM,MAAM,+BAA+B,GAAG,2BAA2B,CAAA;AAEzE,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,OAAO,EACL,KAAK,GACL,KAAK,GACL,eAAe,GACf,OAAO,GACP,kBAAkB,GAClB,cAAc,GACd,WAAW,CACd,CAAA;AAED,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,aAAa,GACjB,+BAA+B,CAuHjC"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
export function createHubXenoAgentCompatibilityBridge(api) {
|
|
2
|
+
return {
|
|
3
|
+
listCloudModels: () => api.llm.models(),
|
|
4
|
+
listAcpAgents: () => api.acp.listAgents(),
|
|
5
|
+
getAcpAgent: (agentConfigId) => api.acp.getAgent(agentConfigId),
|
|
6
|
+
getAcpProviderModels: (agentConfigId, providerId) => (api.acp.getProviderModels(agentConfigId, providerId)),
|
|
7
|
+
listRuntimeEvents: (request) => api.runtimeEvents.list(request),
|
|
8
|
+
subscribeRuntimeEvents: (listener) => {
|
|
9
|
+
const subscriptionId = api.runtimeEvents.subscribeAppended(listener);
|
|
10
|
+
let active = true;
|
|
11
|
+
return () => {
|
|
12
|
+
if (!active)
|
|
13
|
+
return;
|
|
14
|
+
active = false;
|
|
15
|
+
api.runtimeEvents.unsubscribeAppended(subscriptionId);
|
|
16
|
+
};
|
|
17
|
+
},
|
|
18
|
+
answerChooseDirectory: (input) => api.agent.answerChooseDirectory(input),
|
|
19
|
+
answerWorkspacePlacement: (input) => api.agent.answerWorkspacePlacement(input),
|
|
20
|
+
subscribeChooseDirectoryRequests: (listener) => {
|
|
21
|
+
const subscriptionId = api.agent.subscribeChooseDirectoryRequested(listener);
|
|
22
|
+
let active = true;
|
|
23
|
+
return () => {
|
|
24
|
+
if (!active)
|
|
25
|
+
return;
|
|
26
|
+
active = false;
|
|
27
|
+
api.agent.unsubscribeChooseDirectoryRequested(subscriptionId);
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
subscribeWorkspacePlacementRequests: (listener) => {
|
|
31
|
+
const subscriptionId = api.agent.subscribeWorkspacePlacementRequested(listener);
|
|
32
|
+
let active = true;
|
|
33
|
+
return () => {
|
|
34
|
+
if (!active)
|
|
35
|
+
return;
|
|
36
|
+
active = false;
|
|
37
|
+
api.agent.unsubscribeWorkspacePlacementRequested(subscriptionId);
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
loadWorkspaces: () => api.workspaceStorage.load(),
|
|
41
|
+
saveWorkspaces: ({ workspaces, expectedRevision }) => api.workspaceStorage.save(workspaces, expectedRevision),
|
|
42
|
+
loadConversations: () => api.agentStorage.loadConversations(),
|
|
43
|
+
saveConversation: ({ conversation }) => api.agentStorage.saveConversation(conversation),
|
|
44
|
+
deleteConversation: async ({ conversationId }) => {
|
|
45
|
+
const result = await api.agentStorage.deleteConversation(conversationId);
|
|
46
|
+
return {
|
|
47
|
+
...result,
|
|
48
|
+
...(result.success ? { deleted: true } : {}),
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
listWorkspaceDirectory: (input) => api.workspace.listDirectory({
|
|
52
|
+
dirPath: input.dirPath,
|
|
53
|
+
allowedDirs: [...input.allowedDirectories],
|
|
54
|
+
}),
|
|
55
|
+
readWorkspaceFile: (input) => api.workspace.readFile({
|
|
56
|
+
path: input.path,
|
|
57
|
+
allowedDirs: [...input.allowedDirectories],
|
|
58
|
+
...(input.conversationId ? { conversationId: input.conversationId } : {}),
|
|
59
|
+
}),
|
|
60
|
+
writeWorkspaceFile: (input) => api.workspace.writeFile({
|
|
61
|
+
...(input.conversationId ? { conversationId: input.conversationId } : {}),
|
|
62
|
+
...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),
|
|
63
|
+
...(input.teamId ? { teamId: input.teamId } : {}),
|
|
64
|
+
...(input.agentId ? { agentId: input.agentId } : {}),
|
|
65
|
+
path: input.path,
|
|
66
|
+
content: input.content,
|
|
67
|
+
...(input.expectedContent === undefined ? {} : { expectedContent: input.expectedContent }),
|
|
68
|
+
allowedDirs: [...input.allowedDirectories],
|
|
69
|
+
}),
|
|
70
|
+
runWorkspaceCommand: async (input) => {
|
|
71
|
+
const result = await api.workspace.runCommand({
|
|
72
|
+
...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),
|
|
73
|
+
...(input.teamId ? { teamId: input.teamId } : {}),
|
|
74
|
+
...(input.agentId ? { agentId: input.agentId } : {}),
|
|
75
|
+
command: input.command,
|
|
76
|
+
allowedDirs: [...input.allowedDirectories],
|
|
77
|
+
...(input.conversationId ? { conversationId: input.conversationId } : {}),
|
|
78
|
+
...(input.cwd ? { cwd: input.cwd } : {}),
|
|
79
|
+
...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),
|
|
80
|
+
});
|
|
81
|
+
// 🔴 `truncated` is REQUIRED by the contract and OPTIONAL from a preload,
|
|
82
|
+
// because an older host predates the field. A host that cannot say is
|
|
83
|
+
// reported as NOT truncated here — the one place in this change where a
|
|
84
|
+
// guess is made, and it is made in the direction that matches how every
|
|
85
|
+
// such host behaved before the field existed: it trimmed silently, and
|
|
86
|
+
// every caller already read the output as complete. Widening the contract
|
|
87
|
+
// to `boolean | undefined` would push that same guess onto every consumer
|
|
88
|
+
// instead of resolving it once at the compatibility seam, which is what
|
|
89
|
+
// this file is for.
|
|
90
|
+
return { ...result, truncated: result.truncated ?? false };
|
|
91
|
+
},
|
|
92
|
+
startWorkspaceTerminal: (input) => api.workspace.terminalStart({
|
|
93
|
+
command: input.command,
|
|
94
|
+
allowedDirs: [...input.allowedDirectories],
|
|
95
|
+
...(input.conversationId ? { conversationId: input.conversationId } : {}),
|
|
96
|
+
...(input.cwd ? { cwd: input.cwd } : {}),
|
|
97
|
+
...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),
|
|
98
|
+
}),
|
|
99
|
+
stopWorkspaceTerminal: (input) => api.workspace.terminalStop({ terminalId: input.terminalId }),
|
|
100
|
+
startWorkspacePty: (input) => api.workspace.ptyStart({
|
|
101
|
+
allowedDirs: [...input.allowedDirectories],
|
|
102
|
+
...(input.cwd ? { cwd: input.cwd } : {}),
|
|
103
|
+
...(input.cols === undefined ? {} : { cols: input.cols }),
|
|
104
|
+
...(input.rows === undefined ? {} : { rows: input.rows }),
|
|
105
|
+
}),
|
|
106
|
+
snapshotWorkspacePty: (input) => api.workspace.ptySnapshot({ terminalId: input.terminalId }),
|
|
107
|
+
inputWorkspacePty: (input) => api.workspace.ptyInput({
|
|
108
|
+
terminalId: input.terminalId,
|
|
109
|
+
data: input.data,
|
|
110
|
+
}),
|
|
111
|
+
resizeWorkspacePty: (input) => api.workspace.ptyResize({
|
|
112
|
+
terminalId: input.terminalId,
|
|
113
|
+
cols: input.cols,
|
|
114
|
+
rows: input.rows,
|
|
115
|
+
}),
|
|
116
|
+
clearWorkspacePty: (input) => api.workspace.ptyClear({ terminalId: input.terminalId }),
|
|
117
|
+
stopWorkspacePty: (input) => api.workspace.ptyStop({ terminalId: input.terminalId }),
|
|
118
|
+
startTurn: (input) => startHubAcpTurn(api.acp, input),
|
|
119
|
+
cancelTurn: (input) => cancelHubAcpTurn(api.acp, input),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
async function startHubAcpTurn(acp, input) {
|
|
123
|
+
const agentConfigId = acpAgentConfigId(input.selection.providerId);
|
|
124
|
+
if (!agentConfigId) {
|
|
125
|
+
return {
|
|
126
|
+
success: false,
|
|
127
|
+
code: 'provider_not_found',
|
|
128
|
+
safeError: 'The selected runtime is not an ACP provider.',
|
|
129
|
+
conversationId: input.conversationId,
|
|
130
|
+
requestId: input.requestId,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const allowedDirectories = Array.from(new Set([
|
|
134
|
+
input.workspace?.primaryDirectory,
|
|
135
|
+
...(input.workspace?.additionalDirectories || []),
|
|
136
|
+
].filter((value) => typeof value === 'string' && value.length > 0)));
|
|
137
|
+
const caller = legacyCaller(input, allowedDirectories);
|
|
138
|
+
const result = await acp.runAgentPrompt({
|
|
139
|
+
id: agentConfigId,
|
|
140
|
+
acpAgentConfigId: agentConfigId,
|
|
141
|
+
requestId: input.requestId,
|
|
142
|
+
conversationId: input.conversationId,
|
|
143
|
+
...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),
|
|
144
|
+
...(input.teamId ? { teamId: input.teamId } : {}),
|
|
145
|
+
...(input.agentId ? { agentId: input.agentId } : {}),
|
|
146
|
+
prompt: input.prompt,
|
|
147
|
+
...(input.history ? { history: structuredClone(input.history) } : {}),
|
|
148
|
+
...(input.systemPrompt ? { systemPrompt: input.systemPrompt } : {}),
|
|
149
|
+
...(input.workspace?.primaryDirectory ? { cwd: input.workspace.primaryDirectory } : {}),
|
|
150
|
+
...(input.workspace?.additionalDirectories
|
|
151
|
+
? { additionalDirectories: [...input.workspace.additionalDirectories] }
|
|
152
|
+
: {}),
|
|
153
|
+
execution: {
|
|
154
|
+
schemaVersion: 1,
|
|
155
|
+
permissionProfile: input.workspace?.permissionProfile || 'standard',
|
|
156
|
+
filesystem: input.workspace?.filesystem || 'read-only',
|
|
157
|
+
},
|
|
158
|
+
...(input.selection.runtimeModelId || input.selection.modelId
|
|
159
|
+
? { providerModel: input.selection.runtimeModelId || input.selection.modelId }
|
|
160
|
+
: {}),
|
|
161
|
+
...(input.continuation
|
|
162
|
+
? {
|
|
163
|
+
resumeSessionId: input.continuation.providerSessionId,
|
|
164
|
+
resumeState: input.continuation.state,
|
|
165
|
+
resumeAgentConfigId: agentConfigId,
|
|
166
|
+
resumeAgentConfigFingerprint: input.continuation.providerConfigFingerprint,
|
|
167
|
+
resumeWorkspaceFingerprint: input.continuation.workspaceFingerprint,
|
|
168
|
+
}
|
|
169
|
+
: {}),
|
|
170
|
+
...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),
|
|
171
|
+
...(caller ? { caller } : {}),
|
|
172
|
+
});
|
|
173
|
+
if (result.success || result.status === 'cancelled') {
|
|
174
|
+
return {
|
|
175
|
+
success: true,
|
|
176
|
+
status: 'accepted',
|
|
177
|
+
conversationId: input.conversationId,
|
|
178
|
+
requestId: input.requestId,
|
|
179
|
+
adapterId: 'hub-acp-compatibility',
|
|
180
|
+
selection: structuredClone(input.selection),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
success: false,
|
|
185
|
+
code: failureCode(result.error),
|
|
186
|
+
safeError: safeError(result.error, 'The Hub ACP runtime could not start the turn.'),
|
|
187
|
+
conversationId: input.conversationId,
|
|
188
|
+
requestId: input.requestId,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
async function cancelHubAcpTurn(acp, input) {
|
|
192
|
+
const result = await acp.cancelAgentPrompt({
|
|
193
|
+
requestId: input.requestId,
|
|
194
|
+
conversationId: input.conversationId,
|
|
195
|
+
...(input.reason ? { reason: input.reason } : {}),
|
|
196
|
+
});
|
|
197
|
+
if (result.success && result.cancelled) {
|
|
198
|
+
return {
|
|
199
|
+
success: true,
|
|
200
|
+
status: 'cancel_requested',
|
|
201
|
+
conversationId: input.conversationId,
|
|
202
|
+
requestId: input.requestId,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
success: false,
|
|
207
|
+
code: 'turn_not_active',
|
|
208
|
+
safeError: safeError(result.error, 'The requested turn is not active.'),
|
|
209
|
+
conversationId: input.conversationId,
|
|
210
|
+
requestId: input.requestId,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function acpAgentConfigId(providerId) {
|
|
214
|
+
if (!providerId.startsWith('acp:'))
|
|
215
|
+
return null;
|
|
216
|
+
const id = providerId.slice('acp:'.length).trim();
|
|
217
|
+
return id || null;
|
|
218
|
+
}
|
|
219
|
+
function legacyCaller(input, allowedDirectories) {
|
|
220
|
+
if (!input.workspaceId && !input.teamId && !input.agentId && allowedDirectories.length === 0)
|
|
221
|
+
return undefined;
|
|
222
|
+
return {
|
|
223
|
+
...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),
|
|
224
|
+
...(input.teamId ? { teamId: input.teamId } : {}),
|
|
225
|
+
...(input.agentId ? { agentId: input.agentId } : {}),
|
|
226
|
+
allowedDirectories,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
function failureCode(error) {
|
|
230
|
+
const message = safeError(error, '').toLowerCase();
|
|
231
|
+
if (message.includes('not found'))
|
|
232
|
+
return 'provider_not_found';
|
|
233
|
+
if (message.includes('disabled') || message.includes('not certified'))
|
|
234
|
+
return 'provider_unavailable';
|
|
235
|
+
if (message.includes('already running'))
|
|
236
|
+
return 'request_already_active';
|
|
237
|
+
if (message.includes('required') || message.includes('invalid'))
|
|
238
|
+
return 'invalid_request';
|
|
239
|
+
return 'adapter_unavailable';
|
|
240
|
+
}
|
|
241
|
+
function safeError(value, fallback) {
|
|
242
|
+
if (typeof value !== 'string')
|
|
243
|
+
return fallback;
|
|
244
|
+
const normalized = value.trim();
|
|
245
|
+
return normalized ? normalized.slice(0, 1_000) : fallback;
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=xenoAgentCompatibilityBridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xenoAgentCompatibilityBridge.js","sourceRoot":"","sources":["../../src/adapters/xenoAgentCompatibilityBridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { AgentProviderListResult, AgentRuntimeProviderDescriptor } from '@xenosystem/agent-interface-contract';
|
|
2
|
+
import { AgentHostClient } from '@xenosystem/agent-interface-client';
|
|
3
|
+
import type { XenoAPI } from '../platformApiTypes.js';
|
|
4
|
+
import { type HubPreloadApi } from './xenoAgentCompatibilityBridge.js';
|
|
5
|
+
export type HubAgentHostPreloadApi = HubPreloadApi & Pick<XenoAPI, 'updater' | 'agentHost'>;
|
|
6
|
+
export interface CreateHubAgentCatalogClientOptions {
|
|
7
|
+
instanceId?: string;
|
|
8
|
+
allowFixtureProviders?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface HubAgentHostClientSession {
|
|
11
|
+
client: AgentHostClient;
|
|
12
|
+
transport: {
|
|
13
|
+
dispose(): void;
|
|
14
|
+
};
|
|
15
|
+
source: 'native-host' | 'compatibility-facade';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Selects a connected product-owned client for all shared UI catalog reads.
|
|
19
|
+
*/
|
|
20
|
+
export declare function configureAgentCatalogHostClient(client: AgentHostClient | null): () => void;
|
|
21
|
+
export declare function subscribeHubAgentProviderCatalog(listener: (catalog: AgentProviderListResult) => void): () => void;
|
|
22
|
+
/**
|
|
23
|
+
* Prefers Hub's main-process local-host transport. The compatibility facade is
|
|
24
|
+
* retained only as a fail-closed rollback path during the migration window.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createHubAgentHostClient(api: HubAgentHostPreloadApi, options?: CreateHubAgentCatalogClientOptions): Promise<HubAgentHostClientSession>;
|
|
27
|
+
/** @deprecated Use createHubAgentHostClient; retained during the Hub migration window. */
|
|
28
|
+
export declare function createHubAgentCatalogClient(api: HubAgentHostPreloadApi, options?: CreateHubAgentCatalogClientOptions): Promise<HubAgentHostClientSession>;
|
|
29
|
+
export declare function loadHubAgentProviderCatalog(): Promise<AgentProviderListResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Refreshes provider-owned metadata through the host. Concurrent callers share
|
|
32
|
+
* one request and healthy catalogs are reused briefly to avoid spawning a
|
|
33
|
+
* provider discovery process every time a selector is toggled.
|
|
34
|
+
*/
|
|
35
|
+
export declare function refreshHubAgentProviderCatalog(options?: {
|
|
36
|
+
force?: boolean;
|
|
37
|
+
}): Promise<AgentProviderListResult>;
|
|
38
|
+
export declare function loadHubAgentProvider(providerId: string): Promise<AgentRuntimeProviderDescriptor | undefined>;
|
|
39
|
+
export declare function disposeHubAgentCatalogClient(): void;
|
|
40
|
+
//# sourceMappingURL=xenoAgentHostCatalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xenoAgentHostCatalog.d.ts","sourceRoot":"","sources":["../../src/adapters/xenoAgentHostCatalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAMV,uBAAuB,EACvB,8BAA8B,EAC/B,MAAM,sCAAsC,CAAA;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AAIpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,mCAAmC,CAAA;AAE1C,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC,CAAA;AAE3F,MAAM,WAAW,kCAAkC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,eAAe,CAAA;IACvB,SAAS,EAAE;QAAE,OAAO,IAAI,IAAI,CAAA;KAAE,CAAA;IAC9B,MAAM,EAAE,aAAa,GAAG,sBAAsB,CAAA;CAC/C;AAaD;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,eAAe,GAAG,IAAI,GAC7B,MAAM,IAAI,CAkBZ;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,GACnD,MAAM,IAAI,CAKZ;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,sBAAsB,EAC3B,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,yBAAyB,CAAC,CAyCpC;AAED,0FAA0F;AAC1F,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,sBAAsB,EAC3B,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,yBAAyB,CAAC,CAEpC;AAED,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAGpF;AAED;;;;GAIG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAAC,uBAAuB,CAAC,CAUlC;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,8BAA8B,GAAG,SAAS,CAAC,CAGrD;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAYnD"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { getAgentPlatformBridge } from '../platformBridge.js';
|
|
2
|
+
import { isAgentHostEvent } from '@xenosystem/agent-interface-contract';
|
|
3
|
+
import { AgentHostClient } from '@xenosystem/agent-interface-client';
|
|
4
|
+
import { createHubAgentCompatibilityClient, } from '@xenosystem/agent-interface-hub-adapter';
|
|
5
|
+
import { createHubXenoAgentCompatibilityBridge, } from './xenoAgentCompatibilityBridge.js';
|
|
6
|
+
let activeClientPromise = null;
|
|
7
|
+
let activeNativeHostClient = null;
|
|
8
|
+
let activeCatalogEventUnsubscribe = null;
|
|
9
|
+
let activeCatalogRequest = null;
|
|
10
|
+
let activeCatalogPublishRequested = false;
|
|
11
|
+
let cachedProviderCatalog = null;
|
|
12
|
+
let cachedProviderCatalogAt = 0;
|
|
13
|
+
let providerCatalogGeneration = 0;
|
|
14
|
+
const PROVIDER_CATALOG_REFRESH_TTL_MS = 30_000;
|
|
15
|
+
const providerCatalogListeners = new Set();
|
|
16
|
+
/**
|
|
17
|
+
* Selects a connected product-owned client for all shared UI catalog reads.
|
|
18
|
+
*/
|
|
19
|
+
export function configureAgentCatalogHostClient(client) {
|
|
20
|
+
activeCatalogEventUnsubscribe?.();
|
|
21
|
+
activeCatalogEventUnsubscribe = null;
|
|
22
|
+
resetProviderCatalogCache();
|
|
23
|
+
activeNativeHostClient = client;
|
|
24
|
+
if (client) {
|
|
25
|
+
activeCatalogEventUnsubscribe = client.subscribe((event) => {
|
|
26
|
+
if (event.type !== 'provider.catalog.changed')
|
|
27
|
+
return;
|
|
28
|
+
void readChangedProviderCatalog(client);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return () => {
|
|
32
|
+
if (activeNativeHostClient !== client)
|
|
33
|
+
return;
|
|
34
|
+
activeCatalogEventUnsubscribe?.();
|
|
35
|
+
activeCatalogEventUnsubscribe = null;
|
|
36
|
+
activeNativeHostClient = null;
|
|
37
|
+
resetProviderCatalogCache();
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function subscribeHubAgentProviderCatalog(listener) {
|
|
41
|
+
providerCatalogListeners.add(listener);
|
|
42
|
+
return () => {
|
|
43
|
+
providerCatalogListeners.delete(listener);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Prefers Hub's main-process local-host transport. The compatibility facade is
|
|
48
|
+
* retained only as a fail-closed rollback path during the migration window.
|
|
49
|
+
*/
|
|
50
|
+
export async function createHubAgentHostClient(api, options = {}) {
|
|
51
|
+
// Best-effort already: the existing `.catch` says a failed lookup is not fatal. `updater` is
|
|
52
|
+
// optional on XenoAPI now, so an ABSENT one takes the same route as a failing one rather than
|
|
53
|
+
// throwing — a host that cannot report a version is not a host that cannot run an agent.
|
|
54
|
+
const version = (await api.updater?.getVersion().catch(() => 'unknown')) ?? 'unknown';
|
|
55
|
+
const instanceId = options.instanceId || createRendererInstanceId();
|
|
56
|
+
if (api.agentHost) {
|
|
57
|
+
const transport = new HubPreloadAgentHostTransport(api.agentHost);
|
|
58
|
+
const client = new AgentHostClient({
|
|
59
|
+
transport,
|
|
60
|
+
identity: {
|
|
61
|
+
clientId: 'xeno-hub-agent-interface',
|
|
62
|
+
clientVersion: version,
|
|
63
|
+
instanceId,
|
|
64
|
+
surface: 'hub-embed',
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
try {
|
|
68
|
+
await client.connect();
|
|
69
|
+
return { client, transport, source: 'native-host' };
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
transport.dispose();
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const result = createHubAgentCompatibilityClient({
|
|
77
|
+
bridge: createHubXenoAgentCompatibilityBridge(api),
|
|
78
|
+
hostVersion: version,
|
|
79
|
+
hostInstanceId: `hub-agent-host:${instanceId}`,
|
|
80
|
+
storageSchemaVersion: 2,
|
|
81
|
+
eventSchemaVersion: 1,
|
|
82
|
+
allowFixtureProviders: options.allowFixtureProviders === true,
|
|
83
|
+
identity: {
|
|
84
|
+
clientId: 'xeno-hub-agent-interface',
|
|
85
|
+
clientVersion: version,
|
|
86
|
+
instanceId,
|
|
87
|
+
surface: 'hub-embed',
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
await result.client.connect();
|
|
91
|
+
return { ...result, source: 'compatibility-facade' };
|
|
92
|
+
}
|
|
93
|
+
/** @deprecated Use createHubAgentHostClient; retained during the Hub migration window. */
|
|
94
|
+
export function createHubAgentCatalogClient(api, options = {}) {
|
|
95
|
+
return createHubAgentHostClient(api, options);
|
|
96
|
+
}
|
|
97
|
+
export async function loadHubAgentProviderCatalog() {
|
|
98
|
+
const client = await currentCatalogClient();
|
|
99
|
+
return requestProviderCatalog(client, 'list', false);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Refreshes provider-owned metadata through the host. Concurrent callers share
|
|
103
|
+
* one request and healthy catalogs are reused briefly to avoid spawning a
|
|
104
|
+
* provider discovery process every time a selector is toggled.
|
|
105
|
+
*/
|
|
106
|
+
export async function refreshHubAgentProviderCatalog(options = {}) {
|
|
107
|
+
if (options.force !== true
|
|
108
|
+
&& cachedProviderCatalog
|
|
109
|
+
&& Date.now() - cachedProviderCatalogAt < PROVIDER_CATALOG_REFRESH_TTL_MS) {
|
|
110
|
+
return structuredClone(cachedProviderCatalog);
|
|
111
|
+
}
|
|
112
|
+
const client = await currentCatalogClient();
|
|
113
|
+
return requestProviderCatalog(client, 'refresh', true);
|
|
114
|
+
}
|
|
115
|
+
export async function loadHubAgentProvider(providerId) {
|
|
116
|
+
const catalog = await loadHubAgentProviderCatalog();
|
|
117
|
+
return catalog.providers.find((provider) => provider.id === providerId);
|
|
118
|
+
}
|
|
119
|
+
export function disposeHubAgentCatalogClient() {
|
|
120
|
+
activeCatalogEventUnsubscribe?.();
|
|
121
|
+
activeCatalogEventUnsubscribe = null;
|
|
122
|
+
activeNativeHostClient = null;
|
|
123
|
+
resetProviderCatalogCache();
|
|
124
|
+
const pending = activeClientPromise;
|
|
125
|
+
activeClientPromise = null;
|
|
126
|
+
if (!pending)
|
|
127
|
+
return;
|
|
128
|
+
void pending.then(({ client, transport }) => {
|
|
129
|
+
client.disconnect();
|
|
130
|
+
transport.dispose();
|
|
131
|
+
}).catch(() => { });
|
|
132
|
+
}
|
|
133
|
+
async function readChangedProviderCatalog(client) {
|
|
134
|
+
if (activeNativeHostClient !== client)
|
|
135
|
+
return;
|
|
136
|
+
await requestProviderCatalog(client, 'list', true).catch(() => undefined);
|
|
137
|
+
}
|
|
138
|
+
async function currentCatalogClient() {
|
|
139
|
+
if (activeNativeHostClient)
|
|
140
|
+
return activeNativeHostClient;
|
|
141
|
+
const session = await getHubAgentCatalogClient();
|
|
142
|
+
return activeNativeHostClient || session.client;
|
|
143
|
+
}
|
|
144
|
+
function requestProviderCatalog(client, mode, publish) {
|
|
145
|
+
if (activeCatalogRequest) {
|
|
146
|
+
activeCatalogPublishRequested ||= publish;
|
|
147
|
+
return activeCatalogRequest;
|
|
148
|
+
}
|
|
149
|
+
const generation = providerCatalogGeneration;
|
|
150
|
+
activeCatalogPublishRequested = publish;
|
|
151
|
+
const request = (mode === 'refresh'
|
|
152
|
+
? client.refreshProviders({ includeUnavailable: true })
|
|
153
|
+
: client.listProviders({ includeUnavailable: true }))
|
|
154
|
+
.then((catalog) => {
|
|
155
|
+
if (generation !== providerCatalogGeneration)
|
|
156
|
+
return structuredClone(catalog);
|
|
157
|
+
cachedProviderCatalog = structuredClone(catalog);
|
|
158
|
+
cachedProviderCatalogAt = Date.now();
|
|
159
|
+
if (activeCatalogPublishRequested) {
|
|
160
|
+
for (const listener of [...providerCatalogListeners])
|
|
161
|
+
listener(structuredClone(catalog));
|
|
162
|
+
}
|
|
163
|
+
return structuredClone(catalog);
|
|
164
|
+
})
|
|
165
|
+
.finally(() => {
|
|
166
|
+
if (activeCatalogRequest === request) {
|
|
167
|
+
activeCatalogRequest = null;
|
|
168
|
+
activeCatalogPublishRequested = false;
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
activeCatalogRequest = request;
|
|
172
|
+
return request;
|
|
173
|
+
}
|
|
174
|
+
function resetProviderCatalogCache() {
|
|
175
|
+
providerCatalogGeneration += 1;
|
|
176
|
+
activeCatalogRequest = null;
|
|
177
|
+
activeCatalogPublishRequested = false;
|
|
178
|
+
cachedProviderCatalog = null;
|
|
179
|
+
cachedProviderCatalogAt = 0;
|
|
180
|
+
}
|
|
181
|
+
function getHubAgentCatalogClient() {
|
|
182
|
+
if (!activeClientPromise) {
|
|
183
|
+
activeClientPromise = createHubAgentHostClient(getAgentPlatformBridge())
|
|
184
|
+
.catch((error) => {
|
|
185
|
+
activeClientPromise = null;
|
|
186
|
+
throw error;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
return activeClientPromise;
|
|
190
|
+
}
|
|
191
|
+
class HubPreloadAgentHostTransport {
|
|
192
|
+
bridge;
|
|
193
|
+
subscriptions = new Map();
|
|
194
|
+
disposed = false;
|
|
195
|
+
constructor(bridge) {
|
|
196
|
+
this.bridge = bridge;
|
|
197
|
+
}
|
|
198
|
+
async request(method, input) {
|
|
199
|
+
if (this.disposed)
|
|
200
|
+
throw new Error('The Hub Agent host transport is closed.');
|
|
201
|
+
return await this.bridge.request(method, structuredClone(input));
|
|
202
|
+
}
|
|
203
|
+
subscribe(listener) {
|
|
204
|
+
if (this.disposed)
|
|
205
|
+
throw new Error('The Hub Agent host transport is closed.');
|
|
206
|
+
const subscriptionId = this.bridge.subscribe((event) => {
|
|
207
|
+
if (isAgentHostEvent(event))
|
|
208
|
+
listener(structuredClone(event));
|
|
209
|
+
});
|
|
210
|
+
const unsubscribe = () => {
|
|
211
|
+
if (!this.subscriptions.delete(subscriptionId))
|
|
212
|
+
return;
|
|
213
|
+
this.bridge.unsubscribe(subscriptionId);
|
|
214
|
+
};
|
|
215
|
+
this.subscriptions.set(subscriptionId, unsubscribe);
|
|
216
|
+
return unsubscribe;
|
|
217
|
+
}
|
|
218
|
+
dispose() {
|
|
219
|
+
if (this.disposed)
|
|
220
|
+
return;
|
|
221
|
+
this.disposed = true;
|
|
222
|
+
for (const unsubscribe of [...this.subscriptions.values()])
|
|
223
|
+
unsubscribe();
|
|
224
|
+
this.subscriptions.clear();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function createRendererInstanceId() {
|
|
228
|
+
const randomId = globalThis.crypto?.randomUUID?.();
|
|
229
|
+
return randomId ? `hub-renderer:${randomId}` : `hub-renderer:${Date.now().toString(36)}`;
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=xenoAgentHostCatalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xenoAgentHostCatalog.js","sourceRoot":"","sources":["../../src/adapters/xenoAgentHostCatalog.ts"],"names":[],"mappings":"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"}
|