@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.
Files changed (218) hide show
  1. package/LICENSE +67 -0
  2. package/dist/adapters/xenoAgentCompatibilityBridge.d.ts +14 -0
  3. package/dist/adapters/xenoAgentCompatibilityBridge.d.ts.map +1 -0
  4. package/dist/adapters/xenoAgentCompatibilityBridge.js +247 -0
  5. package/dist/adapters/xenoAgentCompatibilityBridge.js.map +1 -0
  6. package/dist/adapters/xenoAgentHostCatalog.d.ts +40 -0
  7. package/dist/adapters/xenoAgentHostCatalog.d.ts.map +1 -0
  8. package/dist/adapters/xenoAgentHostCatalog.js +231 -0
  9. package/dist/adapters/xenoAgentHostCatalog.js.map +1 -0
  10. package/dist/components/agent/AIStatusIndicator.d.ts +25 -0
  11. package/dist/components/agent/AIStatusIndicator.d.ts.map +1 -0
  12. package/dist/components/agent/AIStatusIndicator.js +85 -0
  13. package/dist/components/agent/AIStatusIndicator.js.map +1 -0
  14. package/dist/components/agent/AgentNotificationBanner.d.ts +10 -0
  15. package/dist/components/agent/AgentNotificationBanner.d.ts.map +1 -0
  16. package/dist/components/agent/AgentNotificationBanner.js +28 -0
  17. package/dist/components/agent/AgentNotificationBanner.js.map +1 -0
  18. package/dist/components/agent/AgentView.d.ts +185 -0
  19. package/dist/components/agent/AgentView.d.ts.map +1 -0
  20. package/dist/components/agent/AgentView.js +7850 -0
  21. package/dist/components/agent/AgentView.js.map +1 -0
  22. package/dist/components/agent/AssistantTurnStatusNotice.d.ts +16 -0
  23. package/dist/components/agent/AssistantTurnStatusNotice.d.ts.map +1 -0
  24. package/dist/components/agent/AssistantTurnStatusNotice.js +54 -0
  25. package/dist/components/agent/AssistantTurnStatusNotice.js.map +1 -0
  26. package/dist/components/agent/CommandToolCard.d.ts +11 -0
  27. package/dist/components/agent/CommandToolCard.d.ts.map +1 -0
  28. package/dist/components/agent/CommandToolCard.js +29 -0
  29. package/dist/components/agent/CommandToolCard.js.map +1 -0
  30. package/dist/components/agent/GhostTextArea.d.ts +13 -0
  31. package/dist/components/agent/GhostTextArea.d.ts.map +1 -0
  32. package/dist/components/agent/GhostTextArea.js +21 -0
  33. package/dist/components/agent/GhostTextArea.js.map +1 -0
  34. package/dist/components/agent/LiveConversationCollaboration.d.ts +27 -0
  35. package/dist/components/agent/LiveConversationCollaboration.d.ts.map +1 -0
  36. package/dist/components/agent/LiveConversationCollaboration.js +127 -0
  37. package/dist/components/agent/LiveConversationCollaboration.js.map +1 -0
  38. package/dist/components/agent/SdkSessionPanel.d.ts +25 -0
  39. package/dist/components/agent/SdkSessionPanel.d.ts.map +1 -0
  40. package/dist/components/agent/SdkSessionPanel.js +15 -0
  41. package/dist/components/agent/SdkSessionPanel.js.map +1 -0
  42. package/dist/components/agent/SlashCommandAutocomplete.d.ts +12 -0
  43. package/dist/components/agent/SlashCommandAutocomplete.d.ts.map +1 -0
  44. package/dist/components/agent/SlashCommandAutocomplete.js +33 -0
  45. package/dist/components/agent/SlashCommandAutocomplete.js.map +1 -0
  46. package/dist/components/agent/collaborationWindow.d.ts +11 -0
  47. package/dist/components/agent/collaborationWindow.d.ts.map +1 -0
  48. package/dist/components/agent/collaborationWindow.js +10 -0
  49. package/dist/components/agent/collaborationWindow.js.map +1 -0
  50. package/dist/components/agent/conversationCollaborationAppendJournal.d.ts +25 -0
  51. package/dist/components/agent/conversationCollaborationAppendJournal.d.ts.map +1 -0
  52. package/dist/components/agent/conversationCollaborationAppendJournal.js +118 -0
  53. package/dist/components/agent/conversationCollaborationAppendJournal.js.map +1 -0
  54. package/dist/components/agent/conversationCollaborationController.d.ts +96 -0
  55. package/dist/components/agent/conversationCollaborationController.d.ts.map +1 -0
  56. package/dist/components/agent/conversationCollaborationController.js +597 -0
  57. package/dist/components/agent/conversationCollaborationController.js.map +1 -0
  58. package/dist/components/agent/destructiveConfirmation.d.ts +76 -0
  59. package/dist/components/agent/destructiveConfirmation.d.ts.map +1 -0
  60. package/dist/components/agent/destructiveConfirmation.js +231 -0
  61. package/dist/components/agent/destructiveConfirmation.js.map +1 -0
  62. package/dist/components/agent/editorOperationAuthority.d.ts +29 -0
  63. package/dist/components/agent/editorOperationAuthority.d.ts.map +1 -0
  64. package/dist/components/agent/editorOperationAuthority.js +73 -0
  65. package/dist/components/agent/editorOperationAuthority.js.map +1 -0
  66. package/dist/components/agent/mainAssistant.d.ts +24 -0
  67. package/dist/components/agent/mainAssistant.d.ts.map +1 -0
  68. package/dist/components/agent/mainAssistant.js +24 -0
  69. package/dist/components/agent/mainAssistant.js.map +1 -0
  70. package/dist/components/agent/nativeTuiComposerInput.d.ts +42 -0
  71. package/dist/components/agent/nativeTuiComposerInput.d.ts.map +1 -0
  72. package/dist/components/agent/nativeTuiComposerInput.js +51 -0
  73. package/dist/components/agent/nativeTuiComposerInput.js.map +1 -0
  74. package/dist/components/agent/settings/shared/InAppConfirmationDialog.d.ts +25 -0
  75. package/dist/components/agent/settings/shared/InAppConfirmationDialog.d.ts.map +1 -0
  76. package/dist/components/agent/settings/shared/InAppConfirmationDialog.js +89 -0
  77. package/dist/components/agent/settings/shared/InAppConfirmationDialog.js.map +1 -0
  78. package/dist/components/agent/toolCardDisplay.d.ts +24 -0
  79. package/dist/components/agent/toolCardDisplay.d.ts.map +1 -0
  80. package/dist/components/agent/toolCardDisplay.js +85 -0
  81. package/dist/components/agent/toolCardDisplay.js.map +1 -0
  82. package/dist/components/agent/webJobProgressView.d.ts +90 -0
  83. package/dist/components/agent/webJobProgressView.d.ts.map +1 -0
  84. package/dist/components/agent/webJobProgressView.js +104 -0
  85. package/dist/components/agent/webJobProgressView.js.map +1 -0
  86. package/dist/components/agent/workbenchPanelTabs.d.ts +12 -0
  87. package/dist/components/agent/workbenchPanelTabs.d.ts.map +1 -0
  88. package/dist/components/agent/workbenchPanelTabs.js +35 -0
  89. package/dist/components/agent/workbenchPanelTabs.js.map +1 -0
  90. package/dist/components/ui/CodeBlock.d.ts +8 -0
  91. package/dist/components/ui/CodeBlock.d.ts.map +1 -0
  92. package/dist/components/ui/CodeBlock.js +89 -0
  93. package/dist/components/ui/CodeBlock.js.map +1 -0
  94. package/dist/index.d.ts +50 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +45 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/platformApiTypes.d.ts +4176 -0
  99. package/dist/platformApiTypes.d.ts.map +1 -0
  100. package/dist/platformApiTypes.js +2 -0
  101. package/dist/platformApiTypes.js.map +1 -0
  102. package/dist/platformBridge.d.ts +43 -0
  103. package/dist/platformBridge.d.ts.map +1 -0
  104. package/dist/platformBridge.js +67 -0
  105. package/dist/platformBridge.js.map +1 -0
  106. package/dist/providerSelector.d.ts +28 -0
  107. package/dist/providerSelector.d.ts.map +1 -0
  108. package/dist/providerSelector.js +104 -0
  109. package/dist/providerSelector.js.map +1 -0
  110. package/dist/services/connectionMode.d.ts +13 -0
  111. package/dist/services/connectionMode.d.ts.map +1 -0
  112. package/dist/services/connectionMode.js +31 -0
  113. package/dist/services/connectionMode.js.map +1 -0
  114. package/dist/sessionTabs.d.ts +48 -0
  115. package/dist/sessionTabs.d.ts.map +1 -0
  116. package/dist/sessionTabs.js +106 -0
  117. package/dist/sessionTabs.js.map +1 -0
  118. package/dist/stores/acpAgentStore.d.ts +264 -0
  119. package/dist/stores/acpAgentStore.d.ts.map +1 -0
  120. package/dist/stores/acpAgentStore.js +825 -0
  121. package/dist/stores/acpAgentStore.js.map +1 -0
  122. package/dist/stores/agentChatStore.d.ts +693 -0
  123. package/dist/stores/agentChatStore.d.ts.map +1 -0
  124. package/dist/stores/agentChatStore.js +5876 -0
  125. package/dist/stores/agentChatStore.js.map +1 -0
  126. package/dist/stores/authStore.d.ts +26 -0
  127. package/dist/stores/authStore.d.ts.map +1 -0
  128. package/dist/stores/authStore.js +163 -0
  129. package/dist/stores/authStore.js.map +1 -0
  130. package/dist/stores/suggestionStore.d.ts +36 -0
  131. package/dist/stores/suggestionStore.d.ts.map +1 -0
  132. package/dist/stores/suggestionStore.js +187 -0
  133. package/dist/stores/suggestionStore.js.map +1 -0
  134. package/dist/stores/tabStore.d.ts +30 -0
  135. package/dist/stores/tabStore.d.ts.map +1 -0
  136. package/dist/stores/tabStore.js +252 -0
  137. package/dist/stores/tabStore.js.map +1 -0
  138. package/dist/stores/xenoChatStore.d.ts +88 -0
  139. package/dist/stores/xenoChatStore.d.ts.map +1 -0
  140. package/dist/stores/xenoChatStore.js +583 -0
  141. package/dist/stores/xenoChatStore.js.map +1 -0
  142. package/dist/types/agentEditor.d.ts +40 -0
  143. package/dist/types/agentEditor.d.ts.map +1 -0
  144. package/dist/types/agentEditor.js +2 -0
  145. package/dist/types/agentEditor.js.map +1 -0
  146. package/dist/types/agentPermissions.d.ts +45 -0
  147. package/dist/types/agentPermissions.d.ts.map +1 -0
  148. package/dist/types/agentPermissions.js +15 -0
  149. package/dist/types/agentPermissions.js.map +1 -0
  150. package/dist/types/agentRuntimeProvider.d.ts +2 -0
  151. package/dist/types/agentRuntimeProvider.d.ts.map +1 -0
  152. package/dist/types/agentRuntimeProvider.js +2 -0
  153. package/dist/types/agentRuntimeProvider.js.map +1 -0
  154. package/dist/utils/acpExecutionAuthority.d.ts +26 -0
  155. package/dist/utils/acpExecutionAuthority.d.ts.map +1 -0
  156. package/dist/utils/acpExecutionAuthority.js +46 -0
  157. package/dist/utils/acpExecutionAuthority.js.map +1 -0
  158. package/dist/utils/advertisedReasoning.d.ts +25 -0
  159. package/dist/utils/advertisedReasoning.d.ts.map +1 -0
  160. package/dist/utils/advertisedReasoning.js +62 -0
  161. package/dist/utils/advertisedReasoning.js.map +1 -0
  162. package/dist/utils/agentAttachedContextPrompt.d.ts +2 -0
  163. package/dist/utils/agentAttachedContextPrompt.d.ts.map +1 -0
  164. package/dist/utils/agentAttachedContextPrompt.js +2 -0
  165. package/dist/utils/agentAttachedContextPrompt.js.map +1 -0
  166. package/dist/utils/agentModelContext.d.ts +2 -0
  167. package/dist/utils/agentModelContext.d.ts.map +1 -0
  168. package/dist/utils/agentModelContext.js +2 -0
  169. package/dist/utils/agentModelContext.js.map +1 -0
  170. package/dist/utils/agentReasoningEffort.d.ts +3 -0
  171. package/dist/utils/agentReasoningEffort.d.ts.map +1 -0
  172. package/dist/utils/agentReasoningEffort.js +2 -0
  173. package/dist/utils/agentReasoningEffort.js.map +1 -0
  174. package/dist/utils/agentRuntimeProvider.d.ts +3 -0
  175. package/dist/utils/agentRuntimeProvider.d.ts.map +1 -0
  176. package/dist/utils/agentRuntimeProvider.js +2 -0
  177. package/dist/utils/agentRuntimeProvider.js.map +1 -0
  178. package/dist/utils/clipboardCopy.d.ts +4 -0
  179. package/dist/utils/clipboardCopy.d.ts.map +1 -0
  180. package/dist/utils/clipboardCopy.js +27 -0
  181. package/dist/utils/clipboardCopy.js.map +1 -0
  182. package/dist/utils/cloudModels.d.ts +3 -0
  183. package/dist/utils/cloudModels.d.ts.map +1 -0
  184. package/dist/utils/cloudModels.js +181 -0
  185. package/dist/utils/cloudModels.js.map +1 -0
  186. package/dist/utils/conversationRuntime.d.ts +3 -0
  187. package/dist/utils/conversationRuntime.d.ts.map +1 -0
  188. package/dist/utils/conversationRuntime.js +2 -0
  189. package/dist/utils/conversationRuntime.js.map +1 -0
  190. package/dist/utils/fileCreateIntent.d.ts +16 -0
  191. package/dist/utils/fileCreateIntent.d.ts.map +1 -0
  192. package/dist/utils/fileCreateIntent.js +123 -0
  193. package/dist/utils/fileCreateIntent.js.map +1 -0
  194. package/dist/utils/legacyAgentRuntimeEvents.d.ts +2 -0
  195. package/dist/utils/legacyAgentRuntimeEvents.d.ts.map +1 -0
  196. package/dist/utils/legacyAgentRuntimeEvents.js +2 -0
  197. package/dist/utils/legacyAgentRuntimeEvents.js.map +1 -0
  198. package/dist/utils/markdownWindowsPaths.d.ts +2 -0
  199. package/dist/utils/markdownWindowsPaths.d.ts.map +1 -0
  200. package/dist/utils/markdownWindowsPaths.js +2 -0
  201. package/dist/utils/markdownWindowsPaths.js.map +1 -0
  202. package/dist/utils/modelAvailability.d.ts +11 -0
  203. package/dist/utils/modelAvailability.d.ts.map +1 -0
  204. package/dist/utils/modelAvailability.js +10 -0
  205. package/dist/utils/modelAvailability.js.map +1 -0
  206. package/dist/utils/providerAvailability.d.ts +8 -0
  207. package/dist/utils/providerAvailability.d.ts.map +1 -0
  208. package/dist/utils/providerAvailability.js +13 -0
  209. package/dist/utils/providerAvailability.js.map +1 -0
  210. package/dist/utils/providerCommandArgs.d.ts +11 -0
  211. package/dist/utils/providerCommandArgs.d.ts.map +1 -0
  212. package/dist/utils/providerCommandArgs.js +18 -0
  213. package/dist/utils/providerCommandArgs.js.map +1 -0
  214. package/dist/utils/workspaceSelectionContinuation.d.ts +2 -0
  215. package/dist/utils/workspaceSelectionContinuation.d.ts.map +1 -0
  216. package/dist/utils/workspaceSelectionContinuation.js +2 -0
  217. package/dist/utils/workspaceSelectionContinuation.js.map +1 -0
  218. package/package.json +55 -0
@@ -0,0 +1,4176 @@
1
+ interface SpeechRecognitionEvent extends Event {
2
+ readonly resultIndex: number;
3
+ readonly results: SpeechRecognitionResultList;
4
+ }
5
+ interface SpeechRecognitionResultList {
6
+ readonly length: number;
7
+ item(index: number): SpeechRecognitionResult;
8
+ [index: number]: SpeechRecognitionResult;
9
+ }
10
+ interface SpeechRecognitionResult {
11
+ readonly isFinal: boolean;
12
+ readonly length: number;
13
+ item(index: number): SpeechRecognitionAlternative;
14
+ [index: number]: SpeechRecognitionAlternative;
15
+ }
16
+ interface SpeechRecognitionAlternative {
17
+ readonly transcript: string;
18
+ readonly confidence: number;
19
+ }
20
+ interface SpeechRecognitionErrorEvent extends Event {
21
+ readonly error: string;
22
+ readonly message: string;
23
+ }
24
+ interface SpeechRecognition extends EventTarget {
25
+ continuous: boolean;
26
+ interimResults: boolean;
27
+ lang: string;
28
+ maxAlternatives: number;
29
+ onresult: ((event: SpeechRecognitionEvent) => void) | null;
30
+ onerror: ((event: SpeechRecognitionErrorEvent) => void) | null;
31
+ onend: (() => void) | null;
32
+ onstart: (() => void) | null;
33
+ start(): void;
34
+ stop(): void;
35
+ abort(): void;
36
+ }
37
+ interface AgentContextCompactionMetrics {
38
+ strategyVersion: number;
39
+ contextDigest: string;
40
+ rawMessageCount: number;
41
+ sentMessageCount: number;
42
+ compactedMessageCount: number;
43
+ estimatedRawTokens: number;
44
+ estimatedSentTokens: number;
45
+ retainedAnchorCount: number;
46
+ retainedArtifactCount: number;
47
+ retainedGrantedDirectoryCount: number;
48
+ }
49
+ interface SpeechRecognitionConstructor {
50
+ new (): SpeechRecognition;
51
+ }
52
+ import type { ConversationEditorDiff } from './types/agentEditor.js';
53
+ type ScopedIpcParams = Record<string, unknown>;
54
+ type PathIpcInput = string | ScopedIpcParams;
55
+ type WebSearchIpcInput = string | ({
56
+ query: string;
57
+ count?: number;
58
+ } & ScopedIpcParams);
59
+ type ConvertOptions = {
60
+ quality?: number;
61
+ sampleRate?: number;
62
+ bitsPerSample?: number;
63
+ compressionLevel?: number;
64
+ };
65
+ export type MarketplaceListingKind = 'app-native' | 'app-sandboxed' | 'panel' | 'plugin' | 'mcp' | 'model' | 'mind' | 'swarm';
66
+ export type MarketplaceTrustTier = 'official' | 'verified' | 'community';
67
+ export type MarketplacePricingModel = 'free' | 'one_time' | 'subscription' | 'pay_per_use' | 'rental';
68
+ export type MarketplaceEntitlementKind = 'owned' | 'subscribed' | 'rental';
69
+ export type MarketplaceEntitlementStatus = 'active' | 'expired' | 'revoked';
70
+ export interface MarketplacePricing {
71
+ model: MarketplacePricingModel;
72
+ priceCredits: number | null;
73
+ priceUsd: number | null;
74
+ period: string | null;
75
+ meterUnit: string | null;
76
+ }
77
+ export interface MarketplaceListing {
78
+ id: string;
79
+ slug: string;
80
+ kind: MarketplaceListingKind;
81
+ title: string;
82
+ summary: string;
83
+ category: string | null;
84
+ trustTier: MarketplaceTrustTier;
85
+ iconUrl: string | null;
86
+ developerName: string | null;
87
+ currentVersion: string | null;
88
+ pricing: MarketplacePricing[];
89
+ rating: number | null;
90
+ reviewCount: number | null;
91
+ downloads: number | null;
92
+ nativeAppId?: string | null;
93
+ isDevFixture?: boolean;
94
+ }
95
+ export interface MarketplaceListingVersion {
96
+ version: string;
97
+ releaseNotes: string | null;
98
+ declaredCapabilities: string[];
99
+ publishedAt: string | null;
100
+ }
101
+ export interface MarketplaceListingDetail extends MarketplaceListing {
102
+ description: string;
103
+ screenshots: string[];
104
+ versions: MarketplaceListingVersion[];
105
+ reviews: Array<{
106
+ id: string;
107
+ userName: string;
108
+ rating: number;
109
+ text: string;
110
+ createdAt: string;
111
+ }>;
112
+ declaredCapabilities: string[];
113
+ }
114
+ export interface MarketplaceEntitlement {
115
+ listingId: string;
116
+ listingSlug: string | null;
117
+ kind: MarketplaceEntitlementKind;
118
+ status: MarketplaceEntitlementStatus;
119
+ grantedAt: string | null;
120
+ expiresAt: string | null;
121
+ }
122
+ /** Canonical host DTO; a duplicate here previously hid artifact/candidate IDs. */
123
+ export type LandingQueueView = import('@xenosystem/agent-interface-contract').LandingQueueResponse;
124
+ export interface XenoAPI {
125
+ ownedBrowser?: {
126
+ session(input: import('@xenosystem/agent-interface-contract').AgentBrowserSessionClientRequest): Promise<import('@xenosystem/agent-interface-contract').AgentBrowserSessionResult>;
127
+ command(input: Omit<import('@xenosystem/agent-interface-contract').AgentBrowserRequest, 'client'>): Promise<import('@xenosystem/agent-interface-contract').AgentBrowserResult>;
128
+ };
129
+ /** Tool-free requests are not the legacy streaming chat API. */
130
+ auxiliaryInference?: Pick<XenoAPI['llm'], 'chatOnce' | 'localModels' | 'localWarmup'>;
131
+ workspaceRules?: {
132
+ request(input: import('@xenosystem/agent-interface-contract').AgentWorkspaceRulesRequest): Promise<import('@xenosystem/agent-interface-contract').AgentWorkspaceRulesResult>;
133
+ };
134
+ account?: {
135
+ request(input: import('@xenosystem/agent-interface-contract').AgentAccountRequest): Promise<import('@xenosystem/agent-interface-contract').AgentAccountResult>;
136
+ };
137
+ workforce?: {
138
+ request(input: import('@xenosystem/agent-interface-contract').AgentWorkforceRequest): Promise<import('@xenosystem/agent-interface-contract').AgentWorkforceResult>;
139
+ };
140
+ notifications?: {
141
+ request(input: import('@xenosystem/agent-interface-contract').AgentNotificationsRequest): Promise<import('@xenosystem/agent-interface-contract').AgentNotificationsResult>;
142
+ };
143
+ window: {
144
+ minimize: () => Promise<void>;
145
+ maximize: () => Promise<void>;
146
+ close: () => Promise<void>;
147
+ isMaximized: () => Promise<boolean>;
148
+ openExternal: (url: string) => Promise<void>;
149
+ onMaximizedChange: (callback: (isMaximized: boolean) => void) => void;
150
+ };
151
+ agentHost?: {
152
+ request: (method: string, input: unknown) => Promise<unknown>;
153
+ subscribe: (callback: (event: unknown) => void) => string;
154
+ unsubscribe: (subscriptionId: string) => boolean;
155
+ };
156
+ debug?: {
157
+ log: (scope: string, message: string, meta?: Record<string, unknown>) => void;
158
+ };
159
+ perf?: {
160
+ rendererReady: () => Promise<{
161
+ success: boolean;
162
+ metrics: {
163
+ processStart: number;
164
+ appReady?: number;
165
+ windowCreated?: number;
166
+ windowShown?: number;
167
+ rendererReady?: number;
168
+ toAppReady?: number;
169
+ toWindowCreated?: number;
170
+ toWindowShown?: number;
171
+ toRendererReady?: number;
172
+ appVersion: string;
173
+ date: string;
174
+ };
175
+ }>;
176
+ getMetrics: () => Promise<{
177
+ success: boolean;
178
+ data: unknown;
179
+ }>;
180
+ };
181
+ auth: {
182
+ status: () => Promise<{
183
+ authenticated: boolean;
184
+ }>;
185
+ getWebToken: () => Promise<string | null>;
186
+ getApiKey: () => Promise<string | null>;
187
+ saveCredentials: (webToken: string) => Promise<{
188
+ success: boolean;
189
+ }>;
190
+ logout: () => Promise<{
191
+ success: boolean;
192
+ }>;
193
+ openOAuth: (provider: string) => Promise<{
194
+ success: boolean;
195
+ cancelled?: boolean;
196
+ user?: unknown;
197
+ apiKey?: string;
198
+ error?: string;
199
+ }>;
200
+ cancelOAuth: () => Promise<{
201
+ success: boolean;
202
+ }>;
203
+ loginWithEmail: (email: string, password: string) => Promise<{
204
+ success: boolean;
205
+ token?: string;
206
+ apiKey?: string;
207
+ user?: unknown;
208
+ error?: string;
209
+ }>;
210
+ registerWithEmail: (name: string, email: string, password: string) => Promise<{
211
+ success: boolean;
212
+ token?: string;
213
+ apiKey?: string;
214
+ user?: unknown;
215
+ error?: string;
216
+ }>;
217
+ validateToken: (token: string) => Promise<{
218
+ valid: boolean;
219
+ user?: unknown;
220
+ apiKey?: string;
221
+ error?: string;
222
+ }>;
223
+ };
224
+ content: {
225
+ fetchJson: (params: {
226
+ url: string;
227
+ auth?: boolean;
228
+ timeoutMs?: number;
229
+ } & ScopedIpcParams) => Promise<{
230
+ success: boolean;
231
+ status: number;
232
+ error: string | null;
233
+ data: unknown;
234
+ }>;
235
+ };
236
+ apps?: {
237
+ list: () => Promise<Array<{
238
+ id: string;
239
+ name: string;
240
+ description: string;
241
+ icon: string;
242
+ executable: string;
243
+ status: string;
244
+ version?: string;
245
+ category: string;
246
+ }>>;
247
+ get: (appId: string) => Promise<{
248
+ id: string;
249
+ name: string;
250
+ description: string;
251
+ icon: string;
252
+ executable: string;
253
+ status: string;
254
+ version?: string;
255
+ category: string;
256
+ } | null>;
257
+ launch: (appId: string) => Promise<{
258
+ success: boolean;
259
+ error?: string;
260
+ }>;
261
+ isRunning: (appId: string) => Promise<boolean>;
262
+ stop: (appId: string) => Promise<{
263
+ success: boolean;
264
+ error?: string;
265
+ }>;
266
+ onLaunchRequest: (callback: (appId: string) => void) => void;
267
+ };
268
+ creativeApps?: {
269
+ list: () => Promise<Array<{
270
+ id: string;
271
+ name: string;
272
+ description: string;
273
+ version: string;
274
+ installedVersion: string | null;
275
+ status: 'not_installed' | 'installed' | 'running' | 'update_available';
276
+ installPath: string | null;
277
+ downloadUrl: string;
278
+ notes: string | null;
279
+ category: 'studio' | 'office' | 'corpo' | 'automation';
280
+ }>>;
281
+ install: (appId: string) => Promise<{
282
+ success: boolean;
283
+ error?: string;
284
+ }>;
285
+ cancelInstall: (appId: string) => Promise<{
286
+ success: boolean;
287
+ error?: string;
288
+ }>;
289
+ launch: (appId: string) => Promise<{
290
+ success: boolean;
291
+ error?: string;
292
+ }>;
293
+ stop: (appId: string) => Promise<{
294
+ success: boolean;
295
+ error?: string;
296
+ }>;
297
+ checkUpdate: (appId: string) => Promise<{
298
+ available: boolean;
299
+ version: string;
300
+ installedVersion?: string;
301
+ notes?: string;
302
+ }>;
303
+ uninstall: (appId: string) => Promise<{
304
+ success: boolean;
305
+ error?: string;
306
+ }>;
307
+ openInstallLocation: (appId: string) => Promise<{
308
+ success: boolean;
309
+ error?: string;
310
+ }>;
311
+ onInstallProgress: (callback: (data: {
312
+ appId: string;
313
+ phase: 'downloading' | 'installing' | 'complete' | 'error';
314
+ percent: number;
315
+ bytesDownloaded: number;
316
+ totalBytes: number;
317
+ error?: string;
318
+ }) => void) => void;
319
+ offInstallProgress: () => void;
320
+ onStatusChanged: (callback: (data: {
321
+ reason: string;
322
+ running: Record<string, boolean>;
323
+ timestamp: number;
324
+ }) => void) => void;
325
+ offStatusChanged: () => void;
326
+ };
327
+ marketplace?: {
328
+ catalog: (params?: {
329
+ kind?: string;
330
+ category?: string;
331
+ trustTier?: string;
332
+ q?: string;
333
+ page?: number;
334
+ pageSize?: number;
335
+ }) => Promise<{
336
+ success: boolean;
337
+ listings: MarketplaceListing[];
338
+ total: number;
339
+ page?: number;
340
+ pageSize?: number;
341
+ devFixture?: boolean;
342
+ error?: string;
343
+ }>;
344
+ listing: (slug: string) => Promise<{
345
+ success: boolean;
346
+ listing?: MarketplaceListingDetail;
347
+ devFixture?: boolean;
348
+ error?: string;
349
+ }>;
350
+ entitlements: () => Promise<{
351
+ success: boolean;
352
+ entitlements: MarketplaceEntitlement[];
353
+ authenticated: boolean;
354
+ error?: string;
355
+ }>;
356
+ purchase: (params: {
357
+ listingId: string;
358
+ versionId?: string;
359
+ }) => Promise<{
360
+ success: boolean;
361
+ entitlement?: MarketplaceEntitlement | null;
362
+ transaction?: unknown;
363
+ error?: string;
364
+ }>;
365
+ subscribe: (params: {
366
+ listingId: string;
367
+ period?: string;
368
+ }) => Promise<{
369
+ success: boolean;
370
+ entitlement?: MarketplaceEntitlement | null;
371
+ transaction?: unknown;
372
+ error?: string;
373
+ }>;
374
+ rent: (params: {
375
+ listingId: string;
376
+ period?: string;
377
+ }) => Promise<{
378
+ success: boolean;
379
+ entitlement?: MarketplaceEntitlement | null;
380
+ transaction?: unknown;
381
+ error?: string;
382
+ }>;
383
+ install: (params: {
384
+ listingId: string;
385
+ kind: string;
386
+ nativeAppId?: string | null;
387
+ versionId?: string;
388
+ }) => Promise<{
389
+ success: boolean;
390
+ error?: string;
391
+ notAvailableYet?: boolean;
392
+ }>;
393
+ launch: (params: {
394
+ nativeAppId: string;
395
+ }) => Promise<{
396
+ success: boolean;
397
+ error?: string;
398
+ }>;
399
+ nativeStatus: (params: {
400
+ nativeAppId: string;
401
+ }) => Promise<{
402
+ success: boolean;
403
+ status: 'not_installed' | 'installed' | 'running' | 'update_available';
404
+ installPath: string | null;
405
+ installedVersion: string | null;
406
+ error?: string;
407
+ }>;
408
+ invoke: (params: {
409
+ listingId: string;
410
+ input?: unknown;
411
+ }) => Promise<{
412
+ success: boolean;
413
+ output?: unknown;
414
+ usage?: unknown;
415
+ creditsCharged?: number | null;
416
+ error?: string;
417
+ }>;
418
+ openExternal: (url: string) => Promise<{
419
+ success: boolean;
420
+ error?: string;
421
+ }>;
422
+ onInstallProgress: (callback: (data: {
423
+ listingId: string | null;
424
+ appId: string;
425
+ kind: string;
426
+ phase: 'downloading' | 'installing' | 'complete' | 'error';
427
+ percent: number;
428
+ bytesDownloaded: number;
429
+ totalBytes: number;
430
+ error?: string;
431
+ }) => void) => void;
432
+ offInstallProgress: () => void;
433
+ };
434
+ pixelBridge?: {
435
+ status: () => Promise<{
436
+ success: boolean;
437
+ status: {
438
+ running: boolean;
439
+ processDetected: boolean;
440
+ bridgeReady: boolean;
441
+ stale: boolean;
442
+ activeProjectPath: string | null;
443
+ activeProjectName: string | null;
444
+ activeDocumentId: string | null;
445
+ activeDocumentName: string | null;
446
+ hasOpenDocument: boolean;
447
+ updatedAt: number | null;
448
+ };
449
+ error?: string;
450
+ }>;
451
+ sendImage: (params: {
452
+ dataUrl: string;
453
+ sourceName?: string;
454
+ layerName?: string;
455
+ workspaceId?: string;
456
+ teamId?: string;
457
+ agentId?: string;
458
+ caller?: {
459
+ userId?: string;
460
+ workspaceId?: string;
461
+ teamId?: string;
462
+ agentId?: string;
463
+ allowedDirectories?: string[];
464
+ };
465
+ }) => Promise<{
466
+ success: boolean;
467
+ commandId?: string;
468
+ error?: string;
469
+ policyDecision?: {
470
+ allowed: boolean;
471
+ reason: string;
472
+ };
473
+ status?: {
474
+ running: boolean;
475
+ bridgeReady: boolean;
476
+ hasOpenDocument: boolean;
477
+ activeProjectName: string | null;
478
+ activeDocumentName: string | null;
479
+ };
480
+ }>;
481
+ };
482
+ motionBridge?: {
483
+ status: () => Promise<{
484
+ success: boolean;
485
+ status: {
486
+ running: boolean;
487
+ processDetected: boolean;
488
+ bridgeReady: boolean;
489
+ stale: boolean;
490
+ activeProjectPath: string | null;
491
+ activeProjectName: string | null;
492
+ activeSequenceId: string | null;
493
+ activeSequenceName: string | null;
494
+ currentFrame: number | null;
495
+ hasOpenProject: boolean;
496
+ updatedAt: number | null;
497
+ };
498
+ error?: string;
499
+ }>;
500
+ sendImage: (params: {
501
+ dataUrl: string;
502
+ sourceName?: string;
503
+ mediaName?: string;
504
+ durationFrames?: number;
505
+ placeOnTimeline?: boolean;
506
+ workspaceId?: string;
507
+ teamId?: string;
508
+ agentId?: string;
509
+ caller?: {
510
+ userId?: string;
511
+ workspaceId?: string;
512
+ teamId?: string;
513
+ agentId?: string;
514
+ allowedDirectories?: string[];
515
+ };
516
+ }) => Promise<{
517
+ success: boolean;
518
+ commandId?: string;
519
+ error?: string;
520
+ policyDecision?: {
521
+ allowed: boolean;
522
+ reason: string;
523
+ };
524
+ status?: {
525
+ running: boolean;
526
+ bridgeReady: boolean;
527
+ hasOpenProject: boolean;
528
+ activeProjectName: string | null;
529
+ activeSequenceName: string | null;
530
+ };
531
+ }>;
532
+ };
533
+ credits?: {
534
+ balance: () => Promise<{
535
+ balance: number;
536
+ currency: string;
537
+ lastUpdated: string;
538
+ }>;
539
+ transactions: (limit?: number) => Promise<Array<{
540
+ id: string;
541
+ operation: string;
542
+ credits: number;
543
+ timestamp: string;
544
+ description: string;
545
+ }>>;
546
+ refresh: () => Promise<{
547
+ success: boolean;
548
+ }>;
549
+ purchase: (amount: number) => Promise<{
550
+ success: boolean;
551
+ creditsAdded?: number;
552
+ newBalance?: number;
553
+ error?: string;
554
+ }>;
555
+ getPaymentMethod: () => Promise<{
556
+ hasMethod: boolean;
557
+ card?: {
558
+ brand: string;
559
+ last4: string;
560
+ expMonth: number;
561
+ expYear: number;
562
+ name: string;
563
+ };
564
+ }>;
565
+ savePaymentMethod: (data: Record<string, string>) => Promise<{
566
+ success: boolean;
567
+ card?: {
568
+ brand: string;
569
+ last4: string;
570
+ expMonth: number;
571
+ expYear: number;
572
+ name: string;
573
+ };
574
+ error?: string;
575
+ }>;
576
+ };
577
+ settings: {
578
+ get: () => Promise<{
579
+ theme: 'dark' | 'light' | 'system';
580
+ startOnBoot: boolean;
581
+ minimizeToTray: boolean;
582
+ checkUpdatesAutomatically: boolean;
583
+ showNotifications: boolean;
584
+ defaultApp: string | null;
585
+ language: string;
586
+ analytics: boolean;
587
+ }>;
588
+ getValue: (key: string) => Promise<unknown>;
589
+ set: (updates: Record<string, unknown>) => Promise<Record<string, unknown>>;
590
+ reset: () => Promise<Record<string, unknown>>;
591
+ };
592
+ bgRemoval?: {
593
+ checkAvailable: () => Promise<{
594
+ available: boolean;
595
+ error: string | null;
596
+ }>;
597
+ checkModel: () => Promise<{
598
+ exists: boolean;
599
+ path: string | null;
600
+ error: string | null;
601
+ }>;
602
+ initModel: (useGpu?: boolean) => Promise<{
603
+ loaded: boolean;
604
+ modelPath: string | null;
605
+ usingGpu: boolean;
606
+ error: string | null;
607
+ }>;
608
+ getStatus: () => Promise<{
609
+ loaded: boolean;
610
+ modelPath: string | null;
611
+ usingGpu: boolean;
612
+ error: string | null;
613
+ }>;
614
+ processFile: (inputPath: string, outputPath?: string) => Promise<{
615
+ success: boolean;
616
+ outputPath: string | null;
617
+ error: string | null;
618
+ processingTimeMs: number | null;
619
+ }>;
620
+ processBuffer: (base64Data: string) => Promise<{
621
+ success: boolean;
622
+ data: string | null;
623
+ error: string | null;
624
+ }>;
625
+ downloadModel: () => Promise<{
626
+ success: boolean;
627
+ error?: string;
628
+ }>;
629
+ onDownloadProgress: (callback: (progress: {
630
+ downloaded: number;
631
+ total: number;
632
+ progress: number;
633
+ }) => void) => void;
634
+ offDownloadProgress: () => void;
635
+ };
636
+ llm: {
637
+ chat: (params: {
638
+ requestId: string;
639
+ model: string;
640
+ messages: Array<{
641
+ role: string;
642
+ content: string;
643
+ }>;
644
+ temperature?: number;
645
+ max_tokens?: number;
646
+ system?: string;
647
+ think?: boolean;
648
+ enableTools?: boolean;
649
+ }) => Promise<{
650
+ success: boolean;
651
+ requestId: string;
652
+ }>;
653
+ chatOnce: (params: {
654
+ model: string;
655
+ messages: Array<{
656
+ role: string;
657
+ content: string;
658
+ }>;
659
+ temperature?: number;
660
+ max_tokens?: number;
661
+ system?: string;
662
+ think?: boolean;
663
+ }) => Promise<{
664
+ success: boolean;
665
+ content: string;
666
+ thinking: string;
667
+ error: string | null;
668
+ }>;
669
+ localWarmup: (params: {
670
+ model: string;
671
+ timeoutMs?: number;
672
+ }) => Promise<{
673
+ success: boolean;
674
+ loadedModel: string | null;
675
+ error: string | null;
676
+ }>;
677
+ localRuntimeStart: () => Promise<{
678
+ success: boolean;
679
+ runtime: {
680
+ available: boolean;
681
+ managed: boolean;
682
+ loadedModelId: string | null;
683
+ loadedModelName: string | null;
684
+ error: string | null;
685
+ };
686
+ error: string | null;
687
+ }>;
688
+ localRuntimeStop: () => Promise<{
689
+ success: boolean;
690
+ runtime: {
691
+ available: boolean;
692
+ managed: boolean;
693
+ loadedModelId: string | null;
694
+ loadedModelName: string | null;
695
+ error: string | null;
696
+ };
697
+ error: string | null;
698
+ }>;
699
+ localModelInstall: (params: {
700
+ modelId: string;
701
+ repo?: string;
702
+ file?: string;
703
+ quantization?: string;
704
+ source?: 'r2' | 'huggingface';
705
+ downloadUrl?: string;
706
+ artifactKey?: string;
707
+ filename?: string;
708
+ sizeBytes?: number;
709
+ sha256?: string;
710
+ }) => Promise<{
711
+ success: boolean;
712
+ installedPath?: string;
713
+ error?: string;
714
+ }>;
715
+ localModelRemove: (params: {
716
+ modelId: string;
717
+ path: string;
718
+ }) => Promise<{
719
+ success: boolean;
720
+ error?: string;
721
+ }>;
722
+ abort: (requestId: string) => Promise<{
723
+ success: boolean;
724
+ error?: string;
725
+ }>;
726
+ models: () => Promise<{
727
+ success: boolean;
728
+ models: Array<{
729
+ id: string;
730
+ object: string;
731
+ availability?: 'available' | 'degraded' | 'unavailable';
732
+ availabilityReason?: string | null;
733
+ source?: 'api' | 'platform-auth' | 'public-fallback' | 'static-fallback';
734
+ }>;
735
+ error: string | null;
736
+ }>;
737
+ localModelCatalog: () => Promise<{
738
+ success: boolean;
739
+ source: 'platform' | 'fallback';
740
+ catalogVersion: string | null;
741
+ updatedAt: string | null;
742
+ models: Array<{
743
+ id: string;
744
+ name: string;
745
+ provider: string;
746
+ category: 'all' | 'llm' | 'image' | 'video' | 'audio' | 'upscale' | 'embedding';
747
+ description: string;
748
+ size: string;
749
+ sizeBytes?: number | null;
750
+ parameters?: string | null;
751
+ tags: string[];
752
+ license?: string | null;
753
+ runtime?: string | null;
754
+ installable: boolean;
755
+ installSpec?: {
756
+ source?: 'r2' | 'huggingface';
757
+ repo?: string;
758
+ file?: string;
759
+ quantization?: string;
760
+ downloadUrl?: string | null;
761
+ artifactKey?: string | null;
762
+ filename?: string | null;
763
+ sizeBytes?: number | null;
764
+ sha256?: string | null;
765
+ expectedLocalIds: string[];
766
+ } | null;
767
+ unavailableReason?: string | null;
768
+ }>;
769
+ error: string | null;
770
+ }>;
771
+ localModels: () => Promise<{
772
+ success: boolean;
773
+ models: Array<{
774
+ id: string;
775
+ name: string;
776
+ tag: string;
777
+ size: number;
778
+ parameterSize: string | null;
779
+ family: string | null;
780
+ path: string;
781
+ loaded: boolean;
782
+ }>;
783
+ runtime: {
784
+ available: boolean;
785
+ managed: boolean;
786
+ loadedModelId: string | null;
787
+ loadedModelName: string | null;
788
+ error: string | null;
789
+ };
790
+ error: string | null;
791
+ }>;
792
+ onLocalModelInstallProgress: (callback: (data: {
793
+ modelId: string;
794
+ phase: 'starting' | 'downloading' | 'complete' | 'error';
795
+ progress: number;
796
+ message: string;
797
+ installedPath?: string;
798
+ }) => void) => void;
799
+ offLocalModelInstallProgress: () => void;
800
+ onChatChunk: (callback: (data: {
801
+ requestId: string;
802
+ content: string;
803
+ thinking: string;
804
+ done: boolean;
805
+ }) => void) => void;
806
+ offChatChunk: () => void;
807
+ onChatError: (callback: (data: {
808
+ requestId: string;
809
+ error: string;
810
+ }) => void) => void;
811
+ offChatError: () => void;
812
+ onToolCall: (callback: (data: {
813
+ requestId: string;
814
+ status: 'start' | 'end';
815
+ toolName: string;
816
+ toolParams?: Record<string, unknown>;
817
+ result?: string;
818
+ success?: boolean;
819
+ }) => void) => void;
820
+ offToolCall: () => void;
821
+ };
822
+ agent: {
823
+ run: (params: {
824
+ requestId: string;
825
+ conversationId?: string;
826
+ sdkSessionId?: string;
827
+ previousRunId?: string;
828
+ subagentRunId?: string;
829
+ workspaceId?: string;
830
+ teamId?: string;
831
+ agentId?: string;
832
+ providerId?: string;
833
+ providerKind?: 'sdk-native' | 'xeno-cloud';
834
+ mode?: 'chat' | 'development';
835
+ model: string;
836
+ messages: Array<{
837
+ role: string;
838
+ content: string;
839
+ }>;
840
+ systemPrompt?: string;
841
+ maxIterations?: number;
842
+ enableThinking?: boolean;
843
+ reasoningOptionId?: string;
844
+ capabilities?: {
845
+ terminal?: boolean;
846
+ browser?: boolean;
847
+ fileRead?: boolean;
848
+ fileWrite?: boolean;
849
+ appLaunch?: boolean;
850
+ webSearch?: boolean;
851
+ codeExecution?: boolean;
852
+ imageGeneration?: boolean;
853
+ dataAnalysis?: boolean;
854
+ };
855
+ permissionProfile?: 'standard' | 'read-only' | 'edit-with-approval' | 'trusted-workspace' | 'plan';
856
+ allowedDirectories?: string[];
857
+ approvalRules?: Array<Record<string, unknown>>;
858
+ contextCompaction?: AgentContextCompactionMetrics;
859
+ }) => Promise<{
860
+ success: boolean;
861
+ requestId?: string;
862
+ error?: string;
863
+ hostBinding?: import('@xenosystem/agent-interface-contract').AgentSessionHostBindingV1;
864
+ activeLane?: import('@xenosystem/agent-interface-contract').ProviderLaneProjectionV1;
865
+ lanes?: import('@xenosystem/agent-interface-contract').ProviderLaneProjectionV1[];
866
+ }>;
867
+ cancel: (requestId: string) => Promise<{
868
+ success: boolean;
869
+ error?: string;
870
+ }>;
871
+ onTextChunk: (callback: (data: {
872
+ requestId: string;
873
+ text: string;
874
+ }) => void) => void;
875
+ offTextChunk: () => void;
876
+ onToolStart: (callback: (data: {
877
+ requestId: string;
878
+ toolCallId?: string;
879
+ name: string;
880
+ input: unknown;
881
+ startedAt?: number;
882
+ }) => void) => void;
883
+ offToolStart: () => void;
884
+ onToolEnd: (callback: (data: {
885
+ requestId: string;
886
+ toolCallId?: string;
887
+ name: string;
888
+ result: string;
889
+ success: boolean;
890
+ startedAt?: number;
891
+ endedAt?: number;
892
+ durationMs?: number;
893
+ diff?: ConversationEditorDiff;
894
+ }) => void) => void;
895
+ offToolEnd: () => void;
896
+ onRuntimeEvent: (callback: (data: {
897
+ requestId: string;
898
+ event: Record<string, unknown>;
899
+ }) => void) => void;
900
+ offRuntimeEvent: () => void;
901
+ onTaskEvent: (callback: (data: {
902
+ requestId: string;
903
+ action: 'create' | 'update' | 'clear';
904
+ task?: {
905
+ id: string;
906
+ text: string;
907
+ detail?: string;
908
+ status?: 'pending' | 'in_progress' | 'done' | 'blocked';
909
+ order?: number;
910
+ };
911
+ taskId?: string;
912
+ patch?: {
913
+ text?: string;
914
+ detail?: string;
915
+ status?: 'pending' | 'in_progress' | 'done' | 'blocked';
916
+ order?: number;
917
+ };
918
+ }) => void) => void;
919
+ offTaskEvent: () => void;
920
+ onDone: (callback: (data: {
921
+ requestId: string;
922
+ }) => void) => void;
923
+ offDone: () => void;
924
+ onError: (callback: (data: {
925
+ requestId: string;
926
+ error: string;
927
+ context?: string;
928
+ }) => void) => void;
929
+ offError: () => void;
930
+ onPermissionRequest: (callback: (data: {
931
+ requestId: string;
932
+ permissionId: string;
933
+ toolName: string;
934
+ path: string;
935
+ directory: string;
936
+ browserOrigin?: string;
937
+ allowAlwaysOptionId?: string;
938
+ rejectAlwaysOptionId?: string;
939
+ }) => void) => void;
940
+ offPermissionRequest: () => void;
941
+ onAskUserRequest: (callback: (data: {
942
+ requestId: string;
943
+ askUserId: string;
944
+ question: string;
945
+ options?: string[];
946
+ context?: string;
947
+ }) => void) => void;
948
+ offAskUserRequest: () => void;
949
+ onChooseDirectoryRequest: (callback: (data: {
950
+ requestId: string;
951
+ chooseDirectoryId: string;
952
+ title?: string;
953
+ }) => void) => void;
954
+ offChooseDirectoryRequest: () => void;
955
+ subscribeChooseDirectoryRequested: (callback: (data: unknown) => void) => string;
956
+ unsubscribeChooseDirectoryRequested: (subscriptionId: string) => boolean;
957
+ onWorkspacePlacementRequest: (callback: (data: {
958
+ requestId: string;
959
+ workspacePlacementId: string;
960
+ directory: string;
961
+ title?: string;
962
+ }) => void) => void;
963
+ offWorkspacePlacementRequest: () => void;
964
+ subscribeWorkspacePlacementRequested: (callback: (data: unknown) => void) => string;
965
+ unsubscribeWorkspacePlacementRequested: (subscriptionId: string) => boolean;
966
+ grantAccess: (params: {
967
+ permissionId: string;
968
+ directory: string;
969
+ selectedOptionId?: string;
970
+ }) => Promise<{
971
+ success: boolean;
972
+ error?: string;
973
+ }>;
974
+ denyAccess: (params: {
975
+ permissionId: string;
976
+ selectedOptionId?: string;
977
+ }) => Promise<{
978
+ success: boolean;
979
+ error?: string;
980
+ }>;
981
+ steerTurn: (params: {
982
+ conversationId: string;
983
+ requestId: string;
984
+ instruction: string;
985
+ }) => Promise<{
986
+ success: boolean;
987
+ error?: string;
988
+ }>;
989
+ resumeTurn: (params: {
990
+ conversationId: string;
991
+ requestId: string;
992
+ }) => Promise<{
993
+ success: boolean;
994
+ error?: string;
995
+ }>;
996
+ /**
997
+ * What is waiting to run for this conversation, and how to take it
998
+ * back out.
999
+ *
1000
+ * 🔴 These exist because the host's queue had no surface at all.
1001
+ * Typing during a turn the agent cannot take mid-flight becomes a
1002
+ * queued instruction, and until now a person was told that had
1003
+ * happened with no way to see it or undo it.
1004
+ */
1005
+ /**
1006
+ * Messages withheld from a run pending a human (coordination §6).
1007
+ *
1008
+ * 🔴 `available: false` means this host does not coordinate at all,
1009
+ * which is a different fact from a run with nothing held. A surface
1010
+ * that showed an empty list for both would wait for approvals that
1011
+ * can never arrive.
1012
+ */
1013
+ listHeldMessages: (params: {
1014
+ runId: string;
1015
+ }) => Promise<{
1016
+ available: boolean;
1017
+ runId: string;
1018
+ held: Array<{
1019
+ id: string;
1020
+ fromRunId: string;
1021
+ text: string;
1022
+ sentAt: number;
1023
+ }>;
1024
+ reason?: string;
1025
+ }>;
1026
+ releaseHeldMessage: (params: {
1027
+ runId: string;
1028
+ messageId: string;
1029
+ }) => Promise<{
1030
+ status: 'delivered' | 'expired' | 'refused' | 'held';
1031
+ messageId: string;
1032
+ reason?: string;
1033
+ }>;
1034
+ /**
1035
+ * Pins or clears a run's inbound-message policy (§6).
1036
+ *
1037
+ * `policy: null` returns the run to the derived default and is NOT the
1038
+ * same as 'accept', which pins the permissive answer.
1039
+ */
1040
+ setInboundPolicy: (params: {
1041
+ runId: string;
1042
+ policy: 'accept' | 'hold' | 'refuse' | null;
1043
+ }) => Promise<{
1044
+ ok: boolean;
1045
+ explicit?: 'accept' | 'hold' | 'refuse';
1046
+ reason?: string;
1047
+ }>;
1048
+ listQueuedInstructions: (params: {
1049
+ conversationId: string;
1050
+ }) => Promise<{
1051
+ conversationId: string;
1052
+ /**
1053
+ * 🔴 `queuedByYou`, never the raw instance id.
1054
+ *
1055
+ * The contract carries `queuedByInstanceId` "for provenance in the
1056
+ * timeline" and no surface read it. Rendering an opaque id would be
1057
+ * noise; the useful question is whether ANOTHER surface queued this,
1058
+ * which matters before you drop it — the same reason the sessions
1059
+ * board surfaces `othersWatching`.
1060
+ *
1061
+ * Derived in the bridge because the bridge already holds this
1062
+ * surface's identity and already answers exactly this question when
1063
+ * routing PTY events. A panel doing its own comparison would be a
1064
+ * second copy of that rule.
1065
+ */
1066
+ queue: Array<{
1067
+ id: string;
1068
+ instruction: string;
1069
+ queuedAt: string;
1070
+ queuedByYou: boolean;
1071
+ }>;
1072
+ turnActive: boolean;
1073
+ }>;
1074
+ dropQueuedInstruction: (params: {
1075
+ conversationId: string;
1076
+ instructionId?: string;
1077
+ }) => Promise<{
1078
+ success: boolean;
1079
+ safeError?: string;
1080
+ }>;
1081
+ listPermissionRules: () => Promise<{
1082
+ success: boolean;
1083
+ rules: Array<{
1084
+ id: string;
1085
+ decision: 'allow' | 'deny';
1086
+ toolKind?: string;
1087
+ pathPrefix?: string;
1088
+ createdAt?: number;
1089
+ }>;
1090
+ error?: string;
1091
+ }>;
1092
+ revokePermissionRule: (params: {
1093
+ ruleId: string;
1094
+ }) => Promise<{
1095
+ success: boolean;
1096
+ revoked: boolean;
1097
+ error?: string;
1098
+ }>;
1099
+ answerAskUser: (params: {
1100
+ askUserId: string;
1101
+ answer: string;
1102
+ selectedOption?: string;
1103
+ cancelled?: boolean;
1104
+ }) => Promise<{
1105
+ success: boolean;
1106
+ error?: string;
1107
+ }>;
1108
+ answerChooseDirectory: (params: {
1109
+ requestId?: string;
1110
+ chooseDirectoryId: string;
1111
+ path?: string;
1112
+ cancelled?: boolean;
1113
+ error?: string;
1114
+ }) => Promise<{
1115
+ success: boolean;
1116
+ error?: string;
1117
+ }>;
1118
+ answerWorkspacePlacement: (params: {
1119
+ requestId?: string;
1120
+ workspacePlacementId: string;
1121
+ directory?: string;
1122
+ choice?: 'inbox' | 'reuse' | 'create';
1123
+ workspaceName?: string;
1124
+ result?: string;
1125
+ cancelled?: boolean;
1126
+ error?: string;
1127
+ }) => Promise<{
1128
+ success: boolean;
1129
+ error?: string;
1130
+ }>;
1131
+ listSdkSessions: (params?: {
1132
+ role?: string;
1133
+ workingDirectory?: string;
1134
+ limit?: number;
1135
+ }) => Promise<{
1136
+ success: boolean;
1137
+ sessions?: unknown[];
1138
+ error?: string;
1139
+ }>;
1140
+ showSdkSession: (params: {
1141
+ sessionId: string;
1142
+ }) => Promise<{
1143
+ success: boolean;
1144
+ session?: unknown;
1145
+ sessionDir?: string;
1146
+ checkpoints?: unknown[];
1147
+ error?: string;
1148
+ }>;
1149
+ attachSdkSession: (params: {
1150
+ conversationId: string;
1151
+ sessionId: string;
1152
+ }) => Promise<{
1153
+ success: boolean;
1154
+ session?: unknown;
1155
+ sessionDir?: string;
1156
+ sessionHistoryPath?: string;
1157
+ coordinationSessionId?: string;
1158
+ checkpoints?: unknown[];
1159
+ error?: string;
1160
+ }>;
1161
+ detachSdkSession: (params: {
1162
+ conversationId: string;
1163
+ }) => Promise<{
1164
+ success: boolean;
1165
+ error?: string;
1166
+ }>;
1167
+ deleteSdkSession: (params: {
1168
+ sessionId: string;
1169
+ }) => Promise<{
1170
+ success: boolean;
1171
+ error?: string;
1172
+ }>;
1173
+ cleanSdkSessions: (params: {
1174
+ workingDirectory: string;
1175
+ excludeSessionIds?: string[];
1176
+ }) => Promise<{
1177
+ success: boolean;
1178
+ result?: unknown;
1179
+ error?: string;
1180
+ }>;
1181
+ listSdkCheckpoints: (params: {
1182
+ sessionId: string;
1183
+ }) => Promise<{
1184
+ success: boolean;
1185
+ checkpoints?: unknown[];
1186
+ error?: string;
1187
+ }>;
1188
+ restoreSdkCheckpoint: (params: {
1189
+ sessionId: string;
1190
+ checkpointId: string;
1191
+ conversationId?: string;
1192
+ }) => Promise<{
1193
+ success: boolean;
1194
+ restored?: unknown;
1195
+ pendingRuntimeRestore?: boolean;
1196
+ error?: string;
1197
+ }>;
1198
+ deleteSdkCheckpoint: (params: {
1199
+ sessionId: string;
1200
+ checkpointId: string;
1201
+ }) => Promise<{
1202
+ success: boolean;
1203
+ error?: string;
1204
+ }>;
1205
+ readSdkTaskOutput: (params: {
1206
+ taskId: string;
1207
+ offset?: number;
1208
+ }) => Promise<{
1209
+ success: boolean;
1210
+ output?: string;
1211
+ error?: string;
1212
+ command?: string;
1213
+ status?: 'running' | 'completed' | 'failed' | 'stopped' | 'unknown';
1214
+ exitCode?: number | null;
1215
+ totalSize?: number;
1216
+ }>;
1217
+ stopSdkTask: (params: {
1218
+ taskId: string;
1219
+ }) => Promise<{
1220
+ success: boolean;
1221
+ output?: string;
1222
+ error?: string;
1223
+ command?: string;
1224
+ status?: 'running' | 'completed' | 'failed' | 'stopped' | 'unknown';
1225
+ exitCode?: number | null;
1226
+ totalSize?: number;
1227
+ }>;
1228
+ };
1229
+ agentsCloud?: {
1230
+ status: () => Promise<{
1231
+ success: boolean;
1232
+ authenticated: boolean;
1233
+ ok?: boolean;
1234
+ capabilities?: string[];
1235
+ version?: string;
1236
+ error?: string;
1237
+ code?: string;
1238
+ }>;
1239
+ createRun: (params: {
1240
+ prompt: string;
1241
+ model?: string;
1242
+ title?: string;
1243
+ previousRunId?: string;
1244
+ workspace?: string;
1245
+ budget?: {
1246
+ maxCredits?: number;
1247
+ };
1248
+ }) => Promise<{
1249
+ success: boolean;
1250
+ run?: import('@xenosystem/agent-interface-contract').AgentRunRecord;
1251
+ error?: string;
1252
+ code?: string;
1253
+ status?: number;
1254
+ }>;
1255
+ listRuns: (params?: {
1256
+ limit?: number;
1257
+ }) => Promise<{
1258
+ success: boolean;
1259
+ runs?: import('@xenosystem/agent-interface-contract').RunListItem[];
1260
+ error?: string;
1261
+ code?: string;
1262
+ }>;
1263
+ getRun: (params: {
1264
+ runId: string;
1265
+ }) => Promise<{
1266
+ success: boolean;
1267
+ run?: import('@xenosystem/agent-interface-contract').AgentRunRecord;
1268
+ error?: string;
1269
+ code?: string;
1270
+ }>;
1271
+ attach: (params: {
1272
+ requestId: string;
1273
+ runId: string;
1274
+ }) => Promise<{
1275
+ success: boolean;
1276
+ requestId?: string;
1277
+ runId?: string;
1278
+ error?: string;
1279
+ code?: string;
1280
+ }>;
1281
+ stop: (params: {
1282
+ requestId?: string;
1283
+ runId?: string;
1284
+ }) => Promise<{
1285
+ success: boolean;
1286
+ run?: import('@xenosystem/agent-interface-contract').AgentRunRecord;
1287
+ error?: string;
1288
+ code?: string;
1289
+ }>;
1290
+ onRunStatus: (callback: (data: {
1291
+ requestId: string;
1292
+ runId: string;
1293
+ status?: string;
1294
+ statusReason?: string | null;
1295
+ creditsHeld?: number | null;
1296
+ creditsSettled?: number | null;
1297
+ url?: string;
1298
+ }) => void) => void;
1299
+ offRunStatus: () => void;
1300
+ };
1301
+ workspace: {
1302
+ lifecycle?: (input: Omit<import('@xenosystem/agent-interface-contract').AgentWorkspaceLifecycleRequest, 'command'>) => Promise<import('@xenosystem/agent-interface-contract').AgentWorkspaceLifecycleResult>;
1303
+ schedule?: (input: import('@xenosystem/agent-interface-contract').AgentScheduleRequest) => Promise<import('@xenosystem/agent-interface-contract').AgentScheduleResult>;
1304
+ environment?: (input: import('@xenosystem/agent-interface-contract').AgentEnvironmentRequest) => Promise<import('@xenosystem/agent-interface-contract').AgentEnvironmentResult>;
1305
+ pickDirectory: () => Promise<{
1306
+ success: boolean;
1307
+ path: string | null;
1308
+ error: string | null;
1309
+ }>;
1310
+ pickExecutable: () => Promise<{
1311
+ success: boolean;
1312
+ path: string | null;
1313
+ error: string | null;
1314
+ }>;
1315
+ listDirectory: (params: {
1316
+ dirPath: string;
1317
+ allowedDirs: string[];
1318
+ }) => Promise<{
1319
+ success: boolean;
1320
+ entries: Array<{
1321
+ name: string;
1322
+ path: string;
1323
+ size: number;
1324
+ modified: string;
1325
+ type: 'file' | 'directory';
1326
+ extension: string;
1327
+ }>;
1328
+ error: string | null;
1329
+ }>;
1330
+ readFile: (params: {
1331
+ path: string;
1332
+ allowedDirs: string[];
1333
+ conversationId?: string;
1334
+ }) => Promise<{
1335
+ success: boolean;
1336
+ path: string | null;
1337
+ content: string;
1338
+ bytes: number;
1339
+ error: string | null;
1340
+ }>;
1341
+ getFileOpenOptions: (params: {
1342
+ path: string;
1343
+ allowedDirs: string[];
1344
+ conversationId?: string;
1345
+ }) => Promise<{
1346
+ success: boolean;
1347
+ path: string | null;
1348
+ defaultApp: {
1349
+ name: string;
1350
+ } | null;
1351
+ options: Array<{
1352
+ target: 'cursor' | 'antigravity' | 'default' | 'explorer' | 'terminal' | 'git-bash' | 'wsl';
1353
+ label: string;
1354
+ }>;
1355
+ revealLabel: string;
1356
+ error: string | null;
1357
+ }>;
1358
+ openFileWith: (params: {
1359
+ path: string;
1360
+ target: 'cursor' | 'antigravity' | 'default' | 'explorer' | 'terminal' | 'git-bash' | 'wsl';
1361
+ allowedDirs: string[];
1362
+ conversationId?: string;
1363
+ }) => Promise<{
1364
+ success: boolean;
1365
+ path: string | null;
1366
+ target: 'cursor' | 'antigravity' | 'default' | 'explorer' | 'terminal' | 'git-bash' | 'wsl' | null;
1367
+ error: string | null;
1368
+ }>;
1369
+ runCommand: (params: {
1370
+ conversationId?: string;
1371
+ workspaceId?: string;
1372
+ teamId?: string;
1373
+ agentId?: string;
1374
+ command: string;
1375
+ cwd?: string;
1376
+ allowedDirs: string[];
1377
+ timeoutMs?: number;
1378
+ }) => Promise<{
1379
+ success: boolean;
1380
+ stdout: string;
1381
+ stderr: string;
1382
+ exitCode: number | null;
1383
+ cwd: string | null;
1384
+ error: string | null;
1385
+ /**
1386
+ * Output hit the ceiling and was trimmed.
1387
+ *
1388
+ * OPTIONAL here while REQUIRED on the contract, and the asymmetry is
1389
+ * deliberate: the contract describes what THIS host produces, and it
1390
+ * always knows. This describes what a preload happens to deliver,
1391
+ * which may be an older host that predates the field. Absent
1392
+ * therefore means "this host cannot say" — which is exactly why it
1393
+ * must not be defaulted to `false` on the way through, since that
1394
+ * would assert output was complete on no evidence.
1395
+ */
1396
+ truncated?: boolean;
1397
+ }>;
1398
+ terminalStart: (params: {
1399
+ conversationId?: string;
1400
+ command: string;
1401
+ cwd?: string;
1402
+ allowedDirs: string[];
1403
+ timeoutMs?: number;
1404
+ }) => Promise<{
1405
+ success: boolean;
1406
+ terminalId: string | null;
1407
+ cwd: string | null;
1408
+ error: string | null;
1409
+ }>;
1410
+ terminalStop: (params: {
1411
+ terminalId: string;
1412
+ }) => Promise<{
1413
+ success: boolean;
1414
+ error: string | null;
1415
+ }>;
1416
+ ptyStart: (params: {
1417
+ conversationId?: string;
1418
+ cwd?: string;
1419
+ allowedDirs: string[];
1420
+ cols?: number;
1421
+ rows?: number;
1422
+ profile?: import('@xenosystem/agent-interface-contract').ProviderSessionPtyProfile;
1423
+ }) => Promise<{
1424
+ success: boolean;
1425
+ terminalId: string | null;
1426
+ cwd: string | null;
1427
+ code?: import('@xenosystem/agent-interface-contract').AgentCockpitErrorCode;
1428
+ error: string | null;
1429
+ }>;
1430
+ xenoTuiAttach?: (params: {
1431
+ conversationId: string;
1432
+ workspaceMode: 'agent' | 'chat';
1433
+ workingDirectory?: string;
1434
+ workspaceId?: string;
1435
+ providerKind: 'sdk-native' | 'xeno-cloud' | 'acp-provider';
1436
+ providerId?: string;
1437
+ acpAgentConfigId?: string;
1438
+ model?: string;
1439
+ cols?: number;
1440
+ rows?: number;
1441
+ }) => Promise<import('@xenosystem/agent-interface-contract').AgentXenoTuiAttachResult & {
1442
+ lanes?: import('@xenosystem/agent-interface-contract').ProviderLaneProjectionV1[];
1443
+ }>;
1444
+ providerLaneSelect?: (params: {
1445
+ conversationId: string;
1446
+ workspaceMode: 'agent' | 'chat';
1447
+ workingDirectory?: string;
1448
+ workspaceId?: string;
1449
+ providerKind: 'sdk-native' | 'xeno-cloud' | 'acp-provider';
1450
+ providerId?: string;
1451
+ acpAgentConfigId?: string;
1452
+ model?: string;
1453
+ }) => Promise<{
1454
+ success: boolean;
1455
+ error?: string;
1456
+ hostBinding?: import('@xenosystem/agent-interface-contract').AgentSessionHostBindingV1;
1457
+ activeLane?: import('@xenosystem/agent-interface-contract').ProviderLaneProjectionV1;
1458
+ lanes?: import('@xenosystem/agent-interface-contract').ProviderLaneProjectionV1[];
1459
+ }>;
1460
+ providerNativeAttach?: (params: {
1461
+ conversationId: string;
1462
+ laneId: string;
1463
+ expectedLaneRevision: number;
1464
+ workspaceTrust?: 'standard' | 'trusted';
1465
+ executionPolicy?: import('@xenosystem/agent-interface-contract').AgentNativeExecutionPolicy;
1466
+ cols?: number;
1467
+ rows?: number;
1468
+ }) => Promise<import('@xenosystem/agent-interface-contract').AgentProviderNativeAttachResult>;
1469
+ conversationResume?: (params: {
1470
+ conversationId: string;
1471
+ expectedWorkspaceEpochId?: string;
1472
+ }) => Promise<import('@xenosystem/agent-interface-contract').AgentConversationResumeResult>;
1473
+ providerLanesList?: (params: {
1474
+ conversationId: string;
1475
+ includeHistorical?: boolean;
1476
+ }) => Promise<import('@xenosystem/agent-interface-contract').AgentProviderLaneListResult>;
1477
+ providerNativeDetach?: (params: {
1478
+ conversationId: string;
1479
+ laneId: string;
1480
+ terminalId?: string;
1481
+ }) => Promise<import('@xenosystem/agent-interface-contract').AgentProviderNativeDetachResult>;
1482
+ providerNativeReattach?: (params: {
1483
+ conversationId: string;
1484
+ laneId: string;
1485
+ terminalId: string;
1486
+ cols?: number;
1487
+ rows?: number;
1488
+ }) => Promise<import('@xenosystem/agent-interface-contract').AgentProviderNativeReattachResult>;
1489
+ providerNativeStop?: (params: {
1490
+ conversationId: string;
1491
+ laneId: string;
1492
+ terminalId?: string;
1493
+ force?: boolean;
1494
+ reason?: string;
1495
+ }) => Promise<import('@xenosystem/agent-interface-contract').AgentProviderNativeStopResult>;
1496
+ providerReconcile?: (params: {
1497
+ conversationId: string;
1498
+ laneId: string;
1499
+ expectedLaneRevision: number;
1500
+ acknowledgePartialContext?: boolean;
1501
+ }) => Promise<import('@xenosystem/agent-interface-contract').AgentProviderReconcileResult>;
1502
+ ptySnapshot: (params: {
1503
+ terminalId: string;
1504
+ }) => Promise<{
1505
+ success: boolean;
1506
+ exists: boolean;
1507
+ terminalId: string;
1508
+ cwd: string | null;
1509
+ output: string;
1510
+ error: string | null;
1511
+ }>;
1512
+ ptyInput: (params: {
1513
+ terminalId: string;
1514
+ data: string;
1515
+ }) => Promise<{
1516
+ success: boolean;
1517
+ error: string | null;
1518
+ }>;
1519
+ ptyResize: (params: {
1520
+ terminalId: string;
1521
+ cols: number;
1522
+ rows: number;
1523
+ }) => Promise<{
1524
+ success: boolean;
1525
+ error: string | null;
1526
+ }>;
1527
+ ptyClear: (params: {
1528
+ terminalId: string;
1529
+ }) => Promise<{
1530
+ success: boolean;
1531
+ error: string | null;
1532
+ }>;
1533
+ ptyStop: (params: {
1534
+ terminalId: string;
1535
+ }) => Promise<{
1536
+ success: boolean;
1537
+ error: string | null;
1538
+ }>;
1539
+ browserRegister: (params: {
1540
+ browserTabId: string;
1541
+ label?: string;
1542
+ webContentsId: number;
1543
+ }) => Promise<{
1544
+ success: boolean;
1545
+ error: string | null;
1546
+ }>;
1547
+ browserUnregister: (params: {
1548
+ browserTabId: string;
1549
+ }) => Promise<{
1550
+ success: boolean;
1551
+ error: string | null;
1552
+ }>;
1553
+ browserList: () => Promise<{
1554
+ success: boolean;
1555
+ tabs: Array<{
1556
+ browserTabId: string;
1557
+ label: string;
1558
+ webContentsId: number;
1559
+ url: string;
1560
+ title: string;
1561
+ isLoading: boolean;
1562
+ canGoBack: boolean;
1563
+ canGoForward: boolean;
1564
+ }>;
1565
+ error: string | null;
1566
+ }>;
1567
+ browserSnapshot: (params: {
1568
+ browserTabId: string;
1569
+ maxTextChars?: number;
1570
+ maxElements?: number;
1571
+ }) => Promise<{
1572
+ success: boolean;
1573
+ snapshot: unknown | null;
1574
+ error: string | null;
1575
+ }>;
1576
+ browserGoto: (params: {
1577
+ browserTabId: string;
1578
+ url: string;
1579
+ }) => Promise<{
1580
+ success: boolean;
1581
+ error: string | null;
1582
+ }>;
1583
+ browserClick: (params: {
1584
+ browserTabId: string;
1585
+ selector: string;
1586
+ }) => Promise<{
1587
+ success: boolean;
1588
+ error: string | null;
1589
+ }>;
1590
+ browserType: (params: {
1591
+ browserTabId: string;
1592
+ selector: string;
1593
+ text: string;
1594
+ clear?: boolean;
1595
+ }) => Promise<{
1596
+ success: boolean;
1597
+ error: string | null;
1598
+ }>;
1599
+ browserKey: (params: {
1600
+ browserTabId: string;
1601
+ key: string;
1602
+ }) => Promise<{
1603
+ success: boolean;
1604
+ error: string | null;
1605
+ }>;
1606
+ onPtyData: (callback: (data: {
1607
+ terminalId: string;
1608
+ data: string;
1609
+ }) => void) => void;
1610
+ offPtyData: () => void;
1611
+ onPtyExit: (callback: (data: {
1612
+ terminalId: string;
1613
+ exitCode: number;
1614
+ signal?: number;
1615
+ }) => void) => void;
1616
+ offPtyExit: () => void;
1617
+ onTerminalData: (callback: (data: {
1618
+ terminalId: string;
1619
+ stream: 'stdout' | 'stderr';
1620
+ chunk: string;
1621
+ }) => void) => void;
1622
+ offTerminalData: () => void;
1623
+ onTerminalExit: (callback: (data: {
1624
+ terminalId: string;
1625
+ command: string;
1626
+ cwd: string;
1627
+ success: boolean;
1628
+ exitCode: number | null;
1629
+ error: string | null;
1630
+ }) => void) => void;
1631
+ offTerminalExit: () => void;
1632
+ writeFile: (params: {
1633
+ conversationId?: string;
1634
+ workspaceId?: string;
1635
+ teamId?: string;
1636
+ agentId?: string;
1637
+ path: string;
1638
+ content: string;
1639
+ expectedContent?: string | null;
1640
+ allowedDirs: string[];
1641
+ }) => Promise<{
1642
+ success: boolean;
1643
+ path: string | null;
1644
+ bytes: number;
1645
+ error: string | null;
1646
+ outcome?: 'committed' | 'not-committed' | 'uncertain';
1647
+ sha256?: string;
1648
+ recoveryPaths?: string[];
1649
+ }>;
1650
+ openApp: (params: {
1651
+ appPath: string;
1652
+ args?: string[];
1653
+ allowedApps: string[];
1654
+ }) => Promise<{
1655
+ success: boolean;
1656
+ appPath: string | null;
1657
+ error: string | null;
1658
+ }>;
1659
+ };
1660
+ sandbox?: {
1661
+ execute: (params: {
1662
+ conversationId: string;
1663
+ language: 'python' | 'javascript';
1664
+ code: string;
1665
+ timeoutMs?: number;
1666
+ }) => Promise<{
1667
+ success: boolean;
1668
+ stdout: string;
1669
+ stderr: string;
1670
+ exitCode: number | null;
1671
+ durationMs: number;
1672
+ files: string[];
1673
+ error: string | null;
1674
+ }>;
1675
+ abort: (params: {
1676
+ conversationId: string;
1677
+ }) => Promise<{
1678
+ success: boolean;
1679
+ }>;
1680
+ cleanup: (params: {
1681
+ conversationId: string;
1682
+ }) => Promise<{
1683
+ success: boolean;
1684
+ error: string | null;
1685
+ }>;
1686
+ detectRuntimes: () => Promise<{
1687
+ python: {
1688
+ available: boolean;
1689
+ version: string | null;
1690
+ command: string | null;
1691
+ };
1692
+ node: {
1693
+ available: boolean;
1694
+ version: string | null;
1695
+ };
1696
+ }>;
1697
+ };
1698
+ convert?: {
1699
+ checkAvailable: (params?: ScopedIpcParams) => Promise<{
1700
+ available: boolean;
1701
+ error: string | null;
1702
+ }>;
1703
+ supportedFormats: (params?: ScopedIpcParams) => Promise<{
1704
+ success: boolean;
1705
+ error: string | null;
1706
+ formats: {
1707
+ imageInput: string[];
1708
+ imageOutput: string[];
1709
+ audioInput: string[];
1710
+ audioOutput: string[];
1711
+ } | null;
1712
+ }>;
1713
+ inspectFile: (filePath: PathIpcInput) => Promise<{
1714
+ success: boolean;
1715
+ error: string | null;
1716
+ info: {
1717
+ fileType: string;
1718
+ format: string;
1719
+ fileSize: number;
1720
+ fileName: string;
1721
+ width?: number;
1722
+ height?: number;
1723
+ sampleRate?: number;
1724
+ channels?: number;
1725
+ durationSecs?: number;
1726
+ bitrateKbps?: number;
1727
+ codec?: string;
1728
+ bitsPerSample?: number;
1729
+ title?: string;
1730
+ artist?: string;
1731
+ album?: string;
1732
+ } | null;
1733
+ }>;
1734
+ writeTempImage: (dataUrl: string | ({
1735
+ dataUrl: string;
1736
+ } & ScopedIpcParams)) => Promise<{
1737
+ success: boolean;
1738
+ path: string | null;
1739
+ error: string | null;
1740
+ }>;
1741
+ getPathForFile: (file: File) => string;
1742
+ convert: (inputPath: string | ({
1743
+ inputPath: string;
1744
+ outputPath: string;
1745
+ options?: ConvertOptions;
1746
+ } & ScopedIpcParams), outputPath?: string, options?: ConvertOptions) => Promise<{
1747
+ success: boolean;
1748
+ outputPath?: string;
1749
+ error?: string;
1750
+ processingTimeMs?: number;
1751
+ }>;
1752
+ createVideoPreview: (filePath: PathIpcInput) => Promise<{
1753
+ success: boolean;
1754
+ outputPath: string | null;
1755
+ error: string | null;
1756
+ reused?: boolean;
1757
+ processingTimeMs?: number;
1758
+ }>;
1759
+ pickFile: (params?: ScopedIpcParams) => Promise<{
1760
+ success: boolean;
1761
+ path: string | null;
1762
+ }>;
1763
+ saveFile: (format: string | ({
1764
+ format: string;
1765
+ defaultName?: string;
1766
+ } & ScopedIpcParams), defaultName?: string) => Promise<{
1767
+ success: boolean;
1768
+ path: string | null;
1769
+ error?: string;
1770
+ }>;
1771
+ readThumbnail: (filePath: PathIpcInput) => Promise<{
1772
+ success: boolean;
1773
+ dataUrl: string | null;
1774
+ error?: string;
1775
+ }>;
1776
+ };
1777
+ compressor?: {
1778
+ pickFiles: () => Promise<{
1779
+ success: boolean;
1780
+ paths: string[];
1781
+ error: string | null;
1782
+ }>;
1783
+ pickOutputDirectory: (defaultPath?: string) => Promise<{
1784
+ success: boolean;
1785
+ path: string | null;
1786
+ error: string | null;
1787
+ }>;
1788
+ inspectFiles: (inputPaths: string[]) => Promise<{
1789
+ success: boolean;
1790
+ files: Array<{
1791
+ path: string;
1792
+ name: string;
1793
+ kind: 'image' | 'pdf' | 'unsupported';
1794
+ formatLabel: string;
1795
+ extension: string;
1796
+ bytes: number;
1797
+ supported: boolean;
1798
+ reason: string | null;
1799
+ width?: number;
1800
+ height?: number;
1801
+ pageCount?: number;
1802
+ }>;
1803
+ error: string | null;
1804
+ }>;
1805
+ compress: (params: {
1806
+ requestId: string;
1807
+ inputPaths: string[];
1808
+ outputDirectory: string;
1809
+ profile: 'light' | 'balanced' | 'strong';
1810
+ imageFormat: 'auto' | 'same' | 'webp' | 'jpeg' | 'png';
1811
+ skipIfLarger?: boolean;
1812
+ stripPdfMetadata?: boolean;
1813
+ }) => Promise<{
1814
+ success: boolean;
1815
+ results: Array<{
1816
+ path: string;
1817
+ name: string;
1818
+ kind: 'image' | 'pdf' | 'unsupported';
1819
+ status: 'compressed' | 'skipped' | 'failed';
1820
+ inputBytes: number;
1821
+ outputBytes?: number;
1822
+ bytesSaved: number;
1823
+ percentSaved: number;
1824
+ outputPath?: string;
1825
+ outputFormat?: string;
1826
+ message: string;
1827
+ processingTimeMs?: number;
1828
+ }>;
1829
+ summary: {
1830
+ processed: number;
1831
+ compressed: number;
1832
+ skipped: number;
1833
+ failed: number;
1834
+ totalOriginalBytes: number;
1835
+ totalEffectiveBytes: number;
1836
+ totalBytesSaved: number;
1837
+ percentSaved: number;
1838
+ outputDirectory: string;
1839
+ firstOutputPath?: string;
1840
+ } | null;
1841
+ error: string | null;
1842
+ }>;
1843
+ showInFolder: (targetPath: string) => Promise<{
1844
+ success: boolean;
1845
+ error: string | null;
1846
+ }>;
1847
+ onProgress: (callback: (data: {
1848
+ requestId: string;
1849
+ current: number;
1850
+ total: number;
1851
+ path: string;
1852
+ name: string;
1853
+ stage: 'start' | 'end';
1854
+ result?: {
1855
+ path: string;
1856
+ name: string;
1857
+ kind: 'image' | 'pdf' | 'unsupported';
1858
+ status: 'compressed' | 'skipped' | 'failed';
1859
+ inputBytes: number;
1860
+ outputBytes?: number;
1861
+ bytesSaved: number;
1862
+ percentSaved: number;
1863
+ outputPath?: string;
1864
+ outputFormat?: string;
1865
+ message: string;
1866
+ processingTimeMs?: number;
1867
+ };
1868
+ }) => void) => void;
1869
+ offProgress: () => void;
1870
+ };
1871
+ pdfMerge?: {
1872
+ pickFiles: () => Promise<{
1873
+ success: boolean;
1874
+ paths: string[];
1875
+ error: string | null;
1876
+ }>;
1877
+ saveFile: (defaultName?: string) => Promise<{
1878
+ success: boolean;
1879
+ path: string | null;
1880
+ error: string | null;
1881
+ }>;
1882
+ readFile: (filePath: string) => Promise<{
1883
+ success: boolean;
1884
+ sourceType: 'pdf' | 'image' | null;
1885
+ pdfBase64: string | null;
1886
+ imageDataUrl: string | null;
1887
+ error: string | null;
1888
+ }>;
1889
+ preview: (inputPaths: string[]) => Promise<{
1890
+ success: boolean;
1891
+ pdfBase64: string | null;
1892
+ pageCount: number;
1893
+ error: string | null;
1894
+ }>;
1895
+ merge: (params: {
1896
+ inputPaths: string[];
1897
+ outputPath: string;
1898
+ }) => Promise<{
1899
+ success: boolean;
1900
+ outputPath?: string;
1901
+ mergedCount?: number;
1902
+ pageCount?: number;
1903
+ error?: string;
1904
+ }>;
1905
+ showInFolder: (filePath: string) => Promise<{
1906
+ success: boolean;
1907
+ error: string | null;
1908
+ }>;
1909
+ };
1910
+ latex?: {
1911
+ checkInstalled: () => Promise<{
1912
+ installed: boolean;
1913
+ engine: string | null;
1914
+ version: string | null;
1915
+ installInstructions: string | null;
1916
+ }>;
1917
+ compile: (texContent: string, engine?: string) => Promise<{
1918
+ success: boolean;
1919
+ pdfPath: string | null;
1920
+ pdfBase64: string | null;
1921
+ log: string;
1922
+ }>;
1923
+ openFile: () => Promise<{
1924
+ success: boolean;
1925
+ content: string | null;
1926
+ filePath: string | null;
1927
+ error: string | null;
1928
+ }>;
1929
+ savePdf: (pdfPath: string) => Promise<{
1930
+ success: boolean;
1931
+ savedPath?: string;
1932
+ error: string | null;
1933
+ }>;
1934
+ saveTexFile: (content: string, currentPath?: string) => Promise<{
1935
+ success: boolean;
1936
+ filePath: string | null;
1937
+ error: string | null;
1938
+ }>;
1939
+ aifix: (texContent: string, compilationLog: string) => Promise<{
1940
+ success: boolean;
1941
+ fixedContent: string | null;
1942
+ error: string | null;
1943
+ }>;
1944
+ install: () => Promise<{
1945
+ success: boolean;
1946
+ error?: string;
1947
+ }>;
1948
+ onInstallProgress: (callback: (data: {
1949
+ phase: string;
1950
+ percent: number;
1951
+ }) => void) => void;
1952
+ offInstallProgress: () => void;
1953
+ };
1954
+ updater?: {
1955
+ check: () => Promise<unknown>;
1956
+ download: () => Promise<void>;
1957
+ install: () => void;
1958
+ getVersion: () => Promise<string>;
1959
+ onUpdateAvailable: (cb: (info: {
1960
+ version: string;
1961
+ releaseNotes?: string;
1962
+ }) => void) => void;
1963
+ onUpToDate: (cb: () => void) => void;
1964
+ onDownloadProgress: (cb: (progress: {
1965
+ percent: number;
1966
+ bytesPerSecond: number;
1967
+ transferred: number;
1968
+ total: number;
1969
+ }) => void) => void;
1970
+ onDownloaded: (cb: () => void) => void;
1971
+ onError: (cb: (msg: string) => void) => void;
1972
+ offAll: () => void;
1973
+ };
1974
+ chatStorage?: {
1975
+ saveConversation: (conversation: unknown) => Promise<{
1976
+ success: boolean;
1977
+ error?: string;
1978
+ }>;
1979
+ loadConversations: () => Promise<{
1980
+ success: boolean;
1981
+ conversations: unknown[];
1982
+ error?: string;
1983
+ }>;
1984
+ deleteConversation: (id: string) => Promise<{
1985
+ success: boolean;
1986
+ error?: string;
1987
+ }>;
1988
+ };
1989
+ workspaceStorage: {
1990
+ save: (workspaces: unknown, expectedRevision?: string) => Promise<{
1991
+ success: boolean;
1992
+ revision?: string;
1993
+ code?: 'WORKSPACE_CONFLICT' | 'WORKSPACE_REVISION_REQUIRED';
1994
+ error?: string;
1995
+ }>;
1996
+ load: () => Promise<import('@xenosystem/agent-interface-contract').AgentWorkspaceStateLoadResult>;
1997
+ onChanged: (callback: (data: {
1998
+ source?: string;
1999
+ action?: string;
2000
+ revision?: string;
2001
+ }) => void) => void | (() => void);
2002
+ offChanged: () => void;
2003
+ };
2004
+ imageProjects?: {
2005
+ listModels: () => Promise<{
2006
+ success: boolean;
2007
+ models: Array<{
2008
+ id: string;
2009
+ type: 'image' | 'video';
2010
+ available: boolean;
2011
+ reason?: string | null;
2012
+ capabilities?: {
2013
+ maxCount?: number;
2014
+ supportedAspectRatios?: string[];
2015
+ supportedResolutions?: string[];
2016
+ maxResolution?: string;
2017
+ minDuration?: number;
2018
+ maxDuration?: number;
2019
+ supportsAudio?: boolean;
2020
+ supportsLastFrame?: boolean;
2021
+ requiresReferenceImage?: boolean;
2022
+ supportsReferenceImages?: boolean;
2023
+ maxReferenceImages?: number;
2024
+ } | null;
2025
+ }>;
2026
+ error?: string | null;
2027
+ }>;
2028
+ list: () => Promise<any[]>;
2029
+ create: (params: {
2030
+ name: string;
2031
+ modelPreference?: string;
2032
+ }) => Promise<any>;
2033
+ update: (params: {
2034
+ id: string;
2035
+ name?: string;
2036
+ modelPreference?: string | null;
2037
+ thumbnailUrl?: string | null;
2038
+ }) => Promise<any>;
2039
+ delete: (id: string) => Promise<any>;
2040
+ getGenerations: (params: {
2041
+ projectId: string;
2042
+ limit?: number;
2043
+ offset?: number;
2044
+ favoritesOnly?: boolean;
2045
+ lite?: boolean;
2046
+ view?: 'gallery' | 'full' | 'lite';
2047
+ }) => Promise<any>;
2048
+ getGeneration: (params: {
2049
+ projectId: string;
2050
+ genId: string;
2051
+ }) => Promise<any>;
2052
+ saveGeneration: (params: {
2053
+ projectId: string;
2054
+ [key: string]: any;
2055
+ }) => Promise<any>;
2056
+ deleteGeneration: (params: {
2057
+ projectId: string;
2058
+ generationId: string;
2059
+ }) => Promise<any>;
2060
+ toggleFavorite: (params: {
2061
+ projectId: string;
2062
+ generationId: string;
2063
+ }) => Promise<any>;
2064
+ bulkDelete: (ids: string[]) => Promise<any>;
2065
+ duplicate: (id: string) => Promise<any>;
2066
+ generateImage: (params: Record<string, unknown>) => Promise<any>;
2067
+ upscaleImage: (params: Record<string, unknown>) => Promise<any>;
2068
+ generateVideo: (params: Record<string, unknown>) => Promise<any>;
2069
+ upscaleVideo: (params: Record<string, unknown>) => Promise<any>;
2070
+ readReferenceImage: (params: {
2071
+ path: string;
2072
+ } | string) => Promise<{
2073
+ success: boolean;
2074
+ path?: string;
2075
+ name?: string;
2076
+ mimeType?: string;
2077
+ size?: number;
2078
+ dataUrl?: string;
2079
+ error?: string;
2080
+ }>;
2081
+ selectFolder: () => Promise<string | null>;
2082
+ readFolderImages: (folderPath: string) => Promise<Array<{
2083
+ name: string;
2084
+ path: string;
2085
+ size: number;
2086
+ modified: number;
2087
+ }>>;
2088
+ };
2089
+ agentContext?: {
2090
+ get: () => Promise<{
2091
+ success: boolean;
2092
+ context: {
2093
+ installedApps: string[];
2094
+ userName: string | null;
2095
+ provider: string;
2096
+ } | null;
2097
+ error?: string;
2098
+ }>;
2099
+ };
2100
+ agentStorage: {
2101
+ saveConversation: (conversation: unknown) => Promise<{
2102
+ success: boolean;
2103
+ error?: string;
2104
+ }>;
2105
+ loadConversations: () => Promise<{
2106
+ success: boolean;
2107
+ conversations: unknown[];
2108
+ recoveredConversationIds?: string[];
2109
+ corruptConversationFiles?: string[];
2110
+ error?: string;
2111
+ }>;
2112
+ deleteConversation: (id: string) => Promise<{
2113
+ success: boolean;
2114
+ error?: string;
2115
+ }>;
2116
+ };
2117
+ agentSearch?: {
2118
+ query: (params: unknown) => Promise<{
2119
+ success: boolean;
2120
+ results: unknown[];
2121
+ total: number;
2122
+ stats?: unknown;
2123
+ error?: string;
2124
+ }>;
2125
+ hydrateResult: (params: {
2126
+ id: string;
2127
+ }) => Promise<{
2128
+ success: boolean;
2129
+ document?: unknown;
2130
+ error?: string;
2131
+ }>;
2132
+ attachConversation: (params: unknown) => Promise<{
2133
+ success: boolean;
2134
+ attachment?: unknown;
2135
+ error?: string;
2136
+ }>;
2137
+ detachConversation: (params: {
2138
+ attachmentId: string;
2139
+ }) => Promise<{
2140
+ success: boolean;
2141
+ error?: string;
2142
+ }>;
2143
+ listAttachments: (params: {
2144
+ conversationId: string;
2145
+ }) => Promise<{
2146
+ success: boolean;
2147
+ attachments: unknown[];
2148
+ error?: string;
2149
+ }>;
2150
+ reindex: (params?: {
2151
+ force?: boolean;
2152
+ reason?: string;
2153
+ cancelActive?: boolean;
2154
+ }) => Promise<{
2155
+ ready: boolean;
2156
+ building: boolean;
2157
+ error?: string;
2158
+ stats: unknown;
2159
+ health?: unknown;
2160
+ lifecycle?: unknown;
2161
+ }>;
2162
+ cancelIndexing: (params?: {
2163
+ jobId?: string;
2164
+ reason?: string;
2165
+ }) => Promise<{
2166
+ ready: boolean;
2167
+ building: boolean;
2168
+ error?: string;
2169
+ stats: unknown;
2170
+ health?: unknown;
2171
+ lifecycle?: unknown;
2172
+ }>;
2173
+ repair: (params?: {
2174
+ force?: boolean;
2175
+ cleanSnapshot?: boolean;
2176
+ }) => Promise<{
2177
+ success: boolean;
2178
+ status: unknown;
2179
+ repaired: unknown[];
2180
+ durationMs: number;
2181
+ error?: string;
2182
+ }>;
2183
+ health: (params?: unknown) => Promise<{
2184
+ checkedAt: number;
2185
+ healthy: boolean;
2186
+ stale: boolean;
2187
+ issues: unknown[];
2188
+ }>;
2189
+ profile: (params?: {
2190
+ limit?: number;
2191
+ slowOnly?: boolean;
2192
+ }) => Promise<{
2193
+ entries: unknown[];
2194
+ slowQueries: unknown[];
2195
+ averageQueryMs: number | null;
2196
+ p95QueryMs: number | null;
2197
+ failedQueryCount?: number;
2198
+ health?: string;
2199
+ }>;
2200
+ watcherStatus: (params?: unknown) => Promise<{
2201
+ success: boolean;
2202
+ status?: unknown;
2203
+ error?: string;
2204
+ }>;
2205
+ lifecycleStatus: (params?: unknown) => Promise<{
2206
+ success: boolean;
2207
+ status?: unknown;
2208
+ error?: string;
2209
+ }>;
2210
+ status: () => Promise<{
2211
+ ready: boolean;
2212
+ building: boolean;
2213
+ error?: string;
2214
+ stats: unknown;
2215
+ health?: unknown;
2216
+ lifecycle?: unknown;
2217
+ }>;
2218
+ };
2219
+ codeIndex?: {
2220
+ indexWorkspace: (params: unknown) => Promise<{
2221
+ success: boolean;
2222
+ snapshot?: unknown;
2223
+ stats?: unknown;
2224
+ error?: string;
2225
+ }>;
2226
+ watch: (params: unknown) => Promise<{
2227
+ success: boolean;
2228
+ snapshot?: unknown;
2229
+ stats?: unknown;
2230
+ error?: string;
2231
+ }>;
2232
+ searchFiles: (params: unknown) => Promise<{
2233
+ success: boolean;
2234
+ files: unknown[];
2235
+ total: number;
2236
+ error?: string;
2237
+ }>;
2238
+ searchText: (params: unknown) => Promise<{
2239
+ success: boolean;
2240
+ results: unknown[];
2241
+ total: number;
2242
+ error?: string;
2243
+ }>;
2244
+ listSymbols: (params: unknown) => Promise<{
2245
+ success: boolean;
2246
+ symbols: unknown[];
2247
+ total: number;
2248
+ error?: string;
2249
+ }>;
2250
+ getSymbol: (params: unknown) => Promise<{
2251
+ success: boolean;
2252
+ symbol?: unknown;
2253
+ file?: unknown;
2254
+ references?: unknown[];
2255
+ error?: string;
2256
+ }>;
2257
+ references: (params: unknown) => Promise<{
2258
+ success: boolean;
2259
+ results: unknown[];
2260
+ total: number;
2261
+ error?: string;
2262
+ }>;
2263
+ codeActions: (params: unknown) => Promise<{
2264
+ success: boolean;
2265
+ rootDirectory: string;
2266
+ filePath?: string;
2267
+ actions: unknown[];
2268
+ diagnostics: unknown[];
2269
+ error?: string;
2270
+ }>;
2271
+ applyCodeAction: (params: unknown) => Promise<{
2272
+ success: boolean;
2273
+ rootDirectory: string;
2274
+ filePath?: string;
2275
+ applied: boolean;
2276
+ edits: unknown[];
2277
+ diagnostics?: unknown[];
2278
+ error?: string;
2279
+ }>;
2280
+ organizeImports: (params: unknown) => Promise<{
2281
+ success: boolean;
2282
+ rootDirectory: string;
2283
+ filePath?: string;
2284
+ applied: boolean;
2285
+ edits: unknown[];
2286
+ diagnostics?: unknown[];
2287
+ error?: string;
2288
+ }>;
2289
+ renameSymbol: (params: unknown) => Promise<{
2290
+ success: boolean;
2291
+ rootDirectory: string;
2292
+ filePath?: string;
2293
+ applied: boolean;
2294
+ edits: unknown[];
2295
+ diagnostics?: unknown[];
2296
+ error?: string;
2297
+ }>;
2298
+ languageServiceStatus: (params: unknown) => Promise<{
2299
+ success: boolean;
2300
+ rootDirectory: string;
2301
+ services: unknown[];
2302
+ error?: string;
2303
+ }>;
2304
+ controlLanguageService: (params: unknown) => Promise<{
2305
+ success: boolean;
2306
+ rootDirectory: string;
2307
+ service?: unknown;
2308
+ error?: string;
2309
+ }>;
2310
+ repairIndex: (params: unknown) => Promise<{
2311
+ success: boolean;
2312
+ rootDirectory: string;
2313
+ repaired: boolean;
2314
+ removedFiles: string[];
2315
+ rebuilt?: unknown;
2316
+ durationMs: number;
2317
+ error?: string;
2318
+ }>;
2319
+ dependencyGraph: (params: unknown) => Promise<{
2320
+ success: boolean;
2321
+ graph?: unknown;
2322
+ error?: string;
2323
+ }>;
2324
+ createContextPack: (params: unknown) => Promise<{
2325
+ success: boolean;
2326
+ pack?: unknown;
2327
+ error?: string;
2328
+ }>;
2329
+ updateContextPack: (params: unknown) => Promise<{
2330
+ success: boolean;
2331
+ pack?: unknown;
2332
+ error?: string;
2333
+ }>;
2334
+ listContextPacks: (params: unknown) => Promise<{
2335
+ success: boolean;
2336
+ packs: unknown[];
2337
+ error?: string;
2338
+ }>;
2339
+ materializeContextPack: (params: unknown) => Promise<{
2340
+ success: boolean;
2341
+ materialized?: unknown;
2342
+ error?: string;
2343
+ }>;
2344
+ whatChanged: (params: unknown) => Promise<{
2345
+ success: boolean;
2346
+ isGitRepo: boolean;
2347
+ rootDirectory: string;
2348
+ summary: string;
2349
+ changedFiles: unknown[];
2350
+ diffStat?: string;
2351
+ workPacket: string;
2352
+ error?: string;
2353
+ }>;
2354
+ };
2355
+ /**
2356
+ * §2.9 review and §5.7 landing, as the surface sees them.
2357
+ *
2358
+ * Every one of these can answer `available: false`. That is not an error
2359
+ * path to collapse into a catch: a host with no isolation substrate wired
2360
+ * observes nothing, and a surface must be able to tell "this run changed
2361
+ * nothing" from "nobody was watching".
2362
+ */
2363
+ /** ADE §9 step 6. `coordinationComplete` is false today in every case —
2364
+ * collisions are only what this host has seen since it started — so a
2365
+ * surface must render the notice rather than presenting the board as the
2366
+ * whole picture. */
2367
+ /** ADE §5.5. Every call can report unavailable — a host with no session
2368
+ * substrate mounted has no sessions, which is different from having none
2369
+ * open, and a surface must be able to tell them apart. */
2370
+ /** ADE §5.1. `complete: false` means a tracker could not be read, so the
2371
+ * inbox may be MISSING work — a short list is not the same as no work. */
2372
+ /** ADE §5.8. `durable: false` means these facts vanish when the app
2373
+ * closes — a surface must say so rather than rendering them identically. */
2374
+ knowledge?: {
2375
+ list: (params: {
2376
+ workspaceId: string;
2377
+ }) => Promise<{
2378
+ available: boolean;
2379
+ entries: Array<{
2380
+ id: string;
2381
+ subject: string;
2382
+ fact: string;
2383
+ pinned?: boolean;
2384
+ runId: string;
2385
+ providerId?: string;
2386
+ at: number;
2387
+ }>;
2388
+ durable: boolean;
2389
+ reason?: string;
2390
+ }>;
2391
+ record: (params: {
2392
+ workspaceId: string;
2393
+ subject: string;
2394
+ fact: string;
2395
+ pinned?: boolean;
2396
+ runId: string;
2397
+ providerId?: string;
2398
+ }) => Promise<{
2399
+ ok: boolean;
2400
+ reason?: string;
2401
+ entry?: {
2402
+ id: string;
2403
+ };
2404
+ }>;
2405
+ forget: (params: {
2406
+ workspaceId: string;
2407
+ entryId: string;
2408
+ }) => Promise<{
2409
+ ok: boolean;
2410
+ reason?: string;
2411
+ }>;
2412
+ context: (params: {
2413
+ workspaceId: string;
2414
+ maxChars?: number;
2415
+ }) => Promise<{
2416
+ available: boolean;
2417
+ text: string;
2418
+ complete: boolean;
2419
+ omitted: Array<{
2420
+ subject: string;
2421
+ reason: string;
2422
+ }>;
2423
+ reason?: string;
2424
+ }>;
2425
+ };
2426
+ intake?: {
2427
+ sources: (params: Record<string, never>) => Promise<{
2428
+ available: boolean;
2429
+ sources: Array<{
2430
+ sourceId: string;
2431
+ label: string;
2432
+ healthy: boolean;
2433
+ problem?: string;
2434
+ }>;
2435
+ reason?: string;
2436
+ }>;
2437
+ list: (params: {
2438
+ sourceId?: string;
2439
+ }) => Promise<{
2440
+ available: boolean;
2441
+ items: Array<{
2442
+ id: string;
2443
+ sourceId: string;
2444
+ externalId: string;
2445
+ title: string;
2446
+ detail?: string;
2447
+ createdAt?: number;
2448
+ url?: string;
2449
+ claimState: string;
2450
+ claimedBy?: string;
2451
+ runId?: string;
2452
+ }>;
2453
+ complete: boolean;
2454
+ failedSources: Array<{
2455
+ sourceId: string;
2456
+ problem: string;
2457
+ }>;
2458
+ reason?: string;
2459
+ }>;
2460
+ /** 🔴 A second claimant is REFUSED and told who won. Show `reason`
2461
+ * verbatim — the loser's next move depends on knowing it lost. */
2462
+ claim: (params: {
2463
+ itemId: string;
2464
+ clientId: string;
2465
+ }) => Promise<{
2466
+ ok: boolean;
2467
+ reason?: string;
2468
+ heldBy?: string;
2469
+ runId?: string;
2470
+ claimState?: string;
2471
+ }>;
2472
+ release: (params: {
2473
+ itemId: string;
2474
+ clientId: string;
2475
+ }) => Promise<{
2476
+ ok: boolean;
2477
+ reason?: string;
2478
+ heldBy?: string;
2479
+ claimState?: string;
2480
+ }>;
2481
+ dispatch: (params: {
2482
+ itemId: string;
2483
+ clientId: string;
2484
+ runId: string;
2485
+ }) => Promise<{
2486
+ ok: boolean;
2487
+ reason?: string;
2488
+ heldBy?: string;
2489
+ runId?: string;
2490
+ claimState?: string;
2491
+ }>;
2492
+ };
2493
+ session: {
2494
+ list: (params: {
2495
+ runId?: string;
2496
+ }) => Promise<{
2497
+ available: boolean;
2498
+ sessions: Array<{
2499
+ sessionId: string;
2500
+ runId: string;
2501
+ mode: string;
2502
+ switchable: boolean;
2503
+ hasProtocolChannel: boolean;
2504
+ openedAt: number;
2505
+ viewers: string[];
2506
+ lease: {
2507
+ holder: string | null;
2508
+ heldSince: number | null;
2509
+ interventions: number;
2510
+ };
2511
+ }>;
2512
+ reason?: string;
2513
+ }>;
2514
+ attach: (params: {
2515
+ sessionId: string;
2516
+ viewerId: string;
2517
+ }) => Promise<{
2518
+ ok: boolean;
2519
+ reason?: string;
2520
+ }>;
2521
+ detach: (params: {
2522
+ sessionId: string;
2523
+ viewerId: string;
2524
+ }) => Promise<{
2525
+ ok: boolean;
2526
+ reason?: string;
2527
+ }>;
2528
+ snapshot: (params: {
2529
+ sessionId: string;
2530
+ }) => Promise<{
2531
+ available: boolean;
2532
+ output: string;
2533
+ truncated: boolean;
2534
+ reason?: string;
2535
+ }>;
2536
+ /**
2537
+ * Ordinary typing — §2.8. Honours the write lease WITHOUT seizing it.
2538
+ *
2539
+ * The routing (steer now, or queue for the next turn) is decided by the
2540
+ * host from facts it owns; a surface supplies only what was typed.
2541
+ * `delivered` says whether the agent already has it — see `sink`.
2542
+ */
2543
+ input: (params: {
2544
+ sessionId: string;
2545
+ viewerId: string;
2546
+ data: string;
2547
+ }) => Promise<{
2548
+ ok: boolean;
2549
+ code?: 'no_such_session' | 'lease_held';
2550
+ disposition?: 'steer' | 'queue';
2551
+ delivered?: boolean;
2552
+ sink?: 'pty' | 'turn.steer' | 'turn.queue';
2553
+ /**
2554
+ * 🔴 The EFFECT of a `queue` disposition, with the address
2555
+ * needed to act on it. `disposition` is the intent and cannot say
2556
+ * whether it happened; a surface reading it as if it could is how
2557
+ * this panel came to report a queue entry that did not exist.
2558
+ */
2559
+ queued?: {
2560
+ instructionId: string;
2561
+ conversationId: string;
2562
+ };
2563
+ reason?: string;
2564
+ }>;
2565
+ /** 🔴 Refused when ANOTHER human holds the lease, and the keystrokes are
2566
+ * NOT written in that case. Show `reason` verbatim. */
2567
+ takeover: (params: {
2568
+ sessionId: string;
2569
+ viewerId: string;
2570
+ data: string;
2571
+ }) => Promise<{
2572
+ ok: boolean;
2573
+ lease?: {
2574
+ holder: string | null;
2575
+ heldSince: number | null;
2576
+ interventions: number;
2577
+ };
2578
+ reason?: string;
2579
+ }>;
2580
+ release: (params: {
2581
+ sessionId: string;
2582
+ viewerId: string;
2583
+ }) => Promise<{
2584
+ ok: boolean;
2585
+ reason?: string;
2586
+ }>;
2587
+ /**
2588
+ * Change what renders into the session — ADE §2.8's "the user switches".
2589
+ *
2590
+ * 🔴 Offer it ONLY when the row says `switchable`. Every refusal names
2591
+ * which half is missing, and today the honest answer is usually no: no
2592
+ * composition attaches a vendor TUI, so most agents have exactly one
2593
+ * mode. A control that is always present and always refuses teaches
2594
+ * people to ignore it.
2595
+ *
2596
+ * Optional because a host predating the verb has none, and a panel must
2597
+ * degrade to showing the mode rather than fail to mount.
2598
+ */
2599
+ setMode?: (params: {
2600
+ sessionId: string;
2601
+ mode: string;
2602
+ }) => Promise<{
2603
+ ok: boolean;
2604
+ mode?: string;
2605
+ reason?: string;
2606
+ }>;
2607
+ /**
2608
+ * A session opened, closed, or gained or lost a viewer — ADE §2.8.
2609
+ *
2610
+ * 🔴 IDS AND COUNTS ONLY. Terminal bytes are per-viewer and large, so
2611
+ * the substrate keeps them off the event feed on purpose; `snapshot` is
2612
+ * the read path for output and stays a poll. A surface that treated this
2613
+ * as an output stream would be waiting for bytes that never come.
2614
+ *
2615
+ * Optional because a host predating it has no such channel, and a panel
2616
+ * must degrade to its one-shot list rather than fail to mount.
2617
+ */
2618
+ subscribeChanged?: (listener: (payload: unknown) => void) => () => void;
2619
+ };
2620
+ fleet?: {
2621
+ view: (params: {
2622
+ claimedPathsByRun?: Record<string, string[]>;
2623
+ }) => Promise<{
2624
+ runs: Array<{
2625
+ runId: string;
2626
+ conversationId?: string;
2627
+ workspaceId?: string;
2628
+ agentId?: string;
2629
+ working: boolean;
2630
+ claims: string[];
2631
+ changes?: {
2632
+ added: number;
2633
+ modified: number;
2634
+ deleted: number;
2635
+ };
2636
+ diffComplete?: boolean;
2637
+ contestedPaths: string[];
2638
+ }>;
2639
+ collisions: Array<{
2640
+ scope: string;
2641
+ wantedByRunId: string;
2642
+ heldByRunId: string;
2643
+ at: string;
2644
+ stillHeld: boolean;
2645
+ }>;
2646
+ coordinationComplete: boolean;
2647
+ observationComplete: boolean;
2648
+ problems: string[];
2649
+ }>;
2650
+ /**
2651
+ * Anything a board row is composed from moved — claims, collisions and
2652
+ * run state (`coordination.event`), or change counts and diff trust
2653
+ * (`run.observation`).
2654
+ *
2655
+ * Optional, so a host predating it leaves the panel on its manual
2656
+ * refresh rather than failing to mount.
2657
+ */
2658
+ subscribeChanged?: (listener: (payload: unknown) => void) => () => void;
2659
+ };
2660
+ developmentCoordination?: {
2661
+ /** Stable identity whose lease is owned and heartbeated by the host client. */
2662
+ ownerId: string;
2663
+ getState: (params: {
2664
+ sessionId: string;
2665
+ }) => Promise<{
2666
+ schemaVersion: 1;
2667
+ sessionId: string;
2668
+ result: unknown;
2669
+ state: object;
2670
+ }>;
2671
+ action: (params: {
2672
+ sessionId: string;
2673
+ action: 'goal.create' | 'goal.update' | 'goal.complete' | 'goal.cancel' | 'goal.steer' | 'loop.start' | 'loop.get' | 'loop.begin' | 'loop.finish' | 'loop.set_status' | 'ownership.acquire' | 'ownership.renew' | 'ownership.release' | 'handoff.create' | 'handoff.claim' | 'handoff.complete' | 'handoff.fail';
2674
+ payload?: Record<string, unknown>;
2675
+ }) => Promise<{
2676
+ schemaVersion: 1;
2677
+ sessionId: string;
2678
+ result: unknown;
2679
+ state: object;
2680
+ }>;
2681
+ subscribeChanged?: (listener: (payload: unknown) => void) => () => void;
2682
+ };
2683
+ review: {
2684
+ snapshot: (params: {
2685
+ runId: string;
2686
+ poll?: boolean;
2687
+ }) => Promise<{
2688
+ available: boolean;
2689
+ runId: string;
2690
+ changes: Array<{
2691
+ path: string;
2692
+ kind: 'added' | 'modified' | 'deleted';
2693
+ }>;
2694
+ complete: boolean;
2695
+ droppedEvents: number;
2696
+ problems: string[];
2697
+ reason?: string;
2698
+ }>;
2699
+ /**
2700
+ * A run's tier-1 change set moved — §2.9.
2701
+ *
2702
+ * Payload carries `runId`; a pane watching one run FILTERS for itself.
2703
+ * Optional, so a host predating it leaves the pane on manual refresh
2704
+ * rather than failing to mount.
2705
+ */
2706
+ subscribeChanged?: (listener: (payload: unknown) => void) => () => void;
2707
+ change: (params: {
2708
+ runId: string;
2709
+ path: string;
2710
+ }) => Promise<{
2711
+ available: boolean;
2712
+ path: string;
2713
+ before?: string;
2714
+ after?: string;
2715
+ binary: boolean;
2716
+ truncated: boolean;
2717
+ refusal?: string;
2718
+ }>;
2719
+ overlaps: (params: {
2720
+ claimedPathsByRun?: Record<string, string[]>;
2721
+ }) => Promise<{
2722
+ available: boolean;
2723
+ overlaps: Array<{
2724
+ path: string;
2725
+ runIds: string[];
2726
+ kind: string;
2727
+ unclaimed?: boolean;
2728
+ }>;
2729
+ incompleteRuns: string[];
2730
+ complete: boolean;
2731
+ reason?: string;
2732
+ }>;
2733
+ };
2734
+ engineering: {
2735
+ gitStatus: (params: unknown) => Promise<{
2736
+ success: boolean;
2737
+ isGitRepo: boolean;
2738
+ rootDirectory: string;
2739
+ branch?: string;
2740
+ upstream?: string;
2741
+ ahead?: number;
2742
+ behind?: number;
2743
+ clean: boolean;
2744
+ files: unknown[];
2745
+ raw?: string;
2746
+ error?: string;
2747
+ }>;
2748
+ gitDiff: (params: unknown) => Promise<{
2749
+ success: boolean;
2750
+ isGitRepo: boolean;
2751
+ rootDirectory: string;
2752
+ diff: string;
2753
+ truncated: boolean;
2754
+ error?: string;
2755
+ }>;
2756
+ gitStage: (params: unknown) => Promise<{
2757
+ success: boolean;
2758
+ isGitRepo: boolean;
2759
+ rootDirectory: string;
2760
+ branch?: string;
2761
+ upstream?: string;
2762
+ ahead?: number;
2763
+ behind?: number;
2764
+ clean: boolean;
2765
+ files: unknown[];
2766
+ raw?: string;
2767
+ error?: string;
2768
+ }>;
2769
+ gitUnstage: (params: unknown) => Promise<{
2770
+ success: boolean;
2771
+ isGitRepo: boolean;
2772
+ rootDirectory: string;
2773
+ branch?: string;
2774
+ upstream?: string;
2775
+ ahead?: number;
2776
+ behind?: number;
2777
+ clean: boolean;
2778
+ files: unknown[];
2779
+ raw?: string;
2780
+ error?: string;
2781
+ }>;
2782
+ gitCommit: (params: unknown) => Promise<{
2783
+ success: boolean;
2784
+ isGitRepo: boolean;
2785
+ rootDirectory: string;
2786
+ branch?: string;
2787
+ upstream?: string;
2788
+ ahead?: number;
2789
+ behind?: number;
2790
+ clean: boolean;
2791
+ files: unknown[];
2792
+ raw?: string;
2793
+ error?: string;
2794
+ }>;
2795
+ gitBranch: (params: unknown) => Promise<{
2796
+ success: boolean;
2797
+ isGitRepo: boolean;
2798
+ rootDirectory: string;
2799
+ branch?: string;
2800
+ clean: boolean;
2801
+ files: unknown[];
2802
+ error?: string;
2803
+ }>;
2804
+ /** 🔴 Outward-facing. Refuses unless `confirmed: true` comes from a real
2805
+ * human action — never set as a constant by a caller. */
2806
+ gitPush: (params: unknown) => Promise<{
2807
+ success: boolean;
2808
+ pushed: boolean;
2809
+ remote?: string;
2810
+ pushedBranch?: string;
2811
+ error?: string;
2812
+ }>;
2813
+ /** 🔴 Outward-facing. Same rule as `gitPush`. */
2814
+ gitCreatePullRequest: (params: unknown) => Promise<{
2815
+ success: boolean;
2816
+ created: boolean;
2817
+ url?: string;
2818
+ number?: number;
2819
+ error?: string;
2820
+ }>;
2821
+ landingEnqueue: (params: import('@xenosystem/agent-interface-contract').LandingEnqueueRequest) => Promise<LandingQueueView>;
2822
+ landingRemove: (params: import('@xenosystem/agent-interface-contract').LandingRemoveRequest) => Promise<LandingQueueView>;
2823
+ landingStatus: (params: import('@xenosystem/agent-interface-contract').EngineeringRequestBase) => Promise<LandingQueueView>;
2824
+ landingVerify: (params: import('@xenosystem/agent-interface-contract').LandingVerifyRequest) => Promise<import('@xenosystem/agent-interface-contract').LandingVerifyResponse>;
2825
+ /** 🔴 Outward-facing: this merges into trunk. Confirmation is required
2826
+ * AND is not the gate — the host still refuses an unverified, stale or
2827
+ * overlapping combination. */
2828
+ landingLand: (params: import('@xenosystem/agent-interface-contract').LandingLandRequest) => Promise<import('@xenosystem/agent-interface-contract').LandingLandResponse>;
2829
+ discoverChecks: (params: unknown) => Promise<{
2830
+ success: boolean;
2831
+ rootDirectory: string;
2832
+ checks: unknown[];
2833
+ packageManager?: 'npm';
2834
+ error?: string;
2835
+ }>;
2836
+ runCheck: (params: unknown) => Promise<{
2837
+ success: boolean;
2838
+ run?: unknown;
2839
+ error?: string;
2840
+ }>;
2841
+ startBackgroundCheck: (params: unknown) => Promise<{
2842
+ success: boolean;
2843
+ rootDirectory?: string;
2844
+ run?: unknown;
2845
+ error?: string;
2846
+ }>;
2847
+ listBackgroundRuns: (params: unknown) => Promise<{
2848
+ success: boolean;
2849
+ rootDirectory: string;
2850
+ runs: unknown[];
2851
+ error?: string;
2852
+ }>;
2853
+ readBackgroundRunOutput: (params: unknown) => Promise<{
2854
+ success: boolean;
2855
+ rootDirectory?: string;
2856
+ run?: unknown;
2857
+ error?: string;
2858
+ }>;
2859
+ stopBackgroundRun: (params: unknown) => Promise<{
2860
+ success: boolean;
2861
+ rootDirectory?: string;
2862
+ run?: unknown;
2863
+ error?: string;
2864
+ }>;
2865
+ listRuns: (params: unknown) => Promise<{
2866
+ success: boolean;
2867
+ rootDirectory: string;
2868
+ runs: unknown[];
2869
+ error?: string;
2870
+ }>;
2871
+ diagnostics: (params: unknown) => Promise<{
2872
+ success: boolean;
2873
+ rootDirectory: string;
2874
+ summary: string;
2875
+ git?: unknown;
2876
+ checks: unknown[];
2877
+ recentRuns: unknown[];
2878
+ backgroundRuns?: unknown[];
2879
+ issues: unknown[];
2880
+ error?: string;
2881
+ }>;
2882
+ listPatchReviews: (params: unknown) => Promise<{
2883
+ success: boolean;
2884
+ rootDirectory: string;
2885
+ items: unknown[];
2886
+ error?: string;
2887
+ }>;
2888
+ enqueuePatchReview: (params: unknown) => Promise<{
2889
+ success: boolean;
2890
+ rootDirectory: string;
2891
+ item?: unknown;
2892
+ items?: unknown[];
2893
+ error?: string;
2894
+ }>;
2895
+ updatePatchReview: (params: unknown) => Promise<{
2896
+ success: boolean;
2897
+ rootDirectory: string;
2898
+ item?: unknown;
2899
+ items?: unknown[];
2900
+ error?: string;
2901
+ }>;
2902
+ reviewPatchSelection: (params: unknown) => Promise<{
2903
+ success: boolean;
2904
+ rootDirectory: string;
2905
+ item?: unknown;
2906
+ selectedHunkIds: string[];
2907
+ wouldChangeFiles: string[];
2908
+ previewToken?: string;
2909
+ conflicts?: Array<{
2910
+ relativePath: string;
2911
+ reason: string;
2912
+ detail?: string;
2913
+ }>;
2914
+ applied?: boolean;
2915
+ transactionId?: string;
2916
+ error?: string;
2917
+ }>;
2918
+ listCheckpoints: (params: unknown) => Promise<{
2919
+ success: boolean;
2920
+ rootDirectory: string;
2921
+ checkpoints: unknown[];
2922
+ error?: string;
2923
+ }>;
2924
+ compareCheckpoints: (params: unknown) => Promise<{
2925
+ success: boolean;
2926
+ rootDirectory: string;
2927
+ from?: unknown;
2928
+ to?: unknown;
2929
+ filesChanged: string[];
2930
+ diff: string;
2931
+ patches: unknown[];
2932
+ error?: string;
2933
+ }>;
2934
+ restoreCheckpoint: (params: unknown) => Promise<{
2935
+ success: boolean;
2936
+ rootDirectory: string;
2937
+ checkpoint?: unknown;
2938
+ previewDiff: string;
2939
+ wouldRestoreFiles: string[];
2940
+ previewToken?: string;
2941
+ conflicts?: Array<{
2942
+ relativePath: string;
2943
+ reason: string;
2944
+ detail?: string;
2945
+ }>;
2946
+ restored?: boolean;
2947
+ restoredFiles?: string[];
2948
+ transactionId?: string;
2949
+ runtimeEvent?: unknown;
2950
+ error?: string;
2951
+ }>;
2952
+ listSessions: (params: unknown) => Promise<{
2953
+ success: boolean;
2954
+ rootDirectory: string;
2955
+ sessions: unknown[];
2956
+ error?: string;
2957
+ }>;
2958
+ runtimeTimeline: (params: unknown) => Promise<import('@xenosystem/agent-interface-contract').EngineeringRuntimeTimelineResponse>;
2959
+ };
2960
+ runtimeEvents: {
2961
+ append: (params: unknown) => Promise<{
2962
+ success: boolean;
2963
+ event?: unknown;
2964
+ duplicate?: boolean;
2965
+ error?: string;
2966
+ }>;
2967
+ list: (params: unknown) => Promise<{
2968
+ success: boolean;
2969
+ events: unknown[];
2970
+ error?: string;
2971
+ }>;
2972
+ listSubagentTrace: (params: unknown) => Promise<{
2973
+ success: boolean;
2974
+ events: unknown[];
2975
+ error?: string;
2976
+ }>;
2977
+ project: (params: unknown) => Promise<{
2978
+ success: boolean;
2979
+ projection?: unknown;
2980
+ error?: string;
2981
+ }>;
2982
+ repair: (params: unknown) => Promise<{
2983
+ success: boolean;
2984
+ conversationId?: string;
2985
+ scannedLineCount?: number;
2986
+ validEventCount?: number;
2987
+ corruptLineCount?: number;
2988
+ duplicateEventCount?: number;
2989
+ reordered?: boolean;
2990
+ resequenced?: boolean;
2991
+ backupPath?: string;
2992
+ error?: string;
2993
+ }>;
2994
+ subscribeAppended: (callback: (payload: unknown) => void) => string;
2995
+ unsubscribeAppended: (subscriptionId: string) => boolean;
2996
+ };
2997
+ subagents: {
2998
+ createRun: (params: unknown) => Promise<{
2999
+ success: boolean;
3000
+ run?: unknown;
3001
+ error?: string;
3002
+ }>;
3003
+ createTeamAgentDelegation: (params: unknown) => Promise<{
3004
+ success: boolean;
3005
+ run?: unknown;
3006
+ hostManaged?: boolean;
3007
+ route?: unknown;
3008
+ policy?: unknown;
3009
+ error?: string;
3010
+ }>;
3011
+ updateRun: (params: unknown) => Promise<{
3012
+ success: boolean;
3013
+ run?: unknown;
3014
+ error?: string;
3015
+ }>;
3016
+ getRun: (params: unknown) => Promise<{
3017
+ success: boolean;
3018
+ run?: unknown;
3019
+ error?: string;
3020
+ }>;
3021
+ listRuns: (params: unknown) => Promise<{
3022
+ success: boolean;
3023
+ runs: unknown[];
3024
+ error?: string;
3025
+ }>;
3026
+ getAgentStatus: (params: unknown) => Promise<{
3027
+ success: boolean;
3028
+ status?: unknown;
3029
+ error?: string;
3030
+ }>;
3031
+ matchCapabilities: (params: unknown) => Promise<{
3032
+ success: boolean;
3033
+ capabilityMatch?: unknown;
3034
+ error?: string;
3035
+ }>;
3036
+ claimNextRun: (params: unknown) => Promise<{
3037
+ success: boolean;
3038
+ run?: unknown;
3039
+ error?: string;
3040
+ }>;
3041
+ launchQueuedRun: (params: unknown) => Promise<{
3042
+ success: boolean;
3043
+ run?: unknown;
3044
+ launched?: boolean;
3045
+ adapterStatus?: unknown;
3046
+ error?: string;
3047
+ }>;
3048
+ markRunRunning: (params: unknown) => Promise<{
3049
+ success: boolean;
3050
+ run?: unknown;
3051
+ error?: string;
3052
+ }>;
3053
+ markRunTerminal: (params: unknown) => Promise<{
3054
+ success: boolean;
3055
+ run?: unknown;
3056
+ error?: string;
3057
+ }>;
3058
+ heartbeatRun: (params: unknown) => Promise<{
3059
+ success: boolean;
3060
+ run?: unknown;
3061
+ error?: string;
3062
+ }>;
3063
+ cancelRun: (params: unknown) => Promise<{
3064
+ success: boolean;
3065
+ run?: unknown;
3066
+ error?: string;
3067
+ }>;
3068
+ cancelExecution: (params: unknown) => Promise<{
3069
+ success: boolean;
3070
+ run?: unknown;
3071
+ error?: string;
3072
+ }>;
3073
+ recoverExpiredRuns: (params: unknown) => Promise<{
3074
+ success: boolean;
3075
+ recovered: number;
3076
+ failed: number;
3077
+ timedOut?: number;
3078
+ stale?: number;
3079
+ runs: unknown[];
3080
+ error?: string;
3081
+ }>;
3082
+ adapterStatus: (params?: unknown) => Promise<{
3083
+ success: boolean;
3084
+ statuses: unknown[];
3085
+ error?: string;
3086
+ }>;
3087
+ hydrateExecutionAttempt: (params: unknown) => Promise<{
3088
+ success: boolean;
3089
+ run?: unknown;
3090
+ attempts?: unknown[];
3091
+ attempt?: unknown;
3092
+ adapterStatus?: unknown;
3093
+ error?: string;
3094
+ }>;
3095
+ schedulerStatus: (params?: unknown) => Promise<{
3096
+ success: boolean;
3097
+ status?: unknown;
3098
+ error?: string;
3099
+ }>;
3100
+ };
3101
+ cliControlPlane: {
3102
+ inspectAppServer: (params: unknown) => Promise<{
3103
+ success: boolean;
3104
+ endpoint: string | null;
3105
+ checkedAt: number;
3106
+ status: string;
3107
+ manifest: unknown;
3108
+ openapi: unknown;
3109
+ workflows: unknown[];
3110
+ dashboards: unknown[];
3111
+ versionSkewWarning?: string;
3112
+ error?: string;
3113
+ }>;
3114
+ inspectWorkflowOperation: (params: unknown) => Promise<{
3115
+ success: boolean;
3116
+ endpoint: string | null;
3117
+ checkedAt: number;
3118
+ status: string;
3119
+ method: string;
3120
+ path: string | null;
3121
+ operationId?: string;
3122
+ response: unknown;
3123
+ error?: string;
3124
+ }>;
3125
+ runThread: (params: unknown) => Promise<{
3126
+ success: boolean;
3127
+ endpoint: string | null;
3128
+ checkedAt: number;
3129
+ status: string;
3130
+ method: 'thread.run';
3131
+ messageCount: number;
3132
+ text?: string;
3133
+ messages?: unknown[];
3134
+ cancelled?: boolean;
3135
+ error?: string;
3136
+ }>;
3137
+ cancelThread: (params: unknown) => Promise<{
3138
+ success: boolean;
3139
+ checkedAt: number;
3140
+ requestId: string | null;
3141
+ cancelled: boolean;
3142
+ error?: string;
3143
+ }>;
3144
+ runRemoteTurn: (params: unknown) => Promise<{
3145
+ success: boolean;
3146
+ checkedAt: number;
3147
+ status: string;
3148
+ method: 'xeno run --remote';
3149
+ requestId: string;
3150
+ runId?: string;
3151
+ text?: string;
3152
+ cancelled?: boolean;
3153
+ error?: string;
3154
+ }>;
3155
+ remoteRunOperation: (params: unknown) => Promise<{
3156
+ success: boolean;
3157
+ endpoint: string | null;
3158
+ checkedAt: number;
3159
+ status: string;
3160
+ action: string;
3161
+ method: string;
3162
+ path: string | null;
3163
+ runId?: string;
3164
+ response: unknown;
3165
+ error?: string;
3166
+ }>;
3167
+ shareReplayOperation: (params: unknown) => Promise<{
3168
+ success: boolean;
3169
+ checkedAt: number;
3170
+ status: string;
3171
+ action: string;
3172
+ method: string;
3173
+ sourceId?: string;
3174
+ pathLabel?: string;
3175
+ response: unknown;
3176
+ error?: string;
3177
+ }>;
3178
+ evalOperation: (params: unknown) => Promise<{
3179
+ success: boolean;
3180
+ checkedAt: number;
3181
+ status: string;
3182
+ action: string;
3183
+ method: string;
3184
+ suite?: string;
3185
+ pathLabel?: string;
3186
+ response: unknown;
3187
+ error?: string;
3188
+ }>;
3189
+ orgMetadataOperation: (params: unknown) => Promise<{
3190
+ success: boolean;
3191
+ checkedAt: number;
3192
+ status: string;
3193
+ action: string;
3194
+ method: string;
3195
+ workspaceLabel?: string;
3196
+ response: unknown;
3197
+ error?: string;
3198
+ }>;
3199
+ mcpAuthOperation: (params: unknown) => Promise<{
3200
+ success: boolean;
3201
+ checkedAt: number;
3202
+ status: string;
3203
+ action: string;
3204
+ method: string;
3205
+ server?: string;
3206
+ response: unknown;
3207
+ error?: string;
3208
+ }>;
3209
+ githubAppOperation: (params: unknown) => Promise<{
3210
+ success: boolean;
3211
+ checkedAt: number;
3212
+ status: string;
3213
+ action: string;
3214
+ method: string;
3215
+ fixtureLabel?: string;
3216
+ backendUrl?: string;
3217
+ response: unknown;
3218
+ error?: string;
3219
+ }>;
3220
+ cancelRemoteTurn: (params: unknown) => Promise<{
3221
+ success: boolean;
3222
+ checkedAt: number;
3223
+ requestId: string | null;
3224
+ cancelled: boolean;
3225
+ error?: string;
3226
+ }>;
3227
+ };
3228
+ workspacePolicy?: {
3229
+ evaluate: (params: unknown) => Promise<{
3230
+ allowed: boolean;
3231
+ reason: string;
3232
+ matchedVisibility?: string;
3233
+ matchedScope?: unknown;
3234
+ }>;
3235
+ writeMemory: (params: unknown) => Promise<{
3236
+ success: boolean;
3237
+ entry?: unknown;
3238
+ error?: string;
3239
+ }>;
3240
+ listMemory: (params: unknown) => Promise<{
3241
+ success: boolean;
3242
+ entries: unknown[];
3243
+ error?: string;
3244
+ }>;
3245
+ registerArtifact: (params: unknown) => Promise<{
3246
+ success: boolean;
3247
+ artifact?: unknown;
3248
+ error?: string;
3249
+ }>;
3250
+ listArtifacts: (params: unknown) => Promise<{
3251
+ success: boolean;
3252
+ artifacts: unknown[];
3253
+ error?: string;
3254
+ }>;
3255
+ getArtifact: (params: unknown) => Promise<{
3256
+ success: boolean;
3257
+ result?: unknown;
3258
+ error?: string;
3259
+ }>;
3260
+ deleteArtifact: (params: unknown) => Promise<{
3261
+ success: boolean;
3262
+ error?: string;
3263
+ }>;
3264
+ getTaskBoard: (params: unknown) => Promise<{
3265
+ success: boolean;
3266
+ board?: unknown;
3267
+ error?: string;
3268
+ }>;
3269
+ upsertTask: (params: unknown) => Promise<{
3270
+ success: boolean;
3271
+ board?: unknown;
3272
+ task?: unknown;
3273
+ error?: string;
3274
+ }>;
3275
+ deleteTask: (params: unknown) => Promise<{
3276
+ success: boolean;
3277
+ board?: unknown;
3278
+ error?: string;
3279
+ }>;
3280
+ listTaskBoards: (params: unknown) => Promise<{
3281
+ success: boolean;
3282
+ boards: unknown[];
3283
+ error?: string;
3284
+ }>;
3285
+ snapshot: (params?: unknown) => Promise<{
3286
+ success: boolean;
3287
+ snapshot: unknown;
3288
+ }>;
3289
+ };
3290
+ pluginMcp: {
3291
+ snapshot: (params?: unknown) => Promise<{
3292
+ success: boolean;
3293
+ snapshot: unknown;
3294
+ }>;
3295
+ installPlugin: (params: unknown) => Promise<{
3296
+ success: boolean;
3297
+ plugin?: unknown;
3298
+ error?: string;
3299
+ }>;
3300
+ installLocalPlugin: (params: unknown) => Promise<{
3301
+ success: boolean;
3302
+ plugin?: unknown;
3303
+ error?: string;
3304
+ }>;
3305
+ activatePlugin: (params: unknown) => Promise<{
3306
+ success: boolean;
3307
+ plugin?: unknown;
3308
+ error?: string;
3309
+ }>;
3310
+ deactivatePlugin: (params: unknown) => Promise<{
3311
+ success: boolean;
3312
+ plugin?: unknown;
3313
+ error?: string;
3314
+ }>;
3315
+ uninstallPlugin: (params: unknown) => Promise<{
3316
+ success: boolean;
3317
+ error?: string;
3318
+ }>;
3319
+ updatePlugin: (params: unknown) => Promise<{
3320
+ success: boolean;
3321
+ plugin?: unknown;
3322
+ error?: string;
3323
+ }>;
3324
+ setPluginTrust: (params: unknown) => Promise<{
3325
+ success: boolean;
3326
+ plugin?: unknown;
3327
+ error?: string;
3328
+ }>;
3329
+ upsertMcpServer: (params: unknown) => Promise<{
3330
+ success: boolean;
3331
+ server?: unknown;
3332
+ error?: string;
3333
+ }>;
3334
+ removeMcpServer: (params: unknown) => Promise<{
3335
+ success: boolean;
3336
+ error?: string;
3337
+ }>;
3338
+ setMcpApproval: (params: unknown) => Promise<{
3339
+ success: boolean;
3340
+ server?: unknown;
3341
+ error?: string;
3342
+ }>;
3343
+ reloadMcp: (params: unknown) => Promise<{
3344
+ success: boolean;
3345
+ snapshot?: unknown;
3346
+ connected: string[];
3347
+ skipped: string[];
3348
+ errors: Array<{
3349
+ name: string;
3350
+ error: string;
3351
+ }>;
3352
+ error?: string;
3353
+ }>;
3354
+ setMcpRegistryPolicy: (params: unknown) => Promise<{
3355
+ success: boolean;
3356
+ snapshot?: unknown;
3357
+ error?: string;
3358
+ }>;
3359
+ setScopedPolicy: (params: unknown) => Promise<{
3360
+ success: boolean;
3361
+ policy?: unknown;
3362
+ snapshot?: unknown;
3363
+ error?: string;
3364
+ }>;
3365
+ deleteScopedPolicy: (params: unknown) => Promise<{
3366
+ success: boolean;
3367
+ snapshot?: unknown;
3368
+ error?: string;
3369
+ }>;
3370
+ searchMarketplace: (params: unknown) => Promise<{
3371
+ success: boolean;
3372
+ listings: unknown[];
3373
+ error?: string;
3374
+ }>;
3375
+ syncProjectMcp: (params: unknown) => Promise<{
3376
+ success: boolean;
3377
+ direction: 'import' | 'export';
3378
+ configPath?: string;
3379
+ synced: number;
3380
+ servers: unknown[];
3381
+ snapshot?: unknown;
3382
+ error?: string;
3383
+ }>;
3384
+ callMcpTool: (params: unknown) => Promise<{
3385
+ success: boolean;
3386
+ result?: unknown;
3387
+ preview?: unknown;
3388
+ auditId?: string;
3389
+ error?: string;
3390
+ denial?: unknown;
3391
+ }>;
3392
+ getMcpPrompt: (params: unknown) => Promise<{
3393
+ success: boolean;
3394
+ result?: unknown;
3395
+ preview?: unknown;
3396
+ auditId?: string;
3397
+ error?: string;
3398
+ denial?: unknown;
3399
+ }>;
3400
+ readMcpResource: (params: unknown) => Promise<{
3401
+ success: boolean;
3402
+ result?: unknown;
3403
+ preview?: unknown;
3404
+ auditId?: string;
3405
+ error?: string;
3406
+ denial?: unknown;
3407
+ }>;
3408
+ preflightTrust: (params: unknown) => Promise<{
3409
+ success: boolean;
3410
+ allowed: boolean;
3411
+ target?: unknown;
3412
+ checks: unknown[];
3413
+ plugin?: unknown;
3414
+ server?: unknown;
3415
+ reasons: string[];
3416
+ remediation: unknown[];
3417
+ denial?: unknown;
3418
+ error?: string;
3419
+ }>;
3420
+ };
3421
+ acp: {
3422
+ listAgents: () => Promise<{
3423
+ success: boolean;
3424
+ agents: unknown[];
3425
+ repaired?: boolean;
3426
+ error?: string;
3427
+ }>;
3428
+ /**
3429
+ * The provider catalog changed — by any surface, or by the host.
3430
+ *
3431
+ * Optional, so a host predating it leaves a surface on its own reloads
3432
+ * rather than failing to mount.
3433
+ */
3434
+ subscribeCatalogChanged?: (listener: (payload: unknown) => void) => () => void;
3435
+ listProviderCatalog: (refresh?: boolean) => Promise<{
3436
+ success: boolean;
3437
+ catalog?: unknown;
3438
+ error?: string;
3439
+ }>;
3440
+ syncProviderCatalog: (refresh?: boolean) => Promise<{
3441
+ success: boolean;
3442
+ catalog?: unknown;
3443
+ error?: string;
3444
+ }>;
3445
+ setProviderCatalogEnabled: (enabled: boolean) => Promise<{
3446
+ success: boolean;
3447
+ catalog?: unknown;
3448
+ error?: string;
3449
+ }>;
3450
+ setCatalogProviderEnabled: (providerId: string, enabled: boolean) => Promise<{
3451
+ success: boolean;
3452
+ catalog?: unknown;
3453
+ error?: string;
3454
+ }>;
3455
+ updateCatalogProvider: (providerId: string) => Promise<{
3456
+ success: boolean;
3457
+ catalog?: unknown;
3458
+ error?: string;
3459
+ }>;
3460
+ setPreferredCatalogProvider: (providerId: string) => Promise<{
3461
+ success: boolean;
3462
+ catalog?: unknown;
3463
+ error?: string;
3464
+ }>;
3465
+ getAgent: (id: string) => Promise<{
3466
+ success: boolean;
3467
+ agent?: unknown;
3468
+ error?: string;
3469
+ }>;
3470
+ saveAgent: (input: unknown) => Promise<{
3471
+ success: boolean;
3472
+ agent?: unknown;
3473
+ repaired?: boolean;
3474
+ error?: string;
3475
+ }>;
3476
+ createFixtureAgent: (input?: unknown) => Promise<{
3477
+ success: boolean;
3478
+ agent?: unknown;
3479
+ repaired?: boolean;
3480
+ error?: string;
3481
+ }>;
3482
+ createLocalProviderAgent: (providerId: 'codex-local' | 'claude-local' | 'kimi' | 'grok' | 'agy' | 'opencode') => Promise<{
3483
+ success: boolean;
3484
+ agent?: unknown;
3485
+ repaired?: boolean;
3486
+ error?: string;
3487
+ }>;
3488
+ removeAgent: (id: string) => Promise<{
3489
+ success: boolean;
3490
+ removed: boolean;
3491
+ error?: string;
3492
+ }>;
3493
+ testAgent: (id: string) => Promise<{
3494
+ success: boolean;
3495
+ protocolVersion?: number;
3496
+ agentInfo?: unknown;
3497
+ updateCount: number;
3498
+ stopReason?: string;
3499
+ diagnostics: unknown;
3500
+ error?: string;
3501
+ }>;
3502
+ getProviderModels: (id: string, providerId?: string) => Promise<{
3503
+ success: boolean;
3504
+ result?: unknown;
3505
+ error?: string;
3506
+ }>;
3507
+ certifyAgent: (id: string) => Promise<{
3508
+ success: boolean;
3509
+ result?: unknown;
3510
+ agent?: unknown;
3511
+ error?: string;
3512
+ }>;
3513
+ approveProvider: (id: string, providerId?: string) => Promise<{
3514
+ success: boolean;
3515
+ result?: unknown;
3516
+ error?: string;
3517
+ }>;
3518
+ revokeProvider: (id: string, providerId?: string) => Promise<{
3519
+ success: boolean;
3520
+ result?: unknown;
3521
+ error?: string;
3522
+ }>;
3523
+ runAgentPrompt: (params: unknown) => Promise<{
3524
+ success: boolean;
3525
+ result?: unknown;
3526
+ status?: string;
3527
+ events?: unknown[];
3528
+ error?: string;
3529
+ hostBinding?: import('@xenosystem/agent-interface-contract').AgentSessionHostBindingV1;
3530
+ activeLane?: import('@xenosystem/agent-interface-contract').ProviderLaneProjectionV1;
3531
+ lanes?: import('@xenosystem/agent-interface-contract').ProviderLaneProjectionV1[];
3532
+ }>;
3533
+ cancelAgentPrompt: (params: unknown) => Promise<{
3534
+ success: boolean;
3535
+ cancelled: boolean;
3536
+ error?: string;
3537
+ }>;
3538
+ closeConversation: (params: unknown) => Promise<{
3539
+ success: boolean;
3540
+ closedSessionCount: number;
3541
+ error?: string;
3542
+ }>;
3543
+ getDiagnostics: () => Promise<{
3544
+ success: boolean;
3545
+ diagnostics?: unknown;
3546
+ error?: string;
3547
+ }>;
3548
+ getCapabilitySnapshot?: (params: {
3549
+ conversationId: string;
3550
+ sessionId?: string;
3551
+ acpAgentConfigId?: string;
3552
+ }) => Promise<{
3553
+ success: boolean;
3554
+ capabilitySnapshot?: unknown;
3555
+ error?: string;
3556
+ }>;
3557
+ invokeCommand?: (params: {
3558
+ conversationId: string;
3559
+ sessionId?: string;
3560
+ commandId: string;
3561
+ rawInput?: string;
3562
+ args?: Record<string, unknown>;
3563
+ idempotencyKey?: string;
3564
+ }) => Promise<{
3565
+ success: boolean;
3566
+ commandEvent?: unknown;
3567
+ error?: string;
3568
+ }>;
3569
+ };
3570
+ webSearch?: {
3571
+ search: (query: WebSearchIpcInput, count?: number) => Promise<{
3572
+ success: boolean;
3573
+ results: Array<{
3574
+ title: string;
3575
+ url: string;
3576
+ snippet: string;
3577
+ }>;
3578
+ error?: string;
3579
+ }>;
3580
+ };
3581
+ usage: {
3582
+ snapshot?: (input: import('@xenosystem/agent-interface-contract').AgentUsageRequest) => Promise<import('@xenosystem/agent-interface-contract').AgentUsageResult>;
3583
+ summary: (entityType: string, entityId: string, period: string) => Promise<unknown>;
3584
+ byModel: () => Promise<unknown>;
3585
+ topAgents: () => Promise<unknown>;
3586
+ };
3587
+ audit?: {
3588
+ snapshot?: (input: import('@xenosystem/agent-interface-contract').AgentAuditRequest) => Promise<import('@xenosystem/agent-interface-contract').AgentAuditResult>;
3589
+ list: (limit?: number) => Promise<unknown>;
3590
+ log: (action: string, entity: string, entityId: string, details: string) => Promise<unknown>;
3591
+ };
3592
+ exportBackup: {
3593
+ exportJson: (params?: ScopedIpcParams) => Promise<{
3594
+ success: boolean;
3595
+ path?: string;
3596
+ error?: string;
3597
+ }>;
3598
+ exportCsv: (params?: ScopedIpcParams) => Promise<{
3599
+ success: boolean;
3600
+ path?: string;
3601
+ error?: string;
3602
+ }>;
3603
+ createBackup: (name?: string | ({
3604
+ name?: string;
3605
+ } & ScopedIpcParams)) => Promise<{
3606
+ success: boolean;
3607
+ backup?: unknown;
3608
+ error?: string;
3609
+ }>;
3610
+ listBackups: (params?: ScopedIpcParams) => Promise<{
3611
+ success: boolean;
3612
+ backups: Array<{
3613
+ id: string;
3614
+ name: string;
3615
+ createdAt: string;
3616
+ size: number;
3617
+ fileName: string;
3618
+ }>;
3619
+ }>;
3620
+ downloadBackup: (id: string | ({
3621
+ id?: string;
3622
+ backupId?: string;
3623
+ } & ScopedIpcParams)) => Promise<{
3624
+ success: boolean;
3625
+ path?: string;
3626
+ error?: string;
3627
+ }>;
3628
+ deleteBackup: (id: string | ({
3629
+ id?: string;
3630
+ backupId?: string;
3631
+ } & ScopedIpcParams)) => Promise<{
3632
+ success: boolean;
3633
+ error?: string;
3634
+ }>;
3635
+ importBackup: (params?: ScopedIpcParams) => Promise<{
3636
+ success: boolean;
3637
+ restored?: {
3638
+ workspaces: boolean;
3639
+ conversations: number;
3640
+ settings: boolean;
3641
+ };
3642
+ restoredConversations?: Array<{
3643
+ sourceId: string;
3644
+ conversationId: string;
3645
+ }>;
3646
+ error?: string;
3647
+ }>;
3648
+ getSettings: (params?: ScopedIpcParams) => Promise<{
3649
+ success: boolean;
3650
+ settings: {
3651
+ autoBackupEnabled: boolean;
3652
+ frequency: string;
3653
+ retentionDays: number;
3654
+ lastError?: string;
3655
+ };
3656
+ }>;
3657
+ updateSettings: (settings: Record<string, unknown>) => Promise<{
3658
+ success: boolean;
3659
+ error?: string;
3660
+ }>;
3661
+ };
3662
+ capture: {
3663
+ screenshot: (params?: ScopedIpcParams) => Promise<{
3664
+ success: boolean;
3665
+ localPath: string | null;
3666
+ clipboardCopied: boolean;
3667
+ width?: number;
3668
+ height?: number;
3669
+ dataUrl?: string;
3670
+ error: string | null;
3671
+ }>;
3672
+ getHistory: (params?: ScopedIpcParams) => Promise<{
3673
+ success: boolean;
3674
+ captures: Array<{
3675
+ name: string;
3676
+ path: string;
3677
+ size: number;
3678
+ date: string;
3679
+ type: 'image' | 'video' | 'gif';
3680
+ thumbnailDataUrl: string | null;
3681
+ }>;
3682
+ error: string | null;
3683
+ }>;
3684
+ deleteCapture: (filePath: PathIpcInput) => Promise<{
3685
+ success: boolean;
3686
+ error: string | null;
3687
+ }>;
3688
+ openFolder: (params?: ScopedIpcParams) => Promise<{
3689
+ success: boolean;
3690
+ error: string | null;
3691
+ }>;
3692
+ copyToClipboard: (filePath: PathIpcInput) => Promise<{
3693
+ success: boolean;
3694
+ error: string | null;
3695
+ }>;
3696
+ getImageDataUrl: (filePath: PathIpcInput) => Promise<{
3697
+ success: boolean;
3698
+ dataUrl: string | null;
3699
+ error: string | null;
3700
+ }>;
3701
+ saveAnnotated: (dataUrl: string | ({
3702
+ dataUrl: string;
3703
+ originalPath?: string;
3704
+ } & ScopedIpcParams), originalPath?: string) => Promise<{
3705
+ success: boolean;
3706
+ localPath: string | null;
3707
+ error: string | null;
3708
+ }>;
3709
+ copyAnnotatedToClipboard: (dataUrl: string | ({
3710
+ dataUrl: string;
3711
+ } & ScopedIpcParams)) => Promise<{
3712
+ success: boolean;
3713
+ error: string | null;
3714
+ }>;
3715
+ onHotkeyScreenshot: (callback: () => void) => void;
3716
+ offHotkeyScreenshot: () => void;
3717
+ };
3718
+ whisper?: {
3719
+ copyToClipboard: (text: string) => Promise<{
3720
+ success: boolean;
3721
+ error: string | null;
3722
+ }>;
3723
+ saveEntry: (entry: {
3724
+ id: string;
3725
+ text: string;
3726
+ language: string;
3727
+ duration: number;
3728
+ timestamp: string;
3729
+ }) => Promise<{
3730
+ success: boolean;
3731
+ error: string | null;
3732
+ }>;
3733
+ getHistory: () => Promise<{
3734
+ success: boolean;
3735
+ entries: Array<{
3736
+ id: string;
3737
+ text: string;
3738
+ language: string;
3739
+ duration: number;
3740
+ timestamp: string;
3741
+ }>;
3742
+ error: string | null;
3743
+ }>;
3744
+ deleteEntry: (id: string) => Promise<{
3745
+ success: boolean;
3746
+ error: string | null;
3747
+ }>;
3748
+ clearHistory: () => Promise<{
3749
+ success: boolean;
3750
+ error: string | null;
3751
+ }>;
3752
+ getSettings: () => Promise<{
3753
+ success: boolean;
3754
+ settings: {
3755
+ language: string;
3756
+ autoCopy: boolean;
3757
+ quality: 'fast' | 'accurate';
3758
+ };
3759
+ error: string | null;
3760
+ }>;
3761
+ updateSettings: (updates: Record<string, unknown>) => Promise<{
3762
+ success: boolean;
3763
+ settings?: {
3764
+ language: string;
3765
+ autoCopy: boolean;
3766
+ quality: 'fast' | 'accurate';
3767
+ };
3768
+ error: string | null;
3769
+ }>;
3770
+ transcribe: (data: {
3771
+ audioBase64: string;
3772
+ language?: string;
3773
+ mimeType?: string;
3774
+ }) => Promise<{
3775
+ success: boolean;
3776
+ text: string;
3777
+ error: string | null;
3778
+ }>;
3779
+ onHotkeyToggle: (callback: () => void) => void;
3780
+ offHotkeyToggle: () => void;
3781
+ };
3782
+ files: {
3783
+ getRoots: (params?: ScopedIpcParams) => Promise<{
3784
+ success: boolean;
3785
+ roots: Array<{
3786
+ id: string;
3787
+ name: string;
3788
+ path: string;
3789
+ icon: string;
3790
+ fileCount: number;
3791
+ totalSize: number;
3792
+ }>;
3793
+ error: string | null;
3794
+ }>;
3795
+ list: (dirPath: PathIpcInput) => Promise<{
3796
+ success: boolean;
3797
+ files: Array<{
3798
+ name: string;
3799
+ path: string;
3800
+ size: number;
3801
+ modified: string;
3802
+ type: 'file' | 'directory';
3803
+ extension: string;
3804
+ }>;
3805
+ error: string | null;
3806
+ }>;
3807
+ listExternal: (dirPath: PathIpcInput) => Promise<{
3808
+ success: boolean;
3809
+ files: Array<{
3810
+ name: string;
3811
+ path: string;
3812
+ size: number;
3813
+ modified: string;
3814
+ type: 'file' | 'directory';
3815
+ extension: string;
3816
+ }>;
3817
+ error: string | null;
3818
+ }>;
3819
+ open: (filePath: PathIpcInput) => Promise<{
3820
+ success: boolean;
3821
+ error: string | null;
3822
+ }>;
3823
+ openExternal: (filePath: PathIpcInput) => Promise<{
3824
+ success: boolean;
3825
+ error: string | null;
3826
+ }>;
3827
+ showInExplorer: (filePath: PathIpcInput) => Promise<{
3828
+ success: boolean;
3829
+ error: string | null;
3830
+ }>;
3831
+ showInExplorerExternal: (filePath: PathIpcInput) => Promise<{
3832
+ success: boolean;
3833
+ error: string | null;
3834
+ }>;
3835
+ delete: (filePath: PathIpcInput) => Promise<{
3836
+ success: boolean;
3837
+ error: string | null;
3838
+ }>;
3839
+ getDiskUsage: (params?: ScopedIpcParams) => Promise<{
3840
+ success: boolean;
3841
+ usage: {
3842
+ total: number;
3843
+ byDirectory: Record<string, number>;
3844
+ };
3845
+ error: string | null;
3846
+ }>;
3847
+ rename: (oldPath: string | ({
3848
+ oldPath: string;
3849
+ newName: string;
3850
+ } & ScopedIpcParams), newName?: string) => Promise<{
3851
+ success: boolean;
3852
+ newPath?: string;
3853
+ error: string | null;
3854
+ }>;
3855
+ openRoot: (params?: ScopedIpcParams) => Promise<{
3856
+ success: boolean;
3857
+ error: string | null;
3858
+ }>;
3859
+ };
3860
+ uiAssetPipeline?: {
3861
+ status: (pipelineRoot?: string) => Promise<{
3862
+ success: boolean;
3863
+ pipelineRoot: string;
3864
+ scriptPath: string;
3865
+ defaultOutputDirectory: string;
3866
+ python: string;
3867
+ error: string | null;
3868
+ }>;
3869
+ pickImage: () => Promise<{
3870
+ success: boolean;
3871
+ path: string | null;
3872
+ error: string | null;
3873
+ }>;
3874
+ pickOutputDirectory: (defaultPath?: string) => Promise<{
3875
+ success: boolean;
3876
+ path: string | null;
3877
+ error: string | null;
3878
+ }>;
3879
+ readProject: (projectPath: string) => Promise<{
3880
+ success: boolean;
3881
+ projectPath?: string;
3882
+ inputImage?: string;
3883
+ profile?: 'gamedev' | 'animation';
3884
+ extractionMode?: 'essential' | 'full' | 'both';
3885
+ agentMode?: 'cli' | 'api';
3886
+ paths?: {
3887
+ summaryPath?: string;
3888
+ combinedSummaryPath?: string;
3889
+ finalDir?: string;
3890
+ qualityReportMd?: string;
3891
+ mountingMd?: string;
3892
+ rawResultsPath?: string;
3893
+ };
3894
+ error: string | null;
3895
+ }>;
3896
+ deleteProject: (params: {
3897
+ projectPath: string;
3898
+ outputDirectory: string;
3899
+ }) => Promise<{
3900
+ success: boolean;
3901
+ error: string | null;
3902
+ }>;
3903
+ run: (params: {
3904
+ imagePath: string;
3905
+ outputDirectory: string;
3906
+ pipelineRoot?: string;
3907
+ profile: 'gamedev' | 'animation';
3908
+ extractionMode: 'essential' | 'full' | 'both';
3909
+ agentMode: 'cli' | 'api';
3910
+ chromaBgMode?: 'chroma-bg-dynamic-color' | 'chroma-bg-fixed-color';
3911
+ maxWorkers?: number;
3912
+ cleanOutput?: boolean;
3913
+ overwrite?: boolean;
3914
+ apiKey?: string;
3915
+ edgeCleanup?: boolean;
3916
+ alphaEdgeDefringe?: boolean;
3917
+ deriveStateVariants?: boolean;
3918
+ extractElements?: string[];
3919
+ skipInventory?: boolean;
3920
+ finalDir?: string;
3921
+ }) => Promise<{
3922
+ success: boolean;
3923
+ jobId: string | null;
3924
+ error: string | null;
3925
+ }>;
3926
+ cancel: (jobId: string) => Promise<{
3927
+ success: boolean;
3928
+ error: string | null;
3929
+ }>;
3930
+ openPath: (targetPath: string) => Promise<{
3931
+ success: boolean;
3932
+ error: string | null;
3933
+ }>;
3934
+ onEvent: (callback: (event: {
3935
+ jobId: string;
3936
+ type: string;
3937
+ stream?: 'stdout' | 'stderr';
3938
+ text?: string;
3939
+ success?: boolean;
3940
+ exitCode?: number;
3941
+ durationMs?: number;
3942
+ paths?: {
3943
+ summaryPath?: string;
3944
+ combinedSummaryPath?: string;
3945
+ finalDir?: string;
3946
+ qualityReportMd?: string;
3947
+ mountingMd?: string;
3948
+ rawResultsPath?: string;
3949
+ };
3950
+ finalAssetCount?: number;
3951
+ qualityStatus?: string | null;
3952
+ qualityErrorCount?: number;
3953
+ qualityWarningCount?: number;
3954
+ error?: string;
3955
+ stderr?: string;
3956
+ command?: string;
3957
+ pipelineRoot?: string;
3958
+ outputDirectory?: string;
3959
+ assets?: Array<{
3960
+ slug: string;
3961
+ name: string;
3962
+ stage?: 'queued' | 'chroma' | 'transparent' | 'final' | 'error';
3963
+ status?: string;
3964
+ path?: string;
3965
+ chromaPath?: string;
3966
+ transparentPath?: string;
3967
+ finalPath?: string;
3968
+ index?: number;
3969
+ total?: number;
3970
+ size?: number;
3971
+ }>;
3972
+ asset?: {
3973
+ slug: string;
3974
+ name: string;
3975
+ stage?: 'queued' | 'chroma' | 'transparent' | 'final' | 'error';
3976
+ status?: string;
3977
+ path?: string;
3978
+ chromaPath?: string;
3979
+ transparentPath?: string;
3980
+ finalPath?: string;
3981
+ index?: number;
3982
+ total?: number;
3983
+ size?: number;
3984
+ };
3985
+ }) => void) => void;
3986
+ offEvent: () => void;
3987
+ };
3988
+ materialGenerator?: {
3989
+ pickImage: () => Promise<{
3990
+ success: boolean;
3991
+ path: string | null;
3992
+ error: string | null;
3993
+ }>;
3994
+ readImage: (filePath: string) => Promise<{
3995
+ success: boolean;
3996
+ dataUrl: string | null;
3997
+ error: string | null;
3998
+ }>;
3999
+ pickOutputDirectory: (defaultName?: string) => Promise<{
4000
+ success: boolean;
4001
+ path: string | null;
4002
+ error: string | null;
4003
+ }>;
4004
+ pickPackage: () => Promise<{
4005
+ success: boolean;
4006
+ path: string | null;
4007
+ error: string | null;
4008
+ }>;
4009
+ readPackage: (packagePath: string) => Promise<{
4010
+ success: boolean;
4011
+ manifestPath: string | null;
4012
+ directory: string | null;
4013
+ manifest: any;
4014
+ maps: Array<{
4015
+ key: string;
4016
+ fileName: string;
4017
+ dataUrl: string;
4018
+ }>;
4019
+ error: string | null;
4020
+ }>;
4021
+ findEngineProjects: (engine: 'unreal' | 'unity' | 'godot' | 'folder') => Promise<{
4022
+ success: boolean;
4023
+ projects: Array<{
4024
+ engine: 'unreal' | 'unity' | 'godot' | 'folder';
4025
+ name: string;
4026
+ path: string;
4027
+ importDirectory: string;
4028
+ source: 'open-process' | 'recent-scan' | 'manual';
4029
+ }>;
4030
+ error: string | null;
4031
+ }>;
4032
+ pickEngineProject: (engine: 'unreal' | 'unity' | 'godot' | 'folder') => Promise<{
4033
+ success: boolean;
4034
+ project: {
4035
+ engine: 'unreal' | 'unity' | 'godot' | 'folder';
4036
+ name: string;
4037
+ path: string;
4038
+ importDirectory: string;
4039
+ source: 'open-process' | 'recent-scan' | 'manual';
4040
+ } | null;
4041
+ error: string | null;
4042
+ }>;
4043
+ writeOutput: (params: {
4044
+ outputDirectory: string;
4045
+ files: Array<{
4046
+ relativePath: string;
4047
+ dataUrl?: string;
4048
+ content?: string;
4049
+ }>;
4050
+ }) => Promise<{
4051
+ success: boolean;
4052
+ outputDirectory?: string;
4053
+ files: string[];
4054
+ error: string | null;
4055
+ }>;
4056
+ runUnrealImportScript: (params: {
4057
+ packageDirectory: string;
4058
+ projectName?: string;
4059
+ projectPath?: string;
4060
+ }) => Promise<{
4061
+ success: boolean;
4062
+ remoteImported: boolean;
4063
+ error: string | null;
4064
+ details: string | null;
4065
+ setupRequired: boolean;
4066
+ }>;
4067
+ openPath: (targetPath: string) => Promise<{
4068
+ success: boolean;
4069
+ error: string | null;
4070
+ }>;
4071
+ };
4072
+ system?: {
4073
+ health: () => Promise<{
4074
+ cpu: {
4075
+ model: string;
4076
+ cores: number;
4077
+ usage: number;
4078
+ };
4079
+ ram: {
4080
+ total: number;
4081
+ free: number;
4082
+ used: number;
4083
+ usagePercent: number;
4084
+ };
4085
+ gpu: {
4086
+ name: string;
4087
+ vendor: string;
4088
+ vramMb: number | null;
4089
+ driverVersion: string | null;
4090
+ } | null;
4091
+ disk: {
4092
+ total: number;
4093
+ free: number;
4094
+ used: number;
4095
+ xenoUsage: number;
4096
+ };
4097
+ network: {
4098
+ online: boolean;
4099
+ };
4100
+ os: {
4101
+ platform: string;
4102
+ arch: string;
4103
+ release: string;
4104
+ };
4105
+ xenoAppsSize: Record<string, number>;
4106
+ }>;
4107
+ cleanOldVersions: () => Promise<{
4108
+ success: boolean;
4109
+ cleaned: number;
4110
+ }>;
4111
+ };
4112
+ support?: {
4113
+ createBundle: (params?: unknown) => Promise<{
4114
+ success: boolean;
4115
+ path?: string;
4116
+ summary?: Record<string, unknown>;
4117
+ error?: string;
4118
+ }>;
4119
+ repairAll: (params?: unknown) => Promise<{
4120
+ success: boolean;
4121
+ repaired: Array<{
4122
+ id: string;
4123
+ success: boolean;
4124
+ detail?: string;
4125
+ error?: string;
4126
+ }>;
4127
+ durationMs: number;
4128
+ error?: string;
4129
+ }>;
4130
+ runMigrations: () => Promise<{
4131
+ success: boolean;
4132
+ version: number;
4133
+ migrated: boolean;
4134
+ path: string;
4135
+ checks: Array<{
4136
+ id: string;
4137
+ status: string;
4138
+ detail?: string;
4139
+ error?: string;
4140
+ }>;
4141
+ durationMs: number;
4142
+ error?: string;
4143
+ }>;
4144
+ profile: () => Promise<unknown>;
4145
+ };
4146
+ errorReporting?: {
4147
+ report: (data: {
4148
+ message: string;
4149
+ stack?: string;
4150
+ component?: string;
4151
+ userDescription?: string;
4152
+ }) => Promise<{
4153
+ success: boolean;
4154
+ }>;
4155
+ getCrashLog: () => Promise<{
4156
+ success: boolean;
4157
+ log: string;
4158
+ }>;
4159
+ clearCrashLog: () => Promise<{
4160
+ success: boolean;
4161
+ }>;
4162
+ };
4163
+ onDeepLink?: (callback: (url: string) => void) => void;
4164
+ offDeepLink?: () => void;
4165
+ }
4166
+ declare global {
4167
+ interface Window {
4168
+ xenoAPI: XenoAPI;
4169
+ XENO_API_KEY?: string;
4170
+ GEMINI_API_TOKEN?: string;
4171
+ SpeechRecognition?: SpeechRecognitionConstructor;
4172
+ webkitSpeechRecognition?: SpeechRecognitionConstructor;
4173
+ }
4174
+ }
4175
+ export {};
4176
+ //# sourceMappingURL=platformApiTypes.d.ts.map