@xeno-corporation/xeno-agent-sdk 0.5.0

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.
@@ -0,0 +1,4838 @@
1
+ import { Readable, Writable } from "node:stream";
2
+ import { ChildProcess } from "node:child_process";
3
+ interface ToolDefinition {
4
+ name: string;
5
+ description: string;
6
+ input_schema: {
7
+ type: "object";
8
+ properties: Record<string, unknown>;
9
+ required?: string[];
10
+ };
11
+ }
12
+ interface ImageUrlBlock {
13
+ type: "image_url";
14
+ image_url: {
15
+ url: string;
16
+ detail?: "auto" | "low" | "high";
17
+ };
18
+ }
19
+ interface ResourceContentBlock {
20
+ type: "resource";
21
+ uri?: string;
22
+ mimeType?: string;
23
+ text?: string;
24
+ data?: string;
25
+ }
26
+ type ToolAssistantContentBlock = TextBlock | ImageUrlBlock | ResourceContentBlock;
27
+ type ToolResultContent = string | ToolAssistantContentBlock[];
28
+ interface ToolResult {
29
+ success: boolean;
30
+ output: string;
31
+ error?: string;
32
+ assistantContent?: ToolAssistantContentBlock[];
33
+ assistantOnlyContent?: ToolAssistantContentBlock[];
34
+ }
35
+ type ToolExecutor = (input: Record<string, unknown>) => Promise<ToolResult>;
36
+ interface RegisteredTool {
37
+ definition: ToolDefinition;
38
+ execute: ToolExecutor;
39
+ }
40
+ interface TextBlock {
41
+ type: "text";
42
+ text: string;
43
+ }
44
+ interface ToolUseBlock {
45
+ type: "tool_use";
46
+ id: string;
47
+ name: string;
48
+ input: Record<string, unknown>;
49
+ }
50
+ interface ToolResultBlock {
51
+ type: "tool_result";
52
+ tool_use_id: string;
53
+ content: string;
54
+ assistant_content?: ToolAssistantContentBlock[];
55
+ assistant_only_content?: ToolAssistantContentBlock[];
56
+ is_error?: boolean;
57
+ }
58
+ type ContentBlock = TextBlock | ToolUseBlock;
59
+ interface Message {
60
+ role: "user" | "assistant";
61
+ content: string | ContentBlock[] | ToolResultBlock[];
62
+ }
63
+ type PermissionDecision = "allow" | "ask" | "deny";
64
+ type ExecutionMode = "agent" | "chatOnly";
65
+ interface PermissionRule {
66
+ tool: string;
67
+ pattern?: string;
68
+ decision: PermissionDecision;
69
+ }
70
+ interface PermissionConfig {
71
+ mode: "default" | "acceptEdits" | "bypassPermissions" | "plan";
72
+ rules: PermissionRule[];
73
+ }
74
+ interface XenoConfig {
75
+ apiKey?: string;
76
+ model: string;
77
+ maxTokens: number;
78
+ maxIterations: number;
79
+ permissions: PermissionConfig;
80
+ }
81
+ interface Session {
82
+ id: string;
83
+ messages: Message[];
84
+ startedAt: Date;
85
+ workingDirectory: string;
86
+ model: string;
87
+ totalTokensUsed: number;
88
+ }
89
+ type PromptFn = (question: string) => Promise<string>;
90
+ type PermissionPromptOperation = "generic" | "filesystem" | "write" | "edit" | "bash";
91
+ interface PermissionPromptPreviewLine {
92
+ kind: "meta" | "context" | "add" | "remove";
93
+ text: string;
94
+ }
95
+ interface PermissionPromptPreview {
96
+ title: string;
97
+ summary?: string;
98
+ lines: PermissionPromptPreviewLine[];
99
+ truncated?: boolean;
100
+ }
101
+ interface PermissionPromptInfo {
102
+ toolName: string;
103
+ detail: string;
104
+ description?: string;
105
+ operation?: PermissionPromptOperation;
106
+ preview?: PermissionPromptPreview;
107
+ commandPrefix?: string;
108
+ approvalKey?: string;
109
+ requesterLabel?: string;
110
+ requesterSummary?: string;
111
+ directory?: string;
112
+ filePath?: string;
113
+ }
114
+ type PermissionPromptFn = (info: PermissionPromptInfo) => Promise<"allow" | "always" | "deny">;
115
+ type StopReason = "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
116
+ interface AgentLoopOptions {
117
+ model: string;
118
+ maxTokens: number;
119
+ maxIterations: number;
120
+ systemPrompt: string;
121
+ tools: ToolDefinition[];
122
+ onText?: (text: string) => void;
123
+ onToolUse?: (name: string, input: Record<string, unknown>) => void;
124
+ onToolResult?: (name: string, result: ToolResult) => void;
125
+ onIteration?: (iteration: number) => void;
126
+ }
127
+ interface IdentityFrontmatter {
128
+ name?: string;
129
+ description?: string;
130
+ role?: string;
131
+ model?: string;
132
+ maxTokens?: number;
133
+ temperature?: number;
134
+ style?: "concise" | "detailed" | "technical";
135
+ traits?: string[];
136
+ expertise?: string[];
137
+ constraints?: string[];
138
+ }
139
+ type IdentitySource = "global" | "project" | "role" | "session";
140
+ interface IdentityLayer {
141
+ source: IdentitySource;
142
+ path: string;
143
+ frontmatter: IdentityFrontmatter;
144
+ content: string;
145
+ tokenCount: number;
146
+ }
147
+ interface DescendantInstructionHint {
148
+ path: string;
149
+ relativePath: string;
150
+ directory: string;
151
+ fileName: string;
152
+ }
153
+ interface ResolvedIdentity {
154
+ layers: IdentityLayer[];
155
+ merged: IdentityFrontmatter;
156
+ systemPromptAddition: string;
157
+ totalTokens: number;
158
+ descendantInstructionHints?: DescendantInstructionHint[];
159
+ }
160
+ type MemoryLevel = "global" | "project" | "role" | "session";
161
+ interface MemoryEntry {
162
+ id: string;
163
+ level: MemoryLevel;
164
+ content: string;
165
+ tags?: string[];
166
+ createdAt: Date;
167
+ updatedAt: Date;
168
+ tokenCount: number;
169
+ source: "user" | "auto";
170
+ }
171
+ interface MemoryBudget {
172
+ global: number;
173
+ project: number;
174
+ role: number;
175
+ session: number;
176
+ total: number;
177
+ }
178
+ type SessionStatus = "creating" | "active" | "paused" | "completed" | "abandoned" | "archived";
179
+ declare const SESSION_FORMAT_VERSION = 1;
180
+ interface SessionMeta {
181
+ id: string;
182
+ role: string;
183
+ name?: string;
184
+ status: SessionStatus;
185
+ createdAt: string;
186
+ updatedAt: string;
187
+ lastActivity: string;
188
+ workingDirectory: string;
189
+ model: string;
190
+ parentSession?: string;
191
+ checkpoints: string[];
192
+ messageCount: number;
193
+ tokenUsage: {
194
+ input: number;
195
+ output: number;
196
+ total: number;
197
+ };
198
+ formatVersion?: number;
199
+ }
200
+ type TranscriptEventType = "session_start" | "user_message" | "assistant_message" | "tool_call" | "tool_result" | "delegation_summary" | "checkpoint" | "context_compressed" | "session_end" | "error";
201
+ interface SessionStartData {
202
+ sessionId: string;
203
+ role: string;
204
+ model: string;
205
+ workingDirectory: string;
206
+ formatVersion?: number;
207
+ }
208
+ interface ToolCallData {
209
+ toolName: string;
210
+ input: Record<string, unknown>;
211
+ }
212
+ interface ToolResultData {
213
+ toolName: string;
214
+ success: boolean;
215
+ output: string;
216
+ error?: string;
217
+ assistantContent?: ToolAssistantContentBlock[];
218
+ assistantOnlyContent?: ToolAssistantContentBlock[];
219
+ }
220
+ interface CheckpointData {
221
+ id?: string;
222
+ checkpointId?: string;
223
+ action?: "create" | "restore" | "delete";
224
+ name?: string;
225
+ trigger?: CheckpointTrigger;
226
+ messageCount: number;
227
+ }
228
+ interface DelegationSummaryData {
229
+ selectedRole?: string;
230
+ selectedTaskId?: string;
231
+ elapsedMs: number;
232
+ totalTokens: number;
233
+ okBranches: number;
234
+ errorBranches: number;
235
+ totalBranches: number;
236
+ roleSummaries: Record<string, {
237
+ status: "ok" | "error" | "timeout";
238
+ tokensUsed: number;
239
+ outputPreview?: string;
240
+ error?: string;
241
+ }>;
242
+ }
243
+ interface ContextCompressedData {
244
+ messagesRemoved: number;
245
+ tokensSaved: number;
246
+ }
247
+ interface SessionEndData {
248
+ reason: "user_exit" | "error" | "completed";
249
+ messageCount: number;
250
+ totalTokens: number;
251
+ }
252
+ interface ErrorData {
253
+ message: string;
254
+ code?: string;
255
+ stack?: string;
256
+ }
257
+ type TranscriptEventData = {
258
+ type: "session_start";
259
+ data: SessionStartData;
260
+ } | {
261
+ type: "user_message";
262
+ data: Message;
263
+ } | {
264
+ type: "assistant_message";
265
+ data: Message;
266
+ } | {
267
+ type: "tool_call";
268
+ data: ToolCallData;
269
+ } | {
270
+ type: "tool_result";
271
+ data: ToolResultData;
272
+ } | {
273
+ type: "delegation_summary";
274
+ data: DelegationSummaryData;
275
+ } | {
276
+ type: "checkpoint";
277
+ data: CheckpointData;
278
+ } | {
279
+ type: "context_compressed";
280
+ data: ContextCompressedData;
281
+ } | {
282
+ type: "session_end";
283
+ data: SessionEndData;
284
+ } | {
285
+ type: "error";
286
+ data: ErrorData;
287
+ };
288
+ interface TranscriptEvent {
289
+ id: string;
290
+ type: TranscriptEventType;
291
+ timestamp: string;
292
+ sequence: number;
293
+ data: TranscriptEventData["data"];
294
+ tokenCount?: number;
295
+ }
296
+ type CheckpointTrigger = "auto" | "manual" | "pre_dangerous" | "milestone";
297
+ interface CheckpointInfo {
298
+ id: string;
299
+ name?: string;
300
+ trigger: CheckpointTrigger;
301
+ createdAt: string;
302
+ messageCount: number;
303
+ tokenCount: number;
304
+ }
305
+ type AutoMemoryTrigger = "error_correction" | "pattern_learned" | "preference_stated" | "task_completed";
306
+ interface PermissionRequestContext {
307
+ toolName: string;
308
+ path: string;
309
+ directory: string;
310
+ reason: string;
311
+ }
312
+ interface PermissionRequestResult {
313
+ granted: boolean;
314
+ allowedDirectory?: string;
315
+ }
316
+ interface AgentCapabilities {
317
+ terminal: boolean;
318
+ fileRead: boolean;
319
+ fileWrite: boolean;
320
+ appLaunch: boolean;
321
+ }
322
+ interface PlatformInfo {
323
+ os: "windows" | "macos" | "linux";
324
+ shell: "powershell" | "bash" | "zsh";
325
+ platform: string;
326
+ homeDir?: string;
327
+ }
328
+ interface AgentSandbox {
329
+ allowedDirectories: string[];
330
+ workingDirectory?: string;
331
+ capabilities: AgentCapabilities;
332
+ temporaryDirectories?: string[];
333
+ workspace?: {
334
+ id: string;
335
+ name: string;
336
+ };
337
+ team?: {
338
+ id: string;
339
+ name: string;
340
+ };
341
+ }
342
+ type AuditRiskLevel = "none" | "low" | "medium" | "high" | "critical";
343
+ type AuditDecision = "allow" | "ask" | "deny";
344
+ type AuditStatus = "ok" | "error";
345
+ interface AuditEvent {
346
+ id: string;
347
+ sequence: number;
348
+ timestamp: string;
349
+ trace_id: string;
350
+ session_id?: string;
351
+ event_type: string;
352
+ actor: "user" | "assistant" | "system";
353
+ risk_level: AuditRiskLevel;
354
+ tool_name?: string;
355
+ decision?: AuditDecision;
356
+ status?: AuditStatus;
357
+ reason?: string;
358
+ metadata?: Record<string, unknown>;
359
+ }
360
+ interface AuditLoggerOptions {
361
+ filePath: string;
362
+ sessionId?: string;
363
+ }
364
+ declare class AuditLogger {
365
+ private filePath;
366
+ private sessionId?;
367
+ private sequence;
368
+ private writeQueue;
369
+ constructor(options: AuditLoggerOptions);
370
+ get path(): string;
371
+ append(event: Omit<AuditEvent, "id" | "sequence" | "timestamp" | "session_id"> & {
372
+ session_id?: string;
373
+ }): Promise<string>;
374
+ read(options?: {
375
+ limit?: number;
376
+ eventType?: string;
377
+ traceId?: string;
378
+ }): Promise<AuditEvent[]>;
379
+ tail(limit?: number): Promise<AuditEvent[]>;
380
+ exportJson(targetPath: string): Promise<number>;
381
+ flush(): Promise<void>;
382
+ }
383
+ interface AuditTraceSummary {
384
+ traceId: string;
385
+ eventCount: number;
386
+ startedAt: string;
387
+ endedAt: string;
388
+ durationMs: number;
389
+ toolEvents: number;
390
+ permissionEvents: number;
391
+ errorEvents: number;
392
+ lastEventType: string;
393
+ }
394
+ interface AuditTraceToolSummary {
395
+ toolName: string;
396
+ count: number;
397
+ ok: number;
398
+ error: number;
399
+ denied: number;
400
+ }
401
+ interface AuditTraceTimelineEntry {
402
+ sequence: number;
403
+ timestamp: string;
404
+ eventType: string;
405
+ actor: AuditEvent["actor"];
406
+ riskLevel: AuditEvent["risk_level"];
407
+ toolName?: string;
408
+ decision?: AuditEvent["decision"];
409
+ status?: AuditEvent["status"];
410
+ reason?: AuditEvent["reason"];
411
+ }
412
+ interface AuditTraceGapEntry {
413
+ fromSequence: number;
414
+ toSequence: number;
415
+ fromEventType: string;
416
+ toEventType: string;
417
+ gapMs: number;
418
+ }
419
+ interface AuditTraceReport {
420
+ traceId: string;
421
+ eventCount: number;
422
+ startedAt: string;
423
+ endedAt: string;
424
+ durationMs: number;
425
+ toolEvents: number;
426
+ permissionEvents: number;
427
+ deniedPermissions: number;
428
+ errorEvents: number;
429
+ eventTypes: Record<string, number>;
430
+ actorSummary: Record<string, number>;
431
+ riskSummary: Record<string, number>;
432
+ toolSummary: AuditTraceToolSummary[];
433
+ topLatencyGaps: AuditTraceGapEntry[];
434
+ timeline: AuditTraceTimelineEntry[];
435
+ }
436
+ interface AuditReplayStep {
437
+ sequence: number;
438
+ timestamp: string;
439
+ title: string;
440
+ detail?: string;
441
+ actor: AuditEvent["actor"];
442
+ riskLevel: AuditEvent["risk_level"];
443
+ status?: AuditEvent["status"];
444
+ }
445
+ interface AuditReplayReport {
446
+ traceId: string;
447
+ startedAt: string;
448
+ endedAt: string;
449
+ durationMs: number;
450
+ steps: AuditReplayStep[];
451
+ }
452
+ declare function summarizeAuditTraces(events: AuditEvent[]): AuditTraceSummary[];
453
+ declare function buildAuditTraceReport(events: AuditEvent[], traceId?: string): AuditTraceReport | null;
454
+ declare function buildAuditReplayReport(events: AuditEvent[], traceId?: string): AuditReplayReport | null;
455
+ declare function renderAuditTraceSummaries(summaries: AuditTraceSummary[]): string;
456
+ declare function renderAuditTraceReport(report: AuditTraceReport): string;
457
+ declare function renderAuditTraceMarkdown(report: AuditTraceReport): string;
458
+ declare function renderAuditReplayMarkdown(report: AuditReplayReport): string;
459
+ declare function renderAuditReplayReport(report: AuditReplayReport): string;
460
+ declare const CONFIG_VERSION = 2;
461
+ declare const PROJECT_STATE_VERSION = 3;
462
+ type ProjectMcpApprovalDecision = "approved" | "denied";
463
+ interface ProjectTokenUsageSummary {
464
+ input: number;
465
+ output: number;
466
+ total: number;
467
+ }
468
+ interface ProjectSessionSummary {
469
+ sessionId?: string;
470
+ mode?: "chat" | "run" | "save";
471
+ status?: string;
472
+ role?: string;
473
+ model: string;
474
+ startedAt: string;
475
+ endedAt: string;
476
+ durationMs: number;
477
+ messageCount?: number;
478
+ tokenUsage: ProjectTokenUsageSummary;
479
+ estimatedCostUsd: number;
480
+ }
481
+ interface XenoUserConfig {
482
+ configVersion?: number;
483
+ apiKey?: string;
484
+ model?: string;
485
+ baseURL?: string;
486
+ maxTokens?: number;
487
+ maxIterations?: number;
488
+ permissionMode?: "default" | "acceptEdits" | "bypassPermissions";
489
+ executionMode?: "agent" | "chatOnly";
490
+ uiColor?: "blue" | "green" | "red" | "purple";
491
+ memoryContextSessions?: number;
492
+ memoryContextTokens?: number;
493
+ memoryContextChars?: number;
494
+ searchApiKey?: string;
495
+ searchProvider?: "brave" | "google" | "searxng" | "duckduckgo";
496
+ searxngUrl?: string;
497
+ googleCx?: string;
498
+ mcpEnabled?: boolean;
499
+ lastReleaseNotesSeen?: string;
500
+ terminalShiftEnterInstalled?: boolean;
501
+ }
502
+ interface XenoProjectState {
503
+ configVersion?: number;
504
+ trustedWorkspace?: boolean;
505
+ allowedTools?: string[];
506
+ allowedDirectories?: string[];
507
+ mcpApprovals?: Record<string, ProjectMcpApprovalDecision>;
508
+ lastSessionSummary?: ProjectSessionSummary;
509
+ hasCompletedProjectOnboarding?: boolean;
510
+ }
511
+ declare function getConfigDir(): string;
512
+ declare function getProjectStatePath(cwd?: string): string;
513
+ declare function ensureProjectStateDir(cwd?: string): void;
514
+ declare function loadProjectState(cwd?: string): XenoProjectState;
515
+ declare function saveProjectState(cwd: string, updates: Partial<XenoProjectState>): void;
516
+ declare function updateProjectState(cwd: string, updater: (current: XenoProjectState) => XenoProjectState): XenoProjectState;
517
+ declare function isWorkspaceTrusted(cwd?: string): boolean;
518
+ declare function setWorkspaceTrusted(cwd?: string, trusted?: boolean): void;
519
+ declare function hasProjectOnboardingCompleted(cwd?: string): boolean;
520
+ declare function setProjectOnboardingCompleted(cwd?: string, completed?: boolean): void;
521
+ declare function addProjectAllowedTool(cwd: string, approvalKey: string): XenoProjectState;
522
+ declare function listProjectAllowedTools(cwd: string): string[];
523
+ declare function removeProjectAllowedTool(cwd: string, approvalKey: string): XenoProjectState;
524
+ declare function clearProjectAllowedTools(cwd: string): XenoProjectState;
525
+ declare function addProjectAllowedDirectory(cwd: string, directory: string): XenoProjectState;
526
+ declare function getProjectMcpApproval(cwd: string, approvalKey: string): ProjectMcpApprovalDecision | undefined;
527
+ declare function setProjectMcpApproval(cwd: string, approvalKey: string, decision: ProjectMcpApprovalDecision): XenoProjectState;
528
+ declare function clearProjectMcpApproval(cwd: string, approvalKey: string): XenoProjectState;
529
+ declare function listProjectMcpApprovals(cwd: string, scope?: string): Record<string, ProjectMcpApprovalDecision>;
530
+ declare function clearProjectMcpApprovals(cwd: string, scope?: string): XenoProjectState;
531
+ declare function getProjectLastSessionSummary(cwd?: string): ProjectSessionSummary | undefined;
532
+ declare function setProjectLastSessionSummary(cwd: string, summary: ProjectSessionSummary): XenoProjectState;
533
+ declare function clearProjectLastSessionSummary(cwd: string): XenoProjectState;
534
+ declare function ensureConfigDir(): void;
535
+ declare function loadConfig(): XenoUserConfig;
536
+ declare function saveConfig(updates: Partial<XenoUserConfig>): void;
537
+ type XenoCredentialType = "api-key" | "jwt" | "empty";
538
+ type XenoCredentialSource = "explicit" | "env" | "default" | "none";
539
+ type XenoAuthErrorCode = "token_expired" | "token_not_active" | "token_malformed";
540
+ interface XenoJwtPayload {
541
+ exp?: number;
542
+ iat?: number;
543
+ nbf?: number;
544
+ sub?: string;
545
+ userId?: string;
546
+ email?: string;
547
+ username?: string;
548
+ [key: string]: unknown;
549
+ }
550
+ interface XenoResolvedApiKey {
551
+ apiKey: string;
552
+ source: XenoCredentialSource;
553
+ credentialType: XenoCredentialType;
554
+ expiresAt?: string;
555
+ expiresInMs?: number;
556
+ }
557
+ interface ResolveXenoSdkApiKeyOptions {
558
+ explicitApiKey?: string;
559
+ env?: Record<string, string | undefined>;
560
+ envVar?: string;
561
+ defaultApiKey?: string;
562
+ nowMs?: number;
563
+ skewMs?: number;
564
+ allowExpired?: boolean;
565
+ }
566
+ interface ValidateXenoSdkApiKeyOptions {
567
+ apiKey: string;
568
+ apiBaseURL: string;
569
+ fetchImpl?: typeof fetch;
570
+ }
571
+ declare class XenoAuthError extends Error {
572
+ readonly code: XenoAuthErrorCode;
573
+ readonly expiresAt?: string;
574
+ constructor(message: string, code: XenoAuthErrorCode, context?: {
575
+ expiresAt?: string;
576
+ });
577
+ }
578
+ declare function isJwt(value: string | undefined): value is string;
579
+ declare function decodeJwtPayload(token: string | undefined): XenoJwtPayload | undefined;
580
+ declare function getJwtExpiry(token: string | undefined): Date | undefined;
581
+ declare function isExpiredJwt(token: string | undefined, nowMs?: number, skewMs?: number): boolean;
582
+ declare function isNotBeforeJwt(token: string | undefined, nowMs?: number, skewMs?: number): boolean;
583
+ declare function assertUsableXenoApiKey(apiKey: string | undefined, options?: {
584
+ nowMs?: number;
585
+ skewMs?: number;
586
+ allowExpired?: boolean;
587
+ }): string;
588
+ declare function resolveXenoSdkApiKey(options?: ResolveXenoSdkApiKeyOptions): XenoResolvedApiKey;
589
+ declare function validateXenoSdkApiKey(options: ValidateXenoSdkApiKeyOptions): Promise<{
590
+ valid: boolean;
591
+ error?: string;
592
+ }>;
593
+ declare const DEFAULT_API_KEY: string;
594
+ declare const XENO_API_BASE: string;
595
+ declare const XENO_RT_DEFAULT_URL: string;
596
+ declare const DEFAULT_MODEL: string;
597
+ declare const FALLBACK_MODELS: readonly string[];
598
+ interface ModelInfo {
599
+ id: string;
600
+ name: string;
601
+ owned_by: string;
602
+ source: "xeno" | "local";
603
+ }
604
+ interface LocalRuntimePreflightResult {
605
+ ok: boolean;
606
+ model: string;
607
+ baseUrl: string;
608
+ endpoint?: "openai" | "native";
609
+ warning?: string;
610
+ error?: string;
611
+ }
612
+ declare function getAvailableModels(options?: {
613
+ apiKey?: string;
614
+ localRuntimeUrl?: string;
615
+ forceRefresh?: boolean;
616
+ }): Promise<ModelInfo[]>;
617
+ declare function isLocalModel(model: string): boolean;
618
+ declare function getModelName(model: string): string;
619
+ declare function preflightLocalModel(model: string, options?: {
620
+ localRuntimeUrl?: string;
621
+ timeoutMs?: number;
622
+ }): Promise<LocalRuntimePreflightResult>;
623
+ declare function isValidModel(model: string, apiKey?: string): Promise<boolean>;
624
+ declare function isChatModel(model: ModelInfo): boolean;
625
+ declare function getChatModels(apiKey?: string): Promise<ModelInfo[]>;
626
+ declare function formatModelList(apiKey?: string, showAll?: boolean): Promise<string>;
627
+ interface ProfileMCPServerConfig {
628
+ name: string;
629
+ command: string;
630
+ args?: string[];
631
+ env?: Record<string, string>;
632
+ cwd?: string;
633
+ }
634
+ interface ConfigProfile {
635
+ name: string;
636
+ apiKey?: string;
637
+ baseURL?: string;
638
+ model?: string;
639
+ maxTokens?: number;
640
+ permissionMode?: "default" | "acceptEdits" | "bypassPermissions";
641
+ plugins?: string[];
642
+ mcpServers?: ProfileMCPServerConfig[];
643
+ }
644
+ declare class ProfileManager {
645
+ private data;
646
+ private filePath;
647
+ constructor();
648
+ listProfiles(): ConfigProfile[];
649
+ getActiveProfile(): ConfigProfile;
650
+ getActiveProfileName(): string;
651
+ switchProfile(name: string): void;
652
+ createProfile(profile: ConfigProfile): void;
653
+ deleteProfile(name: string): void;
654
+ updateProfile(name: string, updates: Partial<ConfigProfile>): void;
655
+ getProfile(name: string): ConfigProfile | undefined;
656
+ reload(): void;
657
+ private load;
658
+ private save;
659
+ }
660
+ interface ProjectConfig {
661
+ model?: string;
662
+ systemPrompt?: string;
663
+ permissions?: {
664
+ allowedCommands?: string[];
665
+ deniedCommands?: string[];
666
+ };
667
+ ignorePatterns?: string[];
668
+ }
669
+ declare function loadProjectConfig(cwd?: string): ProjectConfig | null;
670
+ declare function mergeConfigs(base: ProjectConfig, override: ProjectConfig): ProjectConfig;
671
+ interface SessionData {
672
+ id: string;
673
+ model: string;
674
+ workingDirectory: string;
675
+ createdAt: string;
676
+ updatedAt: string;
677
+ messages: Message[];
678
+ totalTokensUsed: number;
679
+ }
680
+ interface SessionSummary {
681
+ id: string;
682
+ createdAt: string;
683
+ updatedAt: string;
684
+ model: string;
685
+ workingDirectory: string;
686
+ preview: string;
687
+ messageCount: number;
688
+ }
689
+ declare function saveSession(id: string | null, messages: Message[], model: string, totalTokensUsed: number): string;
690
+ declare function loadSession(id: string): SessionData | null;
691
+ declare function listSessions(limit?: number): SessionSummary[];
692
+ declare function deleteSession(id: string): boolean;
693
+ interface ModelProvider {
694
+ id: string;
695
+ name: string;
696
+ baseURL: string;
697
+ apiKeyEnvVar: string;
698
+ defaultApiKey?: string;
699
+ modelPrefixes: string[];
700
+ models: string[];
701
+ supportsStreaming: boolean;
702
+ supportsToolUse: boolean;
703
+ maxContextTokens?: number;
704
+ headers?: Record<string, string>;
705
+ requestFormat?: "openai" | "google";
706
+ }
707
+ interface ResolvedProvider {
708
+ provider: ModelProvider;
709
+ model: string;
710
+ baseURL: string;
711
+ apiKey: string;
712
+ headers: Record<string, string>;
713
+ }
714
+ declare class ModelProviderRegistry {
715
+ private providers;
716
+ constructor();
717
+ addProvider(provider: ModelProvider): void;
718
+ removeProvider(id: string): boolean;
719
+ getProvider(id: string): ModelProvider | undefined;
720
+ listProviders(): ModelProvider[];
721
+ resolveProvider(model: string, overrides?: {
722
+ apiKey?: string;
723
+ baseURL?: string;
724
+ }): ResolvedProvider;
725
+ }
726
+ declare function getDefaultProviderRegistry(): ModelProviderRegistry;
727
+ interface MemoryFile {
728
+ level: MemoryLevel;
729
+ path: string;
730
+ content: string;
731
+ tokenCount: number;
732
+ lastModified?: Date;
733
+ }
734
+ interface ResolvedMemory {
735
+ files: MemoryFile[];
736
+ byLevel: Record<MemoryLevel, string>;
737
+ totalTokens: number;
738
+ truncated: boolean;
739
+ }
740
+ interface ProjectSessionContextEntry {
741
+ sessionId: string;
742
+ model: string;
743
+ lastActivity: string;
744
+ messageCount: number;
745
+ excerpt: string;
746
+ }
747
+ interface ProjectSessionContext {
748
+ entries: ProjectSessionContextEntry[];
749
+ totalTokens: number;
750
+ truncated: boolean;
751
+ content: string;
752
+ }
753
+ declare const DEFAULT_MEMORY_BUDGETS: MemoryBudget;
754
+ declare const MEMORY_FILES: Record<MemoryLevel, string>;
755
+ interface MemoryManagerOptions {
756
+ cwd: string;
757
+ globalDir?: string;
758
+ role?: string;
759
+ sessionDir?: string;
760
+ budgets?: Partial<MemoryBudget>;
761
+ projectSessionContext?: {
762
+ limit?: number;
763
+ maxTokens?: number;
764
+ maxCharsPerSession?: number;
765
+ };
766
+ }
767
+ declare class MemoryManager {
768
+ private cwd;
769
+ private globalDir;
770
+ private role?;
771
+ private sessionDir?;
772
+ private budgets;
773
+ private projectSessionContextDefaults;
774
+ constructor(options: MemoryManagerOptions);
775
+ getProjectSessionContextDefaults(): {
776
+ limit: number;
777
+ maxTokens: number;
778
+ maxCharsPerSession: number;
779
+ };
780
+ getPath(level: MemoryLevel): string;
781
+ loadForPrompt(): Promise<ResolvedMemory>;
782
+ loadProjectSessionContext(options?: {
783
+ excludeSessionId?: string;
784
+ limit?: number;
785
+ maxTokens?: number;
786
+ maxCharsPerSession?: number;
787
+ }): Promise<ProjectSessionContext>;
788
+ private filterProjectSessions;
789
+ private normalizePath;
790
+ private extractRecentTranscriptExcerpt;
791
+ private formatProjectSessionEntry;
792
+ add(level: MemoryLevel, content: string, source: "user" | "auto"): Promise<void>;
793
+ set(level: MemoryLevel, content: string): Promise<void>;
794
+ formatForPrompt(memory: ResolvedMemory): string;
795
+ private truncateContent;
796
+ }
797
+ interface AutoMemoryContext {
798
+ error?: string;
799
+ correction?: string;
800
+ taskCompleted?: boolean;
801
+ userPreference?: string;
802
+ }
803
+ declare class AutoMemory {
804
+ private manager;
805
+ private recentErrors;
806
+ constructor(manager: MemoryManager);
807
+ shouldTrigger(context: AutoMemoryContext): AutoMemoryTrigger | null;
808
+ extract(trigger: AutoMemoryTrigger, messages: Message[]): Promise<string | null>;
809
+ private extractErrorCorrection;
810
+ private extractPattern;
811
+ private extractPreference;
812
+ private extractTaskSummary;
813
+ private messagesToText;
814
+ private normalizeError;
815
+ }
816
+ interface VectorDocument {
817
+ id: string;
818
+ content: string;
819
+ embedding: number[];
820
+ metadata: Record<string, unknown>;
821
+ }
822
+ interface VectorSearchResult {
823
+ id: string;
824
+ content: string;
825
+ score: number;
826
+ metadata: Record<string, unknown>;
827
+ }
828
+ interface VectorStoreOptions {
829
+ maxDocuments?: number;
830
+ embeddingDimension?: number;
831
+ embedFn?: (text: string) => Promise<number[]>;
832
+ }
833
+ interface VectorStoreAdapter {
834
+ add(id: string, embedding: number[], metadata: Record<string, unknown>): Promise<void>;
835
+ search(query: number[], topK: number): Promise<Array<{
836
+ id: string;
837
+ score: number;
838
+ }>>;
839
+ remove(id: string): Promise<void>;
840
+ readonly size: number;
841
+ }
842
+ declare class VectorMemoryStore {
843
+ private documents;
844
+ private insertionOrder;
845
+ private maxDocuments;
846
+ private embedder;
847
+ private customEmbedFn?;
848
+ constructor(options?: VectorStoreOptions);
849
+ addDocument(id: string, content: string, metadata?: Record<string, unknown>): Promise<void>;
850
+ search(query: string, topK?: number, minScore?: number): Promise<VectorSearchResult[]>;
851
+ removeDocument(id: string): boolean;
852
+ getDocument(id: string): VectorDocument | undefined;
853
+ get size(): number;
854
+ clear(): void;
855
+ exportDocuments(): VectorDocument[];
856
+ importDocuments(docs: VectorDocument[]): void;
857
+ }
858
+ interface AskUserRequest {
859
+ question: string;
860
+ options?: string[];
861
+ context?: string;
862
+ }
863
+ interface AskUserResponse {
864
+ answer: string;
865
+ selectedOption?: string;
866
+ }
867
+ type AskUserHandler = (request: AskUserRequest) => Promise<AskUserResponse>;
868
+ interface DispatchAgentRequest {
869
+ prompt: string;
870
+ timeoutMs?: number;
871
+ signal?: AbortSignal;
872
+ }
873
+ interface DispatchAgentResponse {
874
+ output: string;
875
+ }
876
+ type DispatchAgentHandler = (request: DispatchAgentRequest) => Promise<DispatchAgentResponse>;
877
+ interface FileObservation {
878
+ path: string;
879
+ mtimeMs: number;
880
+ size: number;
881
+ source: "read" | "write" | "edit" | "notebook" | "shell";
882
+ requiresRefresh?: boolean;
883
+ reason?: string;
884
+ }
885
+ interface ToolRuntimeContext {
886
+ getCwd(): string;
887
+ setCwd(nextCwd: string): void;
888
+ getMemoryManager(): MemoryManager | undefined;
889
+ noteFileObservation(filePath: string, observation: Omit<FileObservation, "path">): void;
890
+ getFileObservation(filePath: string): FileObservation | undefined;
891
+ invalidateFileObservation(filePath: string, reason: string): void;
892
+ listFileObservations(): FileObservation[];
893
+ askUser?(request: AskUserRequest): Promise<AskUserResponse>;
894
+ dispatchAgent?(request: DispatchAgentRequest): Promise<DispatchAgentResponse>;
895
+ }
896
+ declare function createToolRuntimeContext(initialCwd?: string, options?: {
897
+ askUser?: AskUserHandler;
898
+ dispatchAgent?: DispatchAgentHandler;
899
+ memoryManager?: MemoryManager;
900
+ }): ToolRuntimeContext;
901
+ declare const defaultToolRuntimeContext: ToolRuntimeContext;
902
+ interface DefaultToolRegistryOptions {
903
+ cwd?: string;
904
+ askUser?: AskUserHandler;
905
+ dispatchAgent?: DispatchAgentHandler;
906
+ memoryManager?: MemoryManager;
907
+ webSearchApiKey?: string;
908
+ validateInputs?: boolean;
909
+ }
910
+ interface ToolRegistryOptions {
911
+ validateInputs?: boolean;
912
+ }
913
+ declare class ToolRegistry {
914
+ private tools;
915
+ private changeListeners;
916
+ private aliasNames;
917
+ private validateInputs;
918
+ constructor(options?: ToolRegistryOptions);
919
+ setValidateInputs(enabled: boolean): this;
920
+ get inputValidationEnabled(): boolean;
921
+ register(tool: RegisteredTool): void;
922
+ registerAlias(tool: RegisteredTool): void;
923
+ registerAll(tools: Iterable<RegisteredTool>): void;
924
+ unregister(name: string): boolean;
925
+ onChange(listener: () => void): () => void;
926
+ private emitChange;
927
+ get(name: string): RegisteredTool | undefined;
928
+ getDefinitions(): ToolDefinition[];
929
+ private static namespaceOf;
930
+ getDefinitionsByNamespace(namespace: string): ToolDefinition[];
931
+ listNamespaces(): string[];
932
+ execute(name: string, input: Record<string, unknown>): Promise<ToolResult>;
933
+ listNames(): string[];
934
+ has(name: string): boolean;
935
+ get size(): number;
936
+ }
937
+ declare function createDefaultToolRegistry(options?: DefaultToolRegistryOptions): ToolRegistry;
938
+ declare const registry: ToolRegistry;
939
+ interface PermissionDecisionEvent {
940
+ traceId?: string;
941
+ toolName: string;
942
+ input: Record<string, unknown>;
943
+ allowed: boolean;
944
+ reason: string;
945
+ mode: PermissionConfig["mode"];
946
+ requesterLabel?: string;
947
+ }
948
+ type PermissionDecisionHook = (event: PermissionDecisionEvent) => Promise<void> | void;
949
+ interface PersistentPermissionState {
950
+ allowedTools?: string[];
951
+ allowedDirectories?: string[];
952
+ }
953
+ interface PermissionCheckContext {
954
+ traceId?: string;
955
+ requesterLabel?: string;
956
+ }
957
+ declare class PermissionEngine {
958
+ private config;
959
+ private workingDirectory;
960
+ private sessionAllowed;
961
+ private sessionAllowedDirectories;
962
+ private persistentAllowed;
963
+ private persistentAllowedDirectories;
964
+ private promptFn?;
965
+ private decisionHook?;
966
+ constructor(config?: Partial<PermissionConfig>, promptFn?: PermissionPromptFn, decisionHook?: PermissionDecisionHook);
967
+ get mode(): PermissionConfig["mode"];
968
+ setMode(mode: PermissionConfig["mode"]): void;
969
+ setWorkingDirectory(cwd: string): void;
970
+ loadPersistentState(state: PersistentPermissionState): void;
971
+ allowDirectory(directory: string): void;
972
+ isPathInAllowedDirectory(filePath: string): boolean;
973
+ check(toolName: string, input: Record<string, unknown>, context?: PermissionCheckContext): Promise<{
974
+ allowed: boolean;
975
+ reason: string;
976
+ }>;
977
+ private finalizeDecision;
978
+ private getCacheKey;
979
+ private isPathInPersistentAllowedDirectory;
980
+ private extractFilePath;
981
+ private extractDirectory;
982
+ private normalizeDirectory;
983
+ private promptUser;
984
+ private getToolDetail;
985
+ private getCommandPrefix;
986
+ private matchesRule;
987
+ private matchesBashPattern;
988
+ private hasBashApproval;
989
+ private extractBashCommandPrefix;
990
+ private normalizeCommandText;
991
+ private resolveTargetPath;
992
+ }
993
+ type XenoRuntimeEventType = "thread.started" | "turn.started" | "turn.completed" | "turn.failed" | "turn.interrupted" | "model.text.delta" | "tool.started" | "tool.permission" | "tool.completed" | "diff.completed";
994
+ interface XenoRuntimeEventBase {
995
+ id: string;
996
+ sequence: number;
997
+ type: XenoRuntimeEventType;
998
+ timestamp: string;
999
+ threadId?: string;
1000
+ turnId?: string;
1001
+ }
1002
+ type XenoRuntimeEvent = (XenoRuntimeEventBase & {
1003
+ type: "thread.started";
1004
+ cwd: string;
1005
+ model: string;
1006
+ }) | (XenoRuntimeEventBase & {
1007
+ type: "turn.started";
1008
+ model: string;
1009
+ promptPreview: string;
1010
+ }) | (XenoRuntimeEventBase & {
1011
+ type: "turn.completed";
1012
+ outputPreview: string;
1013
+ tokenUsage: {
1014
+ input: number;
1015
+ output: number;
1016
+ total: number;
1017
+ };
1018
+ }) | (XenoRuntimeEventBase & {
1019
+ type: "turn.failed" | "turn.interrupted";
1020
+ error: string;
1021
+ }) | (XenoRuntimeEventBase & {
1022
+ type: "model.text.delta";
1023
+ text: string;
1024
+ iteration?: number;
1025
+ }) | (XenoRuntimeEventBase & {
1026
+ type: "tool.started";
1027
+ toolName: string;
1028
+ inputPreview: Record<string, unknown>;
1029
+ iteration?: number;
1030
+ }) | (XenoRuntimeEventBase & {
1031
+ type: "tool.permission";
1032
+ toolName: string;
1033
+ allowed: boolean;
1034
+ reason: string;
1035
+ layer: "sandbox" | "permission";
1036
+ iteration?: number;
1037
+ }) | (XenoRuntimeEventBase & {
1038
+ type: "tool.completed";
1039
+ toolName: string;
1040
+ success: boolean;
1041
+ outputPreview: string;
1042
+ error?: string;
1043
+ elapsedMs: number;
1044
+ iteration?: number;
1045
+ }) | (XenoRuntimeEventBase & {
1046
+ type: "diff.completed";
1047
+ filesChanged: number;
1048
+ summary: string;
1049
+ });
1050
+ type XenoRuntimeEventSink = (event: XenoRuntimeEvent) => void | Promise<void>;
1051
+ type XenoRuntimeEventDraft = XenoRuntimeEvent extends infer Event ? Event extends XenoRuntimeEvent ? Omit<Event, "id" | "sequence" | "timestamp"> & Partial<Pick<XenoRuntimeEvent, "id" | "sequence" | "timestamp">> : never : never;
1052
+ declare class XenoRuntimeEventBus {
1053
+ private readonly maxHistory;
1054
+ private listeners;
1055
+ private history;
1056
+ private sequence;
1057
+ constructor(maxHistory?: number);
1058
+ subscribe(listener: XenoRuntimeEventSink): () => void;
1059
+ nextSequence(): number;
1060
+ emit(event: XenoRuntimeEventDraft): void;
1061
+ snapshot(): XenoRuntimeEvent[];
1062
+ }
1063
+ declare function summarizeRuntimeInput(input: Record<string, unknown>, maxStringLength?: number): Record<string, unknown>;
1064
+ type ShutdownCleanup = () => void;
1065
+ declare function registerShutdownCleanup(cleanup: ShutdownCleanup): () => void;
1066
+ interface InstallSignalHandlersOptions {
1067
+ signals?: Array<"SIGINT" | "SIGTERM" | "SIGBREAK">;
1068
+ exitOnSignal?: boolean;
1069
+ }
1070
+ declare function installSignalHandlers(options?: InstallSignalHandlersOptions): boolean;
1071
+ declare function areSignalHandlersInstalled(): boolean;
1072
+ interface FileSnapshot {
1073
+ path: string;
1074
+ exists: boolean;
1075
+ size: number;
1076
+ mtimeMs: number;
1077
+ text?: string;
1078
+ binary?: boolean;
1079
+ truncated?: boolean;
1080
+ }
1081
+ interface TurnFileDiff {
1082
+ path: string;
1083
+ status: "created" | "modified" | "deleted" | "unchanged";
1084
+ before?: FileSnapshot;
1085
+ after?: FileSnapshot;
1086
+ patch?: string;
1087
+ }
1088
+ interface TurnDiffSummary {
1089
+ turnId: string;
1090
+ startedAt: string;
1091
+ completedAt: string;
1092
+ files: TurnFileDiff[];
1093
+ }
1094
+ interface TurnDiffTrackerOptions {
1095
+ maxFileBytes?: number;
1096
+ cwd?: string;
1097
+ }
1098
+ declare class TurnDiffTracker {
1099
+ private active?;
1100
+ private readonly maxFileBytes;
1101
+ private readonly cwd;
1102
+ constructor(options?: TurnDiffTrackerOptions);
1103
+ beginTurn(turnId: string): void;
1104
+ observeBefore(paths: Iterable<string | null | undefined>): void;
1105
+ observeAfter(paths: Iterable<string | null | undefined>): void;
1106
+ endTurn(): TurnDiffSummary | undefined;
1107
+ inferToolPaths(toolName: string, input: Record<string, unknown>): string[];
1108
+ private resolvePath;
1109
+ private snapshot;
1110
+ }
1111
+ interface ToolOrchestratorCallbacks {
1112
+ onToolStart?: (name: string, input: Record<string, unknown>) => void;
1113
+ onToolWillExecute?: (name: string, input: Record<string, unknown>) => void | Promise<void>;
1114
+ onToolEnd?: (name: string, result: ToolResult) => void;
1115
+ }
1116
+ interface ToolOrchestratorConfig {
1117
+ toolRegistry: ToolRegistry;
1118
+ permissionEngine: PermissionEngine;
1119
+ requesterLabel?: string;
1120
+ sandbox?: AgentSandbox;
1121
+ onPermissionRequest?: (context: PermissionRequestContext) => Promise<PermissionRequestResult> | PermissionRequestResult;
1122
+ callbacks?: ToolOrchestratorCallbacks;
1123
+ auditLogger?: AuditLogger;
1124
+ eventSink?: (event: XenoRuntimeEventDraft) => void | Promise<void>;
1125
+ turnDiffTracker?: TurnDiffTracker;
1126
+ }
1127
+ interface ExecuteToolRequest {
1128
+ toolCall: ToolUseBlock;
1129
+ traceId: string;
1130
+ iteration: number;
1131
+ skipToolExecutionReason?: string | null;
1132
+ }
1133
+ interface ExecuteToolResult {
1134
+ toolCall: ToolUseBlock;
1135
+ toolResult: ToolResult;
1136
+ executeTool: boolean;
1137
+ }
1138
+ declare class ToolOrchestrator {
1139
+ private readonly config;
1140
+ constructor(config: ToolOrchestratorConfig);
1141
+ execute(request: ExecuteToolRequest): Promise<ExecuteToolResult>;
1142
+ private checkSandboxAndPermission;
1143
+ private appendAuditEvent;
1144
+ private emit;
1145
+ }
1146
+ declare function getToolRiskLevel(toolName: string): "low" | "medium" | "high";
1147
+ interface TraceGraphNode {
1148
+ id: string;
1149
+ kind: "thread" | "turn" | "model" | "tool" | "diff" | "error";
1150
+ label: string;
1151
+ timestamp: string;
1152
+ metadata?: Record<string, unknown>;
1153
+ }
1154
+ interface TraceGraphEdge {
1155
+ from: string;
1156
+ to: string;
1157
+ kind: "contains" | "emits" | "calls" | "produces" | "fails";
1158
+ }
1159
+ interface TraceGraph {
1160
+ traceId: string;
1161
+ createdAt: string;
1162
+ nodes: TraceGraphNode[];
1163
+ edges: TraceGraphEdge[];
1164
+ events: XenoRuntimeEvent[];
1165
+ }
1166
+ declare class XenoTraceGraphRecorder {
1167
+ private readonly traceId;
1168
+ private readonly createdAt;
1169
+ private readonly events;
1170
+ private readonly nodes;
1171
+ private readonly edges;
1172
+ private lastTurnId?;
1173
+ private lastToolNodeId?;
1174
+ constructor(traceId: string);
1175
+ record(event: XenoRuntimeEvent): void;
1176
+ toGraph(): TraceGraph;
1177
+ private addNode;
1178
+ private addEdge;
1179
+ }
1180
+ type UnifiedExecStatus = "running" | "exited" | "failed" | "terminated";
1181
+ type UnifiedExecStream = "stdout" | "stderr";
1182
+ interface UnifiedExecStartOptions {
1183
+ cwd?: string;
1184
+ env?: Record<string, string | undefined>;
1185
+ timeoutMs?: number;
1186
+ maxOutputBytes?: number;
1187
+ }
1188
+ interface UnifiedExecProcess {
1189
+ id: string;
1190
+ command: string;
1191
+ pid?: number;
1192
+ cwd: string;
1193
+ status: UnifiedExecStatus;
1194
+ startedAt: string;
1195
+ endedAt?: string;
1196
+ exitCode?: number | null;
1197
+ signal?: NodeJS.Signals | null;
1198
+ outputBytes: number;
1199
+ }
1200
+ interface UnifiedExecOutput {
1201
+ process: UnifiedExecProcess;
1202
+ output: string;
1203
+ totalBytes: number;
1204
+ truncated: boolean;
1205
+ omittedBytes: number;
1206
+ }
1207
+ interface UnifiedExecOutputChunk {
1208
+ id: number;
1209
+ stream: UnifiedExecStream;
1210
+ text: string;
1211
+ bytes: number;
1212
+ timestamp: string;
1213
+ }
1214
+ interface UnifiedExecReadDeltaOptions {
1215
+ maxChunks?: number;
1216
+ maxBytes?: number;
1217
+ }
1218
+ interface UnifiedExecOutputDelta {
1219
+ process: UnifiedExecProcess;
1220
+ cursor: number;
1221
+ nextCursor: number;
1222
+ earliestCursor: number;
1223
+ chunks: UnifiedExecOutputChunk[];
1224
+ text: string;
1225
+ bytes: number;
1226
+ missedChunks: number;
1227
+ hasMore: boolean;
1228
+ }
1229
+ declare class UnifiedExecManager {
1230
+ private readonly processes;
1231
+ start(command: string, options?: UnifiedExecStartOptions): UnifiedExecProcess;
1232
+ writeStdin(processId: string, text: string): boolean;
1233
+ readOutput(processId: string): UnifiedExecOutput | null;
1234
+ readOutputDelta(processId: string, cursor?: number, options?: UnifiedExecReadDeltaOptions): UnifiedExecOutputDelta | null;
1235
+ terminate(processId: string): boolean;
1236
+ list(): UnifiedExecProcess[];
1237
+ private pruneProcessIfNeeded;
1238
+ }
1239
+ declare const unifiedExecManager: UnifiedExecManager;
1240
+ declare class TranscriptWriter {
1241
+ private sessionDir;
1242
+ private sessionId;
1243
+ private transcriptPath;
1244
+ private markdownPath;
1245
+ private workspaceMarkdownPath;
1246
+ private markdownHeaderWritten;
1247
+ private workspaceHeaderWritten;
1248
+ private workspaceMirrorDisabled;
1249
+ private sequence;
1250
+ private writeQueue;
1251
+ private pendingWrites;
1252
+ constructor(sessionDir: string);
1253
+ append(event: Omit<TranscriptEvent, "id" | "timestamp" | "sequence">): Promise<string>;
1254
+ private stringify;
1255
+ private formatMessageContent;
1256
+ private formatEventMarkdown;
1257
+ private ensureMarkdownHeader;
1258
+ private resolveWorkspaceMarkdownPath;
1259
+ private appendMarkdownEvent;
1260
+ private buildMarkdownDocument;
1261
+ read(options?: {
1262
+ types?: TranscriptEventType[];
1263
+ limit?: number;
1264
+ offset?: number;
1265
+ }): Promise<TranscriptEvent[]>;
1266
+ private isMessageData;
1267
+ getMessages(): Promise<Message[]>;
1268
+ replaceMessages(messages: Message[]): Promise<void>;
1269
+ truncateAfterMessageCount(messageCount: number): Promise<void>;
1270
+ getSequence(): number;
1271
+ initialize(): Promise<void>;
1272
+ flush(): Promise<void>;
1273
+ }
1274
+ declare class CheckpointManager {
1275
+ private sessionDir;
1276
+ private checkpointsDir;
1277
+ private autoInterval;
1278
+ private lastCheckpointMessageCount;
1279
+ constructor(sessionDir: string, options?: {
1280
+ autoInterval?: number;
1281
+ });
1282
+ initialize(): Promise<void>;
1283
+ create(options: {
1284
+ trigger: CheckpointTrigger;
1285
+ messages: Message[];
1286
+ description?: string;
1287
+ }): Promise<CheckpointInfo>;
1288
+ list(): Promise<CheckpointInfo[]>;
1289
+ restore(checkpointId: string): Promise<{
1290
+ messages: Message[];
1291
+ info: CheckpointInfo;
1292
+ }>;
1293
+ shouldAutoCheckpoint(currentMessageCount: number): boolean;
1294
+ static isDangerousOperation(toolName: string, input: unknown): boolean;
1295
+ delete(checkpointId: string): Promise<void>;
1296
+ private estimateTokens;
1297
+ }
1298
+ interface SessionCreateOptions {
1299
+ role?: string;
1300
+ parentSession?: string;
1301
+ workingDirectory: string;
1302
+ model: string;
1303
+ }
1304
+ interface SessionResumeOptions {
1305
+ sessionId: string;
1306
+ fromCheckpoint?: string;
1307
+ }
1308
+ declare class SessionManager {
1309
+ private sessionDir;
1310
+ private _meta;
1311
+ private _transcript;
1312
+ private _checkpoints;
1313
+ private _lock;
1314
+ private constructor();
1315
+ static create(options: SessionCreateOptions): Promise<SessionManager>;
1316
+ static resume(options: SessionResumeOptions): Promise<SessionManager>;
1317
+ get meta(): SessionMeta;
1318
+ get transcript(): TranscriptWriter;
1319
+ get checkpoints(): CheckpointManager;
1320
+ updateMeta(partial: Partial<SessionMeta>): Promise<void>;
1321
+ end(status?: "completed" | "abandoned"): Promise<void>;
1322
+ recordUserMessage(content: string): Promise<void>;
1323
+ recordAssistantMessage(content: string | ContentBlock[] | ToolResultBlock[], tokenCount?: number): Promise<void>;
1324
+ recordTokenUsage(input: number, output: number): Promise<void>;
1325
+ recordDelegationSummary(data: DelegationSummaryData): Promise<void>;
1326
+ updateMessageCount(count: number): Promise<void>;
1327
+ }
1328
+ declare function readSessionFormatVersion(meta: {
1329
+ formatVersion?: number;
1330
+ } | null | undefined): number;
1331
+ interface ApiTextContentBlock {
1332
+ type: "text";
1333
+ text: string;
1334
+ }
1335
+ interface ApiToolUseContentBlock {
1336
+ type: "tool_use";
1337
+ id: string;
1338
+ name: string;
1339
+ input: Record<string, unknown>;
1340
+ }
1341
+ interface ApiToolResultContentBlock {
1342
+ type: "tool_result";
1343
+ tool_use_id: string;
1344
+ content: ToolResultContent;
1345
+ assistant_content?: ToolAssistantContentBlock[];
1346
+ assistant_only_content?: ToolAssistantContentBlock[];
1347
+ is_error?: boolean;
1348
+ }
1349
+ type ApiMessage = {
1350
+ role: "user" | "assistant";
1351
+ content: string | Array<ApiTextContentBlock | ApiToolUseContentBlock | ApiToolResultContentBlock>;
1352
+ };
1353
+ type XenoChatMessage = {
1354
+ role: "system" | "user" | "assistant" | "tool";
1355
+ content: string | null | Array<{
1356
+ type: "text";
1357
+ text: string;
1358
+ } | {
1359
+ type: "image_url";
1360
+ image_url: {
1361
+ url: string;
1362
+ detail?: "auto" | "low" | "high";
1363
+ };
1364
+ }>;
1365
+ tool_call_id?: string;
1366
+ tool_calls?: Array<{
1367
+ id: string;
1368
+ type: "function";
1369
+ function: {
1370
+ name: string;
1371
+ arguments: string;
1372
+ };
1373
+ }>;
1374
+ };
1375
+ interface StreamResult {
1376
+ content: ContentBlock[];
1377
+ stopReason: "end_turn" | "tool_use" | "max_tokens" | "stop_sequence";
1378
+ inputTokens: number;
1379
+ outputTokens: number;
1380
+ }
1381
+ interface ApiRequestFailureDiagnostics {
1382
+ model: string;
1383
+ requestUrl: string;
1384
+ stream: boolean;
1385
+ messageCount: number;
1386
+ toolCount: number;
1387
+ requestBytes: number;
1388
+ promptTokenEstimate: number;
1389
+ statusCode?: number;
1390
+ requestId?: string;
1391
+ cfRay?: string;
1392
+ retryAfterMs?: number;
1393
+ detailPreview?: string;
1394
+ errorMessage?: string;
1395
+ }
1396
+ interface LlmClientDeps {
1397
+ readonly baseURL: string;
1398
+ readonly ollamaBaseUrl: string;
1399
+ readonly apiKey?: string;
1400
+ readonly maxTokens: number;
1401
+ getApiRequestTimeoutMs(): number;
1402
+ buildRuntimeSystemPrompt(): string;
1403
+ reportFailure(diagnostics: ApiRequestFailureDiagnostics): Promise<void>;
1404
+ }
1405
+ declare class LlmClient {
1406
+ private readonly deps;
1407
+ private ollamaMode;
1408
+ constructor(deps: LlmClientDeps);
1409
+ readonly id = "xeno-llm-client";
1410
+ complete(model: string, messages: ApiMessage[], tools: ToolDefinition[], onText?: (text: string) => void, signal?: AbortSignal): Promise<StreamResult>;
1411
+ completeLocal(model: string, messages: ApiMessage[], tools: ToolDefinition[], onText?: (text: string) => void, signal?: AbortSignal): Promise<StreamResult>;
1412
+ toOllamaMessages(apiMessages: ApiMessage[]): Array<{
1413
+ role: "system" | "user" | "assistant" | "tool";
1414
+ content: string;
1415
+ tool_call_id?: string;
1416
+ tool_calls?: Array<{
1417
+ id: string;
1418
+ type: "function";
1419
+ function: {
1420
+ name: string;
1421
+ arguments: string;
1422
+ };
1423
+ }>;
1424
+ }>;
1425
+ toXenoMessages(apiMessages: ApiMessage[], options?: {
1426
+ allowImages?: boolean;
1427
+ }): XenoChatMessage[];
1428
+ private buildStructuredToolContextMessage;
1429
+ private modelSupportsImageInputs;
1430
+ private describeSuppressedImageBlock;
1431
+ getChatCompletionsBaseUrl(): string;
1432
+ private condenseToolResultForModel;
1433
+ buildXenoToolDefinitions(tools: ToolDefinition[]): Array<{
1434
+ type: "function";
1435
+ function: {
1436
+ name: string;
1437
+ description: string;
1438
+ parameters: ToolDefinition["input_schema"];
1439
+ };
1440
+ }>;
1441
+ private buildChatCompletionsRequestBody;
1442
+ private parseXenoCompletion;
1443
+ static parseRetryAfterSeconds(value: string | null): number | undefined;
1444
+ private static getHeaderValue;
1445
+ private static stripHtml;
1446
+ private static summarizeErrorBody;
1447
+ private createApiRequestSignal;
1448
+ callChatCompletionsNonStream(model: string, apiMessages: ApiMessage[], tools: ToolDefinition[], onText?: (text: string) => void, signal?: AbortSignal): Promise<StreamResult>;
1449
+ callChatCompletions(model: string, apiMessages: ApiMessage[], tools: ToolDefinition[], onText?: (text: string) => void, signal?: AbortSignal): Promise<StreamResult>;
1450
+ callOllama(model: string, apiMessages: ApiMessage[], tools: ToolDefinition[], onText?: (text: string) => void, signal?: AbortSignal): Promise<StreamResult>;
1451
+ private callOllamaOpenAI;
1452
+ private callOllamaNative;
1453
+ }
1454
+ interface ToolMiddlewareContext {
1455
+ readonly toolName: string;
1456
+ readonly toolCallId: string;
1457
+ input: Record<string, unknown>;
1458
+ readonly iteration: number;
1459
+ readonly traceId: string;
1460
+ readonly signal: AbortSignal;
1461
+ addGuidance(text: string): void;
1462
+ }
1463
+ type ToolMiddleware = (ctx: ToolMiddlewareContext, next: () => Promise<ToolResult>) => Promise<ToolResult>;
1464
+ declare class ToolMiddlewareRegistry {
1465
+ private readonly middlewares;
1466
+ use(middleware: ToolMiddleware): this;
1467
+ useAll(middlewares: readonly ToolMiddleware[]): this;
1468
+ get size(): number;
1469
+ list(): readonly ToolMiddleware[];
1470
+ run(base: Omit<ToolMiddlewareContext, "addGuidance">, core: () => Promise<ToolResult>): Promise<ToolResult>;
1471
+ }
1472
+ declare function appendGuidanceToResult(result: ToolResult, guidance: readonly string[]): ToolResult;
1473
+ interface PromptSectionContext {
1474
+ readonly systemPrompt: string;
1475
+ readonly taskPrompt?: string;
1476
+ readonly iteration: number;
1477
+ readonly model: string;
1478
+ }
1479
+ interface PromptSectionProvider {
1480
+ name: string;
1481
+ order?: number;
1482
+ provide(ctx: PromptSectionContext): string | null | undefined;
1483
+ }
1484
+ declare const DEFAULT_PROMPT_SECTIONS_TOKEN_BUDGET = 4000;
1485
+ declare class PromptSectionRegistry {
1486
+ private readonly sections;
1487
+ private seqCounter;
1488
+ private tokenBudget;
1489
+ constructor(tokenBudget?: number);
1490
+ register(provider: PromptSectionProvider): this;
1491
+ unregister(name: string): boolean;
1492
+ get size(): number;
1493
+ setTokenBudget(tokens: number): void;
1494
+ orderedNames(): string[];
1495
+ private ordered;
1496
+ build(ctx: PromptSectionContext): string;
1497
+ }
1498
+ type CompletionGuardStopReason = "end_turn" | "tool_use" | "max_tokens" | "stop_sequence" | "empty_response" | "progress_checkpoint";
1499
+ interface CompletionGuardTurnStats {
1500
+ readonly iteration: number;
1501
+ readonly maxIterations: number;
1502
+ readonly toolCalls: number;
1503
+ readonly toolFailures: number;
1504
+ readonly failuresByTool: Readonly<Record<string, number>>;
1505
+ }
1506
+ interface CompletionGuardEvaluationContext {
1507
+ readonly finalText: string;
1508
+ readonly iteration: number;
1509
+ readonly maxIterations: number;
1510
+ readonly messages: Message[];
1511
+ readonly stopReason: CompletionGuardStopReason;
1512
+ readonly stats: CompletionGuardTurnStats;
1513
+ }
1514
+ type CompletionGuardDecision = {
1515
+ allow: true;
1516
+ } | {
1517
+ allow: false;
1518
+ guidance: string;
1519
+ stop?: boolean;
1520
+ };
1521
+ interface CompletionGuard {
1522
+ name: string;
1523
+ order?: number;
1524
+ evaluate(ctx: CompletionGuardEvaluationContext): CompletionGuardDecision | null | undefined | Promise<CompletionGuardDecision | null | undefined>;
1525
+ }
1526
+ interface CompletionGuardVeto {
1527
+ guidance: string;
1528
+ stop: boolean;
1529
+ guardName: string;
1530
+ }
1531
+ declare class CompletionGuardRegistry {
1532
+ private readonly guards;
1533
+ private seqCounter;
1534
+ register(guard: CompletionGuard): this;
1535
+ unregister(name: string): boolean;
1536
+ get size(): number;
1537
+ orderedNames(): string[];
1538
+ private ordered;
1539
+ evaluate(ctx: CompletionGuardEvaluationContext): Promise<CompletionGuardVeto | null>;
1540
+ }
1541
+ type LLMProviderMessage = ApiMessage;
1542
+ type LLMCompletionResult = StreamResult;
1543
+ interface LLMProviderCapabilities {
1544
+ readonly streaming?: boolean;
1545
+ readonly tools?: boolean;
1546
+ readonly vision?: boolean;
1547
+ readonly [capability: string]: boolean | undefined;
1548
+ }
1549
+ interface LLMProvider {
1550
+ readonly id: string;
1551
+ readonly model?: string;
1552
+ readonly capabilities?: LLMProviderCapabilities;
1553
+ complete(model: string, messages: LLMProviderMessage[], tools: ToolDefinition[], onText?: (text: string) => void, signal?: AbortSignal): Promise<LLMCompletionResult>;
1554
+ completeLocal?(model: string, messages: LLMProviderMessage[], tools: ToolDefinition[], onText?: (text: string) => void, signal?: AbortSignal): Promise<LLMCompletionResult>;
1555
+ }
1556
+ declare function toLLMProvider(source: DualLLMProviderLike, options?: {
1557
+ id?: string;
1558
+ model?: string;
1559
+ }): LLMProvider;
1560
+ interface DualLLMProviderLike {
1561
+ chat(params: {
1562
+ messages: Array<{
1563
+ role: "system" | "user" | "assistant";
1564
+ content: string;
1565
+ }>;
1566
+ model?: string;
1567
+ }): Promise<{
1568
+ content: string;
1569
+ usage?: {
1570
+ promptTokens: number;
1571
+ completionTokens: number;
1572
+ };
1573
+ }>;
1574
+ chatStream(params: {
1575
+ messages: Array<{
1576
+ role: "system" | "user" | "assistant";
1577
+ content: string;
1578
+ }>;
1579
+ model?: string;
1580
+ }): AsyncIterable<string>;
1581
+ }
1582
+ declare class AgentInterruptedError extends Error {
1583
+ constructor(message?: string);
1584
+ }
1585
+ interface ModeSwitchRequest {
1586
+ from: ExecutionMode;
1587
+ to: ExecutionMode;
1588
+ requestedTools: string[];
1589
+ reason: string;
1590
+ }
1591
+ interface AgentLoopConfig {
1592
+ apiKey?: string;
1593
+ baseURL: string;
1594
+ ollamaBaseURL?: string;
1595
+ model: string;
1596
+ maxTokens: number;
1597
+ maxIterations: number;
1598
+ systemPrompt: string;
1599
+ requesterLabel?: string;
1600
+ executionMode?: ExecutionMode;
1601
+ permissionEngine: PermissionEngine;
1602
+ toolRegistry?: ToolRegistry;
1603
+ onText?: (text: string) => void;
1604
+ onToolStart?: (name: string, input: Record<string, unknown>) => void;
1605
+ onToolWillExecute?: (name: string, input: Record<string, unknown>) => void | Promise<void>;
1606
+ onToolEnd?: (name: string, result: ToolResult) => void;
1607
+ onIteration?: (iteration: number, totalTokens: number) => void;
1608
+ onError?: (error: Error, context: string) => void;
1609
+ onTranscriptError?: (error: Error, context: string) => void;
1610
+ onModeSwitchRequest?: (request: ModeSwitchRequest) => Promise<boolean>;
1611
+ onExecutionModeChanged?: (mode: ExecutionMode, reason: string) => void;
1612
+ onContextCompressed?: (messagesRemoved: number, tokensSaved: number) => void;
1613
+ onRuntimeEvent?: XenoRuntimeEventSink;
1614
+ runtimeEventBus?: XenoRuntimeEventBus;
1615
+ turnDiffTracker?: TurnDiffTracker;
1616
+ completionGuard?: (context: CompletionGuardContext) => Promise<CompletionGuardResult | null> | CompletionGuardResult | null;
1617
+ maxCompletionGuardReminders?: number;
1618
+ progressGuardEveryIterations?: number;
1619
+ apiRequestTimeoutMs?: number;
1620
+ runStartedAtMs?: number;
1621
+ externalTimeoutMs?: number;
1622
+ apiDeadlineFinalBufferMs?: number;
1623
+ backgroundTaskDrainMaxWaitMs?: number;
1624
+ backgroundTaskDrainPollIntervalMs?: number;
1625
+ backgroundTaskDrainExtraIterations?: number;
1626
+ sandbox?: AgentSandbox;
1627
+ onPermissionRequest?: (context: PermissionRequestContext) => Promise<PermissionRequestResult> | PermissionRequestResult;
1628
+ toolMiddleware?: ToolMiddleware[];
1629
+ promptSections?: PromptSectionProvider[];
1630
+ promptSectionsTokenBudget?: number;
1631
+ completionGuards?: CompletionGuard[];
1632
+ provider?: LLMProvider;
1633
+ transcript?: TranscriptWriter;
1634
+ checkpoints?: CheckpointManager;
1635
+ sessionManager?: SessionManager;
1636
+ autoCheckpointInterval?: number;
1637
+ maxContextTokens?: number;
1638
+ historyMarkdownPath?: string;
1639
+ compressionKeepRecentMessages?: number;
1640
+ auditLogger?: AuditLogger;
1641
+ }
1642
+ interface CompletionGuardContext {
1643
+ finalText: string;
1644
+ iteration: number;
1645
+ messages: Message[];
1646
+ stopReason: StreamResult["stopReason"] | "empty_response" | "progress_checkpoint";
1647
+ }
1648
+ interface RunStreamOptions {
1649
+ signal?: AbortSignal;
1650
+ }
1651
+ interface CompletionGuardResultObject {
1652
+ message: string;
1653
+ blocking?: boolean;
1654
+ stop?: boolean;
1655
+ toolPolicy?: CompletionGuardToolPolicy;
1656
+ }
1657
+ type CompletionGuardResult = string | CompletionGuardResultObject;
1658
+ type CompletionGuardToolPolicyMode = "require_output_checkpoint";
1659
+ interface CompletionGuardToolPolicy {
1660
+ mode: CompletionGuardToolPolicyMode;
1661
+ requiredOutputPaths?: string[];
1662
+ message?: string;
1663
+ }
1664
+ type AgentRunTerminationStatus = "completed" | "incomplete" | "interrupted" | "error";
1665
+ type AgentRunTerminationReason = "end_turn" | "empty_response" | "max_tokens" | "completion_guard_stop" | "max_iterations" | "interrupted" | "error";
1666
+ interface AgentRunTermination {
1667
+ status: AgentRunTerminationStatus;
1668
+ reason: AgentRunTerminationReason;
1669
+ iteration: number;
1670
+ maxIterations: number;
1671
+ finalStateVerified: boolean;
1672
+ message: string;
1673
+ }
1674
+ interface SessionIntegrationConfig {
1675
+ transcript?: TranscriptWriter;
1676
+ checkpoints?: CheckpointManager;
1677
+ sessionManager?: SessionManager;
1678
+ historyMarkdownPath?: string;
1679
+ auditLogger?: AuditLogger;
1680
+ }
1681
+ declare class AgentLoop {
1682
+ private config;
1683
+ private toolRegistry;
1684
+ private _messages;
1685
+ private totalInputTokens;
1686
+ private totalOutputTokens;
1687
+ private lastCheckpointMessageCount;
1688
+ private ollamaBaseUrl;
1689
+ private activeAbortController;
1690
+ private interruptionRequested;
1691
+ private currentTraceId;
1692
+ private lastRunTraceId;
1693
+ private lastRunTerminationInfo;
1694
+ private activeTaskPrompt;
1695
+ private activeToolPolicy;
1696
+ private apiFailureDiagnosticsLogged;
1697
+ private readonly runtimeEventBus;
1698
+ private readonly threadId;
1699
+ private readonly turnDiffTracker?;
1700
+ private readonly llm;
1701
+ private readonly messageFlow;
1702
+ private readonly middleware;
1703
+ private readonly promptSections;
1704
+ private readonly completionGuards;
1705
+ private turnToolCalls;
1706
+ private turnToolFailures;
1707
+ private turnFailuresByTool;
1708
+ private turnIteration;
1709
+ constructor(config: AgentLoopConfig);
1710
+ get tokenUsage(): {
1711
+ input: number;
1712
+ output: number;
1713
+ total: number;
1714
+ };
1715
+ get lastTraceId(): string | null;
1716
+ get lastRunTermination(): AgentRunTermination | null;
1717
+ get model(): string;
1718
+ set model(value: string);
1719
+ get executionMode(): ExecutionMode;
1720
+ set executionMode(value: ExecutionMode);
1721
+ get systemPrompt(): string;
1722
+ set systemPrompt(value: string);
1723
+ use(middleware: ToolMiddleware): this;
1724
+ registerPromptSection(provider: PromptSectionProvider): this;
1725
+ registerCompletionGuard(guard: CompletionGuard): this;
1726
+ attachSessionIntegration(config: SessionIntegrationConfig): void;
1727
+ cancelCurrentTurn(): boolean;
1728
+ private emitRuntimeEvent;
1729
+ private handleTextDelta;
1730
+ private handleContextCompressed;
1731
+ private isAbortError;
1732
+ private toolRiskLevel;
1733
+ private isParallelSafeTool;
1734
+ private pathAliasesForToolPolicy;
1735
+ private toolPolicyMentionsRequiredPath;
1736
+ private toolPolicyTargetsRequiredPath;
1737
+ private bashCommandCanCreateRequiredOutput;
1738
+ private toolCallSatisfiesToolPolicy;
1739
+ private maybeBlockActiveToolPolicy;
1740
+ private getCompressedSourceSizeLimit;
1741
+ private isSourceLikePath;
1742
+ private isBinaryReimplementationContractTask;
1743
+ private getOriginalBinaryAliases;
1744
+ private textMentionsOriginalBinary;
1745
+ private sourceContainsOriginalBinaryBypass;
1746
+ private sourceGenerationCommandContainsOriginalBinaryBypass;
1747
+ private buildSourceIndependenceBlock;
1748
+ private maybeBlockSourceIndependenceViolation;
1749
+ private maybeBlockKnownInvalidWrite;
1750
+ private maybeBlockKnownInvalidBashSourceGeneration;
1751
+ private recordToolEventsToTranscript;
1752
+ protected callChatCompletions(model: string, apiMessages: ApiMessage[], tools: ToolDefinition[], onText?: (text: string) => void, signal?: AbortSignal): Promise<StreamResult>;
1753
+ protected callOllama(model: string, apiMessages: ApiMessage[], tools: ToolDefinition[], onText?: (text: string) => void, signal?: AbortSignal): Promise<StreamResult>;
1754
+ protected toXenoMessages(apiMessages: ApiMessage[]): ReturnType<LlmClient["toXenoMessages"]>;
1755
+ protected toOllamaMessages(apiMessages: ApiMessage[]): ReturnType<LlmClient["toOllamaMessages"]>;
1756
+ private executeToolCall;
1757
+ private recordTurnToolStats;
1758
+ private currentTurnStats;
1759
+ private appendAuditEvent;
1760
+ private setExecutionModeInternal;
1761
+ private maybeAppendApiRequestFailureAudit;
1762
+ private static parsePositiveInteger;
1763
+ private sleep;
1764
+ private getApiDeadlineFinalBufferMs;
1765
+ private getExternalDeadlineMs;
1766
+ private getBackgroundTaskDrainMaxWaitMs;
1767
+ private getBackgroundTaskDrainPollIntervalMs;
1768
+ private getBackgroundTaskDrainExtraIterations;
1769
+ private getBackgroundTaskDrainBudgetMs;
1770
+ private getDrainableBackgroundTasks;
1771
+ private summarizeBackgroundTaskSnapshot;
1772
+ private maybeDrainBackgroundTasksAtIterationBudget;
1773
+ private getApiRequestTimeoutMs;
1774
+ private createApiRequestSignal;
1775
+ private buildRuntimeSystemPrompt;
1776
+ get messages(): Message[];
1777
+ set messages(value: Message[]);
1778
+ private shouldAutoCheckpoint;
1779
+ private getApiMessagesForRequest;
1780
+ private appendSyntheticUserMessage;
1781
+ run(userMessage: string): Promise<string>;
1782
+ runStream(prompt: string, options?: RunStreamOptions): AsyncIterable<XenoRuntimeEvent>;
1783
+ private createRuntimeEventIterator;
1784
+ private runInternal;
1785
+ clearHistory(): void;
1786
+ }
1787
+ interface MessageFlowDeps {
1788
+ getMessages(): Message[];
1789
+ readonly model: string;
1790
+ readonly maxContextTokens?: number;
1791
+ readonly compressionKeepRecentMessages?: number;
1792
+ readonly historyMarkdownPath?: string;
1793
+ buildRuntimeSystemPrompt(): string;
1794
+ onContextCompressed(messagesRemoved: number, tokensSaved: number): Promise<void>;
1795
+ }
1796
+ declare class MessageFlow {
1797
+ private readonly deps;
1798
+ private lastCompressionSignature;
1799
+ constructor(deps: MessageFlowDeps);
1800
+ reset(): void;
1801
+ messageToPlainText(message: Message): string;
1802
+ estimateConversationTokens(messages: Message[]): number;
1803
+ toApiMessages(messages: Message[]): ApiMessage[];
1804
+ estimateXenoRequestBytes(apiMessages: ApiMessage[]): number;
1805
+ pruneExcessImageToolContexts(apiMessages: ApiMessage[]): ApiMessage[];
1806
+ private buildCompressionSummary;
1807
+ private adjustRemovedCountForToolBoundary;
1808
+ getApiMessagesForRequest(): Promise<ApiMessage[]>;
1809
+ }
1810
+ interface CodingBenchmarkOptions {
1811
+ cwd?: string;
1812
+ iterations?: number;
1813
+ fileCount?: number;
1814
+ linesPerFile?: number;
1815
+ }
1816
+ interface CodingBenchmarkMeasurement {
1817
+ name: string;
1818
+ samplesMs: number[];
1819
+ minMs: number;
1820
+ avgMs: number;
1821
+ p95Ms: number;
1822
+ maxMs: number;
1823
+ }
1824
+ interface CodingBenchmarkThreshold {
1825
+ avgMs: number;
1826
+ p95Ms: number;
1827
+ }
1828
+ interface CodingBenchmarkAssessment {
1829
+ name: string;
1830
+ status: "pass" | "warn" | "fail";
1831
+ avgMs: number;
1832
+ p95Ms: number;
1833
+ avgThresholdMs: number;
1834
+ p95ThresholdMs: number;
1835
+ reasons: string[];
1836
+ }
1837
+ interface CodingBenchmarkReport {
1838
+ generatedAt: string;
1839
+ cwd: string;
1840
+ iterations: number;
1841
+ fileCount: number;
1842
+ linesPerFile: number;
1843
+ measurements: CodingBenchmarkMeasurement[];
1844
+ status: "pass" | "warn" | "fail";
1845
+ assessments: CodingBenchmarkAssessment[];
1846
+ warnings: string[];
1847
+ failures: string[];
1848
+ }
1849
+ declare function benchmarkCodingTools(options?: CodingBenchmarkOptions): Promise<CodingBenchmarkReport>;
1850
+ declare function renderCodingBenchmarkReport(report: CodingBenchmarkReport): string;
1851
+ declare function renderCodingBenchmarkMarkdown(report: CodingBenchmarkReport): string;
1852
+ interface PromptContext {
1853
+ cwd: string;
1854
+ model: string;
1855
+ date: string;
1856
+ identity?: ResolvedIdentity;
1857
+ memory?: string;
1858
+ sessionId?: string;
1859
+ executionMode?: ExecutionMode;
1860
+ }
1861
+ declare function buildSystemPrompt(ctx: PromptContext): string;
1862
+ type CompressionLLMFn = (systemPrompt: string, messages: Message[]) => Promise<string>;
1863
+ interface ContextManagerConfig {
1864
+ maxContextTokens?: number;
1865
+ compressionThreshold?: number;
1866
+ keepRecentMessages?: number;
1867
+ onCompressed?: (stats: CompressionStats) => void;
1868
+ }
1869
+ interface CompressionStats {
1870
+ originalMessageCount: number;
1871
+ compressedMessageCount: number;
1872
+ originalTokens: number;
1873
+ compressedTokens: number;
1874
+ tokensSaved: number;
1875
+ }
1876
+ declare class ContextManager {
1877
+ private maxContextTokens;
1878
+ private compressionThreshold;
1879
+ private keepRecentMessages;
1880
+ private onCompressed?;
1881
+ constructor(config?: ContextManagerConfig);
1882
+ estimateTokens(messages: Message[]): number;
1883
+ needsCompression(messages: Message[]): boolean;
1884
+ compress(messages: Message[], llmCompress?: CompressionLLMFn): Promise<Message[]>;
1885
+ private buildSimpleSummary;
1886
+ private extractPlainText;
1887
+ }
1888
+ interface ScoredMemory {
1889
+ memory: MemoryEntry;
1890
+ score: number;
1891
+ }
1892
+ declare function scoreMemories(memories: MemoryEntry[], currentMessage: string, maxResults?: number): ScoredMemory[];
1893
+ interface BackgroundTask {
1894
+ id: string;
1895
+ command: string;
1896
+ pid: number;
1897
+ status: "running" | "completed" | "failed" | "killed";
1898
+ exitCode: number | null;
1899
+ startedAt: number;
1900
+ endedAt: number | null;
1901
+ cwd: string;
1902
+ outputFile: string;
1903
+ outputSize: number;
1904
+ lastObservedAt: number;
1905
+ lastOutputAt: number;
1906
+ lastObservedOutputSize: number;
1907
+ pollCount: number;
1908
+ unchangedPollCount: number;
1909
+ }
1910
+ type TaskCompletionCallback = (task: BackgroundTask) => void;
1911
+ interface BackgroundTaskOutput {
1912
+ output: string;
1913
+ bytesRead: number;
1914
+ totalSize: number;
1915
+ status: BackgroundTask["status"];
1916
+ exitCode: number | null;
1917
+ command: string;
1918
+ elapsedMs: number;
1919
+ idleMs: number;
1920
+ outputDeltaBytes: number;
1921
+ pollCount: number;
1922
+ unchangedPollCount: number;
1923
+ nextOffset: number;
1924
+ lastLines: string[];
1925
+ progressState: "active" | "idle" | "stalled" | "finished";
1926
+ suggestedNextAction: string;
1927
+ }
1928
+ declare class BackgroundProcessManager {
1929
+ private tasks;
1930
+ private processes;
1931
+ private counter;
1932
+ private taskDir;
1933
+ private onComplete;
1934
+ private cleanupRegistered;
1935
+ constructor(taskDir?: string);
1936
+ private ensureDir;
1937
+ private registerCleanup;
1938
+ onTaskComplete(cb: TaskCompletionCallback): void;
1939
+ spawn(command: string, options?: {
1940
+ cwd?: string;
1941
+ env?: NodeJS.ProcessEnv;
1942
+ timeout?: number;
1943
+ }): string;
1944
+ getOutput(taskId: string, offset?: number): BackgroundTaskOutput | null;
1945
+ private buildOutputSnapshot;
1946
+ private getProgressState;
1947
+ private extractLastLines;
1948
+ private getSuggestedNextAction;
1949
+ stop(taskId: string): boolean;
1950
+ list(): BackgroundTask[];
1951
+ get(taskId: string): BackgroundTask | null;
1952
+ shouldDrainAtIterationBudget(task: BackgroundTask): boolean;
1953
+ killAll(): void;
1954
+ private shouldPreserveForVerifier;
1955
+ formatDuration(ms: number): string;
1956
+ }
1957
+ declare const backgroundProcessManager: BackgroundProcessManager;
1958
+ declare class AutoCheckpointHandler {
1959
+ private checkpointManager;
1960
+ private lastCheckpointAt;
1961
+ constructor(checkpointManager: CheckpointManager);
1962
+ checkInterval(messages: Message[]): Promise<boolean>;
1963
+ checkBeforeDangerous(toolName: string, input: unknown, messages: Message[]): Promise<boolean>;
1964
+ }
1965
+ interface DelegationBudget {
1966
+ maxTokens: number;
1967
+ timeoutMs: number;
1968
+ }
1969
+ interface SubagentTask {
1970
+ id: string;
1971
+ role: string;
1972
+ prompt: string;
1973
+ budget: DelegationBudget;
1974
+ }
1975
+ interface SubagentResult {
1976
+ id: string;
1977
+ role: string;
1978
+ status: "ok" | "error" | "timeout";
1979
+ output: string;
1980
+ tokensUsed: number;
1981
+ error?: string;
1982
+ }
1983
+ interface DelegationLimits {
1984
+ maxBranches: number;
1985
+ maxTotalTokens: number;
1986
+ maxWallClockMs: number;
1987
+ maxConcurrentBranches?: number;
1988
+ }
1989
+ declare function resolveDelegatedExecutionMode(parentMode: ExecutionMode, _role: string): ExecutionMode;
1990
+ declare function validateDelegationPlan(tasks: SubagentTask[], limits: DelegationLimits): void;
1991
+ declare function runDelegationPlan(tasks: SubagentTask[], executeTask: (task: SubagentTask, signal: AbortSignal) => Promise<SubagentResult>, limits: DelegationLimits): Promise<SubagentResult[]>;
1992
+ interface ReducerOptions {
1993
+ rolePrecedence?: string[];
1994
+ }
1995
+ interface ReducedResult {
1996
+ finalAnswer: string;
1997
+ selectedFrom: {
1998
+ id: string;
1999
+ role: string;
2000
+ } | null;
2001
+ confidence: "low" | "medium" | "high";
2002
+ selectionReason?: string;
2003
+ successful: Array<{
2004
+ id: string;
2005
+ role: string;
2006
+ output: string;
2007
+ score?: number;
2008
+ }>;
2009
+ errors: Array<{
2010
+ id: string;
2011
+ role: string;
2012
+ error: string;
2013
+ }>;
2014
+ }
2015
+ declare function deterministicReduce(results: SubagentResult[], options?: ReducerOptions): ReducedResult;
2016
+ type SubagentRole = "planner" | "explorer" | "executor" | "reviewer";
2017
+ type SubagentWorkflowMode = "parallel" | "staged";
2018
+ type SubagentRemoteMcpAccess = "none" | "prompts" | "resources" | "context" | "all";
2019
+ type SubagentTeamPreset = "balanced" | "explore" | "build" | "review";
2020
+ interface SubagentBranchPolicy {
2021
+ mode: SubagentWorkflowMode;
2022
+ roles: SubagentRole[];
2023
+ stages: SubagentRole[][];
2024
+ rolePrecedence: string[];
2025
+ maxConcurrentBranches?: number;
2026
+ includePriorStageContext: boolean;
2027
+ tokenWeights?: Partial<Record<SubagentRole, number>>;
2028
+ remoteMcpByRole?: Partial<Record<SubagentRole, SubagentRemoteMcpAccess>>;
2029
+ teamPreset?: SubagentTeamPreset;
2030
+ }
2031
+ interface SubagentTeamPresetDefinition {
2032
+ preset: SubagentTeamPreset;
2033
+ label: string;
2034
+ description: string;
2035
+ branchPolicy: Omit<Partial<SubagentBranchPolicy>, "teamPreset">;
2036
+ }
2037
+ declare const DEFAULT_SUBAGENT_ROLES: SubagentRole[];
2038
+ declare const DEFAULT_SUBAGENT_ROLE_PRECEDENCE: string[];
2039
+ declare const DEFAULT_SUBAGENT_REMOTE_MCP_BY_ROLE: Record<SubagentRole, SubagentRemoteMcpAccess>;
2040
+ declare const DEFAULT_SUBAGENT_TEAM_PRESET: SubagentTeamPreset;
2041
+ declare const SUBAGENT_ROLE_ALIASES: Record<string, SubagentRole>;
2042
+ declare const SUBAGENT_TEAM_PRESETS: Record<SubagentTeamPreset, SubagentTeamPresetDefinition>;
2043
+ declare const DEFAULT_SUBAGENT_BRANCH_POLICY: SubagentBranchPolicy;
2044
+ interface SubagentExecutionRequest {
2045
+ id: string;
2046
+ role: SubagentRole;
2047
+ prompt: string;
2048
+ maxTokens: number;
2049
+ maxIterations: number;
2050
+ signal?: AbortSignal;
2051
+ }
2052
+ interface SubagentExecutionResponse {
2053
+ output: string;
2054
+ tokensUsed: number;
2055
+ }
2056
+ type SubagentExecuteFn = (request: SubagentExecutionRequest) => Promise<SubagentExecutionResponse>;
2057
+ interface SubagentWorkflowOptions {
2058
+ userPrompt: string;
2059
+ maxTokensPerBranch?: number;
2060
+ maxTotalTokens?: number;
2061
+ maxIterationsPerBranch: number;
2062
+ limits: DelegationLimits;
2063
+ rolePrecedence?: string[];
2064
+ branchPolicy?: Partial<SubagentBranchPolicy>;
2065
+ }
2066
+ interface SubagentWorkflowResult {
2067
+ tasks: SubagentTask[];
2068
+ results: SubagentResult[];
2069
+ reduced: ReducedResult;
2070
+ }
2071
+ interface ResolvedSubagentWorkflowAnswer {
2072
+ answer: string;
2073
+ failureReason?: string;
2074
+ firstError?: string;
2075
+ }
2076
+ declare function coerceSubagentRole(value: string): SubagentRole | null;
2077
+ declare function parseSubagentRoleList(value: string): SubagentRole[] | undefined;
2078
+ declare function coerceSubagentTeamPreset(value: string): SubagentTeamPreset | null;
2079
+ declare function getSubagentTeamPresetDefinition(preset?: SubagentTeamPreset): SubagentTeamPresetDefinition;
2080
+ declare function parseSubagentRemoteMcpPolicy(value: string): Partial<Record<SubagentRole, SubagentRemoteMcpAccess>> | undefined | null;
2081
+ declare function normalizeSubagentBranchPolicy(policy?: Partial<SubagentBranchPolicy>): SubagentBranchPolicy;
2082
+ declare function resolveSubagentRemoteMcpAccess(policy: Pick<SubagentBranchPolicy, "roles" | "remoteMcpByRole">, role: SubagentRole): SubagentRemoteMcpAccess;
2083
+ declare function buildDelegatedRoleSystemPrompt(baseSystemPrompt: string, role: SubagentRole, workspacePath?: string): string;
2084
+ declare function buildDefaultSubagentTasks(userPrompt: string, maxTokensPerBranch: number, branchTimeoutMs: number, roles?: SubagentRole[]): SubagentTask[];
2085
+ declare function summarizeSubagentResults(results: SubagentResult[]): {
2086
+ total: number;
2087
+ ok: number;
2088
+ errors: number;
2089
+ by_role: Record<string, {
2090
+ status: SubagentResult["status"];
2091
+ tokens_used: number;
2092
+ }>;
2093
+ };
2094
+ declare function resolveSubagentWorkflowAnswer(workflow: SubagentWorkflowResult): ResolvedSubagentWorkflowAnswer;
2095
+ declare function runSubagentWorkflow(options: SubagentWorkflowOptions, execute: SubagentExecuteFn): Promise<SubagentWorkflowResult>;
2096
+ interface IdentityLoadResult {
2097
+ layer: IdentityLayer | null;
2098
+ error?: string;
2099
+ }
2100
+ interface IdentityPaths {
2101
+ global: string;
2102
+ project: string;
2103
+ projectLegacy: string;
2104
+ projectInstructions: readonly string[];
2105
+ role: string;
2106
+ }
2107
+ declare const IDENTITY_PATHS: IdentityPaths;
2108
+ interface IdentityLoaderOptions {
2109
+ cwd: string;
2110
+ globalDir?: string;
2111
+ }
2112
+ declare class IdentityLoader {
2113
+ private cwd;
2114
+ private globalDir;
2115
+ private static readonly DESCENDANT_SCAN_IGNORES;
2116
+ constructor(options: IdentityLoaderOptions);
2117
+ loadGlobal(): Promise<IdentityLayer | null>;
2118
+ private collectAncestorDirectories;
2119
+ loadProjectLayers(): Promise<IdentityLayer[]>;
2120
+ loadProject(): Promise<IdentityLayer | null>;
2121
+ loadDescendantInstructionHints(options?: {
2122
+ maxResults?: number;
2123
+ }): Promise<DescendantInstructionHint[]>;
2124
+ loadRole(roleName: string): Promise<IdentityLayer | null>;
2125
+ loadAll(options?: {
2126
+ role?: string;
2127
+ }): Promise<IdentityLayer[]>;
2128
+ private loadIdentityFile;
2129
+ private walkDescendantInstructionHints;
2130
+ }
2131
+ declare class IdentityResolver {
2132
+ private loader;
2133
+ private cachedIdentity?;
2134
+ private cacheKey?;
2135
+ constructor(loader: IdentityLoader);
2136
+ resolve(options?: {
2137
+ role?: string;
2138
+ }): Promise<ResolvedIdentity>;
2139
+ buildPromptSection(identity: ResolvedIdentity): string;
2140
+ private mergeFrontmatter;
2141
+ }
2142
+ interface SandboxCheckResult {
2143
+ allowed: boolean;
2144
+ reason: string;
2145
+ }
2146
+ declare function isPathWithinAllowed(resolvedPath: string, allowedDirectories: string[]): boolean;
2147
+ declare function extractToolPath(toolName: string, input: Record<string, unknown>, sandbox?: AgentSandbox): string | null;
2148
+ declare function checkSandbox(toolName: string, input: Record<string, unknown>, sandbox: AgentSandbox | undefined): SandboxCheckResult;
2149
+ declare function createReadTool(runtime?: ToolRuntimeContext): RegisteredTool;
2150
+ declare const readTool: RegisteredTool;
2151
+ declare function createWriteTool(runtime?: ToolRuntimeContext): RegisteredTool;
2152
+ declare const writeTool: RegisteredTool;
2153
+ declare function createEditTool(runtime?: ToolRuntimeContext): RegisteredTool;
2154
+ declare const editTool: RegisteredTool;
2155
+ declare function getGlobIgnores(searchPath: string): string[];
2156
+ declare function createGlobTool(runtime?: ToolRuntimeContext): RegisteredTool;
2157
+ declare const globTool: RegisteredTool;
2158
+ declare function getGrepIgnores(searchPath: string): string[];
2159
+ declare function createGrepTool(runtime?: ToolRuntimeContext): RegisteredTool;
2160
+ declare const grepTool: RegisteredTool;
2161
+ declare function sanitizeEnvironment(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
2162
+ declare function isDangerousCommand(command: string): boolean;
2163
+ declare function getBenchmarkForegroundTimeoutForCommand(command: string, requestedTimeout: number, runInBackground: boolean): number;
2164
+ declare function getBenchmarkComputeBudgetHintForCommand(command: string, requestedTimeout: number, runInBackground: boolean): string | null;
2165
+ declare function resetBashBenchmarkGuards(): void;
2166
+ declare function shouldUseIsolatedStdinForCommand(command: string): boolean;
2167
+ declare function requestBackground(): void;
2168
+ declare function createBashTool(runtime?: ToolRuntimeContext): RegisteredTool;
2169
+ declare const bashTool: RegisteredTool;
2170
+ declare function createDispatchAgentTool(runtime?: ToolRuntimeContext): RegisteredTool;
2171
+ declare const dispatchAgentTool: RegisteredTool;
2172
+ declare function createThinkTool(): RegisteredTool;
2173
+ declare const thinkTool: RegisteredTool;
2174
+ interface ShellExecutionOptions {
2175
+ timeout: number;
2176
+ restartSession?: boolean;
2177
+ onBackgroundRequested?: () => string | null;
2178
+ }
2179
+ interface PersistentShellResult {
2180
+ exitCode: number;
2181
+ stdout: string;
2182
+ stderr: string;
2183
+ nextCwd?: string;
2184
+ backgrounded?: string;
2185
+ }
2186
+ interface PersistentShellSpawnSpec {
2187
+ shell: string;
2188
+ args: string[];
2189
+ bootstrap: string;
2190
+ }
2191
+ interface BoundedShellOutput {
2192
+ text: string;
2193
+ truncatedChars: number;
2194
+ }
2195
+ declare function appendBoundedShellOutput(current: string, chunk: string, truncatedChars: number, limit?: number): BoundedShellOutput;
2196
+ declare function formatBoundedShellOutput(value: string, truncatedChars: number, streamName: string): string;
2197
+ declare function shouldSourceShellProfile(env?: NodeJS.ProcessEnv): boolean;
2198
+ declare function getPersistentShellSpawnSpec(env?: NodeJS.ProcessEnv): PersistentShellSpawnSpec;
2199
+ declare class PersistentShellSession {
2200
+ private readonly env;
2201
+ private child;
2202
+ private queue;
2203
+ private processing;
2204
+ private knownCwd;
2205
+ constructor(initialCwd: string, env: NodeJS.ProcessEnv);
2206
+ execute(command: string, options: ShellExecutionOptions): Promise<PersistentShellResult>;
2207
+ reset(): void;
2208
+ close(): void;
2209
+ private ensureChild;
2210
+ private destroyChild;
2211
+ private processQueue;
2212
+ private executeInternal;
2213
+ }
2214
+ declare function getPersistentShellSession(runtime: ToolRuntimeContext, env: NodeJS.ProcessEnv): PersistentShellSession;
2215
+ declare function resetPersistentShellSession(runtime: ToolRuntimeContext): void;
2216
+ declare function resetAllPersistentShellSessions(): void;
2217
+ declare function createAskUserTool(runtime?: ToolRuntimeContext): RegisteredTool;
2218
+ declare const askUserTool: RegisteredTool;
2219
+ declare function createMemoryReadTool(runtime?: ToolRuntimeContext): RegisteredTool;
2220
+ declare function createMemoryWriteTool(runtime?: ToolRuntimeContext): RegisteredTool;
2221
+ declare const memoryReadTool: RegisteredTool;
2222
+ declare const memoryWriteTool: RegisteredTool;
2223
+ interface WebSearchResult {
2224
+ title: string;
2225
+ url: string;
2226
+ snippet: string;
2227
+ }
2228
+ type SearchProvider = "brave" | "google" | "searxng" | "duckduckgo";
2229
+ interface SearchConfig {
2230
+ provider: SearchProvider;
2231
+ apiKey?: string;
2232
+ searxngUrl?: string;
2233
+ googleCx?: string;
2234
+ }
2235
+ declare function configureSearch(config: SearchConfig): void;
2236
+ declare const webSearchTool: RegisteredTool;
2237
+ declare function createWebSearchTool(apiKey: string): RegisteredTool;
2238
+ declare const webFetchTool: RegisteredTool;
2239
+ declare function createReadImageTool(runtime?: ToolRuntimeContext): RegisteredTool;
2240
+ declare const readImageTool: RegisteredTool;
2241
+ declare function createSqliteAnalyzeTool(runtime?: ToolRuntimeContext): RegisteredTool;
2242
+ declare const sqliteAnalyzeTool: RegisteredTool;
2243
+ declare function createElfAnalyzeTool(runtime?: ToolRuntimeContext): RegisteredTool;
2244
+ declare const elfAnalyzeTool: RegisteredTool;
2245
+ declare function createGcodeAnalyzeTool(runtime?: ToolRuntimeContext): RegisteredTool;
2246
+ declare const gcodeAnalyzeTool: RegisteredTool;
2247
+ declare function createHtmlSanitizerAuditTool(runtime?: ToolRuntimeContext): RegisteredTool;
2248
+ declare const htmlSanitizerAuditTool: RegisteredTool;
2249
+ declare function createArtifactCompareTool(runtime?: ToolRuntimeContext): RegisteredTool;
2250
+ declare const artifactCompareTool: RegisteredTool;
2251
+ declare function createLsTool(runtime?: ToolRuntimeContext): RegisteredTool;
2252
+ declare const lsTool: RegisteredTool;
2253
+ declare function createNotebookReadTool(runtime?: ToolRuntimeContext): RegisteredTool;
2254
+ declare function createNotebookEditTool(runtime?: ToolRuntimeContext): RegisteredTool;
2255
+ declare const notebookReadTool: RegisteredTool;
2256
+ declare const notebookEditTool: RegisteredTool;
2257
+ declare const gitStatusTool: RegisteredTool;
2258
+ declare const gitDiffTool: RegisteredTool;
2259
+ declare const gitLogTool: RegisteredTool;
2260
+ declare const gitCommitTool: RegisteredTool;
2261
+ declare const gitBranchTool: RegisteredTool;
2262
+ declare const taskOutputTool: RegisteredTool;
2263
+ declare const taskStopTool: RegisteredTool;
2264
+ declare const COMPAT_TOOL_ALIASES: Record<string, string>;
2265
+ declare function canonicalizeToolName(toolName: string): string;
2266
+ declare function createToolAlias(alias: string, target: RegisteredTool, description?: string): RegisteredTool;
2267
+ declare const SDK_DEFAULT_MAX_TOKENS = 8192;
2268
+ declare const SDK_DEFAULT_MAX_ITERATIONS = 50;
2269
+ interface CreateXenoAgentOptions {
2270
+ cwd?: string;
2271
+ apiKey?: string;
2272
+ baseURL?: string;
2273
+ model?: string;
2274
+ maxTokens?: number;
2275
+ maxIterations?: number;
2276
+ requesterLabel?: string;
2277
+ executionMode?: ExecutionMode;
2278
+ role?: string;
2279
+ sessionId?: string;
2280
+ date?: string;
2281
+ systemPrompt?: string;
2282
+ promptMemory?: string;
2283
+ permissionConfig?: Partial<PermissionConfig>;
2284
+ permissionEngine?: PermissionEngine;
2285
+ toolRegistry?: ToolRegistry;
2286
+ askUser?: AskUserHandler;
2287
+ dispatchAgent?: DispatchAgentHandler;
2288
+ webSearchApiKey?: string;
2289
+ validateToolInputs?: boolean;
2290
+ sandbox?: AgentSandbox;
2291
+ onPermissionRequest?: (context: PermissionRequestContext) => Promise<PermissionRequestResult> | PermissionRequestResult;
2292
+ session?: SessionIntegrationConfig;
2293
+ identity?: false | {
2294
+ globalDir?: string;
2295
+ resolved?: ResolvedIdentity;
2296
+ };
2297
+ memory?: false | {
2298
+ globalDir?: string;
2299
+ sessionDir?: string;
2300
+ budgets?: Partial<MemoryBudget>;
2301
+ includeProjectSessionContext?: boolean;
2302
+ excludeSessionId?: string;
2303
+ projectSessionContext?: MemoryManagerOptions["projectSessionContext"];
2304
+ };
2305
+ onText?: AgentLoopConfig["onText"];
2306
+ onToolStart?: AgentLoopConfig["onToolStart"];
2307
+ onToolWillExecute?: AgentLoopConfig["onToolWillExecute"];
2308
+ onToolEnd?: AgentLoopConfig["onToolEnd"];
2309
+ onIteration?: AgentLoopConfig["onIteration"];
2310
+ onError?: AgentLoopConfig["onError"];
2311
+ onTranscriptError?: AgentLoopConfig["onTranscriptError"];
2312
+ onRuntimeEvent?: XenoRuntimeEventSink;
2313
+ runtimeEventBus?: XenoRuntimeEventBus;
2314
+ turnDiffTracker?: TurnDiffTracker;
2315
+ onModeSwitchRequest?: AgentLoopConfig["onModeSwitchRequest"];
2316
+ onExecutionModeChanged?: AgentLoopConfig["onExecutionModeChanged"];
2317
+ completionGuard?: AgentLoopConfig["completionGuard"];
2318
+ maxCompletionGuardReminders?: AgentLoopConfig["maxCompletionGuardReminders"];
2319
+ progressGuardEveryIterations?: AgentLoopConfig["progressGuardEveryIterations"];
2320
+ toolMiddleware?: ToolMiddleware[];
2321
+ promptSections?: PromptSectionProvider[];
2322
+ promptSectionsTokenBudget?: number;
2323
+ completionGuards?: CompletionGuard[];
2324
+ provider?: LLMProvider;
2325
+ }
2326
+ interface CreateXenoAgentResult {
2327
+ agent: AgentLoop;
2328
+ systemPrompt: string;
2329
+ permissionEngine: PermissionEngine;
2330
+ toolRegistry: ToolRegistry;
2331
+ identity?: ResolvedIdentity;
2332
+ memory?: {
2333
+ resolved: ResolvedMemory;
2334
+ projectSessionContext?: ProjectSessionContext;
2335
+ prompt: string;
2336
+ };
2337
+ }
2338
+ declare function createXenoAgent(options?: CreateXenoAgentOptions): Promise<CreateXenoAgentResult>;
2339
+ interface XenoThreadRunOptions extends CreateXenoAgentOptions {
2340
+ prompt: string;
2341
+ captureTraceGraph?: boolean;
2342
+ }
2343
+ interface XenoThreadRunResult {
2344
+ output: string;
2345
+ events: XenoRuntimeEvent[];
2346
+ traceGraph?: TraceGraph;
2347
+ tokenUsage: {
2348
+ input: number;
2349
+ output: number;
2350
+ total: number;
2351
+ };
2352
+ }
2353
+ declare function runXenoThread(options: XenoThreadRunOptions): Promise<XenoThreadRunResult>;
2354
+ declare function runXenoThreadStreamed(options: XenoThreadRunOptions): AsyncGenerator<XenoRuntimeEvent, XenoThreadRunResult, void>;
2355
+ interface XenoAppServerOptions {
2356
+ defaultAgentOptions?: Omit<XenoThreadRunOptions, "prompt">;
2357
+ }
2358
+ declare class XenoAppServer {
2359
+ private readonly options;
2360
+ private stopping;
2361
+ constructor(options?: XenoAppServerOptions);
2362
+ start(input?: Readable, output?: Writable): Promise<void>;
2363
+ stop(): void;
2364
+ private handleRequest;
2365
+ private success;
2366
+ private error;
2367
+ private write;
2368
+ }
2369
+ declare function generateSessionId(role?: string): string;
2370
+ declare function parseSessionId(id: string): {
2371
+ role: string;
2372
+ timestamp: string;
2373
+ random: string;
2374
+ } | null;
2375
+ declare function isValidSessionId(id: string): boolean;
2376
+ declare class SessionLock {
2377
+ private sessionDir;
2378
+ private lockPath;
2379
+ private sessionId;
2380
+ private heartbeatTimer?;
2381
+ constructor(sessionDir: string);
2382
+ acquire(): Promise<void>;
2383
+ release(): Promise<void>;
2384
+ isLocked(): Promise<boolean>;
2385
+ isStale(): Promise<boolean>;
2386
+ startHeartbeat(interval?: number): void;
2387
+ stopHeartbeat(): void;
2388
+ private updateHeartbeat;
2389
+ private readLock;
2390
+ static cleanStale(sessionsDir: string): Promise<string[]>;
2391
+ }
2392
+ declare class SessionRegistry {
2393
+ static getSessionsDir(): string;
2394
+ static list(options?: {
2395
+ status?: SessionStatus[];
2396
+ role?: string;
2397
+ workingDirectory?: string;
2398
+ limit?: number;
2399
+ }): Promise<SessionMeta[]>;
2400
+ static find(sessionId: string): Promise<SessionMeta | null>;
2401
+ static findMostRecent(roleOrOptions?: string | {
2402
+ role?: string;
2403
+ workingDirectory?: string;
2404
+ }): Promise<SessionMeta | null>;
2405
+ static delete(sessionId: string): Promise<void>;
2406
+ static purgeWorkingDirectory(workingDirectory: string, options?: {
2407
+ excludeSessionIds?: string[];
2408
+ }): Promise<{
2409
+ deletedIds: string[];
2410
+ skippedIds: string[];
2411
+ }>;
2412
+ static updateMeta(sessionId: string, partial: Partial<SessionMeta>): Promise<SessionMeta>;
2413
+ private static loadMeta;
2414
+ static getSessionDir(sessionId: string): string;
2415
+ private static normalizeWorkingDirectory;
2416
+ private static deleteWorkspaceMirror;
2417
+ }
2418
+ interface RecentSessionEntry {
2419
+ sessionId: string;
2420
+ role?: string;
2421
+ endedAt: string;
2422
+ }
2423
+ interface RecentSessionsIndex {
2424
+ version: 1;
2425
+ entries: Record<string, RecentSessionEntry>;
2426
+ }
2427
+ declare function getRecentSessionsIndexPath(homeDir?: string): string;
2428
+ declare function normalizeWorkingDirectory(dir: string): string;
2429
+ declare function loadRecentSessionsIndex(homeDir?: string): Promise<RecentSessionsIndex>;
2430
+ declare function lookupRecentSession(cwd: string, options?: {
2431
+ homeDir?: string;
2432
+ role?: string;
2433
+ }): Promise<RecentSessionEntry | undefined>;
2434
+ declare function recordRecentSession(input: {
2435
+ cwd: string;
2436
+ sessionId: string;
2437
+ role?: string;
2438
+ endedAt?: string;
2439
+ }, options?: {
2440
+ homeDir?: string;
2441
+ }): Promise<void>;
2442
+ declare function forgetRecentSession(cwd: string, options?: {
2443
+ homeDir?: string;
2444
+ }): Promise<void>;
2445
+ declare function forgetRecentSessionById(sessionId: string, options?: {
2446
+ homeDir?: string;
2447
+ }): Promise<void>;
2448
+ interface TurnRestoreCreateOptions {
2449
+ id?: string;
2450
+ restoreMessageCount: number;
2451
+ userPrompt: string;
2452
+ }
2453
+ interface TurnRestoreMutation {
2454
+ relativePath: string;
2455
+ existedBefore: boolean;
2456
+ backupFile?: string;
2457
+ }
2458
+ interface TurnRestorePoint {
2459
+ id: string;
2460
+ createdAt: string;
2461
+ restoreMessageCount: number;
2462
+ userPrompt: string;
2463
+ mutations: TurnRestoreMutation[];
2464
+ unsupportedTools: string[];
2465
+ }
2466
+ interface TurnRestoreAvailability {
2467
+ points: TurnRestorePoint[];
2468
+ hadRestorePoints: boolean;
2469
+ exactWorkspaceRestore: boolean;
2470
+ unsupportedTools: string[];
2471
+ }
2472
+ interface TurnRestoreResult extends TurnRestoreAvailability {
2473
+ restoredFiles: number;
2474
+ removedFiles: number;
2475
+ }
2476
+ declare class TurnRestoreManager {
2477
+ private readonly sessionDir;
2478
+ private readonly workspaceDir;
2479
+ private readonly restoreRoot;
2480
+ private operationQueue;
2481
+ constructor(sessionDir: string, workspaceDir: string);
2482
+ create(options: TurnRestoreCreateOptions): Promise<TurnRestorePoint>;
2483
+ recordToolExecution(pointId: string, toolName: string, input: Record<string, unknown>): Promise<void>;
2484
+ restoreAtOrAfter(restoreMessageCount: number): Promise<TurnRestoreResult>;
2485
+ deleteAtOrAfter(restoreMessageCount: number): Promise<void>;
2486
+ inspectAtOrAfter(restoreMessageCount: number): Promise<TurnRestoreAvailability>;
2487
+ findByRestoreMessageCount(restoreMessageCount: number): Promise<TurnRestorePoint | null>;
2488
+ private captureFileMutation;
2489
+ private markUnsupportedTool;
2490
+ private inspectAtOrAfterInternal;
2491
+ private listPointsAtOrAfter;
2492
+ private loadPoint;
2493
+ private savePoint;
2494
+ private pruneEmptyParentDirs;
2495
+ private getRestoreDir;
2496
+ private getBackupPath;
2497
+ private enqueue;
2498
+ }
2499
+ type ImageLayerType = "raster" | "vector" | "adjustment";
2500
+ interface ImageLayerInfo {
2501
+ id: string;
2502
+ name: string;
2503
+ visible: boolean;
2504
+ type: ImageLayerType;
2505
+ }
2506
+ interface ActiveLayerInfo {
2507
+ id: string;
2508
+ name: string;
2509
+ type: string;
2510
+ }
2511
+ interface ImageDocumentInfo {
2512
+ width: number;
2513
+ height: number;
2514
+ layers: number;
2515
+ colorSpace: string;
2516
+ }
2517
+ interface ImageToolAdapter {
2518
+ createLayer(name: string, type: ImageLayerType): Promise<string>;
2519
+ deleteLayer(layerId: string): Promise<void>;
2520
+ setActiveLayer(layerId: string): Promise<void>;
2521
+ getActiveLayer(): Promise<ActiveLayerInfo>;
2522
+ getLayers(): Promise<ImageLayerInfo[]>;
2523
+ applyFilter(name: string, params: Record<string, number>): Promise<void>;
2524
+ setTool(toolName: string): Promise<void>;
2525
+ setBrushSize(size: number): Promise<void>;
2526
+ setColor(color: string): Promise<void>;
2527
+ removeBackground(): Promise<void>;
2528
+ upscale(factor: number): Promise<void>;
2529
+ denoise(): Promise<void>;
2530
+ exportImage(format: string, quality: number, path: string): Promise<void>;
2531
+ getDocumentInfo(): Promise<ImageDocumentInfo>;
2532
+ }
2533
+ interface TranscriptionSegment {
2534
+ start: number;
2535
+ end: number;
2536
+ text: string;
2537
+ }
2538
+ interface TranscriptionResult {
2539
+ segments: TranscriptionSegment[];
2540
+ }
2541
+ interface StemSeparationResult {
2542
+ trackIds: string[];
2543
+ }
2544
+ interface TimelineInfo {
2545
+ duration: number;
2546
+ tracks: number;
2547
+ fps: number;
2548
+ }
2549
+ interface VideoToolAdapter {
2550
+ addClip(trackId: string, mediaPath: string, startFrame: number): Promise<string>;
2551
+ removeClip(clipId: string): Promise<void>;
2552
+ setPlayhead(frame: number): Promise<void>;
2553
+ play(): Promise<void>;
2554
+ pause(): Promise<void>;
2555
+ addEffect(clipId: string, effectType: string, params: Record<string, number>): Promise<void>;
2556
+ transcribeClip(clipId: string): Promise<TranscriptionResult>;
2557
+ separateStems(clipId: string): Promise<StemSeparationResult>;
2558
+ exportVideo(config: Record<string, unknown>): Promise<void>;
2559
+ getTimelineInfo(): Promise<TimelineInfo>;
2560
+ }
2561
+ type AudioTrackType = "audio" | "pattern";
2562
+ interface AudioTranscriptionSegment {
2563
+ start: number;
2564
+ end: number;
2565
+ text: string;
2566
+ }
2567
+ interface AudioTranscriptionResult {
2568
+ segments: AudioTranscriptionSegment[];
2569
+ }
2570
+ interface AudioStemSeparationResult {
2571
+ trackIds: string[];
2572
+ }
2573
+ interface AudioProjectInfo {
2574
+ bpm: number;
2575
+ timeSignature: string;
2576
+ tracks: number;
2577
+ duration: number;
2578
+ }
2579
+ interface AudioToolAdapter {
2580
+ addTrack(name: string, type: AudioTrackType): Promise<string>;
2581
+ removeTrack(trackId: string): Promise<void>;
2582
+ setVolume(trackId: string, volume: number): Promise<void>;
2583
+ setPan(trackId: string, pan: number): Promise<void>;
2584
+ muteTrack(trackId: string, muted: boolean): Promise<void>;
2585
+ soloTrack(trackId: string, soloed: boolean): Promise<void>;
2586
+ addEffect(trackId: string, effectType: string): Promise<void>;
2587
+ setBPM(bpm: number): Promise<void>;
2588
+ denoise(trackId: string): Promise<void>;
2589
+ separateStems(trackId: string): Promise<AudioStemSeparationResult>;
2590
+ transcribe(trackId: string): Promise<AudioTranscriptionResult>;
2591
+ exportAudio(format: string, options: Record<string, unknown>): Promise<void>;
2592
+ getProjectInfo(): Promise<AudioProjectInfo>;
2593
+ }
2594
+ declare function createImageTools(adapter: ImageToolAdapter): RegisteredTool[];
2595
+ declare function createVideoTools(adapter: VideoToolAdapter): RegisteredTool[];
2596
+ declare function createAudioTools(adapter: AudioToolAdapter): RegisteredTool[];
2597
+ type AppType = "pixel" | "motion" | "sound";
2598
+ interface DocumentContext {
2599
+ name: string;
2600
+ path?: string;
2601
+ modified: boolean;
2602
+ }
2603
+ interface LayerContext {
2604
+ id: string;
2605
+ name: string;
2606
+ type: string;
2607
+ }
2608
+ interface ClipContext {
2609
+ id: string;
2610
+ name: string;
2611
+ type: string;
2612
+ }
2613
+ interface TrackContext {
2614
+ id: string;
2615
+ name: string;
2616
+ }
2617
+ interface CanvasSize {
2618
+ width: number;
2619
+ height: number;
2620
+ }
2621
+ interface AppContext {
2622
+ app: AppType;
2623
+ document?: DocumentContext;
2624
+ activeLayer?: LayerContext;
2625
+ selectedTool?: string;
2626
+ canvasSize?: CanvasSize;
2627
+ currentFrame?: number;
2628
+ selectedClip?: ClipContext;
2629
+ timelineLength?: number;
2630
+ bpm?: number;
2631
+ currentPosition?: number;
2632
+ selectedTrack?: TrackContext;
2633
+ isRecording?: boolean;
2634
+ }
2635
+ type AppContextProvider = () => AppContext;
2636
+ declare class AppContextManager {
2637
+ private provider;
2638
+ setProvider(provider: AppContextProvider): void;
2639
+ getContext(): AppContext;
2640
+ formatForPrompt(): string;
2641
+ }
2642
+ interface ScreenCaptureConfig {
2643
+ maxWidth: number;
2644
+ quality: number;
2645
+ format: "jpeg" | "png";
2646
+ }
2647
+ interface ImageContentBlock {
2648
+ type: "image";
2649
+ source: {
2650
+ type: "base64";
2651
+ media_type: string;
2652
+ data: string;
2653
+ };
2654
+ }
2655
+ declare class ScreenCapture {
2656
+ private config;
2657
+ constructor(config?: Partial<ScreenCaptureConfig>);
2658
+ captureWindow(): Promise<string>;
2659
+ captureElement(element: unknown): Promise<string>;
2660
+ formatForLLM(base64: string, mimeType: string): ImageContentBlock;
2661
+ getMimeType(): string;
2662
+ private getDesktopCapturer;
2663
+ private encodeThumbnail;
2664
+ private isCanvasElement;
2665
+ private canvasToBase64;
2666
+ }
2667
+ declare function isScreenCaptureAvailable(): boolean;
2668
+ interface ProjectInfo {
2669
+ name: string;
2670
+ language: string;
2671
+ framework?: string;
2672
+ packageManager?: string;
2673
+ fileCount: number;
2674
+ dependencies: Record<string, string>;
2675
+ devDependencies?: Record<string, string>;
2676
+ scripts?: Record<string, string>;
2677
+ workspaces?: string[];
2678
+ git?: {
2679
+ branch: string;
2680
+ remoteUrl?: string;
2681
+ };
2682
+ projectType?: "library" | "application" | "monorepo" | "cli" | "api";
2683
+ }
2684
+ interface FileEntry {
2685
+ path: string;
2686
+ extension: string;
2687
+ size: number;
2688
+ language: string;
2689
+ modifiedAt?: number;
2690
+ }
2691
+ interface DependencyEdge {
2692
+ from: string;
2693
+ to: string;
2694
+ type: "import" | "require" | "use";
2695
+ }
2696
+ interface WorkspaceScanOptions {
2697
+ maxFiles?: number;
2698
+ maxDepth?: number;
2699
+ excludePatterns?: string[];
2700
+ buildDependencyGraph?: boolean;
2701
+ }
2702
+ declare class WorkspaceIndex {
2703
+ private cwd;
2704
+ private files;
2705
+ private dependencies;
2706
+ private projectInfo;
2707
+ private scanned;
2708
+ constructor(cwd: string);
2709
+ scan(options?: WorkspaceScanOptions): Promise<void>;
2710
+ getProjectInfo(): ProjectInfo | null;
2711
+ getFiles(): FileEntry[];
2712
+ getFilesByLanguage(language: string): FileEntry[];
2713
+ getFilesByExtension(ext: string): FileEntry[];
2714
+ getDependencies(): DependencyEdge[];
2715
+ getLanguageDistribution(): Record<string, number>;
2716
+ getSummary(): string;
2717
+ get isScanned(): boolean;
2718
+ private walkDirectory;
2719
+ private detectProjectInfo;
2720
+ private buildDependencyGraph;
2721
+ private resolveRelativeImport;
2722
+ }
2723
+ interface PermissionInfo {
2724
+ toolName: string;
2725
+ input: unknown;
2726
+ riskLevel: "low" | "medium" | "high";
2727
+ }
2728
+ interface AgentStreamCallbacks {
2729
+ onText: (text: string) => void;
2730
+ onToolStart: (name: string, input: unknown) => void;
2731
+ onToolEnd: (name: string, result: unknown) => void;
2732
+ onComplete: () => void;
2733
+ onError: (error: Error) => void;
2734
+ }
2735
+ interface ElectronAgentConfig {
2736
+ apiKey: string;
2737
+ baseURL: string;
2738
+ model: string;
2739
+ app: AppType;
2740
+ tools: RegisteredTool[];
2741
+ appContext: () => AppContext;
2742
+ onPermissionRequest?: (info: PermissionInfo) => Promise<"allow" | "deny">;
2743
+ maxTokens?: number;
2744
+ maxIterations?: number;
2745
+ }
2746
+ declare class ElectronAgentBridge {
2747
+ private agent;
2748
+ private readonly contextManager;
2749
+ private readonly config;
2750
+ private readonly toolRegistry;
2751
+ private readonly permissionEngine;
2752
+ private pendingPermissions;
2753
+ constructor(config: ElectronAgentConfig);
2754
+ private buildSystemPrompt;
2755
+ sendMessage(text: string, callbacks: AgentStreamCallbacks): Promise<void>;
2756
+ cancel(): boolean;
2757
+ getHistory(): Message[];
2758
+ clearHistory(): void;
2759
+ updateContext(): void;
2760
+ respondToPermission(id: string, decision: "allow" | "deny"): void;
2761
+ getAgentLoop(): AgentLoop;
2762
+ getContextManager(): AppContextManager;
2763
+ getToolRegistry(): ToolRegistry;
2764
+ }
2765
+ interface PermissionRequestInfo {
2766
+ id: string;
2767
+ toolName: string;
2768
+ input: unknown;
2769
+ riskLevel: "low" | "medium" | "high";
2770
+ description?: string;
2771
+ }
2772
+ interface AgentToAppMessages {
2773
+ "agent:text": {
2774
+ text: string;
2775
+ };
2776
+ "agent:tool-start": {
2777
+ name: string;
2778
+ input: unknown;
2779
+ };
2780
+ "agent:tool-end": {
2781
+ name: string;
2782
+ result: unknown;
2783
+ success: boolean;
2784
+ };
2785
+ "agent:complete": Record<string, never>;
2786
+ "agent:error": {
2787
+ message: string;
2788
+ code?: string;
2789
+ };
2790
+ "agent:permission-request": PermissionRequestInfo;
2791
+ }
2792
+ interface AppToAgentMessages {
2793
+ "agent:send-message": {
2794
+ text: string;
2795
+ };
2796
+ "agent:cancel": Record<string, never>;
2797
+ "agent:clear": Record<string, never>;
2798
+ "agent:permission-response": {
2799
+ id: string;
2800
+ decision: "allow" | "deny";
2801
+ };
2802
+ }
2803
+ type AgentToAppChannel = keyof AgentToAppMessages;
2804
+ type AppToAgentChannel = keyof AppToAgentMessages;
2805
+ type AgentIpcChannel = AgentToAppChannel | AppToAgentChannel;
2806
+ type IpcHandler<C extends string, M extends Record<string, unknown>> = C extends keyof M ? (payload: M[C]) => void : never;
2807
+ type DualLLMMode = "auto" | "local" | "cloud";
2808
+ interface ChatParams {
2809
+ messages: Array<{
2810
+ role: "system" | "user" | "assistant";
2811
+ content: string;
2812
+ }>;
2813
+ model?: string;
2814
+ maxTokens?: number;
2815
+ temperature?: number;
2816
+ systemPrompt?: string;
2817
+ jsonMode?: boolean;
2818
+ stop?: string[];
2819
+ }
2820
+ interface ChatResponse {
2821
+ success: boolean;
2822
+ content: string;
2823
+ endpoint: "local" | "cloud";
2824
+ model: string;
2825
+ usage: {
2826
+ promptTokens: number;
2827
+ completionTokens: number;
2828
+ totalTokens: number;
2829
+ };
2830
+ error?: string;
2831
+ }
2832
+ interface DualLLMStatus {
2833
+ mode: DualLLMMode;
2834
+ localAvailable: boolean;
2835
+ activeEndpoint: "local" | "cloud";
2836
+ localModel?: string;
2837
+ localUrl: string;
2838
+ cloudUrl: string;
2839
+ }
2840
+ interface DualLLMProviderConfig {
2841
+ localUrl?: string;
2842
+ cloudUrl?: string;
2843
+ cloudApiKey?: string;
2844
+ mode?: DualLLMMode;
2845
+ localModel?: string;
2846
+ cloudModel?: string;
2847
+ }
2848
+ declare class DualLLMProvider {
2849
+ private localUrl;
2850
+ private cloudUrl;
2851
+ private cloudApiKey;
2852
+ private mode;
2853
+ private defaultLocalModel;
2854
+ private defaultCloudModel;
2855
+ private localAvailable;
2856
+ private localModelName;
2857
+ private lastHealthCheck;
2858
+ constructor(config?: DualLLMProviderConfig);
2859
+ chat(params: ChatParams): Promise<ChatResponse>;
2860
+ chatStream(params: ChatParams): AsyncGenerator<string>;
2861
+ isLocalAvailable(forceRefresh?: boolean): Promise<boolean>;
2862
+ setMode(mode: DualLLMMode): void;
2863
+ getMode(): DualLLMMode;
2864
+ setLocalUrl(url: string): void;
2865
+ setCloudApiKey(apiKey: string): void;
2866
+ getStatus(): Promise<DualLLMStatus>;
2867
+ asLLMProvider(options?: {
2868
+ id?: string;
2869
+ model?: string;
2870
+ }): LLMProvider;
2871
+ private shouldUseLocal;
2872
+ private chatLocal;
2873
+ private chatCloud;
2874
+ }
2875
+ type IpcHandleFunction = (channel: string, handler: (event: unknown, ...args: unknown[]) => unknown) => void;
2876
+ interface SetupAIHandlersOptions {
2877
+ ipcHandle?: IpcHandleFunction;
2878
+ config?: DualLLMProviderConfig;
2879
+ provider?: DualLLMProvider;
2880
+ }
2881
+ declare function setupAIHandlers(options?: SetupAIHandlersOptions): DualLLMProvider;
2882
+ declare function readXenoApiKey(): string | undefined;
2883
+ interface CrossAppMessage {
2884
+ id: string;
2885
+ sourceApp: string;
2886
+ targetApp: string;
2887
+ action: string;
2888
+ params: Record<string, unknown>;
2889
+ timestamp: string;
2890
+ }
2891
+ type CrossAppHandler = (message: CrossAppMessage) => Promise<unknown>;
2892
+ interface CrossAppRouterOptions {
2893
+ timeoutMs?: number;
2894
+ }
2895
+ declare class CrossAppRouterError extends Error {
2896
+ readonly targetApp: string;
2897
+ readonly action: string;
2898
+ constructor(message: string, targetApp: string, action: string);
2899
+ }
2900
+ declare class CrossAppRouter {
2901
+ private handlers;
2902
+ private readonly timeoutMs;
2903
+ constructor(options?: CrossAppRouterOptions);
2904
+ register(app: string, handler: CrossAppHandler): void;
2905
+ unregister(app: string): boolean;
2906
+ isRegistered(app: string): boolean;
2907
+ listApps(): string[];
2908
+ sendToApp(targetApp: string, action: string, params: Record<string, unknown>, sourceApp?: string): Promise<unknown>;
2909
+ broadcast(action: string, params: Record<string, unknown>, sourceApp?: string): Promise<Map<string, unknown>>;
2910
+ }
2911
+ type AgentSelectionStrategy = "first" | "least-loaded" | "round-robin";
2912
+ interface AgentCard {
2913
+ id: string;
2914
+ name: string;
2915
+ description?: string;
2916
+ capabilities: string[];
2917
+ maxConcurrentTasks?: number;
2918
+ handler: AgentTaskHandler;
2919
+ }
2920
+ interface AgentTeam {
2921
+ id: string;
2922
+ name: string;
2923
+ description?: string;
2924
+ agentIds: string[];
2925
+ strategy?: AgentSelectionStrategy;
2926
+ }
2927
+ interface AgentLoadSnapshot {
2928
+ agentId: string;
2929
+ agentName: string;
2930
+ activeTasks: number;
2931
+ maxConcurrentTasks: number;
2932
+ availableSlots: number;
2933
+ isAvailable: boolean;
2934
+ }
2935
+ interface AgentTask {
2936
+ id: string;
2937
+ type: string;
2938
+ description: string;
2939
+ input: Record<string, unknown>;
2940
+ priority?: "low" | "normal" | "high" | "critical";
2941
+ createdAt: string;
2942
+ status: AgentTaskStatus;
2943
+ assignedTo?: string;
2944
+ createdBy?: string;
2945
+ parentTaskId?: string;
2946
+ timeoutMs?: number;
2947
+ }
2948
+ type AgentTaskStatus = "pending" | "assigned" | "running" | "completed" | "failed" | "cancelled" | "timeout";
2949
+ interface AgentTaskResult {
2950
+ taskId: string;
2951
+ status: "completed" | "failed" | "cancelled";
2952
+ result: unknown;
2953
+ error?: string;
2954
+ artifacts?: AgentArtifact[];
2955
+ durationMs?: number;
2956
+ }
2957
+ interface AgentArtifact {
2958
+ name: string;
2959
+ mimeType?: string;
2960
+ content: string;
2961
+ }
2962
+ type AgentTaskHandler = (task: AgentTask) => Promise<AgentTaskResult>;
2963
+ type A2AMessageType = "task-request" | "task-accepted" | "task-rejected" | "task-progress" | "task-completed" | "task-failed" | "capability-query" | "capability-response";
2964
+ interface A2AMessage {
2965
+ id: string;
2966
+ type: A2AMessageType;
2967
+ from: string;
2968
+ to: string;
2969
+ payload: Record<string, unknown>;
2970
+ timestamp: string;
2971
+ correlationId?: string;
2972
+ }
2973
+ interface AgentDispatchOptions {
2974
+ timeoutMs?: number;
2975
+ priority?: AgentTask["priority"];
2976
+ parentTaskId?: string;
2977
+ createdBy?: string;
2978
+ waitForCapacity?: boolean;
2979
+ maxQueueWaitMs?: number;
2980
+ }
2981
+ interface AgentCapabilityDispatchOptions extends AgentDispatchOptions {
2982
+ strategy?: AgentSelectionStrategy;
2983
+ teamId?: string;
2984
+ }
2985
+ declare class AgentRegistry {
2986
+ private agents;
2987
+ private teams;
2988
+ registerAgent(card: AgentCard): void;
2989
+ unregisterAgent(id: string): boolean;
2990
+ getAgent(id: string): AgentCard | undefined;
2991
+ findByCapability(capability: string): AgentCard[];
2992
+ listAgents(): AgentCard[];
2993
+ registerTeam(team: AgentTeam): void;
2994
+ unregisterTeam(id: string): boolean;
2995
+ getTeam(id: string): AgentTeam | undefined;
2996
+ listTeams(): AgentTeam[];
2997
+ listAgentsForTeam(teamId: string): AgentCard[];
2998
+ get size(): number;
2999
+ }
3000
+ declare class AgentProtocol {
3001
+ private registry;
3002
+ private messageLog;
3003
+ private activeTasks;
3004
+ private activeTasksByAgent;
3005
+ private capabilityRoundRobinCursor;
3006
+ constructor(registry: AgentRegistry);
3007
+ private getAgentCapacity;
3008
+ private getAgentActiveTaskCount;
3009
+ private isAgentAvailable;
3010
+ private reserveAgentTask;
3011
+ private releaseAgentTask;
3012
+ private waitForAgentCapacity;
3013
+ private getCapabilityCandidates;
3014
+ private compareAgentLoad;
3015
+ private selectAgentForCapability;
3016
+ getAgentLoad(agentId: string): AgentLoadSnapshot | undefined;
3017
+ listAgentLoads(options?: {
3018
+ capability?: string;
3019
+ teamId?: string;
3020
+ }): AgentLoadSnapshot[];
3021
+ delegateTask(agentId: string, taskSpec: {
3022
+ type: string;
3023
+ description: string;
3024
+ input: Record<string, unknown>;
3025
+ }, options?: AgentDispatchOptions): Promise<AgentTaskResult>;
3026
+ delegateByCapability(capability: string, taskSpec: {
3027
+ description: string;
3028
+ input: Record<string, unknown>;
3029
+ }, options?: AgentCapabilityDispatchOptions): Promise<AgentTaskResult>;
3030
+ delegateToTeam(teamId: string, taskSpec: {
3031
+ type: string;
3032
+ description: string;
3033
+ input: Record<string, unknown>;
3034
+ }, options?: Omit<AgentCapabilityDispatchOptions, "teamId">): Promise<AgentTaskResult>;
3035
+ getMessageLog(limit?: number): A2AMessage[];
3036
+ getActiveTasks(): AgentTask[];
3037
+ private logMessage;
3038
+ }
3039
+ declare const PIXEL_SYSTEM_PROMPT = "You are an AI assistant embedded in XENO Pixel, a professional image editor.\n\nYou can manipulate layers, apply filters, run AI models (background removal, upscaling, denoising, style transfer), and control tools like the brush, eraser, selection, and transform tools.\n\nWhen the user asks you to edit their image, use the available tools to make precise changes. Always confirm destructive operations (deleting layers, flattening, resizing the canvas) before executing them.\n\nPrefer non-destructive workflows: use adjustment layers, masks, and smart objects when possible. Explain what you are doing in concise terms so the user understands the changes.\n\n{context}\n\nAvailable tools: {toolList}";
3040
+ interface PixelPromptParams {
3041
+ context: string;
3042
+ toolList: string;
3043
+ }
3044
+ declare function buildPixelSystemPrompt(params: PixelPromptParams): string;
3045
+ declare const MOTION_SYSTEM_PROMPT = "You are an AI assistant embedded in XENO Motion, a professional video editor.\n\nYou can manipulate the timeline, cut and arrange clips, apply effects and transitions, run AI models (transcription, stem separation, object tracking, scene detection), and control playback.\n\nWhen the user asks you to edit their video, use the available tools to make precise changes. Always confirm destructive operations (deleting clips, clearing tracks, removing effects) before executing them.\n\nPrefer non-destructive workflows: use adjustment layers and effect stacks that can be toggled or modified later. When working with audio, coordinate with XENO Sound if cross-app communication is available.\n\n{context}\n\nAvailable tools: {toolList}";
3046
+ interface MotionPromptParams {
3047
+ context: string;
3048
+ toolList: string;
3049
+ }
3050
+ declare function buildMotionSystemPrompt(params: MotionPromptParams): string;
3051
+ declare const SOUND_SYSTEM_PROMPT = "You are an AI assistant embedded in XENO Sound, a professional audio editor and digital audio workstation (DAW).\n\nYou can manipulate tracks, apply audio effects (EQ, compression, reverb, delay), run AI models (transcription, stem separation, noise reduction, mastering), control recording, and manage the mixer.\n\nWhen the user asks you to edit their audio, use the available tools to make precise changes. Always confirm destructive operations (deleting tracks, clearing regions, bouncing/flattening) before executing them.\n\nPrefer non-destructive workflows: use effect chains that can be bypassed or reordered, and region-based editing rather than destructive waveform modification. When exporting audio for use in XENO Motion, coordinate via cross-app communication if available.\n\n{context}\n\nAvailable tools: {toolList}";
3052
+ interface SoundPromptParams {
3053
+ context: string;
3054
+ toolList: string;
3055
+ }
3056
+ declare function buildSoundSystemPrompt(params: SoundPromptParams): string;
3057
+ declare enum LogLevel {
3058
+ DEBUG = 0,
3059
+ INFO = 1,
3060
+ WARN = 2,
3061
+ ERROR = 3,
3062
+ SILENT = 4
3063
+ }
3064
+ declare function setLogLevel(level: LogLevel): void;
3065
+ declare function getLogLevel(): LogLevel;
3066
+ declare function calculateCost(model: string, inputTokens: number, outputTokens: number): number;
3067
+ declare function formatCost(cost: number): string;
3068
+ declare function copyTextToClipboard(text: string): void;
3069
+ interface JsonSchemaValidationError {
3070
+ path: string;
3071
+ message: string;
3072
+ }
3073
+ interface JsonSchemaValidationResult {
3074
+ valid: boolean;
3075
+ errors: JsonSchemaValidationError[];
3076
+ }
3077
+ interface JsonSchemaSubset {
3078
+ type?: JsonSchemaType | JsonSchemaType[];
3079
+ enum?: unknown[];
3080
+ required?: string[];
3081
+ properties?: Record<string, unknown>;
3082
+ items?: unknown;
3083
+ additionalProperties?: boolean;
3084
+ [keyword: string]: unknown;
3085
+ }
3086
+ type JsonSchemaType = "string" | "number" | "integer" | "boolean" | "array" | "object" | "null";
3087
+ declare function validateJsonSchema(value: unknown, schema: JsonSchemaSubset | null | undefined): JsonSchemaValidationResult;
3088
+ declare function formatJsonSchemaErrors(errors: JsonSchemaValidationError[]): string;
3089
+ interface CreateDelegatedXenoAgentOptions extends Omit<CreateXenoAgentOptions, "identity" | "memory" | "systemPrompt" | "requesterLabel" | "executionMode"> {
3090
+ parentSystemPrompt: string;
3091
+ parentExecutionMode: ExecutionMode;
3092
+ subagentRole: SubagentRole;
3093
+ }
3094
+ declare function createDelegatedXenoAgent(options: CreateDelegatedXenoAgentOptions): Promise<CreateXenoAgentResult>;
3095
+ interface TokenUsageTotals {
3096
+ input: number;
3097
+ output: number;
3098
+ total: number;
3099
+ }
3100
+ interface DelegatedBranchAgent {
3101
+ lastTraceId: string | null;
3102
+ tokenUsage: TokenUsageTotals;
3103
+ run(prompt: string): Promise<string>;
3104
+ }
3105
+ interface DelegatedBranchAgentCallbacks {
3106
+ onIteration?: (iteration: number, totalTokens: number) => void | Promise<void>;
3107
+ onToolStart?: (name: string, input: Record<string, unknown>) => void | Promise<void>;
3108
+ onToolWillExecute?: (name: string, input: Record<string, unknown>) => void | Promise<void>;
3109
+ onToolEnd?: (name: string, result: ToolResult) => void | Promise<void>;
3110
+ }
3111
+ interface CreateDelegatedBranchAgentOptions extends DelegatedBranchAgentCallbacks {
3112
+ task: SubagentExecutionRequest;
3113
+ }
3114
+ type CreateDelegatedBranchAgent = (options: CreateDelegatedBranchAgentOptions) => Promise<DelegatedBranchAgent>;
3115
+ interface RunDelegatedXenoTurnOptions extends DelegatedBranchAgentCallbacks {
3116
+ userPrompt: string;
3117
+ cwd: string;
3118
+ apiKey?: string;
3119
+ baseURL?: string;
3120
+ model: string;
3121
+ maxIterations: number;
3122
+ maxTotalTokens: number;
3123
+ timeoutMs: number;
3124
+ rolePrecedence?: string[];
3125
+ branchPolicy?: Partial<SubagentBranchPolicy>;
3126
+ parentSystemPrompt: string;
3127
+ parentExecutionMode: ExecutionMode;
3128
+ permissionEngine?: PermissionEngine;
3129
+ createToolRegistry?: () => ToolRegistry;
3130
+ auditLogger?: AuditLogger;
3131
+ rootTraceId?: string;
3132
+ skipAuditCompletion?: boolean;
3133
+ createBranchAgent?: CreateDelegatedBranchAgent;
3134
+ onBranchStart?: (task: SubagentExecutionRequest) => void | Promise<void>;
3135
+ onBranchComplete?: (task: SubagentExecutionRequest, result: {
3136
+ output: string;
3137
+ traceId: string | null;
3138
+ tokenUsage: TokenUsageTotals;
3139
+ }) => void | Promise<void>;
3140
+ onBranchError?: (task: SubagentExecutionRequest, error: unknown, result: {
3141
+ tokenUsage: TokenUsageTotals;
3142
+ }) => void | Promise<void>;
3143
+ }
3144
+ interface DelegatedXenoTurnResult {
3145
+ answer: string;
3146
+ workflow: SubagentWorkflowResult;
3147
+ summary: ReturnType<typeof summarizeSubagentResults>;
3148
+ tokenUsage: TokenUsageTotals;
3149
+ rootTraceId: string;
3150
+ selectedTraceId: string;
3151
+ }
3152
+ declare function runDelegatedXenoTurn(options: RunDelegatedXenoTurnOptions): Promise<DelegatedXenoTurnResult>;
3153
+ interface ToolManifestEntry {
3154
+ name: string;
3155
+ description: string;
3156
+ inputFields: string[];
3157
+ requiredFields: string[];
3158
+ }
3159
+ interface RuntimePluginManifestEntry {
3160
+ name: string;
3161
+ version: string;
3162
+ status: string;
3163
+ path: string;
3164
+ capabilities: string[];
3165
+ permissions: string[];
3166
+ entryPoint?: string;
3167
+ error?: string;
3168
+ }
3169
+ interface RuntimeManifestFileEntry {
3170
+ path: string;
3171
+ exists: boolean;
3172
+ }
3173
+ interface RuntimeManifestInspectionResult {
3174
+ cwd: string;
3175
+ toolCount: number;
3176
+ tools: ToolManifestEntry[];
3177
+ pluginDir: string;
3178
+ pluginRegistryPath: string;
3179
+ pluginCount: number;
3180
+ plugins: RuntimePluginManifestEntry[];
3181
+ projectFiles: RuntimeManifestFileEntry[];
3182
+ }
3183
+ interface InspectSystemPromptOptions {
3184
+ cwd?: string;
3185
+ model?: string;
3186
+ date?: string;
3187
+ role?: string;
3188
+ executionMode?: ExecutionMode;
3189
+ sessionId?: string;
3190
+ promptMemory?: string;
3191
+ identity?: CreateXenoAgentOptions["identity"];
3192
+ memory?: CreateXenoAgentOptions["memory"];
3193
+ }
3194
+ interface SystemPromptInspectionResult {
3195
+ cwd: string;
3196
+ model: string;
3197
+ date: string;
3198
+ executionMode: ExecutionMode;
3199
+ role?: string;
3200
+ systemPrompt: string;
3201
+ toolNames: string[];
3202
+ projectConfig: ReturnType<typeof loadProjectConfig>;
3203
+ identity?: CreateXenoAgentResult["identity"];
3204
+ memory?: CreateXenoAgentResult["memory"];
3205
+ }
3206
+ declare function inspectRuntimeManifests(options?: {
3207
+ cwd?: string;
3208
+ pluginDir?: string;
3209
+ }): RuntimeManifestInspectionResult;
3210
+ declare function inspectSystemPrompt(options?: InspectSystemPromptOptions): Promise<SystemPromptInspectionResult>;
3211
+ declare function auditRiskLevelForTool(toolName: string): "low" | "medium" | "high";
3212
+ declare function summarizeAuditInputRecord(input: Record<string, unknown>): Record<string, unknown>;
3213
+ interface CreateAuditBackedPermissionEngineOptions {
3214
+ mode: PermissionConfig["mode"];
3215
+ rules?: PermissionConfig["rules"];
3216
+ promptFn?: PermissionPromptFn;
3217
+ auditLogger?: AuditLogger;
3218
+ fallbackTraceId?: string;
3219
+ cwd?: string;
3220
+ }
3221
+ declare function createAuditBackedPermissionEngine(options: CreateAuditBackedPermissionEngineOptions): PermissionEngine;
3222
+ interface PromptMemoryContextInfo {
3223
+ merged?: string;
3224
+ memoryTokens: number;
3225
+ sessionHistoryTokens: number;
3226
+ sessionHistoryEntries: number;
3227
+ totalTokens: number;
3228
+ }
3229
+ declare function formatPromptContextBreakdown(info: PromptMemoryContextInfo): string;
3230
+ declare function buildPromptMemoryContext(memoryManager: MemoryManager | undefined, currentSessionId?: string): Promise<PromptMemoryContextInfo>;
3231
+ interface SessionRuntimeState {
3232
+ sessionManager?: SessionManager;
3233
+ checkpointManager?: CheckpointManager;
3234
+ memoryManager?: MemoryManager;
3235
+ identityResolver?: IdentityResolver;
3236
+ auditLogger?: AuditLogger;
3237
+ restoredMessages?: Message[];
3238
+ sessionDir?: string;
3239
+ sessionHistoryPath?: string;
3240
+ turnRestoreManager?: TurnRestoreManager | null;
3241
+ }
3242
+ interface SessionRuntimeBaseOptions {
3243
+ cwd: string;
3244
+ role?: string;
3245
+ model: string;
3246
+ projectSessionContext?: MemoryManagerOptions["projectSessionContext"];
3247
+ identityGlobalDir?: string;
3248
+ loadRestorableMessages?: (sessionId: string, checkpoint?: string) => Promise<Message[]>;
3249
+ }
3250
+ interface InitializeSessionRuntimeOptions extends SessionRuntimeBaseOptions {
3251
+ resume?: string | boolean;
3252
+ checkpoint?: string;
3253
+ }
3254
+ declare function initializeSessionRuntime(options: InitializeSessionRuntimeOptions): Promise<SessionRuntimeState>;
3255
+ declare function activateSessionRuntime(state: SessionRuntimeState, options: SessionRuntimeBaseOptions): Promise<SessionRuntimeState>;
3256
+ declare function cleanupSessionRuntime(state: SessionRuntimeState, status?: "completed" | "abandoned"): Promise<void>;
3257
+ type AppId = "pixel" | "motion" | "sound";
3258
+ interface StoredToolCall {
3259
+ name: string;
3260
+ input: unknown;
3261
+ result: unknown;
3262
+ }
3263
+ interface StoredMessage {
3264
+ role: "user" | "assistant";
3265
+ content: string;
3266
+ timestamp: string;
3267
+ toolCalls?: StoredToolCall[];
3268
+ }
3269
+ interface StoredConversation {
3270
+ id: string;
3271
+ projectPath: string;
3272
+ app: AppId;
3273
+ messages: StoredMessage[];
3274
+ created: string;
3275
+ modified: string;
3276
+ tokenCount: number;
3277
+ model: string;
3278
+ }
3279
+ declare class ConversationStore {
3280
+ getConversationDir(basePath: string, app: AppId): string;
3281
+ getConversationPath(conversationId: string, basePath: string, app: AppId): string;
3282
+ save(conversation: StoredConversation, basePath: string): void;
3283
+ load(conversationId: string, basePath: string): StoredConversation | null;
3284
+ list(basePath: string, app?: AppId): StoredConversation[];
3285
+ delete(conversationId: string, basePath: string): void;
3286
+ autoSave(conversation: StoredConversation, basePath: string, debounceMs?: number): void;
3287
+ flushPending(): void;
3288
+ search(basePath: string, query: string, app?: AppId): StoredConversation[];
3289
+ }
3290
+ interface SpeechRecognizerConfig {
3291
+ language: string;
3292
+ continuous: boolean;
3293
+ interimResults: boolean;
3294
+ maxDuration: number;
3295
+ }
3296
+ interface SpeechRecognizerCallbacks {
3297
+ onInterim: (text: string) => void;
3298
+ onFinal: (text: string) => void;
3299
+ onError: (error: string) => void;
3300
+ onStart: () => void;
3301
+ onEnd: () => void;
3302
+ }
3303
+ interface SpeechRecognizer {
3304
+ start(): void;
3305
+ stop(): void;
3306
+ abort(): void;
3307
+ isListening(): boolean;
3308
+ }
3309
+ declare function createSpeechRecognizer(config: SpeechRecognizerConfig, callbacks: SpeechRecognizerCallbacks): SpeechRecognizer | null;
3310
+ declare function isSpeechRecognitionAvailable(): boolean;
3311
+ type MCPTransport = "stdio" | "sse";
3312
+ type MCPServerScope = "project" | "mcprc" | "user" | "session";
3313
+ type MCPApprovalDecision = "approved" | "denied";
3314
+ interface MCPServerConfig {
3315
+ name: string;
3316
+ transport?: MCPTransport;
3317
+ command?: string;
3318
+ args?: string[];
3319
+ env?: Record<string, string>;
3320
+ cwd?: string;
3321
+ url?: string;
3322
+ headers?: Record<string, string>;
3323
+ approvalRequired?: boolean;
3324
+ scope?: MCPServerScope;
3325
+ sourcePath?: string;
3326
+ approvalKey?: string;
3327
+ approvalState?: MCPApprovalDecision;
3328
+ disabled?: boolean;
3329
+ }
3330
+ interface MCPServerState {
3331
+ config: MCPServerConfig;
3332
+ status: "connecting" | "ready" | "error" | "disconnected";
3333
+ tools: MCPTool[];
3334
+ prompts?: MCPPrompt[];
3335
+ resources?: MCPResource[];
3336
+ capabilities?: MCPInitializeResult["capabilities"];
3337
+ error?: string;
3338
+ approvalState?: MCPApprovalDecision;
3339
+ subscribedResources?: string[];
3340
+ }
3341
+ interface MCPTool {
3342
+ name: string;
3343
+ description: string;
3344
+ inputSchema: Record<string, unknown>;
3345
+ server: string;
3346
+ }
3347
+ interface MCPPrompt {
3348
+ name: string;
3349
+ description: string;
3350
+ arguments?: Array<{
3351
+ name: string;
3352
+ description?: string;
3353
+ required?: boolean;
3354
+ }>;
3355
+ server: string;
3356
+ }
3357
+ interface MCPResource {
3358
+ uri: string;
3359
+ name?: string;
3360
+ description?: string;
3361
+ mimeType?: string;
3362
+ server: string;
3363
+ }
3364
+ interface JsonRpcRequest {
3365
+ jsonrpc: "2.0";
3366
+ id: number | string;
3367
+ method: string;
3368
+ params?: Record<string, unknown>;
3369
+ }
3370
+ interface JsonRpcSuccessResponse {
3371
+ jsonrpc: "2.0";
3372
+ id: number | string;
3373
+ result: unknown;
3374
+ }
3375
+ interface JsonRpcErrorResponse {
3376
+ jsonrpc: "2.0";
3377
+ id: number | string;
3378
+ error: {
3379
+ code: number;
3380
+ message: string;
3381
+ data?: unknown;
3382
+ };
3383
+ }
3384
+ interface JsonRpcNotification {
3385
+ jsonrpc: "2.0";
3386
+ method: string;
3387
+ params?: Record<string, unknown>;
3388
+ }
3389
+ type JsonRpcResponse = JsonRpcSuccessResponse | JsonRpcErrorResponse;
3390
+ type JsonRpcMessage = JsonRpcRequest | JsonRpcResponse | JsonRpcNotification;
3391
+ interface MCPInitializeParams {
3392
+ protocolVersion: string;
3393
+ capabilities: {
3394
+ roots?: {
3395
+ listChanged?: boolean;
3396
+ };
3397
+ };
3398
+ clientInfo: {
3399
+ name: string;
3400
+ version: string;
3401
+ };
3402
+ }
3403
+ interface MCPInitializeResult {
3404
+ protocolVersion: string;
3405
+ capabilities: {
3406
+ tools?: {
3407
+ listChanged?: boolean;
3408
+ };
3409
+ resources?: {
3410
+ subscribe?: boolean;
3411
+ listChanged?: boolean;
3412
+ };
3413
+ prompts?: {
3414
+ listChanged?: boolean;
3415
+ };
3416
+ };
3417
+ serverInfo: {
3418
+ name: string;
3419
+ version: string;
3420
+ };
3421
+ }
3422
+ interface MCPToolsListResult {
3423
+ tools: Array<{
3424
+ name: string;
3425
+ description?: string;
3426
+ inputSchema: Record<string, unknown>;
3427
+ }>;
3428
+ }
3429
+ interface MCPPromptsListResult {
3430
+ prompts: Array<{
3431
+ name: string;
3432
+ description?: string;
3433
+ arguments?: Array<{
3434
+ name: string;
3435
+ description?: string;
3436
+ required?: boolean;
3437
+ }>;
3438
+ }>;
3439
+ }
3440
+ interface MCPPromptGetParams {
3441
+ name: string;
3442
+ arguments?: Record<string, string>;
3443
+ }
3444
+ interface MCPPromptGetResult {
3445
+ description?: string;
3446
+ messages: Array<{
3447
+ role: "user" | "assistant" | "system";
3448
+ content: string | {
3449
+ type: "text" | "image" | "resource";
3450
+ text?: string;
3451
+ data?: string;
3452
+ mimeType?: string;
3453
+ };
3454
+ }>;
3455
+ }
3456
+ interface MCPResourcesListResult {
3457
+ resources: Array<{
3458
+ uri: string;
3459
+ name?: string;
3460
+ description?: string;
3461
+ mimeType?: string;
3462
+ }>;
3463
+ }
3464
+ interface MCPResourceReadParams {
3465
+ uri: string;
3466
+ }
3467
+ interface MCPResourceReadResult {
3468
+ contents: Array<{
3469
+ uri: string;
3470
+ mimeType?: string;
3471
+ text?: string;
3472
+ blob?: string;
3473
+ }>;
3474
+ }
3475
+ interface MCPResourceSubscribeParams {
3476
+ uri: string;
3477
+ }
3478
+ interface MCPResourceUnsubscribeParams {
3479
+ uri: string;
3480
+ }
3481
+ interface MCPToolCallParams {
3482
+ name: string;
3483
+ arguments?: Record<string, unknown>;
3484
+ }
3485
+ interface MCPToolCallResult {
3486
+ content: Array<{
3487
+ type: "text" | "image" | "resource";
3488
+ text?: string;
3489
+ data?: string;
3490
+ mimeType?: string;
3491
+ }>;
3492
+ isError?: boolean;
3493
+ }
3494
+ interface MCPConfigFile {
3495
+ mcpServers: Record<string, Omit<MCPServerConfig, "name" | "scope" | "sourcePath" | "approvalKey">>;
3496
+ }
3497
+ interface MCPConfiguredServer extends MCPServerConfig {
3498
+ scope: Exclude<MCPServerScope, "session">;
3499
+ sourcePath: string;
3500
+ approvalKey: string;
3501
+ approvalState?: MCPApprovalDecision;
3502
+ }
3503
+ interface ConnectConfiguredMCPServersOptions {
3504
+ cwd: string;
3505
+ promptForApproval?: (server: MCPConfiguredServer) => Promise<MCPApprovalDecision>;
3506
+ }
3507
+ interface ConnectConfiguredMCPServersResult {
3508
+ connected: string[];
3509
+ skipped: string[];
3510
+ denied: string[];
3511
+ errors: Array<{
3512
+ name: string;
3513
+ error: string;
3514
+ }>;
3515
+ }
3516
+ interface MCPServerPromptRegistration {
3517
+ name: string;
3518
+ description?: string;
3519
+ arguments?: Array<{
3520
+ name: string;
3521
+ description?: string;
3522
+ required?: boolean;
3523
+ }>;
3524
+ get?: (args?: Record<string, string>) => Promise<MCPPromptGetResult> | MCPPromptGetResult;
3525
+ result?: MCPPromptGetResult;
3526
+ }
3527
+ interface MCPServerResourceRegistration {
3528
+ uri: string;
3529
+ name?: string;
3530
+ description?: string;
3531
+ mimeType?: string;
3532
+ read?: () => Promise<MCPResourceReadResult> | MCPResourceReadResult;
3533
+ result?: MCPResourceReadResult;
3534
+ }
3535
+ interface MCPServerModeOptions {
3536
+ name?: string;
3537
+ version?: string;
3538
+ toolListChanged?: boolean;
3539
+ prompts?: MCPServerPromptRegistration[];
3540
+ resources?: MCPServerResourceRegistration[];
3541
+ }
3542
+ type MCPServerChangeReason = "connected" | "disconnected" | "tools_changed" | "prompts_changed" | "resources_changed" | "resource_updated" | "error";
3543
+ interface MCPServerChangeEvent {
3544
+ serverName: string;
3545
+ reason: MCPServerChangeReason;
3546
+ state: MCPServerState;
3547
+ resourceUri?: string;
3548
+ }
3549
+ type MCPServerChangeListener = (event: MCPServerChangeEvent) => void | Promise<void>;
3550
+ declare class MCPManager {
3551
+ private servers;
3552
+ private nextRequestId;
3553
+ private pendingRequests;
3554
+ private disposed;
3555
+ private changeListeners;
3556
+ onServerStateChanged(listener: MCPServerChangeListener): () => void;
3557
+ addServer(config: MCPServerConfig): Promise<void>;
3558
+ connectConfiguredServers(options: ConnectConfiguredMCPServersOptions): Promise<ConnectConfiguredMCPServersResult>;
3559
+ removeServer(name: string): void;
3560
+ listTools(serverName?: string): MCPTool[];
3561
+ listPrompts(serverName?: string): MCPPrompt[];
3562
+ listResources(serverName?: string): MCPResource[];
3563
+ listServers(): MCPServerState[];
3564
+ loadConfiguredServers(cwd?: string): MCPConfiguredServer[];
3565
+ callTool(serverName: string, toolName: string, input: Record<string, unknown>): Promise<MCPToolCallResult>;
3566
+ getPrompt(serverName: string, promptName: string, input?: Record<string, string>): Promise<MCPPromptGetResult>;
3567
+ readResource(serverName: string, uri: string): Promise<MCPResourceReadResult>;
3568
+ subscribeResource(serverName: string, uri: string): Promise<void>;
3569
+ unsubscribeResource(serverName: string, uri: string): Promise<void>;
3570
+ dispose(): void;
3571
+ static loadConfigFile(cwd?: string): MCPServerConfig[];
3572
+ static loadConfiguredServers(cwd?: string): MCPConfiguredServer[];
3573
+ private createTransport;
3574
+ private discoverServerState;
3575
+ private refreshTools;
3576
+ private refreshPrompts;
3577
+ private refreshResources;
3578
+ private listFromServers;
3579
+ private getReadyServer;
3580
+ private sendRequest;
3581
+ private sendNotification;
3582
+ private handleMessage;
3583
+ private handleNotification;
3584
+ private resolveApprovalDecision;
3585
+ private emitServerStateChanged;
3586
+ }
3587
+ declare class MCPServer {
3588
+ private toolRegistry;
3589
+ private name;
3590
+ private version;
3591
+ private initialized;
3592
+ private buffer;
3593
+ private running;
3594
+ private prompts;
3595
+ private resources;
3596
+ private resourceSubscriptions;
3597
+ private unsubscribeToolRegistryChange?;
3598
+ constructor(toolRegistry: ToolRegistry, options?: MCPServerModeOptions);
3599
+ start(): void;
3600
+ stop(): void;
3601
+ get isRunning(): boolean;
3602
+ private processBuffer;
3603
+ private handleMessage;
3604
+ private handleNotification;
3605
+ private handleInitialize;
3606
+ private handleToolsList;
3607
+ private handlePromptsList;
3608
+ private handlePromptGet;
3609
+ private handleResourcesList;
3610
+ private handleResourceRead;
3611
+ private handleResourceSubscribe;
3612
+ private handleResourceUnsubscribe;
3613
+ private handleToolCall;
3614
+ private sendResponse;
3615
+ private sendError;
3616
+ private writeMessage;
3617
+ setPrompts(prompts: MCPServerPromptRegistration[]): void;
3618
+ setResources(resources: MCPServerResourceRegistration[]): void;
3619
+ notifyResourceUpdated(uri: string): void;
3620
+ private notifyListChanged;
3621
+ }
3622
+ type MessageHandler$1 = (message: JsonRpcResponse | JsonRpcNotification) => void;
3623
+ type ErrorHandler$1 = (error: Error) => void;
3624
+ type CloseHandler$1 = (code: number | null) => void;
3625
+ interface MCPTransportConnection {
3626
+ setMessageHandler(handler: MessageHandler$1): void;
3627
+ setErrorHandler(handler: ErrorHandler$1): void;
3628
+ setCloseHandler(handler: CloseHandler$1): void;
3629
+ send(message: JsonRpcRequest | JsonRpcNotification): void | Promise<void>;
3630
+ close(): void;
3631
+ readonly isAlive: boolean;
3632
+ }
3633
+ declare class StdioTransport implements MCPTransportConnection {
3634
+ private process;
3635
+ private buffer;
3636
+ private onMessage;
3637
+ private onError;
3638
+ private onClose;
3639
+ private closed;
3640
+ constructor(process: ChildProcess);
3641
+ setMessageHandler(handler: MessageHandler$1): void;
3642
+ setErrorHandler(handler: ErrorHandler$1): void;
3643
+ setCloseHandler(handler: CloseHandler$1): void;
3644
+ send(message: JsonRpcRequest | JsonRpcNotification): void;
3645
+ close(): void;
3646
+ get isAlive(): boolean;
3647
+ private setupListeners;
3648
+ private processBuffer;
3649
+ }
3650
+ type MessageHandler = (message: JsonRpcResponse | JsonRpcNotification) => void;
3651
+ type ErrorHandler = (error: Error) => void;
3652
+ type CloseHandler = (code: number | null) => void;
3653
+ declare class SSETransport implements MCPTransportConnection {
3654
+ private readonly url;
3655
+ private readonly headers?;
3656
+ private onMessage;
3657
+ private onError;
3658
+ private onClose;
3659
+ private closed;
3660
+ private buffer;
3661
+ private eventName;
3662
+ private dataLines;
3663
+ private endpointUrl?;
3664
+ private readonly streamAbortController;
3665
+ private readonly readyPromise;
3666
+ private endpointResolver;
3667
+ private readonly endpointPromise;
3668
+ constructor(url: string, headers?: Record<string, string> | undefined);
3669
+ waitUntilReady(): Promise<void>;
3670
+ setMessageHandler(handler: MessageHandler): void;
3671
+ setErrorHandler(handler: ErrorHandler): void;
3672
+ setCloseHandler(handler: CloseHandler): void;
3673
+ send(message: JsonRpcRequest | JsonRpcNotification): Promise<void>;
3674
+ close(): void;
3675
+ get isAlive(): boolean;
3676
+ private connect;
3677
+ private consumeStream;
3678
+ private processBuffer;
3679
+ private dispatchEvent;
3680
+ private resolvePostUrl;
3681
+ }
3682
+ type PersistentMcpScope = Exclude<MCPServerScope, "session">;
3683
+ declare function loadMcpConfigFile(configPath: string, scope?: PersistentMcpScope): MCPConfigFile;
3684
+ declare function saveMcpConfigFile(configPath: string, config: MCPConfigFile, scope?: PersistentMcpScope): void;
3685
+ declare function loadConfiguredMcpServers(cwd?: string): MCPConfiguredServer[];
3686
+ declare function upsertMcpServerConfig(scope: PersistentMcpScope, cwd: string | undefined, config: MCPServerConfig): string;
3687
+ declare function removeMcpServerConfig(scope: PersistentMcpScope, cwd: string | undefined, name: string): string;
3688
+ declare function approveMcpServer(cwd: string, approvalKey: string): void;
3689
+ declare function denyMcpServer(cwd: string, approvalKey: string): void;
3690
+ declare function clearMcpServerApproval(cwd: string, approvalKey: string): void;
3691
+ declare function getMcpApprovalDecision(cwd: string, approvalKey: string): MCPApprovalDecision | undefined;
3692
+ declare function resetMcpServerApprovals(cwd: string, scope?: PersistentMcpScope): number;
3693
+ type MCPRegistryEntryKind = "tool" | "prompt" | "resource";
3694
+ type MCPRegistryAccessPolicy = "none" | "prompts" | "resources" | "context" | "all";
3695
+ interface MCPRegistryEntryDescriptor {
3696
+ kind: MCPRegistryEntryKind;
3697
+ server: string;
3698
+ name: string;
3699
+ description?: string;
3700
+ uri?: string;
3701
+ }
3702
+ type MCPRegistryFilter = (entry: MCPRegistryEntryDescriptor) => boolean;
3703
+ declare function matchesMcpRegistryEntryPolicy(entry: MCPRegistryEntryDescriptor, policy: MCPRegistryAccessPolicy): boolean;
3704
+ declare function getMcpToolName(serverName: string, toolName: string): string;
3705
+ declare function getMcpPromptToolName(serverName: string, promptName: string): string;
3706
+ declare function getMcpResourceToolName(serverName: string, resource: MCPResource): string;
3707
+ declare function createMcpRegisteredTool(manager: MCPManager, tool: MCPTool): RegisteredTool;
3708
+ declare function createMcpPromptRegisteredTool(manager: MCPManager, prompt: MCPPrompt): RegisteredTool;
3709
+ declare function createMcpResourceRegisteredTool(manager: MCPManager, resource: MCPResource): RegisteredTool;
3710
+ declare function syncMcpToolsToRegistry(manager: MCPManager, registry: ToolRegistry, previouslyRegistered?: string[], filter?: MCPRegistryFilter): string[];
3711
+ interface PluginManifest {
3712
+ name: string;
3713
+ version: string;
3714
+ description: string;
3715
+ author?: PluginAuthor | string;
3716
+ license?: string;
3717
+ engine?: PluginEngineConstraint;
3718
+ permissions?: PluginPermission[];
3719
+ capabilities: PluginCapability[];
3720
+ tools?: string[];
3721
+ entryPoint: string;
3722
+ activationEvents?: PluginActivationEvent[];
3723
+ contributes?: PluginContributions;
3724
+ ui?: PluginUIPanel[];
3725
+ homepage?: string;
3726
+ repository?: string;
3727
+ keywords?: string[];
3728
+ icon?: string;
3729
+ minSdkVersion?: string;
3730
+ }
3731
+ interface PluginAuthor {
3732
+ name: string;
3733
+ email?: string;
3734
+ url?: string;
3735
+ }
3736
+ interface PluginEngineConstraint {
3737
+ sdkVersion?: string;
3738
+ nodeVersion?: string;
3739
+ }
3740
+ type PluginPermission = "tools:register" | "tools:execute" | "storage:read" | "storage:write" | "fs:read" | "fs:write" | "network:fetch" | "ui:panels" | "settings:read" | "settings:write" | "clipboard:read" | "clipboard:write" | "shell:execute" | "identity:read";
3741
+ type PluginCapability = "tools" | "prompts" | "memory" | "transport" | "ui";
3742
+ type PluginActivationEvent = "onStartup" | `onCommand:${string}` | `onLanguage:${string}` | `onFilePattern:${string}` | `onConfig:${string}`;
3743
+ interface PluginContributions {
3744
+ tools?: PluginToolContribution[];
3745
+ prompts?: PluginPromptContribution[];
3746
+ settings?: PluginSettingContribution[];
3747
+ commands?: PluginCommandContribution[];
3748
+ }
3749
+ interface PluginToolContribution {
3750
+ name: string;
3751
+ description: string;
3752
+ }
3753
+ interface PluginPromptContribution {
3754
+ name: string;
3755
+ description: string;
3756
+ template?: string;
3757
+ }
3758
+ interface PluginSettingContribution {
3759
+ key: string;
3760
+ description: string;
3761
+ type: "string" | "number" | "boolean" | "array" | "object";
3762
+ default?: unknown;
3763
+ }
3764
+ interface PluginCommandContribution {
3765
+ name: string;
3766
+ description: string;
3767
+ }
3768
+ interface PluginUIPanel {
3769
+ id: string;
3770
+ title: string;
3771
+ type: "sidebar" | "modal" | "statusbar";
3772
+ entry?: string;
3773
+ }
3774
+ type PluginStatus = "installed" | "active" | "disabled" | "error" | "updating";
3775
+ interface PluginInfo {
3776
+ manifest: PluginManifest;
3777
+ status: PluginStatus;
3778
+ installedAt: string;
3779
+ path: string;
3780
+ error?: string;
3781
+ registeredTools?: RegisteredTool[];
3782
+ integrityHash?: string;
3783
+ }
3784
+ interface PluginHook {
3785
+ onActivate?: (context: PluginContext) => Promise<void>;
3786
+ onDeactivate?: () => Promise<void>;
3787
+ onSettingsChange?: (settings: Record<string, unknown>) => Promise<void>;
3788
+ }
3789
+ interface PluginContext {
3790
+ registerTool: (tool: RegisteredTool) => void;
3791
+ unregisterTool: (name: string) => void;
3792
+ registerCommand?: (name: string, handler: PluginCommandHandler) => void;
3793
+ pluginDir: string;
3794
+ sdkVersion: string;
3795
+ storage: PluginStorage;
3796
+ log: PluginLogger;
3797
+ manifest: Readonly<PluginManifest>;
3798
+ host: PluginHostInfo;
3799
+ grantedPermissions: ReadonlySet<PluginPermission>;
3800
+ }
3801
+ type PluginCommandHandler = (args: string[], output: (text: string) => void) => Promise<void>;
3802
+ interface PluginStorage {
3803
+ get(key: string): Promise<unknown>;
3804
+ set(key: string, value: unknown): Promise<void>;
3805
+ delete(key: string): Promise<void>;
3806
+ keys(): Promise<string[]>;
3807
+ clear(): Promise<void>;
3808
+ }
3809
+ interface PluginLogger {
3810
+ info(message: string, data?: unknown): void;
3811
+ warn(message: string, data?: unknown): void;
3812
+ error(message: string, data?: unknown): void;
3813
+ debug(message: string, data?: unknown): void;
3814
+ }
3815
+ interface PluginHostInfo {
3816
+ appName: string;
3817
+ appVersion: string;
3818
+ platform: string;
3819
+ }
3820
+ interface PluginHostOptions {
3821
+ pluginDir: string;
3822
+ autoActivate?: boolean;
3823
+ registry?: string;
3824
+ host?: PluginHostInfo;
3825
+ defaultPermissions?: PluginPermission[];
3826
+ sandbox?: PluginSandboxOptions;
3827
+ }
3828
+ interface PluginSandboxOptions {
3829
+ enabled?: boolean;
3830
+ executionTimeout?: number;
3831
+ maxMemory?: number;
3832
+ allowedHosts?: string[];
3833
+ blockedPaths?: string[];
3834
+ }
3835
+ interface PluginListing {
3836
+ name: string;
3837
+ version: string;
3838
+ description: string;
3839
+ author?: PluginAuthor | string;
3840
+ keywords?: string[];
3841
+ downloads?: number;
3842
+ rating?: number;
3843
+ verified?: boolean;
3844
+ publishedAt?: string;
3845
+ repository?: string;
3846
+ license?: string;
3847
+ versions?: string[];
3848
+ }
3849
+ interface PluginSearchOptions {
3850
+ query?: string;
3851
+ keyword?: string;
3852
+ capability?: PluginCapability;
3853
+ sortBy?: "downloads" | "rating" | "newest" | "name";
3854
+ limit?: number;
3855
+ offset?: number;
3856
+ verifiedOnly?: boolean;
3857
+ }
3858
+ interface PluginScaffoldOptions {
3859
+ name: string;
3860
+ description?: string;
3861
+ template: "tools" | "ui" | "prompts" | "full";
3862
+ author?: string;
3863
+ outputDir?: string;
3864
+ initGit?: boolean;
3865
+ installDeps?: boolean;
3866
+ }
3867
+ interface PluginTestResult {
3868
+ pluginName: string;
3869
+ passed: boolean;
3870
+ totalTests: number;
3871
+ passedTests: number;
3872
+ failedTests: number;
3873
+ results: PluginTestCase[];
3874
+ duration: number;
3875
+ }
3876
+ interface PluginTestCase {
3877
+ name: string;
3878
+ passed: boolean;
3879
+ error?: string;
3880
+ duration: number;
3881
+ }
3882
+ interface PluginPublishOptions {
3883
+ registry?: string;
3884
+ access?: "public" | "restricted";
3885
+ tag?: string;
3886
+ dryRun?: boolean;
3887
+ }
3888
+ type PluginManagerOptions = PluginHostOptions;
3889
+ declare class PluginToolBuilder {
3890
+ private name;
3891
+ private desc;
3892
+ private params;
3893
+ private requiredParams;
3894
+ private handlerFn?;
3895
+ constructor(name: string);
3896
+ description(desc: string): this;
3897
+ param(name: string, type: "string" | "number" | "boolean" | "array" | "object", description: string, required?: boolean): this;
3898
+ handler(fn: (input: Record<string, unknown>) => Promise<ToolResult>): this;
3899
+ build(): RegisteredTool;
3900
+ }
3901
+ declare class PluginSettingsManager {
3902
+ private settings;
3903
+ register(key: string, schema: {
3904
+ type: string;
3905
+ default?: unknown;
3906
+ description?: string;
3907
+ }): void;
3908
+ get(key: string): unknown;
3909
+ set(key: string, value: unknown): void;
3910
+ getAll(): Array<{
3911
+ key: string;
3912
+ value: unknown;
3913
+ type: string;
3914
+ default: unknown;
3915
+ description: string;
3916
+ }>;
3917
+ reset(key: string): void;
3918
+ removeByPrefix(prefix: string): void;
3919
+ }
3920
+ type PluginEventType = "plugin:installed" | "plugin:activated" | "plugin:deactivated" | "plugin:uninstalled" | "plugin:error" | "plugin:updated" | "tool:registered" | "tool:unregistered" | "command:registered" | "settings:changed";
3921
+ interface PluginEvent {
3922
+ type: PluginEventType;
3923
+ pluginName: string;
3924
+ timestamp: string;
3925
+ data?: Record<string, unknown>;
3926
+ }
3927
+ type PluginEventListener = (event: PluginEvent) => void;
3928
+ declare class PluginEventBus {
3929
+ private listeners;
3930
+ private allListeners;
3931
+ on(type: PluginEventType, listener: PluginEventListener): () => void;
3932
+ onAny(listener: PluginEventListener): () => void;
3933
+ emit(event: PluginEvent): void;
3934
+ clear(): void;
3935
+ }
3936
+ declare class PluginHost {
3937
+ private pluginDir;
3938
+ private autoActivate;
3939
+ private registry;
3940
+ private activeHooks;
3941
+ private activeTools;
3942
+ private sandbox;
3943
+ private hostInfo;
3944
+ private defaultPermissions;
3945
+ readonly events: PluginEventBus;
3946
+ constructor(options: PluginHostOptions);
3947
+ install(packageName: string, version?: string): Promise<PluginInfo>;
3948
+ installLocal(pluginPath: string): Promise<PluginInfo>;
3949
+ uninstall(packageName: string, removeFiles?: boolean): Promise<boolean>;
3950
+ activate(packageName: string): Promise<void>;
3951
+ deactivate(packageName: string): Promise<void>;
3952
+ update(packageName: string, version?: string): Promise<PluginInfo>;
3953
+ listInstalled(): PluginInfo[];
3954
+ getActiveTools(): RegisteredTool[];
3955
+ getPlugin(packageName: string): PluginInfo | undefined;
3956
+ setStatus(packageName: string, status: PluginStatus): void;
3957
+ getPluginCommands(): Map<string, PluginCommandHandler>;
3958
+ activateAll(): Promise<void>;
3959
+ deactivateAll(): Promise<void>;
3960
+ get activeCount(): number;
3961
+ private resolveEntryPoint;
3962
+ private loadRegistry;
3963
+ private saveRegistry;
3964
+ private readManifestFallback;
3965
+ }
3966
+ declare const PluginManager: typeof PluginHost;
3967
+ declare const MANIFEST_FILENAME = "xeno-plugin.json";
3968
+ declare const HIGH_RISK_PERMISSIONS: ReadonlySet<PluginPermission>;
3969
+ interface ManifestValidationResult {
3970
+ valid: boolean;
3971
+ manifest?: PluginManifest;
3972
+ errors: string[];
3973
+ warnings: string[];
3974
+ }
3975
+ declare function validateManifest(data: unknown): ManifestValidationResult;
3976
+ declare function readManifestFromDisk(pluginDir: string): ManifestValidationResult;
3977
+ declare function getHighRiskPermissions(manifest: PluginManifest): PluginPermission[];
3978
+ declare class PluginSandbox {
3979
+ private options;
3980
+ private commandHandlers;
3981
+ constructor(options?: PluginSandboxOptions);
3982
+ createContext(manifest: PluginManifest, pluginDir: string, toolCollector: RegisteredTool[], grantedPermissions?: Set<PluginPermission>, hostInfo?: PluginHostInfo): PluginContext;
3983
+ executeWithTimeout<T>(fn: () => Promise<T>, label: string): Promise<T>;
3984
+ getCommandHandlers(pluginName: string): Map<string, PluginCommandHandler> | undefined;
3985
+ getAllCommandHandlers(): Map<string, PluginCommandHandler>;
3986
+ clearCommandHandlers(pluginName: string): void;
3987
+ private requirePermission;
3988
+ private createStorage;
3989
+ private createLogger;
3990
+ }
3991
+ interface PluginMarketplaceOptions {
3992
+ registry?: string;
3993
+ timeout?: number;
3994
+ verifiedScopes?: string[];
3995
+ }
3996
+ declare class PluginMarketplace {
3997
+ private registry;
3998
+ private timeout;
3999
+ private verifiedScopes;
4000
+ constructor(options?: PluginMarketplaceOptions);
4001
+ search(options?: PluginSearchOptions): Promise<PluginListing[]>;
4002
+ getPackageInfo(packageName: string): Promise<PluginListing | undefined>;
4003
+ versionExists(packageName: string, version: string): Promise<boolean>;
4004
+ getLatestVersion(packageName: string): Promise<string | undefined>;
4005
+ private isVerified;
4006
+ private sortListings;
4007
+ private fetchWithTimeout;
4008
+ }
4009
+ declare function scaffoldPlugin(options: PluginScaffoldOptions): Promise<string>;
4010
+ declare function testPlugin(pluginDir: string): Promise<PluginTestResult>;
4011
+ declare function publishPlugin(pluginDir: string, options?: PluginPublishOptions): Promise<boolean>;
4012
+ type ExtendedAppType = "pixel" | "motion" | "sound" | "architect" | "3d" | "engine" | "workflow" | "docs" | "sheets" | "slides" | "notes" | "hub" | "code";
4013
+ interface ContextSource {
4014
+ name: string;
4015
+ priority: number;
4016
+ provider: () => unknown;
4017
+ }
4018
+ interface ContextSection {
4019
+ heading: string;
4020
+ content: string;
4021
+ }
4022
+ declare class AppContextInjector {
4023
+ private readonly contextManager;
4024
+ private readonly sources;
4025
+ private appType;
4026
+ constructor();
4027
+ setAppContext(provider: AppContextProvider): void;
4028
+ setExtendedAppType(appType: ExtendedAppType): void;
4029
+ registerSource(name: string, provider: () => unknown, priority?: number): void;
4030
+ removeSource(name: string): boolean;
4031
+ buildContextBlock(): string;
4032
+ getContextManager(): AppContextManager;
4033
+ getCurrentContext(): AppContext;
4034
+ getAppDisplayName(): string;
4035
+ private formatSourceData;
4036
+ }
4037
+ interface ChatMessage {
4038
+ role: "system" | "user" | "assistant";
4039
+ content: string;
4040
+ }
4041
+ interface LLMToolDefinition {
4042
+ type: "function";
4043
+ function: {
4044
+ name: string;
4045
+ description: string;
4046
+ parameters: Record<string, unknown>;
4047
+ };
4048
+ }
4049
+ interface ChatCompletionRequest {
4050
+ model: string;
4051
+ messages: ChatMessage[];
4052
+ maxTokens?: number;
4053
+ temperature?: number;
4054
+ stream?: boolean;
4055
+ tools?: LLMToolDefinition[];
4056
+ stop?: string[];
4057
+ }
4058
+ interface ChatCompletionResponse {
4059
+ id: string;
4060
+ object: string;
4061
+ model: string;
4062
+ choices: Array<{
4063
+ index: number;
4064
+ message: ChatMessage & {
4065
+ tool_calls?: Array<{
4066
+ id: string;
4067
+ type: "function";
4068
+ function: {
4069
+ name: string;
4070
+ arguments: string;
4071
+ };
4072
+ }>;
4073
+ };
4074
+ finish_reason: string;
4075
+ }>;
4076
+ usage: {
4077
+ prompt_tokens: number;
4078
+ completion_tokens: number;
4079
+ total_tokens: number;
4080
+ };
4081
+ }
4082
+ interface ChatCompletionChunk {
4083
+ id: string;
4084
+ object: string;
4085
+ model: string;
4086
+ choices: Array<{
4087
+ index: number;
4088
+ delta: {
4089
+ role?: string;
4090
+ content?: string;
4091
+ tool_calls?: Array<{
4092
+ index: number;
4093
+ id?: string;
4094
+ type?: "function";
4095
+ function?: {
4096
+ name?: string;
4097
+ arguments?: string;
4098
+ };
4099
+ }>;
4100
+ };
4101
+ finish_reason: string | null;
4102
+ }>;
4103
+ }
4104
+ interface ProviderStatus {
4105
+ available: boolean;
4106
+ endpoint: "local" | "cloud";
4107
+ baseURL: string;
4108
+ localModel?: string;
4109
+ localError?: string;
4110
+ }
4111
+ type OnChunkCallback = (chunk: ChatCompletionChunk) => void;
4112
+ interface LocalLLMProviderConfig {
4113
+ localURL?: string;
4114
+ cloudURL?: string;
4115
+ cloudApiKey?: string;
4116
+ preferLocal?: boolean;
4117
+ }
4118
+ declare class LocalLLMProvider {
4119
+ private readonly localURL;
4120
+ private readonly cloudURL;
4121
+ private readonly cloudApiKey;
4122
+ private readonly preferLocal;
4123
+ private cachedStatus;
4124
+ private cacheTimestamp;
4125
+ private static readonly CACHE_TTL;
4126
+ constructor(config?: LocalLLMProviderConfig);
4127
+ checkAvailability(forceRefresh?: boolean): Promise<ProviderStatus>;
4128
+ chatCompletion(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
4129
+ chatCompletionStream(request: ChatCompletionRequest, onChunk: OnChunkCallback): Promise<void>;
4130
+ getActiveEndpoint(): string;
4131
+ getMode(): "local" | "cloud" | "unknown";
4132
+ forceEndpoint(endpoint: "local" | "cloud"): void;
4133
+ private checkLocal;
4134
+ }
4135
+ interface AnalysisResult {
4136
+ type: string;
4137
+ passed: boolean;
4138
+ summary: string;
4139
+ metrics: Record<string, number>;
4140
+ }
4141
+ interface ClashResult {
4142
+ count: number;
4143
+ clashes: Array<{
4144
+ element1: string;
4145
+ element2: string;
4146
+ description: string;
4147
+ }>;
4148
+ }
4149
+ interface RoomInfo {
4150
+ id: string;
4151
+ name: string;
4152
+ area: number;
4153
+ }
4154
+ interface ArchitectToolAdapter {
4155
+ placeWall(startX: number, startY: number, endX: number, endY: number, thickness: number): Promise<string>;
4156
+ createRoom(name: string, wallIds: string[]): Promise<RoomInfo>;
4157
+ runAnalysis(analysisType: string): Promise<AnalysisResult>;
4158
+ exportDesign(format: string, path: string): Promise<void>;
4159
+ detectClashes(): Promise<ClashResult>;
4160
+ addOpening(wallId: string, openingType: string, position: number, width: number, height: number): Promise<string>;
4161
+ getFloorPlan(): Promise<{
4162
+ rooms: RoomInfo[];
4163
+ totalArea: number;
4164
+ }>;
4165
+ }
4166
+ declare const ARCHITECT_TOOL_NAMES: readonly [
4167
+ "architect.placeWall",
4168
+ "architect.createRoom",
4169
+ "architect.runAnalysis",
4170
+ "architect.exportDesign",
4171
+ "architect.detectClashes",
4172
+ "architect.addOpening",
4173
+ "architect.getFloorPlan"
4174
+ ];
4175
+ declare const ARCHITECT_CAPABILITIES: readonly [
4176
+ "Wall placement and editing",
4177
+ "Room creation and management",
4178
+ "Structural and energy analysis",
4179
+ "Code compliance checking",
4180
+ "Clash detection between building systems",
4181
+ "Door and window placement",
4182
+ "Export to PDF and DWG formats"
4183
+ ];
4184
+ declare function createArchitectTools(adapter: ArchitectToolAdapter): RegisteredTool[];
4185
+ interface MaterialConfig {
4186
+ name: string;
4187
+ color?: string;
4188
+ roughness?: number;
4189
+ metalness?: number;
4190
+ texturePath?: string;
4191
+ }
4192
+ interface RenderConfig {
4193
+ width: number;
4194
+ height: number;
4195
+ samples?: number;
4196
+ outputPath: string;
4197
+ }
4198
+ interface MeshInfo {
4199
+ id: string;
4200
+ name: string;
4201
+ vertices: number;
4202
+ faces: number;
4203
+ }
4204
+ interface ThreeDToolAdapter {
4205
+ addMesh(meshType: string, name: string): Promise<MeshInfo>;
4206
+ applyMaterial(meshId: string, material: MaterialConfig): Promise<void>;
4207
+ renderScene(config: RenderConfig): Promise<string>;
4208
+ importModel(filePath: string, format: string): Promise<string>;
4209
+ exportMesh(meshId: string, format: string, path: string): Promise<void>;
4210
+ transformMesh(meshId: string, transform: {
4211
+ translateX?: number;
4212
+ translateY?: number;
4213
+ translateZ?: number;
4214
+ rotateX?: number;
4215
+ rotateY?: number;
4216
+ rotateZ?: number;
4217
+ scaleX?: number;
4218
+ scaleY?: number;
4219
+ scaleZ?: number;
4220
+ }): Promise<void>;
4221
+ getSceneInfo(): Promise<{
4222
+ meshes: MeshInfo[];
4223
+ totalVertices: number;
4224
+ }>;
4225
+ }
4226
+ declare const THREE_D_TOOL_NAMES: readonly [
4227
+ "3d.addMesh",
4228
+ "3d.applyMaterial",
4229
+ "3d.renderScene",
4230
+ "3d.importModel",
4231
+ "3d.exportMesh",
4232
+ "3d.transformMesh",
4233
+ "3d.getSceneInfo"
4234
+ ];
4235
+ declare const THREE_D_CAPABILITIES: readonly [
4236
+ "Mesh creation (cube, sphere, cylinder, plane, torus, custom)",
4237
+ "Material assignment (PBR: color, roughness, metalness, textures)",
4238
+ "Scene rendering (path tracing with configurable samples)",
4239
+ "Model import (OBJ, FBX, GLTF, STL)",
4240
+ "Model export (OBJ, FBX, GLTF, STL, USD)",
4241
+ "Spatial transformations (translate, rotate, scale)",
4242
+ "Scene hierarchy inspection"
4243
+ ];
4244
+ declare function create3DTools(adapter: ThreeDToolAdapter): RegisteredTool[];
4245
+ interface ComponentData {
4246
+ type: string;
4247
+ properties: Record<string, unknown>;
4248
+ }
4249
+ interface EntityInfo {
4250
+ id: string;
4251
+ name: string;
4252
+ components: string[];
4253
+ }
4254
+ interface BuildResult {
4255
+ success: boolean;
4256
+ outputPath: string;
4257
+ warnings: string[];
4258
+ errors: string[];
4259
+ }
4260
+ interface TestResult {
4261
+ total: number;
4262
+ passed: number;
4263
+ failed: number;
4264
+ failures: Array<{
4265
+ test: string;
4266
+ error: string;
4267
+ }>;
4268
+ }
4269
+ interface EngineToolAdapter {
4270
+ createEntity(name: string): Promise<EntityInfo>;
4271
+ addComponent(entityId: string, component: ComponentData): Promise<void>;
4272
+ removeComponent(entityId: string, componentType: string): Promise<void>;
4273
+ buildGame(platform: string): Promise<BuildResult>;
4274
+ runTest(testPattern?: string): Promise<TestResult>;
4275
+ deployWeb(outputDir: string): Promise<string>;
4276
+ getSceneEntities(): Promise<EntityInfo[]>;
4277
+ }
4278
+ declare const ENGINE_TOOL_NAMES: readonly [
4279
+ "engine.createEntity",
4280
+ "engine.addComponent",
4281
+ "engine.removeComponent",
4282
+ "engine.buildGame",
4283
+ "engine.runTest",
4284
+ "engine.deployWeb",
4285
+ "engine.getSceneEntities"
4286
+ ];
4287
+ declare const ENGINE_CAPABILITIES: readonly [
4288
+ "Entity creation and management",
4289
+ "Component system (transform, rigidbody, sprite, script, audio, camera)",
4290
+ "Game building for multiple platforms",
4291
+ "Automated test execution",
4292
+ "Web deployment (HTML5 export)",
4293
+ "Scene hierarchy inspection"
4294
+ ];
4295
+ declare function createEngineTools(adapter: EngineToolAdapter): RegisteredTool[];
4296
+ interface WorkflowNodeConfig {
4297
+ type: string;
4298
+ name: string;
4299
+ parameters: Record<string, unknown>;
4300
+ inputs?: string[];
4301
+ }
4302
+ interface WorkflowExecutionResult {
4303
+ success: boolean;
4304
+ nodesExecuted: number;
4305
+ durationMs: number;
4306
+ output: unknown;
4307
+ errors: Array<{
4308
+ nodeId: string;
4309
+ error: string;
4310
+ }>;
4311
+ }
4312
+ interface WorkflowInfo {
4313
+ id: string;
4314
+ name: string;
4315
+ nodeCount: number;
4316
+ active: boolean;
4317
+ }
4318
+ interface WorkflowToolAdapter {
4319
+ createWorkflow(name: string): Promise<WorkflowInfo>;
4320
+ addNode(workflowId: string, config: WorkflowNodeConfig): Promise<string>;
4321
+ removeNode(workflowId: string, nodeId: string): Promise<void>;
4322
+ executeWorkflow(workflowId: string, inputData?: Record<string, unknown>): Promise<WorkflowExecutionResult>;
4323
+ scheduleRun(workflowId: string, cron: string): Promise<void>;
4324
+ deactivateWorkflow(workflowId: string): Promise<void>;
4325
+ listWorkflows(): Promise<WorkflowInfo[]>;
4326
+ }
4327
+ declare const WORKFLOW_TOOL_NAMES: readonly [
4328
+ "workflow.createWorkflow",
4329
+ "workflow.addNode",
4330
+ "workflow.removeNode",
4331
+ "workflow.executeWorkflow",
4332
+ "workflow.scheduleRun",
4333
+ "workflow.deactivateWorkflow",
4334
+ "workflow.listWorkflows"
4335
+ ];
4336
+ declare const WORKFLOW_CAPABILITIES: readonly [
4337
+ "Workflow creation and management",
4338
+ "Node-based automation (HTTP, transform, filter, AI agent, code)",
4339
+ "Workflow execution with input data",
4340
+ "Cron-based scheduling",
4341
+ "Error handling and retry logic",
4342
+ "Workflow listing and inspection"
4343
+ ];
4344
+ declare function createWorkflowTools(adapter: WorkflowToolAdapter): RegisteredTool[];
4345
+ type BlockType = "paragraph" | "heading" | "list" | "code" | "image" | "table" | "quote" | "divider";
4346
+ interface BlockContent {
4347
+ type: BlockType;
4348
+ text?: string;
4349
+ level?: number;
4350
+ language?: string;
4351
+ imageUrl?: string;
4352
+ }
4353
+ interface DocComment {
4354
+ id: string;
4355
+ text: string;
4356
+ blockId: string;
4357
+ author: string;
4358
+ }
4359
+ interface DocsToolAdapter {
4360
+ insertBlock(afterBlockId: string | null, content: BlockContent): Promise<string>;
4361
+ deleteBlock(blockId: string): Promise<void>;
4362
+ formatText(blockId: string, format: string, start: number, end: number): Promise<void>;
4363
+ exportDocument(format: string, path: string): Promise<void>;
4364
+ findReplace(find: string, replace: string, caseSensitive: boolean): Promise<number>;
4365
+ addComment(blockId: string, text: string): Promise<string>;
4366
+ getOutline(): Promise<Array<{
4367
+ blockId: string;
4368
+ text: string;
4369
+ level: number;
4370
+ }>>;
4371
+ }
4372
+ declare const DOCS_TOOL_NAMES: readonly [
4373
+ "docs.insertBlock",
4374
+ "docs.deleteBlock",
4375
+ "docs.formatText",
4376
+ "docs.exportDocument",
4377
+ "docs.findReplace",
4378
+ "docs.addComment",
4379
+ "docs.getOutline"
4380
+ ];
4381
+ declare const DOCS_CAPABILITIES: readonly [
4382
+ "Block-based content insertion (paragraphs, headings, lists, code, images, tables)",
4383
+ "Text formatting (bold, italic, underline, strikethrough, code)",
4384
+ "Document export (PDF, Markdown)",
4385
+ "Find and replace across the document",
4386
+ "Comment management",
4387
+ "Document outline/structure inspection"
4388
+ ];
4389
+ declare function createDocsTools(adapter: DocsToolAdapter): RegisteredTool[];
4390
+ interface ChartConfig {
4391
+ type: string;
4392
+ dataRange: string;
4393
+ title?: string;
4394
+ xAxisLabel?: string;
4395
+ yAxisLabel?: string;
4396
+ }
4397
+ interface CellRangeData {
4398
+ startCell: string;
4399
+ values: unknown[][];
4400
+ }
4401
+ interface SortConfig {
4402
+ column: string;
4403
+ ascending: boolean;
4404
+ }
4405
+ interface FilterConfig {
4406
+ column: string;
4407
+ operator: string;
4408
+ value: unknown;
4409
+ }
4410
+ interface SheetsToolAdapter {
4411
+ setCellValue(cell: string, value: unknown): Promise<void>;
4412
+ setCellRange(data: CellRangeData): Promise<void>;
4413
+ insertFormula(cell: string, formula: string): Promise<void>;
4414
+ createChart(config: ChartConfig): Promise<string>;
4415
+ sortRange(range: string, sort: SortConfig): Promise<void>;
4416
+ filterData(range: string, filter: FilterConfig): Promise<void>;
4417
+ clearFilters(range: string): Promise<void>;
4418
+ getCellRange(range: string): Promise<CellRangeData>;
4419
+ }
4420
+ declare const SHEETS_TOOL_NAMES: readonly [
4421
+ "sheets.setCellValue",
4422
+ "sheets.setCellRange",
4423
+ "sheets.insertFormula",
4424
+ "sheets.createChart",
4425
+ "sheets.sortRange",
4426
+ "sheets.filterData",
4427
+ "sheets.clearFilters",
4428
+ "sheets.getCellRange"
4429
+ ];
4430
+ declare const SHEETS_CAPABILITIES: readonly [
4431
+ "Cell value editing (single cell and range)",
4432
+ "Formula insertion and evaluation",
4433
+ "Chart creation (bar, line, pie, scatter, area)",
4434
+ "Data sorting by column",
4435
+ "Data filtering (equals, contains, greater/less than, between)",
4436
+ "Data analysis and summarization",
4437
+ "Range inspection and data retrieval"
4438
+ ];
4439
+ declare function createSheetsTools(adapter: SheetsToolAdapter): RegisteredTool[];
4440
+ interface ShapeConfig {
4441
+ type: string;
4442
+ x: number;
4443
+ y: number;
4444
+ width: number;
4445
+ height: number;
4446
+ text?: string;
4447
+ fill?: string;
4448
+ imageUrl?: string;
4449
+ }
4450
+ interface TransitionConfig {
4451
+ type: string;
4452
+ durationMs: number;
4453
+ }
4454
+ interface SlideInfo {
4455
+ id: string;
4456
+ index: number;
4457
+ shapeCount: number;
4458
+ hasNotes: boolean;
4459
+ }
4460
+ interface SlidesToolAdapter {
4461
+ addSlide(afterIndex: number): Promise<SlideInfo>;
4462
+ deleteSlide(slideId: string): Promise<void>;
4463
+ insertShape(slideId: string, shape: ShapeConfig): Promise<string>;
4464
+ removeShape(slideId: string, shapeId: string): Promise<void>;
4465
+ setTransition(slideId: string, transition: TransitionConfig): Promise<void>;
4466
+ startPresentation(fromSlideIndex: number): Promise<void>;
4467
+ setSpeakerNotes(slideId: string, notes: string): Promise<void>;
4468
+ getSlides(): Promise<SlideInfo[]>;
4469
+ }
4470
+ declare const SLIDES_TOOL_NAMES: readonly [
4471
+ "slides.addSlide",
4472
+ "slides.deleteSlide",
4473
+ "slides.insertShape",
4474
+ "slides.removeShape",
4475
+ "slides.setTransition",
4476
+ "slides.startPresentation",
4477
+ "slides.setSpeakerNotes",
4478
+ "slides.getSlides"
4479
+ ];
4480
+ declare const SLIDES_CAPABILITIES: readonly [
4481
+ "Slide creation and deletion",
4482
+ "Shape insertion (rectangles, circles, arrows, text boxes, images)",
4483
+ "Slide transitions (fade, slide, zoom, dissolve)",
4484
+ "Presentation mode control",
4485
+ "Speaker notes management",
4486
+ "Slide overview and inspection"
4487
+ ];
4488
+ declare function createSlidesTools(adapter: SlidesToolAdapter): RegisteredTool[];
4489
+ interface NotePageInfo {
4490
+ id: string;
4491
+ title: string;
4492
+ tags: string[];
4493
+ createdAt: string;
4494
+ updatedAt: string;
4495
+ linkCount: number;
4496
+ }
4497
+ interface NoteSearchResult {
4498
+ pageId: string;
4499
+ title: string;
4500
+ snippet: string;
4501
+ score: number;
4502
+ }
4503
+ interface NotesToolAdapter {
4504
+ createPage(title: string, content: string): Promise<NotePageInfo>;
4505
+ updatePage(pageId: string, content: string): Promise<void>;
4506
+ deletePage(pageId: string): Promise<void>;
4507
+ searchNotes(query: string): Promise<NoteSearchResult[]>;
4508
+ addTag(pageId: string, tag: string): Promise<void>;
4509
+ removeTag(pageId: string, tag: string): Promise<void>;
4510
+ linkPages(sourcePageId: string, targetPageId: string): Promise<void>;
4511
+ exportMarkdown(pageId: string, path: string): Promise<void>;
4512
+ listPages(): Promise<NotePageInfo[]>;
4513
+ }
4514
+ declare const NOTES_TOOL_NAMES: readonly [
4515
+ "notes.createPage",
4516
+ "notes.updatePage",
4517
+ "notes.deletePage",
4518
+ "notes.searchNotes",
4519
+ "notes.addTag",
4520
+ "notes.removeTag",
4521
+ "notes.linkPages",
4522
+ "notes.exportMarkdown",
4523
+ "notes.listPages"
4524
+ ];
4525
+ declare const NOTES_CAPABILITIES: readonly [
4526
+ "Page creation and editing",
4527
+ "Full-text search across all notes",
4528
+ "Tag management for organization",
4529
+ "Bidirectional page linking (wiki-style)",
4530
+ "Markdown export",
4531
+ "Page listing and inspection"
4532
+ ];
4533
+ declare function createNotesTools(adapter: NotesToolAdapter): RegisteredTool[];
4534
+ interface AppAgentBaseOptions {
4535
+ apiKey?: string;
4536
+ baseURL?: string;
4537
+ model?: string;
4538
+ maxTokens?: number;
4539
+ maxIterations?: number;
4540
+ cwd?: string;
4541
+ contextProvider?: AppContextProvider;
4542
+ localLLM?: LocalLLMProviderConfig;
4543
+ includeBuiltinTools?: boolean;
4544
+ agentOptions?: Partial<CreateXenoAgentOptions>;
4545
+ }
4546
+ interface PixelAgentOptions extends AppAgentBaseOptions {
4547
+ imageAdapter: ImageToolAdapter;
4548
+ }
4549
+ interface MotionAgentOptions extends AppAgentBaseOptions {
4550
+ videoAdapter: VideoToolAdapter;
4551
+ }
4552
+ interface SoundAgentOptions extends AppAgentBaseOptions {
4553
+ audioAdapter: AudioToolAdapter;
4554
+ }
4555
+ interface ArchitectAgentOptions extends AppAgentBaseOptions {
4556
+ architectAdapter: ArchitectToolAdapter;
4557
+ }
4558
+ interface ThreeDAgentOptions extends AppAgentBaseOptions {
4559
+ threeDAdapter: ThreeDToolAdapter;
4560
+ }
4561
+ interface EngineAgentOptions extends AppAgentBaseOptions {
4562
+ engineAdapter: EngineToolAdapter;
4563
+ }
4564
+ interface WorkflowAgentOptions extends AppAgentBaseOptions {
4565
+ workflowAdapter: WorkflowToolAdapter;
4566
+ }
4567
+ interface DocsAgentOptions extends AppAgentBaseOptions {
4568
+ docsAdapter: DocsToolAdapter;
4569
+ }
4570
+ interface SheetsAgentOptions extends AppAgentBaseOptions {
4571
+ sheetsAdapter: SheetsToolAdapter;
4572
+ }
4573
+ interface SlidesAgentOptions extends AppAgentBaseOptions {
4574
+ slidesAdapter: SlidesToolAdapter;
4575
+ }
4576
+ interface NotesAgentOptions extends AppAgentBaseOptions {
4577
+ notesAdapter: NotesToolAdapter;
4578
+ }
4579
+ interface AppAgentResult extends CreateXenoAgentResult {
4580
+ contextInjector: AppContextInjector;
4581
+ localLLMProvider: LocalLLMProvider;
4582
+ }
4583
+ declare class AppAgentFactory {
4584
+ createPixelAgent(options: PixelAgentOptions): Promise<AppAgentResult>;
4585
+ createMotionAgent(options: MotionAgentOptions): Promise<AppAgentResult>;
4586
+ createSoundAgent(options: SoundAgentOptions): Promise<AppAgentResult>;
4587
+ createArchitectAgent(options: ArchitectAgentOptions): Promise<AppAgentResult>;
4588
+ create3DAgent(options: ThreeDAgentOptions): Promise<AppAgentResult>;
4589
+ createEngineAgent(options: EngineAgentOptions): Promise<AppAgentResult>;
4590
+ createWorkflowAgent(options: WorkflowAgentOptions): Promise<AppAgentResult>;
4591
+ createDocsAgent(options: DocsAgentOptions): Promise<AppAgentResult>;
4592
+ createSheetsAgent(options: SheetsAgentOptions): Promise<AppAgentResult>;
4593
+ createSlidesAgent(options: SlidesAgentOptions): Promise<AppAgentResult>;
4594
+ createNotesAgent(options: NotesAgentOptions): Promise<AppAgentResult>;
4595
+ private createInjector;
4596
+ private buildAgent;
4597
+ }
4598
+ declare const PIXEL_TOOL_NAMES: readonly [
4599
+ "pixel.createLayer",
4600
+ "pixel.deleteLayer",
4601
+ "pixel.setActiveLayer",
4602
+ "pixel.getActiveLayer",
4603
+ "pixel.getLayers",
4604
+ "pixel.applyFilter",
4605
+ "pixel.setTool",
4606
+ "pixel.setBrushSize",
4607
+ "pixel.setColor",
4608
+ "pixel.removeBackground",
4609
+ "pixel.upscale",
4610
+ "pixel.denoise",
4611
+ "pixel.exportImage",
4612
+ "pixel.getDocumentInfo"
4613
+ ];
4614
+ declare const PIXEL_CAPABILITIES: readonly [
4615
+ "Layer management (create, delete, reorder, rename)",
4616
+ "Filter application (blur, sharpen, levels, curves, color balance)",
4617
+ "AI background removal (xeno-lib RMBG)",
4618
+ "AI upscaling (xeno-lib Real-ESRGAN)",
4619
+ "AI denoising (xeno-lib NAFNet)",
4620
+ "Tool control (brush, eraser, selection, transform)",
4621
+ "Color management (foreground, background, swatches)",
4622
+ "Export (PNG, JPEG, WebP, PSD, TIFF)"
4623
+ ];
4624
+ declare const MOTION_TOOL_NAMES: readonly [
4625
+ "motion.addClip",
4626
+ "motion.removeClip",
4627
+ "motion.setPlayhead",
4628
+ "motion.play",
4629
+ "motion.pause",
4630
+ "motion.addEffect",
4631
+ "motion.transcribeClip",
4632
+ "motion.separateStems",
4633
+ "motion.exportVideo",
4634
+ "motion.getTimelineInfo"
4635
+ ];
4636
+ declare const MOTION_CAPABILITIES: readonly [
4637
+ "Timeline clip management (add, remove, trim, split)",
4638
+ "Playback control (play, pause, seek)",
4639
+ "Visual effects (blur, color correction, compositing)",
4640
+ "AI transcription (xeno-lib Whisper)",
4641
+ "AI stem separation (xeno-lib Demucs)",
4642
+ "Transitions (cross-dissolve, wipe, fade)",
4643
+ "Speed adjustment (slow-motion, time-remap)",
4644
+ "Export (MP4, MOV, WebM, ProRes)"
4645
+ ];
4646
+ declare const SOUND_TOOL_NAMES: readonly [
4647
+ "sound.addTrack",
4648
+ "sound.removeTrack",
4649
+ "sound.setVolume",
4650
+ "sound.setPan",
4651
+ "sound.muteTrack",
4652
+ "sound.soloTrack",
4653
+ "sound.addEffect",
4654
+ "sound.setBPM",
4655
+ "sound.denoise",
4656
+ "sound.separateStems",
4657
+ "sound.transcribe",
4658
+ "sound.exportAudio",
4659
+ "sound.getProjectInfo"
4660
+ ];
4661
+ declare const SOUND_CAPABILITIES: readonly [
4662
+ "Track management (add, remove, reorder)",
4663
+ "Mixer control (volume, pan, mute, solo)",
4664
+ "Audio effects (EQ, compression, reverb, delay, chorus, distortion)",
4665
+ "AI noise reduction (xeno-lib DeepFilterNet)",
4666
+ "AI stem separation (xeno-lib Demucs)",
4667
+ "AI transcription (xeno-lib Whisper)",
4668
+ "BPM and time signature control",
4669
+ "Export (WAV, MP3, FLAC, OGG, AIFF)"
4670
+ ];
4671
+ interface CodeValidationResult {
4672
+ valid: boolean;
4673
+ errors: CodeValidationIssue[];
4674
+ warnings: CodeValidationIssue[];
4675
+ language: string;
4676
+ }
4677
+ interface CodeValidationIssue {
4678
+ line: number;
4679
+ column?: number;
4680
+ message: string;
4681
+ severity: "error" | "warning";
4682
+ }
4683
+ interface CodeApplyOptions {
4684
+ dryRun?: boolean;
4685
+ validateBefore?: boolean;
4686
+ validateAfter?: boolean;
4687
+ }
4688
+ interface CodeApplyResult {
4689
+ applied: boolean;
4690
+ beforeValid: boolean;
4691
+ afterValid: boolean;
4692
+ content: string;
4693
+ errors?: CodeValidationIssue[];
4694
+ }
4695
+ declare function detectLanguage(filePath: string): string;
4696
+ declare class CodeValidator {
4697
+ validate(code: string, language: string): CodeValidationResult;
4698
+ validateForFile(code: string, filePath: string): CodeValidationResult;
4699
+ validateEdit(originalContent: string, oldString: string, newString: string, filePath: string): CodeApplyResult;
4700
+ }
4701
+ interface DebugStep {
4702
+ index: number;
4703
+ type: "tool-call" | "llm-request" | "llm-response" | "permission-check" | "error";
4704
+ toolName?: string;
4705
+ input?: Record<string, unknown>;
4706
+ output?: ToolResult | string;
4707
+ startTime: number;
4708
+ endTime?: number;
4709
+ durationMs?: number;
4710
+ status: "pending" | "running" | "completed" | "failed" | "skipped";
4711
+ error?: string;
4712
+ iteration?: number;
4713
+ messageSnapshot?: Message[];
4714
+ }
4715
+ interface DebugBreakpoint {
4716
+ id: string;
4717
+ type: "tool" | "iteration" | "error";
4718
+ toolName?: string;
4719
+ iteration?: number;
4720
+ enabled: boolean;
4721
+ condition?: string;
4722
+ }
4723
+ type DebugStepCallback = (step: DebugStep) => void;
4724
+ type BreakpointCallback = (step: DebugStep, breakpoint: DebugBreakpoint) => Promise<"continue" | "skip" | "abort">;
4725
+ interface DebugSnapshot {
4726
+ steps: DebugStep[];
4727
+ totalSteps: number;
4728
+ toolCallCount: number;
4729
+ llmRequestCount: number;
4730
+ errorCount: number;
4731
+ totalDurationMs: number;
4732
+ toolSummary: Record<string, number>;
4733
+ breakpoints: DebugBreakpoint[];
4734
+ enabled: boolean;
4735
+ }
4736
+ declare class AgentDebugger {
4737
+ private steps;
4738
+ private breakpoints;
4739
+ private stepCallbacks;
4740
+ private breakpointCallback;
4741
+ private _enabled;
4742
+ private nextBreakpointId;
4743
+ private maxSteps;
4744
+ enable(): void;
4745
+ disable(): void;
4746
+ get enabled(): boolean;
4747
+ recordStep(step: Omit<DebugStep, "index">): DebugStep;
4748
+ checkBreakpoints(step: DebugStep): Promise<"continue" | "skip" | "abort">;
4749
+ addBreakpoint(config: Omit<DebugBreakpoint, "id" | "enabled"> & {
4750
+ id?: string;
4751
+ enabled?: boolean;
4752
+ }): string;
4753
+ removeBreakpoint(id: string): boolean;
4754
+ toggleBreakpoint(id: string): boolean | undefined;
4755
+ onStep(callback: DebugStepCallback): void;
4756
+ onBreakpoint(callback: BreakpointCallback): void;
4757
+ getSteps(filter?: DebugStep["type"]): DebugStep[];
4758
+ getStep(index: number): DebugStep | undefined;
4759
+ takeSnapshot(): DebugSnapshot;
4760
+ clear(): void;
4761
+ reset(): void;
4762
+ }
4763
+ interface EvalTask {
4764
+ id: string;
4765
+ description: string;
4766
+ category?: string;
4767
+ input: string;
4768
+ expectedOutput?: string;
4769
+ validator: (output: string) => boolean;
4770
+ maxDurationMs?: number;
4771
+ maxCost?: number;
4772
+ tags?: string[];
4773
+ }
4774
+ interface EvalResult {
4775
+ taskId: string;
4776
+ passed: boolean;
4777
+ output: string;
4778
+ durationMs: number;
4779
+ tokensUsed: {
4780
+ input: number;
4781
+ output: number;
4782
+ };
4783
+ cost: number;
4784
+ iterations: number;
4785
+ toolCalls: number;
4786
+ error?: string;
4787
+ model?: string;
4788
+ timestamp: string;
4789
+ }
4790
+ interface EvalReport {
4791
+ totalTasks: number;
4792
+ passed: number;
4793
+ failed: number;
4794
+ successRate: number;
4795
+ avgDurationMs: number;
4796
+ totalTokens: {
4797
+ input: number;
4798
+ output: number;
4799
+ };
4800
+ totalCost: number;
4801
+ avgIterations: number;
4802
+ avgToolCalls: number;
4803
+ byCategory: Record<string, {
4804
+ total: number;
4805
+ passed: number;
4806
+ failed: number;
4807
+ avgDurationMs: number;
4808
+ }>;
4809
+ results: EvalResult[];
4810
+ generatedAt: string;
4811
+ }
4812
+ interface EvalRunOptions {
4813
+ maxConcurrent?: number;
4814
+ timeout?: number;
4815
+ categories?: string[];
4816
+ tags?: string[];
4817
+ model?: string;
4818
+ onProgress?: (completed: number, total: number, result: EvalResult) => void;
4819
+ }
4820
+ declare class AgentEvaluator {
4821
+ private tasks;
4822
+ private results;
4823
+ private maxResultHistory;
4824
+ addTask(task: EvalTask): void;
4825
+ removeTask(id: string): boolean;
4826
+ getTask(id: string): EvalTask | undefined;
4827
+ listTasks(category?: string): EvalTask[];
4828
+ recordResult(result: EvalResult): void;
4829
+ validate(taskId: string, output: string): boolean;
4830
+ getReport(filter?: {
4831
+ model?: string;
4832
+ since?: string;
4833
+ }): EvalReport;
4834
+ formatReport(report: EvalReport): string;
4835
+ clearResults(): void;
4836
+ get resultCount(): number;
4837
+ }
4838
+ export { type A2AMessage, type A2AMessageType, ARCHITECT_CAPABILITIES, ARCHITECT_TOOL_NAMES, type ActiveLayerInfo, type AgentArtifact, type AgentCapabilities, type AgentCard, AgentDebugger, AgentEvaluator, AgentInterruptedError, type AgentIpcChannel, type AgentLoadSnapshot, AgentLoop, type AgentLoopConfig, type AgentLoopOptions, AgentProtocol, AgentRegistry, type AgentRunTermination, type AgentRunTerminationReason, type AgentRunTerminationStatus, type AgentSandbox, type AgentSelectionStrategy, type AgentStreamCallbacks, type AgentTask, type AgentTaskHandler, type AgentTaskResult, type AgentTaskStatus, type AgentTeam, type AgentToAppChannel, type AgentToAppMessages, type AnalysisResult, type ApiMessage, type AppAgentBaseOptions, AppAgentFactory, type AppAgentResult, type AppContext, AppContextInjector, AppContextManager, type AppContextProvider, type AppId, type AppToAgentChannel, type AppToAgentMessages, type AppType, type ArchitectAgentOptions, type ArchitectToolAdapter, type AskUserHandler, type AskUserRequest, type AskUserResponse, type AudioProjectInfo, type AudioStemSeparationResult, type AudioToolAdapter, type AudioTrackType, type AudioTranscriptionResult, type AudioTranscriptionSegment, type AuditDecision, type AuditEvent, AuditLogger, type AuditReplayReport, type AuditReplayStep, type AuditRiskLevel, type AuditStatus, type AuditTraceGapEntry, type AuditTraceReport, type AuditTraceSummary, type AuditTraceTimelineEntry, type AuditTraceToolSummary, AutoCheckpointHandler, AutoMemory, type AutoMemoryContext, type AutoMemoryTrigger, BackgroundProcessManager, type BackgroundTask, type BlockContent, type BlockType, type BoundedShellOutput, type BreakpointCallback, type BuildResult, COMPAT_TOOL_ALIASES, CONFIG_VERSION, type CanvasSize, type CellRangeData, type ChartConfig, type ChatCompletionChunk, type ChatCompletionRequest, type ChatCompletionResponse, type ChatMessage, type ChatParams, type ChatResponse, type CheckpointData, type CheckpointInfo, CheckpointManager, type CheckpointTrigger, type ClashResult, type ClipContext, type CodeApplyOptions, type CodeApplyResult, type CodeValidationIssue, type CodeValidationResult, CodeValidator, type CodingBenchmarkAssessment, type CodingBenchmarkMeasurement, type CodingBenchmarkOptions, type CodingBenchmarkReport, type CodingBenchmarkThreshold, type CompletionGuard, type CompletionGuardContext, type CompletionGuardDecision, type CompletionGuardEvaluationContext, CompletionGuardRegistry, type CompletionGuardResult, type CompletionGuardResultObject, type CompletionGuardStopReason, type CompletionGuardToolPolicy, type CompletionGuardToolPolicyMode, type CompletionGuardTurnStats, type CompletionGuardVeto, type ComponentData, type CompressionLLMFn, type CompressionStats, type ConfigProfile, type ConnectConfiguredMCPServersOptions, type ConnectConfiguredMCPServersResult, type ContentBlock, type ContextCompressedData, ContextManager, type ContextManagerConfig, type ContextSection, type ContextSource, ConversationStore, type CreateAuditBackedPermissionEngineOptions, type CreateDelegatedBranchAgent, type CreateDelegatedBranchAgentOptions, type CreateDelegatedXenoAgentOptions, type CreateXenoAgentOptions, type CreateXenoAgentResult, type CrossAppHandler, type CrossAppMessage, CrossAppRouter, CrossAppRouterError, type CrossAppRouterOptions, DEFAULT_API_KEY, DEFAULT_MEMORY_BUDGETS, DEFAULT_MODEL, DEFAULT_PROMPT_SECTIONS_TOKEN_BUDGET, DEFAULT_SUBAGENT_BRANCH_POLICY, DEFAULT_SUBAGENT_REMOTE_MCP_BY_ROLE, DEFAULT_SUBAGENT_ROLES, DEFAULT_SUBAGENT_ROLE_PRECEDENCE, DEFAULT_SUBAGENT_TEAM_PRESET, DOCS_CAPABILITIES, DOCS_TOOL_NAMES, type DebugBreakpoint, type DebugSnapshot, type DebugStep, type DebugStepCallback, type DefaultToolRegistryOptions, type DelegatedBranchAgent, type DelegatedBranchAgentCallbacks, type DelegatedXenoTurnResult, type DelegationBudget, type DelegationLimits, type DelegationSummaryData, type DependencyEdge, type DescendantInstructionHint, type DispatchAgentHandler, type DispatchAgentRequest, type DispatchAgentResponse, type DocComment, type DocsAgentOptions, type DocsToolAdapter, type DocumentContext, type DualLLMMode, DualLLMProvider, type DualLLMProviderConfig, type DualLLMProviderLike, type DualLLMStatus, ENGINE_CAPABILITIES, ENGINE_TOOL_NAMES, ElectronAgentBridge, type ElectronAgentConfig, type EngineAgentOptions, type EngineToolAdapter, type EntityInfo, type ErrorData, type EvalReport, type EvalResult, type EvalRunOptions, type EvalTask, type ExecuteToolRequest, type ExecuteToolResult, type ExecutionMode, type ExtendedAppType, FALLBACK_MODELS, type FileEntry, type FileSnapshot, type FilterConfig, HIGH_RISK_PERMISSIONS, IDENTITY_PATHS, type IdentityFrontmatter, type IdentityLayer, type IdentityLoadResult, IdentityLoader, type IdentityLoaderOptions, type IdentityPaths, IdentityResolver, type IdentitySource, type ImageContentBlock, type ImageDocumentInfo, type ImageLayerInfo, type ImageLayerType, type ImageToolAdapter, type ImageUrlBlock, type InitializeSessionRuntimeOptions, type InspectSystemPromptOptions, type InstallSignalHandlersOptions, type IpcHandler, type JsonRpcErrorResponse, type JsonRpcMessage, type JsonRpcNotification, type JsonRpcRequest, type JsonRpcResponse, type JsonRpcSuccessResponse, type JsonSchemaSubset, type JsonSchemaType, type JsonSchemaValidationError, type JsonSchemaValidationResult, type LLMCompletionResult, type LLMProvider, type LLMProviderCapabilities, type LLMProviderMessage, type ToolDefinition as LLMProviderToolDefinition, type LLMToolDefinition, type LayerContext, LlmClient, type LlmClientDeps, LocalLLMProvider, type LocalLLMProviderConfig, type LocalRuntimePreflightResult, LogLevel, MANIFEST_FILENAME, type MCPApprovalDecision, type MCPConfigFile, type MCPConfiguredServer, type MCPInitializeParams, type MCPInitializeResult, MCPManager, type MCPPrompt, type MCPPromptGetParams, type MCPPromptGetResult, type MCPPromptsListResult, type MCPRegistryAccessPolicy, type MCPRegistryEntryDescriptor, type MCPRegistryEntryKind, type MCPRegistryFilter, type MCPResource, type MCPResourceReadParams, type MCPResourceReadResult, type MCPResourceSubscribeParams, type MCPResourceUnsubscribeParams, type MCPResourcesListResult, MCPServer, type MCPServerConfig, type MCPServerModeOptions, type MCPServerPromptRegistration, type MCPServerResourceRegistration, type MCPServerScope, type MCPServerState, type MCPTool, type MCPToolCallParams, type MCPToolCallResult, type MCPToolsListResult, type MCPTransport, type MCPTransportConnection, MEMORY_FILES, MOTION_CAPABILITIES, MOTION_SYSTEM_PROMPT, MOTION_TOOL_NAMES, type ManifestValidationResult, type MaterialConfig, type MemoryBudget, type MemoryEntry, type MemoryFile, type MemoryLevel, MemoryManager, type MemoryManagerOptions, type MeshInfo, type Message, MessageFlow, type MessageFlowDeps, type ModeSwitchRequest, type ModelInfo, type ModelProvider, ModelProviderRegistry, type MotionAgentOptions, type MotionPromptParams, NOTES_CAPABILITIES, NOTES_TOOL_NAMES, type NotePageInfo, type NoteSearchResult, type NotesAgentOptions, type NotesToolAdapter, type OnChunkCallback, PIXEL_CAPABILITIES, PIXEL_SYSTEM_PROMPT, PIXEL_TOOL_NAMES, PROJECT_STATE_VERSION, type PermissionConfig, type PermissionDecision, type PermissionDecisionEvent, type PermissionDecisionHook, PermissionEngine, type PermissionInfo, type PermissionPromptFn, type PermissionPromptInfo, type PermissionPromptOperation, type PermissionPromptPreview, type PermissionPromptPreviewLine, type PermissionRequestContext, type PermissionRequestInfo, type PermissionRequestResult, type PermissionRule, type PersistentPermissionState, type PixelAgentOptions, type PixelPromptParams, type PlatformInfo, type PluginActivationEvent, type PluginAuthor, type PluginCapability, type PluginCommandContribution, type PluginCommandHandler, type PluginContext, type PluginContributions, type PluginEngineConstraint, type PluginEvent, PluginEventBus, type PluginEventListener, type PluginEventType, type PluginHook, PluginHost, type PluginHostInfo, type PluginHostOptions, type PluginInfo, type PluginListing, type PluginLogger, PluginManager, type PluginManagerOptions, type PluginManifest, PluginMarketplace, type PluginMarketplaceOptions, type PluginPermission, type PluginPromptContribution, type PluginPublishOptions, PluginSandbox, type PluginSandboxOptions, type PluginScaffoldOptions, type PluginSearchOptions, type PluginSettingContribution, PluginSettingsManager, type PluginStatus, type PluginStorage, type PluginTestCase, type PluginTestResult, PluginToolBuilder, type PluginToolContribution, type PluginUIPanel, type ProfileMCPServerConfig, ProfileManager, type ProjectConfig, type ProjectInfo, type ProjectMcpApprovalDecision, type ProjectSessionContext, type ProjectSessionContextEntry, type ProjectSessionSummary, type ProjectTokenUsageSummary, type PromptContext, type PromptFn, type PromptMemoryContextInfo, type PromptSectionContext, type PromptSectionProvider, PromptSectionRegistry, type ProviderStatus, type RecentSessionEntry, type RecentSessionsIndex, type ReducedResult, type ReducerOptions, type RegisteredTool, type RenderConfig, type ResolveXenoSdkApiKeyOptions, type ResolvedIdentity, type ResolvedMemory, type ResolvedProvider, type ResolvedSubagentWorkflowAnswer, type ResourceContentBlock, type RoomInfo, type RunDelegatedXenoTurnOptions, type RunStreamOptions, type RuntimeManifestFileEntry, type RuntimeManifestInspectionResult, type RuntimePluginManifestEntry, SDK_DEFAULT_MAX_ITERATIONS, SDK_DEFAULT_MAX_TOKENS, SESSION_FORMAT_VERSION, SHEETS_CAPABILITIES, SHEETS_TOOL_NAMES, SLIDES_CAPABILITIES, SLIDES_TOOL_NAMES, SOUND_CAPABILITIES, SOUND_SYSTEM_PROMPT, SOUND_TOOL_NAMES, SSETransport, SUBAGENT_ROLE_ALIASES, SUBAGENT_TEAM_PRESETS, type SandboxCheckResult, type ScoredMemory, ScreenCapture, type ScreenCaptureConfig, type SearchConfig, type SearchProvider, type Session, type SessionCreateOptions, type SessionData, type SessionEndData, type SessionIntegrationConfig, SessionLock, SessionLock as SessionLockManager, SessionManager, type SessionMeta, SessionRegistry, type SessionResumeOptions, type SessionRuntimeBaseOptions, type SessionRuntimeState, type SessionStartData, type SessionStatus, type SessionSummary, type SetupAIHandlersOptions, type ShapeConfig, type SheetsAgentOptions, type SheetsToolAdapter, type ShutdownCleanup, type SlideInfo, type SlidesAgentOptions, type SlidesToolAdapter, type SortConfig, type SoundAgentOptions, type SoundPromptParams, type SpeechRecognizer, type SpeechRecognizerCallbacks, type SpeechRecognizerConfig, StdioTransport, type StemSeparationResult, type StopReason, type StoredConversation, type StoredMessage, type StoredToolCall, type StreamResult, type SubagentBranchPolicy, type SubagentExecuteFn, type SubagentExecutionRequest, type SubagentExecutionResponse, type SubagentRemoteMcpAccess, type SubagentResult, type SubagentRole, type SubagentTask, type SubagentTeamPreset, type SubagentTeamPresetDefinition, type SubagentWorkflowMode, type SubagentWorkflowOptions, type SubagentWorkflowResult, type SystemPromptInspectionResult, THREE_D_CAPABILITIES, THREE_D_TOOL_NAMES, type TaskCompletionCallback, type TestResult, type TextBlock, type ThreeDAgentOptions, type ThreeDToolAdapter, type TimelineInfo, type TokenUsageTotals, type ToolAssistantContentBlock, type ToolCallData, type ToolDefinition, type ToolExecutor, type ToolManifestEntry, type ToolMiddleware, type ToolMiddlewareContext, ToolMiddlewareRegistry, ToolOrchestrator, type ToolOrchestratorCallbacks, type ToolOrchestratorConfig, ToolRegistry, type ToolRegistryOptions, type ToolResult, type ToolResultBlock, type ToolResultContent, type ToolResultData, type ToolRuntimeContext, type ToolUseBlock, type TraceGraph, type TraceGraphEdge, type TraceGraphNode, type TrackContext, type TranscriptEvent, type TranscriptEventData, type TranscriptEventType, TranscriptWriter, type TranscriptionResult, type TranscriptionSegment, type TransitionConfig, type TurnDiffSummary, TurnDiffTracker, type TurnDiffTrackerOptions, type TurnFileDiff, TurnRestoreManager, UnifiedExecManager, type UnifiedExecOutput, type UnifiedExecOutputChunk, type UnifiedExecOutputDelta, type UnifiedExecProcess, type UnifiedExecReadDeltaOptions, type UnifiedExecStartOptions, type UnifiedExecStatus, type UnifiedExecStream, type ValidateXenoSdkApiKeyOptions, type VectorDocument, VectorMemoryStore, type VectorSearchResult, type VectorStoreAdapter, type VectorStoreOptions, type VideoToolAdapter, WORKFLOW_CAPABILITIES, WORKFLOW_TOOL_NAMES, type WebSearchResult, type WorkflowAgentOptions, type WorkflowExecutionResult, type WorkflowInfo, type WorkflowNodeConfig, type WorkflowToolAdapter, WorkspaceIndex, type WorkspaceScanOptions, XENO_API_BASE, XENO_RT_DEFAULT_URL, XenoAppServer, type XenoAppServerOptions, XenoAuthError, type XenoAuthErrorCode, type XenoConfig, type XenoCredentialSource, type XenoCredentialType, type XenoJwtPayload, type XenoProjectState, type XenoResolvedApiKey, type XenoRuntimeEvent, type XenoRuntimeEventBase, XenoRuntimeEventBus, type XenoRuntimeEventDraft, type XenoRuntimeEventSink, type XenoRuntimeEventType, type XenoThreadRunOptions, type XenoThreadRunResult, XenoTraceGraphRecorder, type XenoUserConfig, activateSessionRuntime, addProjectAllowedDirectory, addProjectAllowedTool, appendBoundedShellOutput, appendGuidanceToResult, approveMcpServer, areSignalHandlersInstalled, artifactCompareTool, askUserTool, assertUsableXenoApiKey, auditRiskLevelForTool, backgroundProcessManager, bashTool, benchmarkCodingTools, buildAuditReplayReport, buildAuditTraceReport, buildDefaultSubagentTasks, buildDelegatedRoleSystemPrompt, buildMotionSystemPrompt, buildPixelSystemPrompt, buildPromptMemoryContext, buildSoundSystemPrompt, buildSystemPrompt, calculateCost, canonicalizeToolName, checkSandbox, cleanupSessionRuntime, clearMcpServerApproval, clearProjectAllowedTools, clearProjectLastSessionSummary, clearProjectMcpApproval, clearProjectMcpApprovals, coerceSubagentRole, coerceSubagentTeamPreset, configureSearch, copyTextToClipboard, create3DTools, createArchitectTools, createArtifactCompareTool, createAskUserTool, createAudioTools, createAuditBackedPermissionEngine, createBashTool, createDefaultToolRegistry, createDelegatedXenoAgent, createDispatchAgentTool, createDocsTools, createEditTool, createElfAnalyzeTool, createEngineTools, createGcodeAnalyzeTool, createGlobTool, createGrepTool, createHtmlSanitizerAuditTool, createImageTools, createLsTool, createMcpPromptRegisteredTool, createMcpRegisteredTool, createMcpResourceRegisteredTool, createMemoryReadTool, createMemoryWriteTool, createNotebookEditTool, createNotebookReadTool, createNotesTools, createReadImageTool, createReadTool, createSheetsTools, createSlidesTools, createSpeechRecognizer, createSqliteAnalyzeTool, createThinkTool, createToolAlias, createToolRuntimeContext, createVideoTools, createWebSearchTool, createWorkflowTools, createWriteTool, createXenoAgent, decodeJwtPayload, defaultToolRuntimeContext, deleteSession, denyMcpServer, detectLanguage, deterministicReduce, dispatchAgentTool, editTool, elfAnalyzeTool, ensureConfigDir, ensureProjectStateDir, extractToolPath, forgetRecentSession, forgetRecentSessionById, formatBoundedShellOutput, formatCost, formatJsonSchemaErrors, formatModelList, formatPromptContextBreakdown, gcodeAnalyzeTool, generateSessionId, getAvailableModels, getBenchmarkComputeBudgetHintForCommand, getBenchmarkForegroundTimeoutForCommand, getChatModels, getConfigDir, getDefaultProviderRegistry, getGlobIgnores, getGrepIgnores, getHighRiskPermissions, getJwtExpiry, getLogLevel, getMcpApprovalDecision, getMcpPromptToolName, getMcpResourceToolName, getMcpToolName, getModelName, getPersistentShellSession, getPersistentShellSpawnSpec, getProjectLastSessionSummary, getProjectMcpApproval, getProjectStatePath, getRecentSessionsIndexPath, getSubagentTeamPresetDefinition, getToolRiskLevel, gitBranchTool, gitCommitTool, gitDiffTool, gitLogTool, gitStatusTool, globTool, grepTool, hasProjectOnboardingCompleted, htmlSanitizerAuditTool, initializeSessionRuntime, inspectRuntimeManifests, inspectSystemPrompt, installSignalHandlers, isChatModel, isDangerousCommand, isExpiredJwt, isJwt, isLocalModel, isNotBeforeJwt, isPathWithinAllowed, isScreenCaptureAvailable, isSpeechRecognitionAvailable, isValidModel, isValidSessionId, isWorkspaceTrusted, listProjectAllowedTools, listProjectMcpApprovals, listSessions, loadConfig, loadConfiguredMcpServers, loadMcpConfigFile, loadProjectConfig, loadProjectState, loadRecentSessionsIndex, loadSession, lookupRecentSession, lsTool, matchesMcpRegistryEntryPolicy, memoryReadTool, memoryWriteTool, mergeConfigs, normalizeSubagentBranchPolicy, normalizeWorkingDirectory, notebookEditTool, notebookReadTool, parseSessionId, parseSubagentRemoteMcpPolicy, parseSubagentRoleList, preflightLocalModel, publishPlugin, readImageTool, readManifestFromDisk, readSessionFormatVersion, readTool, readXenoApiKey, recordRecentSession, registerShutdownCleanup, registry, removeMcpServerConfig, removeProjectAllowedTool, renderAuditReplayMarkdown, renderAuditReplayReport, renderAuditTraceMarkdown, renderAuditTraceReport, renderAuditTraceSummaries, renderCodingBenchmarkMarkdown, renderCodingBenchmarkReport, requestBackground, resetAllPersistentShellSessions, resetBashBenchmarkGuards, resetMcpServerApprovals, resetPersistentShellSession, resolveDelegatedExecutionMode, resolveSubagentRemoteMcpAccess, resolveSubagentWorkflowAnswer, resolveXenoSdkApiKey, runDelegatedXenoTurn, runDelegationPlan, runSubagentWorkflow, runXenoThread, runXenoThreadStreamed, sanitizeEnvironment, saveConfig, saveMcpConfigFile, saveProjectState, saveSession, scaffoldPlugin, scoreMemories, setLogLevel, setProjectLastSessionSummary, setProjectMcpApproval, setProjectOnboardingCompleted, setWorkspaceTrusted, setupAIHandlers, shouldSourceShellProfile, shouldUseIsolatedStdinForCommand, sqliteAnalyzeTool, summarizeAuditInputRecord, summarizeAuditTraces, summarizeRuntimeInput, summarizeSubagentResults, syncMcpToolsToRegistry, taskOutputTool, taskStopTool, testPlugin, thinkTool, toLLMProvider, unifiedExecManager, updateProjectState, upsertMcpServerConfig, validateDelegationPlan, validateJsonSchema, validateManifest, validateXenoSdkApiKey, webFetchTool, webSearchTool, writeTool };