@xenosystem/agent-sdk 0.8.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +511 -0
  3. package/dist/agents/index.cjs +17 -0
  4. package/dist/agents/index.d.cts +244 -0
  5. package/dist/agents/index.d.ts +244 -0
  6. package/dist/agents/index.js +17 -0
  7. package/dist/agents/metafile-cjs.json +1 -0
  8. package/dist/agents/metafile-esm.json +1 -0
  9. package/dist/artifacts/browser.cjs +1 -0
  10. package/dist/artifacts/browser.d.cts +8 -0
  11. package/dist/artifacts/browser.d.ts +8 -0
  12. package/dist/artifacts/browser.js +1 -0
  13. package/dist/artifacts/diff-artifact-C2tQZWcs.d.cts +354 -0
  14. package/dist/artifacts/diff-artifact-C2tQZWcs.d.ts +354 -0
  15. package/dist/artifacts/index.cjs +10 -0
  16. package/dist/artifacts/index.d.cts +588 -0
  17. package/dist/artifacts/index.d.ts +588 -0
  18. package/dist/artifacts/index.js +10 -0
  19. package/dist/artifacts/metafile-cjs.json +1 -0
  20. package/dist/artifacts/metafile-esm.json +1 -0
  21. package/dist/automation/index.cjs +438 -0
  22. package/dist/automation/index.d.cts +878 -0
  23. package/dist/automation/index.d.ts +878 -0
  24. package/dist/automation/index.js +438 -0
  25. package/dist/automation/metafile-cjs.json +1 -0
  26. package/dist/automation/metafile-esm.json +1 -0
  27. package/dist/control-plane/index.cjs +7 -0
  28. package/dist/control-plane/index.d.cts +403 -0
  29. package/dist/control-plane/index.d.ts +403 -0
  30. package/dist/control-plane/index.js +7 -0
  31. package/dist/control-plane/metafile-cjs.json +1 -0
  32. package/dist/control-plane/metafile-esm.json +1 -0
  33. package/dist/control-room/index.cjs +1 -0
  34. package/dist/control-room/index.d.cts +216 -0
  35. package/dist/control-room/index.d.ts +216 -0
  36. package/dist/control-room/index.js +1 -0
  37. package/dist/control-room/metafile-cjs.json +1 -0
  38. package/dist/control-room/metafile-esm.json +1 -0
  39. package/dist/electron/index.cjs +1476 -0
  40. package/dist/electron/index.d.cts +1583 -0
  41. package/dist/electron/index.d.ts +1583 -0
  42. package/dist/electron/index.js +1476 -0
  43. package/dist/electron/metafile-cjs.json +1 -0
  44. package/dist/electron/metafile-esm.json +1 -0
  45. package/dist/governance/index.cjs +33 -0
  46. package/dist/governance/index.d.cts +397 -0
  47. package/dist/governance/index.d.ts +397 -0
  48. package/dist/governance/index.js +33 -0
  49. package/dist/governance/metafile-cjs.json +1 -0
  50. package/dist/governance/metafile-esm.json +1 -0
  51. package/dist/hooks/index.cjs +9 -0
  52. package/dist/hooks/index.d.cts +198 -0
  53. package/dist/hooks/index.d.ts +198 -0
  54. package/dist/hooks/index.js +9 -0
  55. package/dist/hooks/metafile-cjs.json +1 -0
  56. package/dist/hooks/metafile-esm.json +1 -0
  57. package/dist/hosted/index.cjs +1 -0
  58. package/dist/hosted/index.d.cts +490 -0
  59. package/dist/hosted/index.d.ts +490 -0
  60. package/dist/hosted/index.js +1 -0
  61. package/dist/hosted/metafile-cjs.json +1 -0
  62. package/dist/hosted/metafile-esm.json +1 -0
  63. package/dist/index.cjs +2161 -0
  64. package/dist/index.d.cts +12259 -0
  65. package/dist/index.d.ts +12259 -0
  66. package/dist/index.js +2161 -0
  67. package/dist/intelligence/index.cjs +10 -0
  68. package/dist/intelligence/index.d.cts +220 -0
  69. package/dist/intelligence/index.d.ts +220 -0
  70. package/dist/intelligence/index.js +10 -0
  71. package/dist/intelligence/metafile-cjs.json +1 -0
  72. package/dist/intelligence/metafile-esm.json +1 -0
  73. package/dist/mcp/index.cjs +28 -0
  74. package/dist/mcp/index.d.cts +960 -0
  75. package/dist/mcp/index.d.ts +960 -0
  76. package/dist/mcp/index.js +28 -0
  77. package/dist/mcp/metafile-cjs.json +1 -0
  78. package/dist/mcp/metafile-esm.json +1 -0
  79. package/dist/metafile-cjs.json +1 -0
  80. package/dist/metafile-esm.json +1 -0
  81. package/dist/oracle/index.cjs +1 -0
  82. package/dist/oracle/index.d.cts +310 -0
  83. package/dist/oracle/index.d.ts +310 -0
  84. package/dist/oracle/index.js +1 -0
  85. package/dist/oracle/metafile-cjs.json +1 -0
  86. package/dist/oracle/metafile-esm.json +1 -0
  87. package/dist/providers/index.cjs +11 -0
  88. package/dist/providers/index.d.cts +462 -0
  89. package/dist/providers/index.d.ts +462 -0
  90. package/dist/providers/index.js +11 -0
  91. package/dist/providers/metafile-cjs.json +1 -0
  92. package/dist/providers/metafile-esm.json +1 -0
  93. package/dist/recipes/index.cjs +2 -0
  94. package/dist/recipes/index.d.cts +86 -0
  95. package/dist/recipes/index.d.ts +86 -0
  96. package/dist/recipes/index.js +2 -0
  97. package/dist/recipes/metafile-cjs.json +1 -0
  98. package/dist/recipes/metafile-esm.json +1 -0
  99. package/dist/research/index.cjs +3 -0
  100. package/dist/research/index.d.cts +285 -0
  101. package/dist/research/index.d.ts +285 -0
  102. package/dist/research/index.js +3 -0
  103. package/dist/research/metafile-cjs.json +1 -0
  104. package/dist/research/metafile-esm.json +1 -0
  105. package/dist/session/index.cjs +56 -0
  106. package/dist/session/index.d.cts +523 -0
  107. package/dist/session/index.d.ts +523 -0
  108. package/dist/session/index.js +56 -0
  109. package/dist/session/metafile-cjs.json +1 -0
  110. package/dist/session/metafile-esm.json +1 -0
  111. package/dist/sharing/index.cjs +4 -0
  112. package/dist/sharing/index.d.cts +272 -0
  113. package/dist/sharing/index.d.ts +272 -0
  114. package/dist/sharing/index.js +4 -0
  115. package/dist/sharing/metafile-cjs.json +1 -0
  116. package/dist/sharing/metafile-esm.json +1 -0
  117. package/dist/skills/index.cjs +6 -0
  118. package/dist/skills/index.d.cts +277 -0
  119. package/dist/skills/index.d.ts +277 -0
  120. package/dist/skills/index.js +6 -0
  121. package/dist/skills/metafile-cjs.json +1 -0
  122. package/dist/skills/metafile-esm.json +1 -0
  123. package/dist/soul/index.cjs +32 -0
  124. package/dist/soul/index.d.cts +138 -0
  125. package/dist/soul/index.d.ts +138 -0
  126. package/dist/soul/index.js +32 -0
  127. package/dist/soul/metafile-cjs.json +1 -0
  128. package/dist/soul/metafile-esm.json +1 -0
  129. package/dist/terminal/index.cjs +4 -0
  130. package/dist/terminal/index.d.cts +55 -0
  131. package/dist/terminal/index.d.ts +55 -0
  132. package/dist/terminal/index.js +4 -0
  133. package/dist/terminal/metafile-cjs.json +1 -0
  134. package/dist/terminal/metafile-esm.json +1 -0
  135. package/dist/ui/index.cjs +35 -0
  136. package/dist/ui/index.d.cts +298 -0
  137. package/dist/ui/index.d.ts +298 -0
  138. package/dist/ui/index.js +35 -0
  139. package/dist/ui/metafile-cjs.json +1 -0
  140. package/dist/ui/metafile-esm.json +1 -0
  141. package/dist/utils/index.cjs +23 -0
  142. package/dist/utils/index.d.cts +245 -0
  143. package/dist/utils/index.d.ts +245 -0
  144. package/dist/utils/index.js +23 -0
  145. package/dist/utils/metafile-cjs.json +1 -0
  146. package/dist/utils/metafile-esm.json +1 -0
  147. package/native/mxc/LICENSE.microsoft-mxc-sdk.md +21 -0
  148. package/native/mxc/README.md +25 -0
  149. package/native/mxc/bin/arm64/lxc-exec +0 -0
  150. package/native/mxc/bin/arm64/mxc-exec-mac +0 -0
  151. package/native/mxc/bin/arm64/wxc-exec.exe +0 -0
  152. package/native/mxc/bin/arm64/wxc-host-prep.exe +0 -0
  153. package/native/mxc/bin/x64/lxc-exec +0 -0
  154. package/native/mxc/bin/x64/wxc-exec.exe +0 -0
  155. package/native/mxc/bin/x64/wxc-host-prep.exe +0 -0
  156. package/native/mxc/package.json +58 -0
  157. package/ownership/CLEAN_ROOM_CONTRIBUTOR_GUIDE.md +63 -0
  158. package/ownership/audit.mjs +727 -0
  159. package/ownership/evidence/PROPRIETARY-COMMAND-1/implementation-record.md +77 -0
  160. package/ownership/evidence/PROPRIETARY-COMMAND-1/provenance-review.md +51 -0
  161. package/ownership/evidence/PROPRIETARY-MEDIA-1/implementation-record.md +131 -0
  162. package/ownership/evidence/PROPRIETARY-MEDIA-1/provenance-review.md +50 -0
  163. package/ownership/evidence/PROPRIETARY-PTY-1/implementation-record.md +86 -0
  164. package/ownership/evidence/PROPRIETARY-PTY-1/provenance-review.md +52 -0
  165. package/ownership/evidence/PROPRIETARY-RUNTIME-1/implementation-record.md +68 -0
  166. package/ownership/evidence/PROPRIETARY-RUNTIME-1/provenance-review.md +32 -0
  167. package/ownership/evidence/PROPRIETARY-TOOLCHAIN-1/implementation-record.md +53 -0
  168. package/ownership/evidence/PROPRIETARY-TOOLCHAIN-1/provenance-review.md +32 -0
  169. package/ownership/evidence/PROPRIETARY-UI-1/implementation-record.md +96 -0
  170. package/ownership/evidence/PROPRIETARY-UI-1/provenance-review.md +46 -0
  171. package/ownership/ownership-policy.json +232 -0
  172. package/ownership/ownership-policy.schema.json +192 -0
  173. package/ownership/templates/clean-room-implementation-record.md +70 -0
  174. package/ownership/templates/provenance-review.md +51 -0
  175. package/package.json +209 -0
@@ -0,0 +1,298 @@
1
+ interface ImageUrlBlock {
2
+ type: "image_url";
3
+ image_url: {
4
+ url: string;
5
+ detail?: "auto" | "low" | "high";
6
+ };
7
+ }
8
+ interface ResourceContentBlock {
9
+ type: "resource";
10
+ uri?: string;
11
+ mimeType?: string;
12
+ text?: string;
13
+ data?: string;
14
+ }
15
+ type ToolAssistantContentBlock = TextBlock | ImageUrlBlock | ResourceContentBlock;
16
+ type ToolOperationState = "registered" | "starting" | "running_foreground" | "running_background" | "waiting_for_input" | "stalled" | "verifying" | "completed" | "failed" | "timed_out" | "cancelled" | "orphaned";
17
+ type ToolCompletionPolicy = "await" | "observe" | "detach";
18
+ interface ExpectedOutputContract {
19
+ path: string;
20
+ kind?: "file" | "directory";
21
+ nonEmpty?: boolean;
22
+ }
23
+ interface ToolEvidence {
24
+ id: string;
25
+ kind: "artifact" | "process" | "verification";
26
+ status: "pending" | "verified" | "failed";
27
+ path?: string;
28
+ observedAt: string;
29
+ operationId: string;
30
+ detail?: Record<string, string | number | boolean | null>;
31
+ }
32
+ interface ToolOperationSnapshot {
33
+ schemaVersion: 1;
34
+ operationId: string;
35
+ turnId: string;
36
+ generation: number;
37
+ toolCallId: string;
38
+ toolName: string;
39
+ ownerSessionId?: string;
40
+ state: ToolOperationState;
41
+ terminal: boolean;
42
+ presentation: "foreground" | "background";
43
+ completionPolicy: ToolCompletionPolicy;
44
+ promotable: boolean;
45
+ processId?: string;
46
+ taskId?: string;
47
+ pid?: number;
48
+ commandFingerprint?: string;
49
+ outputPath?: string;
50
+ startedAt: string;
51
+ lastActivityAt: string;
52
+ deadlineAt?: string;
53
+ elapsedMs: number;
54
+ idleMs: number;
55
+ outputBytes: number;
56
+ nextOffset: number;
57
+ exitCode?: number | null;
58
+ completionReason?: string;
59
+ suggestedNextAction?: string;
60
+ expectedOutputs?: ExpectedOutputContract[];
61
+ evidence?: ToolEvidence[];
62
+ }
63
+ interface ToolResult {
64
+ success: boolean;
65
+ output: string;
66
+ error?: string;
67
+ errorCode?: string;
68
+ errorDetails?: Record<string, unknown>;
69
+ assistantContent?: ToolAssistantContentBlock[];
70
+ assistantOnlyContent?: ToolAssistantContentBlock[];
71
+ operation?: ToolOperationSnapshot;
72
+ evidence?: ToolEvidence[];
73
+ retryable?: boolean;
74
+ }
75
+ interface TextBlock {
76
+ type: "text";
77
+ text: string;
78
+ }
79
+ type PermissionPromptOperation = "generic" | "filesystem" | "write" | "edit" | "bash";
80
+ interface PermissionPromptPreviewLine {
81
+ kind: "meta" | "context" | "add" | "remove";
82
+ text: string;
83
+ }
84
+ interface PermissionPromptPreview {
85
+ title: string;
86
+ summary?: string;
87
+ lines: PermissionPromptPreviewLine[];
88
+ truncated?: boolean;
89
+ }
90
+ declare const XENO_UI_RENDERER_API_VERSION: 1;
91
+ type AgentStatus = "idle" | "thinking" | "executing" | "error" | "disconnected";
92
+ type ToolCallStatus = "pending" | "running" | "success" | "error";
93
+ type PermissionDecision = "allow" | "always" | "deny";
94
+ interface ChatMessage {
95
+ id: string;
96
+ role: "user" | "assistant";
97
+ content: string;
98
+ timestamp: number;
99
+ isStreaming?: boolean;
100
+ }
101
+ interface ToolCallEvent {
102
+ id: string;
103
+ toolName: string;
104
+ input: Record<string, unknown>;
105
+ status: ToolCallStatus;
106
+ result?: ToolResult;
107
+ durationMs?: number;
108
+ timestamp: number;
109
+ }
110
+ interface ErrorEvent {
111
+ id: string;
112
+ message: string;
113
+ retryable: boolean;
114
+ timestamp: number;
115
+ }
116
+ type ConversationItem = {
117
+ type: "message";
118
+ data: ChatMessage;
119
+ } | {
120
+ type: "tool_call";
121
+ data: ToolCallEvent;
122
+ } | {
123
+ type: "error";
124
+ data: ErrorEvent;
125
+ };
126
+ interface AgentUiPermissionRequest {
127
+ id: string;
128
+ toolName: string;
129
+ detail: string;
130
+ description?: string;
131
+ operation?: PermissionPromptOperation;
132
+ preview?: PermissionPromptPreview;
133
+ riskLevel: "low" | "medium" | "high";
134
+ timestamp: number;
135
+ }
136
+ interface TokenUsage {
137
+ input: number;
138
+ output: number;
139
+ total: number;
140
+ }
141
+ interface AgentUiAgent {
142
+ readonly tokenUsage: TokenUsage;
143
+ run(prompt: string): Promise<unknown>;
144
+ cancelCurrentTurn(): void;
145
+ }
146
+ interface AgentUiSnapshot {
147
+ apiVersion: typeof XENO_UI_RENDERER_API_VERSION;
148
+ revision: number;
149
+ items: readonly ConversationItem[];
150
+ isProcessing: boolean;
151
+ status: AgentStatus;
152
+ tokenUsage: Readonly<TokenUsage>;
153
+ permissionRequest: Readonly<AgentUiPermissionRequest> | null;
154
+ lastUserMessage: string | null;
155
+ }
156
+ type AgentUiListener = (snapshot: AgentUiSnapshot) => void;
157
+ interface AgentUiControllerOptions {
158
+ agent: AgentUiAgent;
159
+ enablePermissionRequests?: boolean;
160
+ now?: () => number;
161
+ createId?: () => string;
162
+ }
163
+ interface AgentUiController {
164
+ readonly apiVersion: typeof XENO_UI_RENDERER_API_VERSION;
165
+ getSnapshot(): AgentUiSnapshot;
166
+ subscribe(listener: AgentUiListener): () => void;
167
+ sendMessage(text: string): Promise<boolean>;
168
+ cancelExecution(): void;
169
+ clearMessages(): void;
170
+ retryLastMessage(): Promise<boolean>;
171
+ resolvePermission(requestId: string, decision: PermissionDecision): boolean;
172
+ dispose(): void;
173
+ }
174
+ interface AgentUiViewOptions {
175
+ agentName?: string;
176
+ regionLabel?: string;
177
+ inputLabel?: string;
178
+ inputPlaceholder?: string;
179
+ }
180
+ interface AgentUiTimelineEntryView {
181
+ key: string;
182
+ kind: "user-message" | "assistant-message" | "tool-call" | "error";
183
+ role: "article" | "status" | "alert";
184
+ accessibleName: string;
185
+ text: string;
186
+ detail?: string;
187
+ state?: ToolCallStatus;
188
+ retryable?: boolean;
189
+ streaming?: boolean;
190
+ }
191
+ interface AgentUiPermissionView {
192
+ role: "alertdialog";
193
+ accessibleName: string;
194
+ description: string;
195
+ riskLevel: "low" | "medium" | "high";
196
+ requestId: string;
197
+ controls: readonly {
198
+ label: string;
199
+ decision: PermissionDecision;
200
+ }[];
201
+ }
202
+ interface AgentUiView {
203
+ apiVersion: typeof XENO_UI_RENDERER_API_VERSION;
204
+ revision: number;
205
+ region: {
206
+ role: "region";
207
+ accessibleName: string;
208
+ };
209
+ header: {
210
+ title: string;
211
+ statusRole: "status";
212
+ statusText: string;
213
+ tokenText: string;
214
+ };
215
+ timeline: {
216
+ role: "log";
217
+ live: "polite";
218
+ busy: boolean;
219
+ entries: readonly AgentUiTimelineEntryView[];
220
+ };
221
+ permission: AgentUiPermissionView | null;
222
+ composer: {
223
+ role: "form";
224
+ inputLabel: string;
225
+ placeholder: string;
226
+ disabled: boolean;
227
+ sendLabel: string;
228
+ cancelLabel: string;
229
+ };
230
+ }
231
+ type AgentUiAction = {
232
+ type: "send";
233
+ text: string;
234
+ } | {
235
+ type: "cancel";
236
+ } | {
237
+ type: "clear";
238
+ } | {
239
+ type: "retry";
240
+ } | {
241
+ type: "permission";
242
+ requestId: string;
243
+ decision: PermissionDecision;
244
+ };
245
+ interface AgentUiDomOptions extends AgentUiViewOptions {
246
+ className?: string;
247
+ injectStyles?: boolean;
248
+ styleNonce?: string;
249
+ onClose?: () => void;
250
+ }
251
+ interface AgentUiDomHandle {
252
+ readonly element: HTMLElement;
253
+ render(): void;
254
+ focusInput(): void;
255
+ dispose(): void;
256
+ }
257
+ declare function createAgentUiController(options: AgentUiControllerOptions): AgentUiController;
258
+ declare function mountAgentUi(target: HTMLElement, controller: AgentUiController, options?: AgentUiDomOptions): AgentUiDomHandle;
259
+ type MarkdownSegment = {
260
+ kind: "text";
261
+ text: string;
262
+ } | {
263
+ kind: "code-block";
264
+ language: string;
265
+ code: string;
266
+ } | {
267
+ kind: "inline-code";
268
+ code: string;
269
+ } | {
270
+ kind: "strong";
271
+ text: string;
272
+ } | {
273
+ kind: "emphasis";
274
+ text: string;
275
+ } | {
276
+ kind: "link";
277
+ text: string;
278
+ href: string;
279
+ };
280
+ declare function parseMarkdown(text: string): MarkdownSegment[];
281
+ declare function isSafeMarkdownHref(href: string): boolean;
282
+ declare const xenoUiTokens: Readonly<{
283
+ background: "#101214";
284
+ surface: "#181b1f";
285
+ surfaceRaised: "#20242a";
286
+ border: "#343a42";
287
+ text: "#f2f4f7";
288
+ textMuted: "#aab2bd";
289
+ accent: "#5da9e9";
290
+ success: "#56b881";
291
+ warning: "#e7b65a";
292
+ danger: "#e57373";
293
+ focus: "#8bc5f4";
294
+ }>;
295
+ declare const xenoUiCss = "\n.xeno-ui{box-sizing:border-box;display:grid;grid-template-rows:auto minmax(12rem,1fr) auto;width:min(32rem,100%);height:min(44rem,100%);min-height:24rem;border:1px solid var(--xeno-border,#343a42);background:var(--xeno-bg,#101214);color:var(--xeno-text,#f2f4f7);font:14px/1.45 ui-sans-serif,system-ui,-apple-system,\"Segoe UI\",sans-serif;letter-spacing:0}\n.xeno-ui *{box-sizing:border-box;letter-spacing:0}\n.xeno-ui__header{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-bottom:1px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f)}\n.xeno-ui__title{min-width:0;margin:0;font-size:.95rem;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.xeno-ui__status{margin-left:auto;color:var(--xeno-muted,#aab2bd);font-size:.78rem;text-transform:capitalize}\n.xeno-ui__tokens{color:var(--xeno-muted,#aab2bd);font-variant-numeric:tabular-nums;font-size:.75rem}\n.xeno-ui__timeline{min-height:0;overflow:auto;padding:1rem;scrollbar-gutter:stable}\n.xeno-ui__empty{display:grid;min-height:100%;place-items:center;color:var(--xeno-muted,#aab2bd)}\n.xeno-ui__entry{margin:0 0 .75rem;padding:.7rem .8rem;border-left:3px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f);white-space:pre-wrap;overflow-wrap:anywhere}\n.xeno-ui__entry--user{margin-left:12%;border-left-color:var(--xeno-accent,#5da9e9)}\n.xeno-ui__entry--assistant{margin-right:8%;border-left-color:var(--xeno-success,#56b881)}\n.xeno-ui__entry--tool{border-left-color:var(--xeno-warning,#e7b65a);font-family:ui-monospace,\"Cascadia Mono\",monospace;font-size:.82rem}\n.xeno-ui__entry--error{border-left-color:var(--xeno-danger,#e57373)}\n.xeno-ui__entry code{padding:.08rem .3rem;border:1px solid var(--xeno-border,#343a42);background:var(--xeno-raised,#20242a);font-family:ui-monospace,\"Cascadia Mono\",monospace}\n.xeno-ui__entry pre{max-width:100%;margin:.55rem 0 0;padding:.7rem;overflow:auto;border:1px solid var(--xeno-border,#343a42);background:#0b0d0f;white-space:pre}\n.xeno-ui__entry a{color:var(--xeno-accent,#5da9e9)}\n.xeno-ui__details{margin-top:.5rem;color:var(--xeno-muted,#aab2bd)}\n.xeno-ui__details pre{max-height:16rem}\n.xeno-ui__permission{margin:.75rem 1rem 0;padding:.8rem;border:1px solid var(--xeno-warning,#e7b65a);background:var(--xeno-raised,#20242a)}\n.xeno-ui__permission-title{margin:0 0 .35rem;font-size:.9rem}\n.xeno-ui__permission-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}\n.xeno-ui__composer{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.55rem;padding:.75rem 1rem;border-top:1px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f)}\n.xeno-ui__input{width:100%;min-height:2.75rem;max-height:9rem;resize:none;overflow-y:hidden;padding:.65rem .75rem;border:1px solid var(--xeno-border,#343a42);border-radius:4px;background:#0f1113;color:var(--xeno-text,#f2f4f7);font:inherit}\n.xeno-ui__controls{display:flex;align-items:flex-end;gap:.45rem}\n.xeno-ui__button{min-width:2.5rem;min-height:2.5rem;padding:.55rem .7rem;border:1px solid var(--xeno-border,#343a42);border-radius:4px;background:var(--xeno-raised,#20242a);color:var(--xeno-text,#f2f4f7);font:inherit;cursor:pointer}\n.xeno-ui__button:hover{border-color:var(--xeno-accent,#5da9e9)}\n.xeno-ui__button--primary{border-color:var(--xeno-accent,#5da9e9);background:#1b4f78}\n.xeno-ui__button--danger{border-color:var(--xeno-danger,#e57373)}\n.xeno-ui__button:disabled,.xeno-ui__input:disabled{cursor:not-allowed;opacity:.55}\n.xeno-ui :focus-visible{outline:2px solid var(--xeno-focus,#8bc5f4);outline-offset:2px}\n@media (max-width:36rem){.xeno-ui{width:100%;height:100%;border-left:0;border-right:0}.xeno-ui__entry--user,.xeno-ui__entry--assistant{margin-left:0;margin-right:0}.xeno-ui__composer{grid-template-columns:1fr}.xeno-ui__controls{justify-content:flex-end}}\n@media (prefers-reduced-motion:reduce){.xeno-ui *{scroll-behavior:auto!important;transition:none!important}}\n";
296
+ declare function createAgentUiView(snapshot: AgentUiSnapshot, options?: AgentUiViewOptions): AgentUiView;
297
+ declare function dispatchAgentUiAction(controller: AgentUiController, action: AgentUiAction): Promise<boolean>;
298
+ export { type AgentStatus, type AgentUiAction, type AgentUiAgent, type AgentUiController, type AgentUiControllerOptions, type AgentUiDomHandle, type AgentUiDomOptions, type AgentUiListener, type AgentUiPermissionRequest, type AgentUiSnapshot, type AgentUiTimelineEntryView, type AgentUiView, type AgentUiViewOptions, type ChatMessage, type ConversationItem, type ErrorEvent, type PermissionDecision, type TokenUsage, type ToolCallEvent, type ToolCallStatus, XENO_UI_RENDERER_API_VERSION, createAgentUiController, createAgentUiView, dispatchAgentUiAction, isSafeMarkdownHref, mountAgentUi, parseMarkdown, xenoUiCss, xenoUiTokens };
@@ -0,0 +1,35 @@
1
+ var Y={View:"Read",Replace:"Write",GlobTool:"Glob",GrepTool:"Grep",SQLiteAnalyze:"SqliteAnalyze",ReadNotebook:"NotebookRead",NotebookEditCell:"NotebookEdit"};function F(n){return Y[n]??n}var M=1;function J(n){let t=n.config;return t&&typeof t=="object"?t:null}function z(n){let t=n.tokenUsage;return{input:Number(t.input)||0,output:Number(t.output)||0,total:Number(t.total)||0}}function Q(n){let t=F(n);return["Read","Glob","Grep","Think","dispatch_agent"].includes(t)?"low":["Write","Edit"].includes(t)?"medium":t==="Bash"?"high":"medium"}function W(n){let t=n.toLowerCase();return["rate limit","429","network","timeout","econnrefused","api error","unreachable"].some(r=>t.includes(r))}function Z(n){let t=n.agent,r=n.now??Date.now,e=0,i=n.createId??(()=>`xeno-ui-${r()}-${++e}`),m=new Set,g=[],h="idle",N=z(t),E=null,d=null,k=null,v=null,c="",U=null,P=0,_=!1,b=!1,V=0,p=J(t),w=p?.permissionEngine,D=w?.promptFn;function T(){return Object.freeze({apiVersion:1,revision:V,items:Object.freeze([...g]),isProcessing:_,status:h,tokenUsage:Object.freeze({...N}),permissionRequest:E?Object.freeze({...E}):null,lastUserMessage:k})}function y(){V+=1;let s=T();for(let l of[...m])l(s)}function R(s){g=[...g,s],y()}function O(s){let l=[...g];for(let x=l.length-1;x>=0;x-=1){let a=l[x];if(a?.type==="message"&&a.data.role==="assistant"){l[x]={type:"message",data:s(a.data)},g=l,y();return}}}function q(s,l){let x=[...g];for(let a=x.length-1;a>=0;a-=1){let u=x[a];if(u?.type==="tool_call"&&u.data.id===s){x[a]={type:"tool_call",data:l(u.data)},g=x,y();return}}}function o(){v&&(O(s=>({...s,isStreaming:!1})),v=null,c="")}function C(s){let l={id:i(),message:s,retryable:W(s),timestamp:r()};R({type:"error",data:l})}function f(s){p&&(p.onText=s.onText,p.onToolStart=s.onToolStart,p.onToolEnd=s.onToolEnd,p.onError=s.onError)}async function I(s){let l=s.trim();if(b||_||!l)return!1;_=!0,k=l,h="thinking",v=null,c="";let x={id:i(),role:"user",content:l,timestamp:r()};g=[...g,{type:"message",data:x}],y();let a={onText:p?.onText,onToolStart:p?.onToolStart,onToolEnd:p?.onToolEnd,onError:p?.onError};p&&(p.onText=u=>{a.onText?.(u),!b&&(c+=u,v?O(A=>({...A,content:c,isStreaming:!0})):(v=i(),R({type:"message",data:{id:v,role:"assistant",content:c,timestamp:r(),isStreaming:!0}})))},p.onToolStart=(u,A)=>{a.onToolStart?.(u,A),!b&&(o(),h="executing",U=i(),P=r(),R({type:"tool_call",data:{id:U,toolName:u,input:A,status:"running",timestamp:r()}}))},p.onToolEnd=(u,A)=>{a.onToolEnd?.(u,A),!b&&(U&&(q(U,K=>({...K,status:A.success?"success":"error",result:A,durationMs:Math.max(0,r()-P)})),U=null),h="thinking",y())},p.onError=(u,A)=>a.onError?.(u,A));try{await t.run(l),b||(o(),h="idle",N=z(t),y())}catch(u){if(!b){o();let A=u instanceof Error?u:new Error(String(u));h=A.name==="AgentInterruptedError"?"idle":"error",A.name!=="AgentInterruptedError"&&C(A.message),N=z(t),y()}}finally{_=!1,f(a),b||y()}return!0}return n.enablePermissionRequests&&w&&(w.promptFn=s=>(d&&d("deny"),new Promise(l=>{d=l,E={id:i(),toolName:s.toolName,detail:s.detail,description:s.description,operation:s.operation,preview:s.preview,riskLevel:Q(s.toolName),timestamp:r()},y()}))),{apiVersion:1,getSnapshot:T,subscribe(s){if(b)throw new Error("Agent UI controller is disposed");return m.add(s),s(T()),()=>m.delete(s)},sendMessage:I,cancelExecution(){!b&&_&&t.cancelCurrentTurn()},clearMessages(){b||(g=[],v=null,c="",y())},retryLastMessage(){return b||_||!k?Promise.resolve(!1):(g=g.filter((s,l,x)=>s.type!=="error"?!0:x.slice(l+1).some(a=>a.type!=="error")),h="idle",y(),I(k))},resolvePermission(s,l){if(b||!E||E.id!==s||!d)return!1;let x=d;return d=null,E=null,y(),x(l),!0},dispose(){b||(b=!0,d&&d("deny"),d=null,E=null,w&&(w.promptFn=D),m.clear())}}}function ee(n){let t=[],r=[[/```([\w-]*)\n([\s\S]*?)```/,e=>({kind:"code-block",language:e[1]??"",code:e[2]??""})],[/`([^`\n]+)`/,e=>({kind:"inline-code",code:e[1]??""})],[/\*\*(.+?)\*\*/,e=>({kind:"strong",text:e[1]??""})],[/\*([^*\n]+)\*/,e=>({kind:"emphasis",text:e[1]??""})],[/\[([^\]]+)\]\(([^)\s]+)\)/,e=>({kind:"link",text:e[1]??"",href:e[2]??""})]];for(let[e,i]of r){let m=n.match(e);m?.index!==void 0&&t.push({index:m.index,value:i(m),length:m[0].length})}return t.sort((e,i)=>e.index-i.index),t[0]??null}function H(n){let t=[],r=n;for(;r;){let e=ee(r);if(!e){t.push({kind:"text",text:r});break}e.index>0&&t.push({kind:"text",text:r.slice(0,e.index)}),t.push(e.value),r=r.slice(e.index+e.length)}return t}function $(n){try{let t=new URL(n,"https://xeno.invalid/");return t.protocol==="https:"||t.protocol==="http:"||t.protocol==="mailto:"}catch{return!1}}var te=Object.freeze({background:"#101214",surface:"#181b1f",surfaceRaised:"#20242a",border:"#343a42",text:"#f2f4f7",textMuted:"#aab2bd",accent:"#5da9e9",success:"#56b881",warning:"#e7b65a",danger:"#e57373",focus:"#8bc5f4"}),j=`
2
+ .xeno-ui{box-sizing:border-box;display:grid;grid-template-rows:auto minmax(12rem,1fr) auto;width:min(32rem,100%);height:min(44rem,100%);min-height:24rem;border:1px solid var(--xeno-border,#343a42);background:var(--xeno-bg,#101214);color:var(--xeno-text,#f2f4f7);font:14px/1.45 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;letter-spacing:0}
3
+ .xeno-ui *{box-sizing:border-box;letter-spacing:0}
4
+ .xeno-ui__header{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-bottom:1px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f)}
5
+ .xeno-ui__title{min-width:0;margin:0;font-size:.95rem;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
6
+ .xeno-ui__status{margin-left:auto;color:var(--xeno-muted,#aab2bd);font-size:.78rem;text-transform:capitalize}
7
+ .xeno-ui__tokens{color:var(--xeno-muted,#aab2bd);font-variant-numeric:tabular-nums;font-size:.75rem}
8
+ .xeno-ui__timeline{min-height:0;overflow:auto;padding:1rem;scrollbar-gutter:stable}
9
+ .xeno-ui__empty{display:grid;min-height:100%;place-items:center;color:var(--xeno-muted,#aab2bd)}
10
+ .xeno-ui__entry{margin:0 0 .75rem;padding:.7rem .8rem;border-left:3px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f);white-space:pre-wrap;overflow-wrap:anywhere}
11
+ .xeno-ui__entry--user{margin-left:12%;border-left-color:var(--xeno-accent,#5da9e9)}
12
+ .xeno-ui__entry--assistant{margin-right:8%;border-left-color:var(--xeno-success,#56b881)}
13
+ .xeno-ui__entry--tool{border-left-color:var(--xeno-warning,#e7b65a);font-family:ui-monospace,"Cascadia Mono",monospace;font-size:.82rem}
14
+ .xeno-ui__entry--error{border-left-color:var(--xeno-danger,#e57373)}
15
+ .xeno-ui__entry code{padding:.08rem .3rem;border:1px solid var(--xeno-border,#343a42);background:var(--xeno-raised,#20242a);font-family:ui-monospace,"Cascadia Mono",monospace}
16
+ .xeno-ui__entry pre{max-width:100%;margin:.55rem 0 0;padding:.7rem;overflow:auto;border:1px solid var(--xeno-border,#343a42);background:#0b0d0f;white-space:pre}
17
+ .xeno-ui__entry a{color:var(--xeno-accent,#5da9e9)}
18
+ .xeno-ui__details{margin-top:.5rem;color:var(--xeno-muted,#aab2bd)}
19
+ .xeno-ui__details pre{max-height:16rem}
20
+ .xeno-ui__permission{margin:.75rem 1rem 0;padding:.8rem;border:1px solid var(--xeno-warning,#e7b65a);background:var(--xeno-raised,#20242a)}
21
+ .xeno-ui__permission-title{margin:0 0 .35rem;font-size:.9rem}
22
+ .xeno-ui__permission-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}
23
+ .xeno-ui__composer{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.55rem;padding:.75rem 1rem;border-top:1px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f)}
24
+ .xeno-ui__input{width:100%;min-height:2.75rem;max-height:9rem;resize:none;overflow-y:hidden;padding:.65rem .75rem;border:1px solid var(--xeno-border,#343a42);border-radius:4px;background:#0f1113;color:var(--xeno-text,#f2f4f7);font:inherit}
25
+ .xeno-ui__controls{display:flex;align-items:flex-end;gap:.45rem}
26
+ .xeno-ui__button{min-width:2.5rem;min-height:2.5rem;padding:.55rem .7rem;border:1px solid var(--xeno-border,#343a42);border-radius:4px;background:var(--xeno-raised,#20242a);color:var(--xeno-text,#f2f4f7);font:inherit;cursor:pointer}
27
+ .xeno-ui__button:hover{border-color:var(--xeno-accent,#5da9e9)}
28
+ .xeno-ui__button--primary{border-color:var(--xeno-accent,#5da9e9);background:#1b4f78}
29
+ .xeno-ui__button--danger{border-color:var(--xeno-danger,#e57373)}
30
+ .xeno-ui__button:disabled,.xeno-ui__input:disabled{cursor:not-allowed;opacity:.55}
31
+ .xeno-ui :focus-visible{outline:2px solid var(--xeno-focus,#8bc5f4);outline-offset:2px}
32
+ @media (max-width:36rem){.xeno-ui{width:100%;height:100%;border-left:0;border-right:0}.xeno-ui__entry--user,.xeno-ui__entry--assistant{margin-left:0;margin-right:0}.xeno-ui__composer{grid-template-columns:1fr}.xeno-ui__controls{justify-content:flex-end}}
33
+ @media (prefers-reduced-motion:reduce){.xeno-ui *{scroll-behavior:auto!important;transition:none!important}}
34
+ `;var G=64*1024;function ne(n){let t;try{t=JSON.stringify(n,null,2)??String(n)}catch{t="[Unserializable value]"}return t.length<=G?t:`${t.slice(0,G)}
35
+ [truncated]`}function oe(n){if(n.type==="message"){let t=n.data.role==="assistant";return{key:n.data.id,kind:t?"assistant-message":"user-message",role:"article",accessibleName:t?"Assistant message":"Your message",text:n.data.content,streaming:n.data.isStreaming}}if(n.type==="tool_call"){let t=n.data.durationMs===void 0?"":` in ${n.data.durationMs} ms`;return{key:n.data.id,kind:"tool-call",role:"status",accessibleName:`${n.data.toolName} tool ${n.data.status}`,text:`${n.data.toolName}: ${n.data.status}${t}`,detail:ne({input:n.data.input,result:n.data.result}),state:n.data.status}}return{key:n.data.id,kind:"error",role:"alert",accessibleName:"Agent error",text:n.data.message,retryable:n.data.retryable}}function X(n,t={}){let r=t.agentName?.trim()||"Xeno Agent",e=n.permissionRequest;return{apiVersion:1,revision:n.revision,region:{role:"region",accessibleName:t.regionLabel?.trim()||`${r} chat`},header:{title:r,statusRole:"status",statusText:n.status,tokenText:`${n.tokenUsage.total.toLocaleString()} tokens`},timeline:{role:"log",live:"polite",busy:n.isProcessing,entries:n.items.map(oe)},permission:e?{role:"alertdialog",accessibleName:`Permission required for ${e.toolName}`,description:e.description||e.detail,riskLevel:e.riskLevel,requestId:e.id,controls:[{label:"Allow once",decision:"allow"},{label:"Always allow",decision:"always"},{label:"Deny",decision:"deny"}]}:null,composer:{role:"form",inputLabel:t.inputLabel?.trim()||"Message Xeno Agent",placeholder:t.inputPlaceholder?.trim()||"Message or command...",disabled:n.isProcessing,sendLabel:"Send",cancelLabel:"Cancel"}}}async function S(n,t){switch(t.type){case"send":return n.sendMessage(t.text);case"cancel":return n.cancelExecution(),!0;case"clear":return n.clearMessages(),!0;case"retry":return n.retryLastMessage();case"permission":return n.resolvePermission(t.requestId,t.decision)}}var B="xeno-owned-agent-ui-v1";function re(n,t,r){for(let e of H(r)){if(e.kind==="text"){t.append(n.createTextNode(e.text));continue}if(e.kind==="code-block"){let i=n.createElement("pre"),m=n.createElement("code");e.language&&(m.dataset.language=e.language),m.textContent=e.code,i.append(m),t.append(i);continue}if(e.kind==="inline-code"){let i=n.createElement("code");i.textContent=e.code,t.append(i);continue}if(e.kind==="strong"||e.kind==="emphasis"){let i=n.createElement(e.kind==="strong"?"strong":"em");i.textContent=e.text,t.append(i);continue}if(e.kind==="link"){if(!$(e.href)){t.append(n.createTextNode(e.text));continue}let i=n.createElement("a");i.textContent=e.text,i.href=e.href,i.rel="noopener noreferrer",(i.protocol==="http:"||i.protocol==="https:")&&(i.target="_blank"),t.append(i)}}}function L(n,t,r=""){let e=n.createElement("button");return e.type="button",e.className=`xeno-ui__button${r?` ${r}`:""}`,e.textContent=t,e}function ie(n,t,r){let e=n.createElement(t.role==="article"?"article":"div");if(e.className=`xeno-ui__entry xeno-ui__entry--${t.kind==="user-message"?"user":t.kind==="assistant-message"?"assistant":t.kind==="tool-call"?"tool":"error"}`,e.setAttribute("role",t.role),e.setAttribute("aria-label",t.accessibleName),e.dataset.xenoKey=t.key,t.streaming&&e.setAttribute("aria-busy","true"),re(n,e,t.text),t.detail){let i=n.createElement("details");i.className="xeno-ui__details";let m=n.createElement("summary");m.textContent="Details";let g=n.createElement("pre");g.textContent=t.detail,i.append(m,g),e.append(i)}if(t.retryable){let i=L(n,"Retry");i.addEventListener("click",()=>{S(r,{type:"retry"})}),e.append(n.createTextNode(" "),i)}return e}function se(n,t){if(n.getElementById(B))return;let r=n.createElement("style");r.id=B,t&&(r.nonce=t),r.textContent=j,n.head.append(r)}function ae(n,t,r={}){let e=n.ownerDocument;r.injectStyles!==!1&&se(e,r.styleNonce);let i=e.createElement("section");i.className=`xeno-ui${r.className?` ${r.className}`:""}`;let m=e.createElement("header");m.className="xeno-ui__header";let g=e.createElement("h2");g.className="xeno-ui__title";let h=e.createElement("span");h.className="xeno-ui__status",h.setAttribute("role","status"),h.setAttribute("aria-live","polite");let N=e.createElement("span");N.className="xeno-ui__tokens";let E=L(e,"Clear");if(E.setAttribute("aria-label","Clear conversation"),E.addEventListener("click",()=>{S(t,{type:"clear"})}),m.append(g,h,N,E),r.onClose){let o=L(e,"X");o.setAttribute("aria-label","Close agent chat"),o.addEventListener("click",r.onClose),m.append(o)}let d=e.createElement("div");d.className="xeno-ui__timeline",d.setAttribute("role","log"),d.setAttribute("aria-live","polite"),d.setAttribute("aria-relevant","additions text");let k=e.createElement("div"),v=e.createElement("form");v.className="xeno-ui__composer",v.setAttribute("role","form");let c=e.createElement("textarea");c.className="xeno-ui__input",c.rows=1;let U=e.createElement("div");U.className="xeno-ui__controls";let P=L(e,"Cancel","xeno-ui__button--danger");P.addEventListener("click",()=>{S(t,{type:"cancel"})});let _=L(e,"Send","xeno-ui__button--primary");_.type="submit",U.append(P,_),v.append(c,U),i.append(m,d,k,v),n.replaceChildren(i);function b(){c.style.height="auto";let o=44,C=144,f=Math.max(c.scrollHeight,o);c.style.height=`${Math.min(f,C)}px`,c.style.overflowY=f>C?"auto":"hidden"}async function V(){let o=c.value;await S(t,{type:"send",text:o})&&(c.value="",b())}v.addEventListener("submit",o=>{o.preventDefault(),V()}),c.addEventListener("keydown",o=>{o.key==="Enter"&&(o.ctrlKey||o.metaKey)&&(o.preventDefault(),V())}),c.addEventListener("input",b);let p=null,w=null;function D(o){if(o.permission&&p===o.permission.requestId&&k.children.length>0)return;if(k.replaceChildren(),!o.permission){if(p){let a=w??c;queueMicrotask(()=>a.focus())}p=null,w=null;return}let C=p!==o.permission.requestId;if(C){let a=e.activeElement;w=a&&"focus"in a?a:c,p=o.permission.requestId}let f=e.createElement("section");f.className="xeno-ui__permission",f.setAttribute("role",o.permission.role),f.setAttribute("aria-modal","true"),f.setAttribute("aria-label",o.permission.accessibleName),f.dataset.risk=o.permission.riskLevel;let I=e.createElement("h3");I.className="xeno-ui__permission-title",I.textContent=o.permission.accessibleName;let s=e.createElement("div");s.id=`xeno-ui-permission-${o.permission.requestId}`,s.textContent=o.permission.description,f.setAttribute("aria-describedby",s.id);let l=e.createElement("div");l.className="xeno-ui__permission-actions";let x=null;for(let a of o.permission.controls){let u=L(e,a.label,a.decision==="deny"?"xeno-ui__button--danger":"");u.dataset.decision=a.decision,x??=u,u.addEventListener("click",()=>{S(t,{type:"permission",requestId:o.permission.requestId,decision:a.decision})}),l.append(u)}f.append(I,s,l),k.append(f),C&&x&&queueMicrotask(()=>x?.focus())}function T(){let o=X(t.getSnapshot(),r);i.setAttribute("role",o.region.role),i.setAttribute("aria-label",o.region.accessibleName),g.textContent=o.header.title,h.textContent=o.header.statusText,N.textContent=o.header.tokenText,d.setAttribute("aria-busy",String(o.timeline.busy));let C=d.scrollHeight-d.scrollTop-d.clientHeight;if(o.timeline.entries.length===0){let f=e.createElement("div");f.className="xeno-ui__empty",f.textContent="No messages yet",d.replaceChildren(f)}else d.replaceChildren(...o.timeline.entries.map(f=>ie(e,f,t)));C<48&&(d.scrollTop=d.scrollHeight),D(o),c.disabled=o.composer.disabled,c.setAttribute("aria-label",o.composer.inputLabel),c.placeholder=o.composer.placeholder,_.textContent=o.composer.sendLabel,_.disabled=o.composer.disabled,P.textContent=o.composer.cancelLabel,P.hidden=!o.timeline.busy}let y=null,R=!1;function O(){let o=e.defaultView?.requestAnimationFrame;if(o){if(y!==null)return;y=o.call(e.defaultView,()=>{y=null,T()});return}R||(R=!0,queueMicrotask(()=>{R=!1,T()}))}let q=t.subscribe(O);return T(),b(),{element:i,render:T,focusInput(){c.focus()},dispose(){q(),y!==null&&e.defaultView?.cancelAnimationFrame&&e.defaultView.cancelAnimationFrame(y),i.remove()}}}export{M as XENO_UI_RENDERER_API_VERSION,Z as createAgentUiController,X as createAgentUiView,S as dispatchAgentUiAction,$ as isSafeMarkdownHref,ae as mountAgentUi,H as parseMarkdown,j as xenoUiCss,te as xenoUiTokens};
@@ -0,0 +1 @@
1
+ {"inputs":{"src/tools/tool-names.ts":{"bytes":718,"imports":[],"format":"esm"},"src/ui/types.ts":{"bytes":4452,"imports":[],"format":"esm"},"src/ui/controller.ts":{"bytes":11060,"imports":[{"path":"src/tools/tool-names.ts","kind":"import-statement","original":"../tools/tool-names.js"},{"path":"src/ui/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/ui/markdown.ts":{"bytes":2240,"imports":[],"format":"esm"},"src/ui/styles.ts":{"bytes":4303,"imports":[],"format":"esm"},"src/ui/view-model.ts":{"bytes":3870,"imports":[{"path":"src/ui/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/ui/dom-renderer.ts":{"bytes":12087,"imports":[{"path":"src/ui/markdown.ts","kind":"import-statement","original":"./markdown.js"},{"path":"src/ui/styles.ts","kind":"import-statement","original":"./styles.js"},{"path":"src/ui/view-model.ts","kind":"import-statement","original":"./view-model.js"}],"format":"esm"},"src/ui/index.ts":{"bytes":1094,"imports":[{"path":"src/ui/controller.ts","kind":"import-statement","original":"./controller.js"},{"path":"src/ui/dom-renderer.ts","kind":"import-statement","original":"./dom-renderer.js"},{"path":"src/ui/markdown.ts","kind":"import-statement","original":"./markdown.js"},{"path":"src/ui/styles.ts","kind":"import-statement","original":"./styles.js"},{"path":"src/ui/view-model.ts","kind":"import-statement","original":"./view-model.js"},{"path":"src/ui/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"}},"outputs":{"dist/ui/index.cjs":{"imports":[],"exports":[],"entryPoint":"src/ui/index.ts","inputs":{"src/ui/index.ts":{"bytesInOutput":257},"src/tools/tool-names.ts":{"bytesInOutput":189},"src/ui/types.ts":{"bytesInOutput":8},"src/ui/controller.ts":{"bytesInOutput":3516},"src/ui/markdown.ts":{"bytesInOutput":864},"src/ui/styles.ts":{"bytesInOutput":4161},"src/ui/view-model.ts":{"bytesInOutput":2008},"src/ui/dom-renderer.ts":{"bytesInOutput":6079}},"bytes":17700}}}
@@ -0,0 +1 @@
1
+ {"inputs":{"src/tools/tool-names.ts":{"bytes":718,"imports":[],"format":"esm"},"src/ui/types.ts":{"bytes":4452,"imports":[],"format":"esm"},"src/ui/controller.ts":{"bytes":11060,"imports":[{"path":"src/tools/tool-names.ts","kind":"import-statement","original":"../tools/tool-names.js"},{"path":"src/ui/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/ui/markdown.ts":{"bytes":2240,"imports":[],"format":"esm"},"src/ui/styles.ts":{"bytes":4303,"imports":[],"format":"esm"},"src/ui/view-model.ts":{"bytes":3870,"imports":[{"path":"src/ui/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/ui/dom-renderer.ts":{"bytes":12087,"imports":[{"path":"src/ui/markdown.ts","kind":"import-statement","original":"./markdown.js"},{"path":"src/ui/styles.ts","kind":"import-statement","original":"./styles.js"},{"path":"src/ui/view-model.ts","kind":"import-statement","original":"./view-model.js"}],"format":"esm"},"src/ui/index.ts":{"bytes":1094,"imports":[{"path":"src/ui/controller.ts","kind":"import-statement","original":"./controller.js"},{"path":"src/ui/dom-renderer.ts","kind":"import-statement","original":"./dom-renderer.js"},{"path":"src/ui/markdown.ts","kind":"import-statement","original":"./markdown.js"},{"path":"src/ui/styles.ts","kind":"import-statement","original":"./styles.js"},{"path":"src/ui/view-model.ts","kind":"import-statement","original":"./view-model.js"},{"path":"src/ui/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"}},"outputs":{"dist/ui/index.js":{"imports":[],"exports":["XENO_UI_RENDERER_API_VERSION","createAgentUiController","createAgentUiView","dispatchAgentUiAction","isSafeMarkdownHref","mountAgentUi","parseMarkdown","xenoUiCss","xenoUiTokens"],"entryPoint":"src/ui/index.ts","inputs":{"src/tools/tool-names.ts":{"bytesInOutput":187},"src/ui/types.ts":{"bytesInOutput":8},"src/ui/controller.ts":{"bytesInOutput":3510},"src/ui/index.ts":{"bytesInOutput":0},"src/ui/markdown.ts":{"bytesInOutput":864},"src/ui/styles.ts":{"bytesInOutput":4162},"src/ui/view-model.ts":{"bytesInOutput":2008},"src/ui/dom-renderer.ts":{"bytesInOutput":6080}},"bytes":17037}}}
@@ -0,0 +1,23 @@
1
+ "use strict";var mt=Object.create;var b=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var xt=Object.getPrototypeOf,yt=Object.prototype.hasOwnProperty;var wt=(t,e)=>{for(var n in e)b(t,n,{get:e[n],enumerable:!0})},B=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ht(e))!yt.call(t,o)&&o!==n&&b(t,o,{get:()=>e[o],enumerable:!(r=gt(e,o))||r.enumerable});return t};var C=(t,e,n)=>(n=t!=null?mt(xt(t)):{},B(e||!t||!t.__esModule?b(n,"default",{value:t,enumerable:!0}):n,t)),bt=t=>B(b({},"__esModule",{value:!0}),t);var Je={};wt(Je,{ApiTransientError:()=>w,HOME_DIR:()=>K,IS_LINUX:()=>Yt,IS_MAC:()=>zt,IS_WINDOWS:()=>U,LogLevel:()=>Z,OS_VERSION:()=>Gt,PLATFORM:()=>E,accountTextTokens:()=>he,appendLine:()=>kt,benchmarkLeakError:()=>Le,buildToolResultBlock:()=>qe,buildToolResultText:()=>pt,calculateCost:()=>Ee,commandMentionsBenchmarkLeak:()=>Be,conservativeTokenAccountingAdapter:()=>nt,copyTextToClipboard:()=>Te,createSafeRegex:()=>re,debug:()=>ae,decodeTextBuffer:()=>D,deleteDir:()=>Bt,deleteFile:()=>Lt,detectLineEnding:()=>W,detectPreferredLineEnding:()=>Mt,detectTextEncoding:()=>P,encodeTextBuffer:()=>F,ensureDir:()=>S,error:()=>le,estimateTokens:()=>rt,estimateTokensForModel:()=>et,existsSync:()=>$t,filterBenchmarkLeakPaths:()=>ve,findSimilarFile:()=>St,fitsInBudget:()=>ye,formatCost:()=>Re,getBenchmarkReferenceOverwriteHint:()=>Oe,getBoolean:()=>ne,getConfigDir:()=>Ut,getLogLevel:()=>se,getNumber:()=>ee,getProjectConfigDir:()=>Kt,getRetryErrorContext:()=>$,getShellName:()=>Qt,getString:()=>te,getToolResultTransportContent:()=>De,hasDir:()=>Rt,hasDisallowedAsciiControlCharacter:()=>He,hasFile:()=>Et,hasFrontmatter:()=>Wt,hasNonTextToolResultContent:()=>We,info:()=>ue,isBenchmarkLeakPath:()=>v,isBenchmarkMode:()=>N,isGitRepo:()=>Zt,isPathSafe:()=>Y,isRetryableError:()=>tt,listDirs:()=>vt,listFiles:()=>Nt,normalizeLineEndings:()=>j,parseDocument:()=>Dt,parseJsonLines:()=>It,readFileSafe:()=>Tt,readIfExists:()=>_t,readTextFile:()=>q,remainingBudget:()=>we,safeJsonParse:()=>Ot,safeJsonStringify:()=>Pt,safeRegexTest:()=>oe,safeResolvePath:()=>Xt,setLogLevel:()=>ie,stringifyDocument:()=>Ft,toTransportAssistantBlocks:()=>je,toolAssistantContentToText:()=>ft,toolResultContentToText:()=>Ie,truncateToTokens:()=>xe,validateRegexPattern:()=>Q,validateRequired:()=>Vt,warn:()=>ce,withRetry:()=>ge,writeAtomic:()=>O,writeTextFile:()=>At});module.exports=bt(Je);var y=require("node:fs"),g=require("node:fs"),c=C(require("node:fs/promises"),1),a=C(require("node:path"),1);function Et(t){try{return(0,g.existsSync)(t)&&(0,g.statSync)(t).isFile()}catch{return!1}}function Rt(t){try{return(0,g.existsSync)(t)&&(0,g.statSync)(t).isDirectory()}catch{return!1}}function Tt(t,e=""){try{return(0,y.readFileSync)(t,"utf-8")}catch{return e}}async function S(t){await c.mkdir(t,{recursive:!0})}async function O(t,e){let n=a.dirname(t);await S(n);let r=Math.random().toString(36).substring(2,15),o=`${t}.tmp.${process.pid}.${r}`;try{await c.writeFile(o,e),await c.rename(o,t)}finally{try{await c.unlink(o)}catch{}}}async function kt(t,e){let n=a.dirname(t);await S(n),await c.appendFile(t,e+`
2
+ `,"utf-8")}function P(t){return t.length>=3&&t[0]===239&&t[1]===187&&t[2]===191?"utf8-bom":t.length>=2&&t[0]===255&&t[1]===254?"utf16le":t.length>=2&&t[0]===254&&t[1]===255?"utf16be":"utf8"}function I(t){let e=Buffer.from(t);for(let n=0;n+1<e.length;n+=2){let r=e[n];e[n]=e[n+1],e[n+1]=r}return e}function D(t,e){switch(e){case"utf8-bom":return t.subarray(3).toString("utf8");case"utf16le":return t.subarray(2).toString("utf16le");case"utf16be":return I(t.subarray(2)).toString("utf16le");default:return t.toString("utf8")}}function F(t,e){switch(e){case"utf8-bom":return Buffer.concat([Buffer.from([239,187,191]),Buffer.from(t,"utf8")]);case"utf16le":return Buffer.concat([Buffer.from([255,254]),Buffer.from(t,"utf16le")]);case"utf16be":return Buffer.concat([Buffer.from([254,255]),I(Buffer.from(t,"utf16le"))]);default:return Buffer.from(t,"utf8")}}function W(t){return t.includes(`\r
3
+ `)?"CRLF":"LF"}function j(t,e){let n=t.replace(/\r\n/g,`
4
+ `);return e==="CRLF"?n.replace(/\n/g,`\r
5
+ `):n}async function q(t){let e=await c.readFile(t),n=P(e),r=D(e,n);return{content:r,encoding:n,lineEnding:W(r),sizeBytes:e.length}}async function At(t,e,n){let r=j(e,n?.lineEnding??"LF");await O(t,F(r,n?.encoding??"utf8"))}async function Mt(t){let e=new Set,n=a.resolve(t);for(;!e.has(n);){e.add(n);try{let o=(0,y.readdirSync)(n,{withFileTypes:!0}).filter(i=>i.isFile()).map(i=>i.name).sort();for(let i of o){if(i.startsWith("."))continue;let s=a.extname(i).toLowerCase();if([".ts",".tsx",".js",".jsx",".json",".md",".txt",".yaml",".yml",".css",".html",".xml",".sh",".ps1"].includes(s))try{let u=a.join(n,i),l=await q(u);if(l.content.length>0)return l.lineEnding}catch{}}}catch{}let r=a.dirname(n);if(r===n)break;n=r}return"LF"}function Ct(t,e,n){let r=[],o=[{dir:t,depth:0}],i=new Set;for(;o.length>0&&r.length<n;){let s=o.shift();if(!i.has(s.dir)){i.add(s.dir);try{let u=(0,y.readdirSync)(s.dir,{withFileTypes:!0});for(let l of u){let d=a.join(s.dir,l.name);if(l.isFile()){if(r.push(d),r.length>=n)break;continue}l.isDirectory()&&s.depth<e&&!l.name.startsWith(".")&&l.name!=="node_modules"&&o.push({dir:d,depth:s.depth+1})}}catch{}}}return r}function St(t){try{let e=a.dirname(t),n=a.basename(t,a.extname(t)).toLowerCase(),r=a.basename(t).toLowerCase(),i=[e,a.dirname(e)].flatMap(u=>Ct(u,2,500)),s=null;for(let u of i){let l=a.basename(u).toLowerCase(),d=a.basename(u,a.extname(u)).toLowerCase(),m=null;if(l===r?m=0:d===n?m=1:(l.includes(n)||n.includes(d))&&(m=2),m===null)continue;let M=a.relative(e,u).split(a.sep).length,L=m+M*.01;(!s||L<s.score)&&(s={filePath:u,score:L})}return s?.filePath??null}catch{}return null}async function _t(t){try{return await c.readFile(t,"utf-8")}catch(e){if(e.code==="ENOENT")return null;throw e}}function $t(t){return(0,g.existsSync)(t)}async function Nt(t,e){try{let r=(await c.readdir(t,{withFileTypes:!0})).filter(o=>o.isFile()).map(o=>a.join(t,o.name));return e&&(r=r.filter(o=>e.test(a.basename(o)))),r}catch(n){if(n.code==="ENOENT")return[];throw n}}async function vt(t){try{return(await c.readdir(t,{withFileTypes:!0})).filter(n=>n.isDirectory()).map(n=>a.join(t,n.name))}catch(e){if(e.code==="ENOENT")return[];throw e}}async function Lt(t){try{await c.unlink(t)}catch(e){if(e.code!=="ENOENT")throw e}}async function Bt(t){try{await c.rm(t,{recursive:!0,force:!0})}catch(e){if(e.code!=="ENOENT")throw e}}function Ot(t,e){try{return JSON.parse(t)}catch{return e}}function Pt(t,e="{}"){try{return JSON.stringify(t)}catch{return e}}function It(t){let e=[];for(let n of t.split(`
6
+ `)){let r=n.trim();if(r)try{e.push(JSON.parse(r))}catch{}}return e}function Dt(t){let e=jt(t);return{frontmatter:e.frontmatter,content:e.content.trim()}}function Ft(t,e){let n=Object.fromEntries(Object.entries(t).filter(([r,o])=>o!==void 0));return["---",z(n),"---","",e].join(`
7
+ `)}function Wt(t){return t.trimStart().startsWith("---")}function jt(t){let e=t.replace(/^\uFEFF/,"");if(!e.startsWith("---"))return{frontmatter:{},content:t};let n=e.search(/\r?\n/);if(n<0||e.slice(0,n).trim()!=="---")return{frontmatter:{},content:t};let r=e.slice(n+(e[n]==="\r"?2:1)),o=r.match(/(?:^|\r?\n)---[ \t]*(?:\r?\n|$)/);if(!o||o.index===void 0)throw new Error("YAML frontmatter is not closed.");let i=r.slice(0,o.index),s=o[0],u=o.index+s.length;return{frontmatter:J(i),content:r.slice(u)}}function J(t){let e={},n=t.split(/\r?\n/);for(let r=0;r<n.length;r+=1){let o=n[r];if(!o.trim()||o.trimStart().startsWith("#"))continue;if(/^\s/.test(o))throw new Error(`Unexpected indentation at line ${r+1}.`);let i=Ht(o,r+1);if(i.key==="<<")throw new Error("YAML merge keys are not supported.");if(i.value!==""){e[i.key]=X(i.value,r+1);continue}let s=qt(n,r+1);e[i.key]=s.value,r=s.nextIndex-1}return e}function qt(t,e){let n=[],r=e;for(;r<t.length;r+=1){let i=t[r];if(!i.trim()){n.push(i);continue}if(!/^\s/.test(i))break;n.push(i.replace(/^ {2}/,""))}let o=n.filter(i=>i.trim()&&!i.trimStart().startsWith("#"));return o.length===0?{value:{},nextIndex:r}:o.every(i=>i.trimStart().startsWith("- "))?{value:o.map((i,s)=>X(i.trimStart().slice(2),e+s+1)),nextIndex:r}:{value:J(n.join(`
8
+ `)),nextIndex:r}}function Ht(t,e){let n=t.indexOf(":");if(n<=0)throw new Error(`Invalid YAML line ${e}.`);let r=t.slice(0,n).trim(),o=t.slice(n+1).trim();if(!r)throw new Error(`Invalid YAML key at line ${e}.`);return{key:r,value:o}}function X(t,e){if(t==="")return"";if(t==="[]")return[];if(t==="{}")return{};if(t==="true")return!0;if(t==="false")return!1;if(t==="null"||t==="~")return null;if(/^-?\d+(?:\.\d+)?$/.test(t))return Number(t);if(t.startsWith('"'))return H(t,e);if(t.startsWith("'")){if(!t.endsWith("'"))throw new Error(`Unclosed quoted scalar at line ${e}.`);return t.slice(1,-1).replace(/''/g,"'")}if(t.startsWith("[")||t.startsWith("{"))return H(t,e);if(t.includes("[")||t.includes("]")||t.includes("{")||t.includes("}"))throw new Error(`Unsupported YAML scalar at line ${e}.`);return t}function H(t,e){try{return JSON.parse(t)}catch{throw new Error(`Invalid YAML scalar at line ${e}.`)}}function z(t,e=""){return Object.entries(t).map(([n,r])=>Jt(n,r,e)).join(`
9
+ `)}function Jt(t,e,n){return Array.isArray(e)?`${n}${t}: ${JSON.stringify(e)}`:e&&typeof e=="object"?`${n}${t}:
10
+ ${z(e,`${n} `)}`:`${n}${t}: ${JSON.stringify(e)}`}var f=C(require("path"),1);function Y(t,e){let n=f.resolve(t),r=f.resolve(t,e);return r===n?!0:n===f.parse(n).root?r.startsWith(n):r.startsWith(n+f.sep)}function Xt(t,e){if(f.isAbsolute(e))return f.resolve(e);if(!Y(t,e))throw new Error(`PathSecurity: Path traversal attempt detected: ${e}`);return f.resolve(t,e)}var h=require("node:os"),G=require("node:child_process"),_=require("node:path"),E=(0,h.platform)(),U=E==="win32",zt=E==="darwin",Yt=E==="linux",Gt=(0,h.release)(),K=(0,h.homedir)();function Ut(){return(0,_.resolve)(K,".xeno-code")}function Kt(t){return(0,_.resolve)(t,".xeno-code")}function Qt(){return U?"powershell":process.env.SHELL?.split("/").pop()??"bash"}function Zt(t){try{return(0,G.execSync)("git rev-parse --is-inside-work-tree",{cwd:t,stdio:"ignore"}),!0}catch{return!1}}function Vt(t,e){for(let n of e)if(t[n]===void 0||t[n]===null||t[n]==="")return`Missing required parameter: ${n}`;return null}function te(t,e,n){let r=t[e];if(r==null){if(n!==void 0)return n;throw new Error(`Missing required parameter: ${e}`)}if(typeof r!="string")throw new Error(`Parameter ${e} must be a string, got ${typeof r}`);return r}function ee(t,e,n){let r=t[e];if(r==null){if(n!==void 0)return n;throw new Error(`Missing required parameter: ${e}`)}if(typeof r!="number")throw new Error(`Parameter ${e} must be a number, got ${typeof r}`);if(isNaN(r))throw new Error(`Parameter ${e} is NaN`);return r}function ne(t,e,n){let r=t[e];if(r==null){if(n!==void 0)return n;throw new Error(`Missing required parameter: ${e}`)}if(typeof r!="boolean")throw new Error(`Parameter ${e} must be a boolean, got ${typeof r}`);return r}function Q(t){if(t.length>5e3)return"Pattern too long (max 5000 characters)";let n=[/(\.\*){3,}/,/(\+\+|\*\*)/,/(.*\+.*\+.*\+)/];for(let r of n)if(r.test(t))return"Pattern contains potentially unsafe constructs that could cause excessive backtracking";return null}function re(t,e,n=5e3){let r=Q(t);if(r)throw new Error(r);try{return new RegExp(t,e)}catch(o){let i=o instanceof Error?o.message:String(o);throw new Error(`Invalid regex pattern: ${i}`)}}function oe(t,e,n=1e3){if(e.length>1e5)throw new Error(`Input too large for safe regex test (${e.length} chars, max 100000)`);return t.test(e)}var Z=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.SILENT=4]="SILENT",i))(Z||{}),x=1;function ie(t){x=t}function se(){return x}function p(){return new Date().toISOString()}function ae(t,e){x<=0&&(e!==void 0?process.stderr.write(`[${p()}] DEBUG: ${t} ${R(e)}
11
+ `):process.stderr.write(`[${p()}] DEBUG: ${t}
12
+ `))}function ue(t,e){x<=1&&(e!==void 0?process.stderr.write(`[${p()}] INFO: ${t} ${R(e)}
13
+ `):process.stderr.write(`[${p()}] INFO: ${t}
14
+ `))}function ce(t,e){x<=2&&(e!==void 0?process.stderr.write(`[${p()}] WARN: ${t} ${R(e)}
15
+ `):process.stderr.write(`[${p()}] WARN: ${t}
16
+ `))}function le(t,e){x<=3&&(e!==void 0?process.stderr.write(`[${p()}] ERROR: ${t} ${R(e)}
17
+ `):process.stderr.write(`[${p()}] ERROR: ${t}
18
+ `))}function R(t){if(t==null)return"";if(t instanceof Error)return t.message;if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}var w=class extends Error{statusCode;body;retryAfterMs;requestId;cfRay;constructor(e,n={}){super(e),this.name="ApiTransientError",this.statusCode=n.statusCode,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId,this.cfRay=n.cfRay}},T={maxRetries:3,baseDelayMs:1e3,maxDelayMs:3e4,jitterMs:300};function k(t,e){let n=process.env[t],r=n?Number.parseInt(n,10):Number.NaN;return!Number.isFinite(r)||r<0?e:r}function fe(t={}){let e=Math.max(0,t.maxRetries??k("XENO_API_MAX_RETRIES",T.maxRetries)),n=Math.max(50,t.baseDelayMs??k("XENO_API_BASE_DELAY_MS",T.baseDelayMs)),r=Math.max(n,t.maxDelayMs??k("XENO_API_MAX_DELAY_MS",T.maxDelayMs)),o=Math.max(0,t.jitterMs??k("XENO_API_RETRY_JITTER_MS",T.jitterMs));return{maxRetries:e,baseDelayMs:n,maxDelayMs:r,jitterMs:o}}function de(t,e,n){if(e.retryAfterMs&&e.retryAfterMs>0)return Math.min(e.retryAfterMs,n.maxDelayMs);let r=Math.min(n.baseDelayMs*Math.pow(2,t),n.maxDelayMs),o=Math.floor(Math.random()*n.jitterMs);return Math.min(r+o,n.maxDelayMs)}function V(t){let e=t.toLowerCase();return e.includes("rate limit")||e.includes("too many requests")||e.includes("429")}function pe(t){let e=t.toLowerCase();return e.includes("network")||e.includes("timeout")||e.includes("fetch failed")||e.includes("socket hang up")||e.includes("econnreset")||e.includes("eai_again")||e.includes("enotfound")||e.includes("econnrefused")||e.includes("tls")||e.includes("temporarily unavailable")}function $(t){if(t instanceof w)return{statusCode:t.statusCode,retryAfterMs:t.retryAfterMs,requestId:t.requestId,cfRay:t.cfRay};if(!(t instanceof Error))return{};let e=t;if(e.statusCode!==void 0||e.retryAfterMs!==void 0||e.requestId!==void 0||e.cfRay!==void 0)return{statusCode:e.statusCode,retryAfterMs:e.retryAfterMs,requestId:e.requestId,cfRay:e.cfRay};let n=t.message.toLowerCase();return V(n)?{statusCode:429}:{}}function tt(t){if(t&&typeof t=="object"&&"retryable"in t)return t.retryable===!0;if(t instanceof w){let{statusCode:e}=$(t);if(e)return e===429||e>=500||e===408||e===409||e===425}if(t instanceof Error){let e=t.name?.toLowerCase()??"";return e==="aborterror"||e==="agentinterruptederror"||t.message.toLowerCase().includes("aborted")||t.message.toLowerCase().includes("interrupted")?!1:t.message.includes("503")||t.message.includes("504")||t.message.includes("502")||t.message.includes("500")||t.message.includes("408")||t.message.includes("425")?!0:V(t.message)||pe(t.message.toLowerCase())}return!1}function me(t){if(t.onAbort)return t.onAbort();let e=new Error("The operation was aborted");return e.name="AbortError",e}async function ge(t,e={}){let n=fe(e),r;for(let o=0;o<=n.maxRetries;o++)try{if(e.signal?.aborted)throw me(e);return e.onBeforeAttempt?.(o),await t()}catch(i){if(r=i,!(e.shouldRetry?e.shouldRetry(i,o):tt(i))||o===n.maxRetries)throw i;let u=$(i),l=de(o,u,n),d=e.getDelayMs?.(i,o,l),m=typeof d=="number"&&d>=0?d:l;await new Promise(M=>setTimeout(M,m))}throw r}var et=(t,e)=>{if(!t)return 0;let n=e.toLowerCase(),r=n.includes("claude")?3.5:n.includes("gemini")?3.8:(/(^|[/_-])(gpt|o\d)/.test(n),4),o=[...t].filter(s=>s.codePointAt(0)>127).length,i=Math.ceil(t.length/r);return Math.max(1,i+Math.ceil(o*.35))},nt=Object.freeze({id:"xeno-conservative-v1",source:"estimated",countText:et,countImage:({detail:t})=>t==="high"?2e3:t==="low"?512:1200,safetyMarginRatio:t=>{let e=t.toLowerCase();return e.includes("claude")?.12:e.includes("gemini")?.14:/(^|[/_-])(gpt|o\d)/.test(e)?.1:.18}});function he(t,e,n=nt){return{tokens:Math.max(0,Math.ceil(n.countText(t,e))),source:n.source,adapterId:n.id}}function rt(t){return t?Math.ceil(t.length/4):0}function xe(t,e){if(!t||e<=0)return"";let n=e*4;if(t.length<=n)return t;let r=t.slice(0,n),o=r.lastIndexOf(" ");return o>n*.8&&(r=r.slice(0,o)),r+"..."}function ye(t,e){return rt(t)<=e}function we(t,e){return Math.max(0,e-t)}var be={"claude-opus-4-6-thinking":{input:15,output:75},"claude-opus-4-6":{input:15,output:75},"claude-opus-4-5-thinking":{input:15,output:75},"claude-sonnet-4-6":{input:3,output:15},"claude-sonnet-4-5-thinking":{input:3,output:15},"claude-sonnet-4-5":{input:3,output:15},"gemini-2.5-flash":{input:.15,output:.6},"gemini-2.5-flash-lite":{input:.075,output:.3},"gemini-3-flash":{input:.15,output:.6},"gemini-3-pro-high":{input:1.25,output:5},"gpt-5":{input:5,output:15},"gpt-5-codex":{input:5,output:15},"gpt-5.1":{input:5,output:15},"gpt-5.1-codex":{input:5,output:15},"gpt-5.2":{input:5,output:15},"gpt-5.2-codex":{input:5,output:15},"kimi-k2":{input:.6,output:2.4},"kimi-k2-thinking":{input:.6,output:2.4},"kimi-k2.5":{input:.6,output:2.4}};function Ee(t,e,n){let r=be[t];return r?e/1e6*r.input+n/1e6*r.output:0}function Re(t){return t<=0?"$0.00":t<.001?"<$0.001":t<.01?`$${t.toFixed(4)}`:t<1?`$${t.toFixed(3)}`:`$${t.toFixed(2)}`}var ot=require("node:child_process");function Te(t){let e=process.platform==="win32"?[{command:"clip.exe",args:[]}]:process.platform==="darwin"?[{command:"pbcopy",args:[]}]:[{command:"wl-copy",args:[]},{command:"xclip",args:["-selection","clipboard"]},{command:"xsel",args:["--clipboard","--input"]}],n=null;for(let r of e)try{let o=(0,ot.spawnSync)(r.command,r.args,{input:t,encoding:"utf8"});if(o.error){n=o.error.message;continue}if(o.status===0)return;n=o.stderr||o.stdout||`exit ${o.status}`}catch(o){n=o instanceof Error?o.message:String(o)}throw new Error(`Clipboard copy failed${n?`: ${n}`:""}`)}function st(t){return t.replace(/\\/g,"/").toLowerCase()}var ke=["golden","solution","answer","expected"],Ae=["expected","golden","reference","answer","answers"],Me=new Set([";","&&","||","|"]);function at(t){return st(t).replace(/^\.\/+/,"").split("/").map(e=>e.trim()).filter(e=>e.length>0)}function Ce(t){return ke.some(e=>t.includes(e))}function it(t){return Ae.some(e=>t.includes(e))}function ut(t){return t.split("::",1)[0]?.split("?",1)[0]?.split("#",1)[0]??t}function A(t){let e=t.trim().replace(/^[({]+/,"").replace(/[),;]+$/,"");return(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))&&(e=e.slice(1,-1)),e}function Se(t){return t.match(/"[^"]*"|'[^']*'|&&|\|\||[;|]|[^\s;|&]+/g)?.map(A).filter(e=>e.length>0)??[]}function ct(t){let e=at(t),n=ut(e.at(-1)??"");return it(n)||e.some(r=>it(r))}function lt(t){let e=st(A(t));return!e||e==="/dev/null"||e.startsWith("/tmp/")||e.startsWith("tmp/")||e.startsWith("/var/tmp/")||e.startsWith("var/tmp/")?!1:e.startsWith("/app/")||e.startsWith("./")?!0:!e.startsWith("/")}function _e(t){return/[\\/]/.test(t)||/\.[A-Za-z0-9]{1,8}$/.test(t)}function $e(t){let e=Se(t);for(let n=0;n<e.length;n+=1){let r=e[n]?.toLowerCase();if(r!=="cp"&&r!=="mv"&&r!=="rsync"&&r!=="install")continue;let o=[];for(let s=n+1;s<e.length;s+=1){let u=e[s];if(!u||Me.has(u))break;u!=="--"&&(u.startsWith("-")||o.push(u))}if(o.length<2)continue;let i=o.at(-1);if(lt(i)){for(let s of o.slice(0,-1))if(_e(s)&&ct(s))return{sourcePath:s,destinationPath:i,operation:r}}}return null}function Ne(t){let e=[/\bcat\s+(?:"([^"]+)"|'([^']+)'|([^\s;&|]+))\s*>\s*(?:"([^"]+)"|'([^']+)'|([^\s;&|]+))/i,/\bdd\b[\s\S]*?\bif=(?:"([^"]+)"|'([^']+)'|([^\s;&|]+))[\s\S]*?\bof=(?:"([^"]+)"|'([^']+)'|([^\s;&|]+))/i];for(let n of e){let r=t.match(n);if(!r)continue;let o=A(r[1]??r[2]??r[3]??""),i=A(r[4]??r[5]??r[6]??"");if(!(!o||!i)&&ct(o)&&lt(i))return{sourcePath:o,destinationPath:i,operation:n.source.startsWith("\\bdd")?"dd":"redirect"}}return null}function N(){return process.env.XENO_BENCHMARK_MODE?.trim().toLowerCase()==="terminal-bench"}function v(t){let e=at(t);if(e.includes("solution")||e.includes("xeno-audit")||e.includes(".xeno")&&e.includes("audit"))return!0;let n=ut(e.at(-1)??"");return e.includes("tests")&&Ce(n)}function ve(t){return N()?t.filter(e=>!v(e)):t}function Le(t){return`Benchmark safety: access to verifier answer or benchmark trace artifacts is blocked (${t}). Use task inputs and verifier logic, not golden, solution, or agent audit files.`}function Be(t){return t.split(/[\s"'`;|&]+/).map(e=>e.trim()).filter(e=>e.length>0&&/[\\/]/.test(e)).some(e=>v(e))}function Oe(t){if(!N())return null;let e=$e(t)??Ne(t);return e?["[xeno guidance]",`Benchmark safety blocked ${e.operation} from reference-like source ${e.sourcePath} to protected destination ${e.destinationPath}.`,"Do not copy expected, golden, reference, or answer files over task inputs or submission artifacts to make validation pass.","If a previous check polluted an input, restore/regenerate the original source input, then rerun the actual script or program under test."].join(`
19
+ `):null}function Pe(t){return/^data:([^;,]+)[;,]/i.exec(t.trim())?.[1]}function ft(t){let e=[];for(let n of t){if(n.type==="text"){e.push(n.text);continue}if(n.type==="image_url"){e.push(`[image ${Pe(n.image_url.url)??"unknown"}]`);continue}let r=n.text??n.data;if(r&&r.trim().length>0){e.push(r);continue}let o=n.uri??n.mimeType??"resource";e.push(`[resource ${o}]`)}return e.join(`
20
+
21
+ `).trim()}function dt(t){let e=t.trim();return e.length>0?[{type:"text",text:e}]:[]}function Ie(t){return typeof t=="string"?t:ft(t)}function pt(t){if(t.success)return t.output;let e=[`Error: ${t.error??"Tool execution failed"}`];return t.output.trim().length>0&&e.push(t.output),e.join(`
22
+ `)}function De(t){let e=t.assistant_content&&t.assistant_content.length>0?t.assistant_content:typeof t.content=="string"?dt(t.content):t.content,n=t.assistant_only_content??[],r=Fe(t),o=[...e,...n,...r?[r]:[]];return o.length>0?o:t.content}function Fe(t){let e=t.operation;if(!e)return null;let n=t.evidence??e.evidence??[],r=n.filter(i=>i.status==="verified").length,o=n.filter(i=>i.status==="failed").length;return{type:"text",text:["[xeno_operation]",`operation_id: ${e.operationId}`,`state: ${e.state}`,`terminal: ${e.terminal?"yes":"no"}`,`completion_policy: ${e.completionPolicy}`,e.taskId?`task_id: ${e.taskId}`:null,e.completionReason?`completion_reason: ${e.completionReason}`:null,`evidence: ${r} verified, ${o} failed`,t.retryable===void 0?null:`retryable: ${t.retryable?"yes":"no"}`,"[/xeno_operation]"].filter(i=>!!i).join(`
23
+ `)}}function We(t){return Array.isArray(t)&&t.some(e=>e.type!=="text")}function je(t){return typeof t=="string"?dt(t):t}function qe(t,e){return{type:"tool_result",tool_use_id:t,content:pt(e),...e.assistantContent&&e.assistantContent.length>0?{assistant_content:e.assistantContent}:{},...e.assistantOnlyContent&&e.assistantOnlyContent.length>0?{assistant_only_content:e.assistantOnlyContent}:{},is_error:!e.success,...e.operation?{operation:e.operation}:{},...e.evidence&&e.evidence.length>0?{evidence:e.evidence}:{},...e.retryable!==void 0?{retryable:e.retryable}:{}}}function He(t,e={}){for(let n of t){let r=n.codePointAt(0);if(r===127)return!0;if(!(r>31)&&!(r===9&&e.allowTab===!0)&&!((r===10||r===13)&&e.allowLineBreaks===!0))return!0}return!1}0&&(module.exports={ApiTransientError,HOME_DIR,IS_LINUX,IS_MAC,IS_WINDOWS,LogLevel,OS_VERSION,PLATFORM,accountTextTokens,appendLine,benchmarkLeakError,buildToolResultBlock,buildToolResultText,calculateCost,commandMentionsBenchmarkLeak,conservativeTokenAccountingAdapter,copyTextToClipboard,createSafeRegex,debug,decodeTextBuffer,deleteDir,deleteFile,detectLineEnding,detectPreferredLineEnding,detectTextEncoding,encodeTextBuffer,ensureDir,error,estimateTokens,estimateTokensForModel,existsSync,filterBenchmarkLeakPaths,findSimilarFile,fitsInBudget,formatCost,getBenchmarkReferenceOverwriteHint,getBoolean,getConfigDir,getLogLevel,getNumber,getProjectConfigDir,getRetryErrorContext,getShellName,getString,getToolResultTransportContent,hasDir,hasDisallowedAsciiControlCharacter,hasFile,hasFrontmatter,hasNonTextToolResultContent,info,isBenchmarkLeakPath,isBenchmarkMode,isGitRepo,isPathSafe,isRetryableError,listDirs,listFiles,normalizeLineEndings,parseDocument,parseJsonLines,readFileSafe,readIfExists,readTextFile,remainingBudget,safeJsonParse,safeJsonStringify,safeRegexTest,safeResolvePath,setLogLevel,stringifyDocument,toTransportAssistantBlocks,toolAssistantContentToText,toolResultContentToText,truncateToTokens,validateRegexPattern,validateRequired,warn,withRetry,writeAtomic,writeTextFile});