@nyte-ai/plugin 0.0.0-stage → 0.0.19

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 (137) hide show
  1. package/LICENSE +21 -0
  2. package/THIRD-PARTY-NOTICES.md +866 -0
  3. package/dist/chunks/billing-0y7dfkp2.js +146 -0
  4. package/dist/chunks/billing-2v3g7rd9.js +190 -0
  5. package/dist/chunks/billing-3j77ss7y.js +86 -0
  6. package/dist/chunks/billing-3scqmkzb.js +559 -0
  7. package/dist/chunks/billing-4vz9pxyx.js +22 -0
  8. package/dist/chunks/billing-6z2kgtyt.js +51 -0
  9. package/dist/chunks/billing-8rjk35gr.js +444 -0
  10. package/dist/chunks/billing-9nn3yp18.js +176 -0
  11. package/dist/chunks/billing-9qc0eqh4.js +174 -0
  12. package/dist/chunks/billing-a9vqn66p.js +351 -0
  13. package/dist/chunks/billing-bv5zr32b.js +369 -0
  14. package/dist/chunks/billing-cy1rg619.js +302 -0
  15. package/dist/chunks/billing-ejx2hv52.js +323 -0
  16. package/dist/chunks/billing-h13r0byk.js +80 -0
  17. package/dist/chunks/billing-hg64tqf1.js +97 -0
  18. package/dist/chunks/billing-j643d12p.js +197 -0
  19. package/dist/chunks/billing-kn3d30b4.js +276 -0
  20. package/dist/chunks/billing-mvc33pv6.js +36 -0
  21. package/dist/chunks/billing-s4rrspsk.js +7 -0
  22. package/dist/chunks/billing-svrhh5a5.js +307 -0
  23. package/dist/chunks/billing-sxc70w72.js +161 -0
  24. package/dist/chunks/billing-t1qrxe16.js +41 -0
  25. package/dist/chunks/billing-tm34gm2p.js +528 -0
  26. package/dist/chunks/billing-tzr3cebf.js +20 -0
  27. package/dist/chunks/billing-v3hg5rc7.js +373 -0
  28. package/dist/chunks/billing-wmcbg6fw.js +52 -0
  29. package/dist/chunks/billing-ye3wk5r3.js +205 -0
  30. package/dist/chunks/billing-zfpm2rt0.js +29 -0
  31. package/dist/examples/claude-code/LICENSE +21 -0
  32. package/dist/examples/claude-code/billing.d.ts +7 -0
  33. package/dist/examples/claude-code/billing.js +11 -0
  34. package/dist/examples/claude-code/claude-cli.d.ts +35 -0
  35. package/dist/examples/claude-code/claude-cli.js +15 -0
  36. package/dist/examples/claude-code/env.d.ts +1 -0
  37. package/dist/examples/claude-code/env.js +6 -0
  38. package/dist/examples/claude-code/index.d.ts +24 -0
  39. package/dist/examples/claude-code/index.js +149 -0
  40. package/dist/examples/claude-code/inert-mcp.d.ts +1 -0
  41. package/dist/examples/claude-code/inert-mcp.js +6 -0
  42. package/dist/examples/claude-code/model-catalog.d.ts +27 -0
  43. package/dist/examples/claude-code/model-catalog.js +12 -0
  44. package/dist/examples/claude-code/process.d.ts +22 -0
  45. package/dist/examples/claude-code/process.js +25 -0
  46. package/dist/examples/claude-code/replay.d.ts +4 -0
  47. package/dist/examples/claude-code/replay.js +11 -0
  48. package/dist/examples/claude-code/stream.d.ts +3 -0
  49. package/dist/examples/claude-code/stream.js +16 -0
  50. package/dist/examples/claude-code/transcript.d.ts +83 -0
  51. package/dist/examples/claude-code/transcript.js +23 -0
  52. package/dist/examples/claude-code/turn-relay.d.ts +48 -0
  53. package/dist/examples/claude-code/turn-relay.js +9 -0
  54. package/dist/examples/claude-code/wire.d.ts +372 -0
  55. package/dist/examples/claude-code/wire.js +18 -0
  56. package/dist/src/acp/connection.d.ts +24 -0
  57. package/dist/src/acp/connection.js +8 -0
  58. package/dist/src/acp/index.d.ts +54 -0
  59. package/dist/src/acp/index.js +1005 -0
  60. package/dist/src/acp/registry.d.ts +18 -0
  61. package/dist/src/acp/registry.js +9 -0
  62. package/dist/src/acp/thread.d.ts +46 -0
  63. package/dist/src/acp/thread.js +7 -0
  64. package/dist/src/acp/transcript.d.ts +8 -0
  65. package/dist/src/acp/transcript.js +11 -0
  66. package/dist/src/acp/translate.d.ts +33 -0
  67. package/dist/src/acp/translate.js +20 -0
  68. package/dist/src/approvals/approvals.d.ts +189 -0
  69. package/dist/src/approvals/approvals.js +143 -0
  70. package/dist/src/approvals/schema.d.ts +169 -0
  71. package/dist/src/approvals/schema.js +18 -0
  72. package/dist/src/bash-description.d.ts +30 -0
  73. package/dist/src/bash-description.js +18 -0
  74. package/dist/src/browser-tools.d.ts +25 -0
  75. package/dist/src/browser-tools.js +246 -0
  76. package/dist/src/canvas/canvas-compile.d.ts +48 -0
  77. package/dist/src/canvas/canvas-compile.js +8 -0
  78. package/dist/src/canvas/canvas-libraries.d.ts +32 -0
  79. package/dist/src/canvas/canvas-libraries.js +6 -0
  80. package/dist/src/canvas/canvas-preview.d.ts +107 -0
  81. package/dist/src/canvas/canvas-preview.js +12 -0
  82. package/dist/src/canvas/canvas-protocol.d.ts +184 -0
  83. package/dist/src/canvas/canvas-protocol.js +75 -0
  84. package/dist/src/canvas/canvas.d.ts +50 -0
  85. package/dist/src/canvas/canvas.js +221 -0
  86. package/dist/src/canvas/schema.d.ts +47 -0
  87. package/dist/src/canvas/schema.js +8 -0
  88. package/dist/src/claude-code-sdk/index.d.ts +35 -0
  89. package/dist/src/claude-code-sdk/index.js +379 -0
  90. package/dist/src/claude-code-sdk/session.d.ts +50 -0
  91. package/dist/src/claude-code-sdk/session.js +7 -0
  92. package/dist/src/claude-code-sdk/transcript.d.ts +19 -0
  93. package/dist/src/claude-code-sdk/transcript.js +15 -0
  94. package/dist/src/claude-code-sdk/translate.d.ts +18 -0
  95. package/dist/src/claude-code-sdk/translate.js +20 -0
  96. package/dist/src/client/mount.d.ts +44 -0
  97. package/dist/src/client/mount.js +252 -0
  98. package/dist/src/client/notifications.d.ts +36 -0
  99. package/dist/src/client/notifications.js +24 -0
  100. package/dist/src/client/presentation.d.ts +362 -0
  101. package/dist/src/client/presentation.js +391 -0
  102. package/dist/src/client/transcript-tui.d.ts +23 -0
  103. package/dist/src/client/transcript-tui.js +20 -0
  104. package/dist/src/client/transcript.d.ts +23 -0
  105. package/dist/src/client/transcript.js +51 -0
  106. package/dist/src/client.d.ts +53 -0
  107. package/dist/src/client.js +22 -0
  108. package/dist/src/codemode-runtime.d.ts +11 -0
  109. package/dist/src/codemode-runtime.js +10 -0
  110. package/dist/src/codemode-worker.d.ts +1 -0
  111. package/dist/src/codemode-worker.js +2 -0
  112. package/dist/src/codemode.d.ts +21 -0
  113. package/dist/src/codemode.js +170 -0
  114. package/dist/src/core.d.ts +43 -0
  115. package/dist/src/core.js +11 -0
  116. package/dist/src/find-on-path.d.ts +4 -0
  117. package/dist/src/find-on-path.js +8 -0
  118. package/dist/src/openai-astra-context.d.ts +23 -0
  119. package/dist/src/openai-astra-context.js +14 -0
  120. package/dist/src/openai-compaction.d.ts +15 -0
  121. package/dist/src/openai-compaction.js +55 -0
  122. package/dist/src/question/client/questions-tui.d.ts +9 -0
  123. package/dist/src/question/client/questions-tui.js +19 -0
  124. package/dist/src/question/client/questions.d.ts +9 -0
  125. package/dist/src/question/client/questions.js +160 -0
  126. package/dist/src/question/question.d.ts +63 -0
  127. package/dist/src/question/question.js +9 -0
  128. package/dist/src/question/schema.d.ts +101 -0
  129. package/dist/src/question/schema.js +14 -0
  130. package/dist/src/rename.d.ts +79 -0
  131. package/dist/src/rename.js +91 -0
  132. package/dist/src/telemetry.d.ts +36 -0
  133. package/dist/src/telemetry.js +84 -0
  134. package/dist/src/web-search.d.ts +78 -0
  135. package/dist/src/web-search.js +219 -0
  136. package/package.json +190 -3
  137. package/README.md +0 -3
@@ -0,0 +1,444 @@
1
+ import {
2
+ parseRecord2
3
+ } from "./billing-0y7dfkp2.js";
4
+ import {
5
+ describeUsageCreditsRejection2
6
+ } from "./billing-tzr3cebf.js";
7
+ import {
8
+ TOOL_PREFIX2,
9
+ NATIVE_TOOL_CHANGES_BETA2,
10
+ getInitialUserPrefix2,
11
+ getInitialSystemMessages2,
12
+ prepareFrames2,
13
+ prepareTools2,
14
+ prepareNativeTranscript2,
15
+ buildExtraBody2,
16
+ makeReplayDiagnostic2
17
+ } from "./billing-ejx2hv52.js";
18
+ import {
19
+ runClaudeRequest2
20
+ } from "./billing-3scqmkzb.js";
21
+
22
+ // examples/claude-code/stream.ts
23
+ import {
24
+ calculateCost,
25
+ collapseSystemMessages,
26
+ createAssistantMessageEventStream,
27
+ getCurrentSystemPrompt,
28
+ getCurrentTools,
29
+ getInitialSystemMessage,
30
+ getSystemMessageText
31
+ } from "@nyte-ai/ai";
32
+ function mapStopReason(reason) {
33
+ switch (reason) {
34
+ case "end_turn":
35
+ case "pause_turn":
36
+ case "stop_sequence":
37
+ return { stopReason: "stop" };
38
+ case "max_tokens":
39
+ case "model_context_window_exceeded":
40
+ return { stopReason: "length" };
41
+ case "tool_use":
42
+ return { stopReason: "toolUse" };
43
+ case "refusal":
44
+ return { stopReason: "error", errorMessage: "The model refused to complete the request" };
45
+ case "sensitive":
46
+ return { stopReason: "error", errorMessage: "Provider stopped with: sensitive" };
47
+ default:
48
+ return {
49
+ stopReason: "error",
50
+ errorMessage: `Unhandled Claude Code stop reason: ${reason ?? "missing"}`
51
+ };
52
+ }
53
+ }
54
+ function parseArguments(raw, fallback) {
55
+ if (!raw.trim())
56
+ return fallback;
57
+ try {
58
+ return parseRecord2(raw);
59
+ } catch {
60
+ return fallback;
61
+ }
62
+ }
63
+ function updateUsage(output, model, usage) {
64
+ if (!usage)
65
+ return;
66
+ if (typeof usage.input_tokens === "number")
67
+ output.usage.input = usage.input_tokens;
68
+ if (typeof usage.output_tokens === "number")
69
+ output.usage.output = usage.output_tokens;
70
+ if (typeof usage.cache_read_input_tokens === "number")
71
+ output.usage.cacheRead = usage.cache_read_input_tokens;
72
+ if (typeof usage.cache_creation_input_tokens === "number")
73
+ output.usage.cacheWrite = usage.cache_creation_input_tokens;
74
+ const oneHour = usage.cache_creation?.ephemeral_1h_input_tokens;
75
+ if (typeof oneHour === "number")
76
+ output.usage.cacheWrite1h = oneHour;
77
+ const thinking = usage.output_tokens_details?.thinking_tokens;
78
+ if (typeof thinking === "number")
79
+ output.usage.reasoning = thinking;
80
+ output.usage.totalTokens = output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite;
81
+ calculateCost(model, output.usage);
82
+ }
83
+ function comparableContent(content) {
84
+ return content.map((block) => {
85
+ if (block.type === "text")
86
+ return { type: "text", text: block.text };
87
+ if (block.type === "thinking") {
88
+ return {
89
+ type: "thinking",
90
+ thinking: block.thinking,
91
+ thinkingSignature: block.thinkingSignature,
92
+ redacted: block.redacted
93
+ };
94
+ }
95
+ return { type: "toolCall", id: block.id, name: block.name, arguments: block.arguments };
96
+ });
97
+ }
98
+ function nativeContent(content, toolNames) {
99
+ const converted = [];
100
+ for (const block of content) {
101
+ if (block.type === "text") {
102
+ converted.push({ type: "text", text: block.text });
103
+ } else if (block.type === "thinking") {
104
+ converted.push({
105
+ type: "thinking",
106
+ thinking: block.thinking,
107
+ thinkingSignature: block.signature
108
+ });
109
+ } else if (block.type === "redacted_thinking") {
110
+ converted.push({
111
+ type: "thinking",
112
+ thinking: "[Reasoning redacted]",
113
+ thinkingSignature: block.data,
114
+ redacted: true
115
+ });
116
+ } else if (block.type === "tool_use") {
117
+ if (!block.name.startsWith(TOOL_PREFIX2))
118
+ throw new Error(`Claude Code returned unexpected tool ${block.name}`);
119
+ const name = block.name.slice(TOOL_PREFIX2.length);
120
+ if (!toolNames.has(name))
121
+ throw new Error(`Claude Code returned unavailable tool ${name}`);
122
+ converted.push({ type: "toolCall", id: block.id, name, arguments: block.input });
123
+ }
124
+ }
125
+ return converted;
126
+ }
127
+
128
+ class EventTranslator {
129
+ nativeToContent = new Map;
130
+ argumentsByIndex = new Map;
131
+ sawContentEvent = false;
132
+ model;
133
+ output;
134
+ stream;
135
+ toolNames;
136
+ constructor(model, output, stream, toolNames) {
137
+ this.model = model;
138
+ this.output = output;
139
+ this.stream = stream;
140
+ this.toolNames = toolNames;
141
+ }
142
+ event(event) {
143
+ switch (event.type) {
144
+ case "message_start":
145
+ if (event.message.id)
146
+ this.output.responseId = event.message.id;
147
+ updateUsage(this.output, this.model, event.message.usage);
148
+ break;
149
+ case "content_block_start":
150
+ this.startBlock(event.index, event.content_block);
151
+ break;
152
+ case "content_block_delta":
153
+ this.delta(event.index, event.delta);
154
+ break;
155
+ case "content_block_stop":
156
+ this.stopBlock(event.index);
157
+ break;
158
+ case "message_delta": {
159
+ if (event.delta.stop_reason) {
160
+ this.output.rawStopReason = event.delta.stop_reason;
161
+ const mapped = mapStopReason(event.delta.stop_reason);
162
+ this.output.stopReason = mapped.stopReason;
163
+ this.output.errorMessage = mapped.errorMessage;
164
+ }
165
+ updateUsage(this.output, this.model, event.usage);
166
+ break;
167
+ }
168
+ }
169
+ }
170
+ finish(message, usage, initialUserPrefix, initialSystemMessages) {
171
+ const authoritative = nativeContent(message.content, this.toolNames);
172
+ if (!this.sawContentEvent) {
173
+ this.emitComplete(authoritative);
174
+ } else if (JSON.stringify(comparableContent(this.output.content)) !== JSON.stringify(comparableContent(authoritative))) {
175
+ throw new Error("Claude Code final response differs from its incremental stream");
176
+ }
177
+ if (message.id)
178
+ this.output.responseId = message.id;
179
+ updateUsage(this.output, this.model, usage);
180
+ this.output.rawStopReason = message.stop_reason ?? undefined;
181
+ const mapped = mapStopReason(message.stop_reason);
182
+ this.output.stopReason = mapped.stopReason;
183
+ this.output.errorMessage = mapped.errorMessage;
184
+ this.output.diagnostics = [
185
+ ...this.output.diagnostics ?? [],
186
+ makeReplayDiagnostic2(message, this.output, initialUserPrefix, initialSystemMessages)
187
+ ];
188
+ }
189
+ startBlock(nativeIndex, native) {
190
+ this.sawContentEvent = true;
191
+ const contentIndex = this.output.content.length;
192
+ this.nativeToContent.set(nativeIndex, contentIndex);
193
+ if (native.type === "text") {
194
+ this.output.content.push({ type: "text", text: native.text ?? "" });
195
+ this.stream.push({ type: "text_start", contentIndex, partial: this.output });
196
+ } else if (native.type === "thinking") {
197
+ this.output.content.push({
198
+ type: "thinking",
199
+ thinking: native.thinking ?? "",
200
+ thinkingSignature: native.signature ?? ""
201
+ });
202
+ this.stream.push({ type: "thinking_start", contentIndex, partial: this.output });
203
+ } else if (native.type === "redacted_thinking") {
204
+ this.output.content.push({
205
+ type: "thinking",
206
+ thinking: "[Reasoning redacted]",
207
+ thinkingSignature: native.data,
208
+ redacted: true
209
+ });
210
+ this.stream.push({ type: "thinking_start", contentIndex, partial: this.output });
211
+ } else if (native.type === "tool_use") {
212
+ if (!native.name.startsWith(TOOL_PREFIX2))
213
+ throw new Error(`Claude Code returned unexpected tool ${native.name}`);
214
+ const name = native.name.slice(TOOL_PREFIX2.length);
215
+ if (!this.toolNames.has(name))
216
+ throw new Error(`Claude Code returned unavailable tool ${name}`);
217
+ this.output.content.push({
218
+ type: "toolCall",
219
+ id: native.id,
220
+ name,
221
+ arguments: native.input ?? {}
222
+ });
223
+ this.stream.push({ type: "toolcall_start", contentIndex, partial: this.output });
224
+ }
225
+ }
226
+ delta(nativeIndex, delta) {
227
+ const contentIndex = this.nativeToContent.get(nativeIndex);
228
+ if (contentIndex === undefined)
229
+ return;
230
+ const block = this.output.content[contentIndex];
231
+ if (!block)
232
+ return;
233
+ if (delta.type === "text_delta" && block.type === "text") {
234
+ block.text += delta.text;
235
+ this.stream.push({
236
+ type: "text_delta",
237
+ contentIndex,
238
+ delta: delta.text,
239
+ partial: this.output
240
+ });
241
+ } else if (delta.type === "thinking_delta" && block.type === "thinking") {
242
+ block.thinking += delta.thinking;
243
+ this.stream.push({
244
+ type: "thinking_delta",
245
+ contentIndex,
246
+ delta: delta.thinking,
247
+ partial: this.output
248
+ });
249
+ } else if (delta.type === "signature_delta" && block.type === "thinking") {
250
+ block.thinkingSignature = (block.thinkingSignature ?? "") + delta.signature;
251
+ } else if (delta.type === "input_json_delta" && block.type === "toolCall") {
252
+ const json = (this.argumentsByIndex.get(nativeIndex) ?? "") + delta.partial_json;
253
+ this.argumentsByIndex.set(nativeIndex, json);
254
+ block.arguments = parseArguments(json, block.arguments);
255
+ this.stream.push({
256
+ type: "toolcall_delta",
257
+ contentIndex,
258
+ delta: delta.partial_json,
259
+ partial: this.output
260
+ });
261
+ }
262
+ }
263
+ stopBlock(nativeIndex) {
264
+ const contentIndex = this.nativeToContent.get(nativeIndex);
265
+ if (contentIndex === undefined)
266
+ return;
267
+ const block = this.output.content[contentIndex];
268
+ if (!block)
269
+ return;
270
+ if (block.type === "text") {
271
+ this.stream.push({
272
+ type: "text_end",
273
+ contentIndex,
274
+ content: block.text,
275
+ partial: this.output
276
+ });
277
+ } else if (block.type === "thinking") {
278
+ this.stream.push({
279
+ type: "thinking_end",
280
+ contentIndex,
281
+ content: block.thinking,
282
+ partial: this.output
283
+ });
284
+ } else {
285
+ block.arguments = parseArguments(this.argumentsByIndex.get(nativeIndex) ?? "", block.arguments);
286
+ this.argumentsByIndex.delete(nativeIndex);
287
+ this.stream.push({
288
+ type: "toolcall_end",
289
+ contentIndex,
290
+ toolCall: block,
291
+ partial: this.output
292
+ });
293
+ }
294
+ }
295
+ emitComplete(content) {
296
+ for (const source of content) {
297
+ const contentIndex = this.output.content.length;
298
+ if (source.type === "text") {
299
+ this.output.content.push({ ...source });
300
+ this.stream.push({ type: "text_start", contentIndex, partial: this.output });
301
+ if (source.text)
302
+ this.stream.push({
303
+ type: "text_delta",
304
+ contentIndex,
305
+ delta: source.text,
306
+ partial: this.output
307
+ });
308
+ this.stream.push({
309
+ type: "text_end",
310
+ contentIndex,
311
+ content: source.text,
312
+ partial: this.output
313
+ });
314
+ } else if (source.type === "thinking") {
315
+ this.output.content.push({ ...source });
316
+ this.stream.push({ type: "thinking_start", contentIndex, partial: this.output });
317
+ if (source.thinking && !source.redacted) {
318
+ this.stream.push({
319
+ type: "thinking_delta",
320
+ contentIndex,
321
+ delta: source.thinking,
322
+ partial: this.output
323
+ });
324
+ }
325
+ this.stream.push({
326
+ type: "thinking_end",
327
+ contentIndex,
328
+ content: source.thinking,
329
+ partial: this.output
330
+ });
331
+ } else {
332
+ this.output.content.push({ ...source });
333
+ this.stream.push({ type: "toolcall_start", contentIndex, partial: this.output });
334
+ const json = JSON.stringify(source.arguments);
335
+ if (json)
336
+ this.stream.push({
337
+ type: "toolcall_delta",
338
+ contentIndex,
339
+ delta: json,
340
+ partial: this.output
341
+ });
342
+ this.stream.push({
343
+ type: "toolcall_end",
344
+ contentIndex,
345
+ toolCall: source,
346
+ partial: this.output
347
+ });
348
+ }
349
+ }
350
+ }
351
+ }
352
+ function normalizeError(error) {
353
+ const message = error instanceof Error ? error.message : String(error);
354
+ const usageCredits = describeUsageCreditsRejection2(message);
355
+ if (usageCredits)
356
+ return usageCredits;
357
+ if (/prompt is too long|context(?:_| )length|context window exceeded|too many input tokens/iu.test(message)) {
358
+ return `context_length_exceeded: ${message}`;
359
+ }
360
+ return message;
361
+ }
362
+ function streamClaudeCode2(model, context, options, catalog) {
363
+ const stream = createAssistantMessageEventStream();
364
+ const output = {
365
+ role: "assistant",
366
+ content: [],
367
+ api: model.api,
368
+ provider: model.provider,
369
+ model: model.id,
370
+ usage: {
371
+ input: 0,
372
+ output: 0,
373
+ cacheRead: 0,
374
+ cacheWrite: 0,
375
+ totalTokens: 0,
376
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }
377
+ },
378
+ stopReason: "pending",
379
+ timestamp: Date.now()
380
+ };
381
+ (async () => {
382
+ try {
383
+ const nativeTranscript = prepareNativeTranscript2(context.messages, catalog.supportsNativeToolChanges(model.id));
384
+ const transcript = nativeTranscript ? context : collapseSystemMessages(context);
385
+ const initialSystem = getInitialSystemMessage(transcript.messages);
386
+ const systemPrompt = nativeTranscript ? initialSystem ? getSystemMessageText(initialSystem) : "" : getCurrentSystemPrompt(transcript.messages);
387
+ const tools = getCurrentTools(transcript.messages);
388
+ const frames = prepareFrames2(transcript.messages);
389
+ const initialUserPrefix = getInitialUserPrefix2(transcript.messages);
390
+ const initialSystemMessages = getInitialSystemMessages2(transcript.messages);
391
+ const preparedTools = prepareTools2(tools);
392
+ const extraBody = buildExtraBody2(nativeTranscript?.requestTools ?? preparedTools.nativeTools, options, catalog.supportsAdaptiveThinking(model.id));
393
+ const translator = new EventTranslator(model, output, stream, preparedTools.names);
394
+ stream.push({ type: "start", partial: output });
395
+ const response = await runClaudeRequest2({
396
+ model: catalog.nativeModel(model.id),
397
+ cwd: process.cwd(),
398
+ frames,
399
+ systemPrompt,
400
+ manifest: preparedTools.manifest,
401
+ extraBody,
402
+ toolNames: preparedTools.names,
403
+ signal: options?.signal,
404
+ timeoutMs: options?.timeoutMs,
405
+ env: options?.env,
406
+ initialUserPrefix,
407
+ initialSystemMessages,
408
+ nativeSystemInjections: nativeTranscript?.systemInjections,
409
+ betas: nativeTranscript ? [NATIVE_TOOL_CHANGES_BETA2] : undefined,
410
+ sessionId: options?.cacheRetention === "none" ? undefined : options?.sessionId,
411
+ onEvent: (event) => translator.event(event)
412
+ });
413
+ translator.finish(response.message, response.usage, response.initialUserPrefix, response.initialSystemMessages);
414
+ output.diagnostics = [
415
+ ...output.diagnostics ?? [],
416
+ {
417
+ type: "claude-code.turn-relay",
418
+ timestamp: Date.now(),
419
+ details: response.relay
420
+ },
421
+ ...response.rateLimit ? [
422
+ {
423
+ type: "claude-code.rate-limit",
424
+ timestamp: Date.now(),
425
+ details: response.rateLimit
426
+ }
427
+ ] : []
428
+ ];
429
+ if (output.stopReason === "error" || output.stopReason === "aborted" || output.stopReason === "pending") {
430
+ throw new Error(output.errorMessage || `Claude Code ended with ${output.stopReason}`);
431
+ }
432
+ stream.push({ type: "done", reason: output.stopReason, message: output });
433
+ stream.end();
434
+ } catch (error) {
435
+ output.stopReason = options?.signal?.aborted ? "aborted" : "error";
436
+ output.errorMessage = normalizeError(error);
437
+ stream.push({ type: "error", reason: output.stopReason, error: output });
438
+ stream.end();
439
+ }
440
+ })();
441
+ return stream;
442
+ }
443
+
444
+ export { streamClaudeCode2 };
@@ -0,0 +1,176 @@
1
+ // src/acp/translate.ts
2
+ import { calculateCost } from "@nyte-ai/ai";
3
+ import { Type } from "typebox";
4
+ import { Value } from "typebox/value";
5
+ var ACP_PROVIDER2 = "acp";
6
+ var ACP_API2 = "acp";
7
+ var MIRROR_TOOL2 = "acp";
8
+ var mirrorArguments2 = Type.Object({
9
+ thread: Type.String(),
10
+ id: Type.String(),
11
+ title: Type.String(),
12
+ kind: Type.String(),
13
+ input: Type.Record(Type.String(), Type.Unknown()),
14
+ paths: Type.Array(Type.String())
15
+ });
16
+ var command = Type.Union([
17
+ Type.String({ minLength: 1 }),
18
+ Type.Array(Type.String(), { minItems: 1 })
19
+ ]);
20
+ function emptyMessage2(model) {
21
+ return {
22
+ role: "assistant",
23
+ content: [],
24
+ api: model.api,
25
+ provider: model.provider,
26
+ model: model.id,
27
+ usage: {
28
+ input: 0,
29
+ output: 0,
30
+ cacheRead: 0,
31
+ cacheWrite: 0,
32
+ totalTokens: 0,
33
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }
34
+ },
35
+ stopReason: "pending",
36
+ timestamp: Date.now()
37
+ };
38
+ }
39
+ function mirrorClass2(args) {
40
+ const path = args.paths[0];
41
+ const shell = args.input.command;
42
+ switch (args.kind) {
43
+ case "read":
44
+ return path === undefined ? { kind: "custom", label: args.title } : { kind: "read", path };
45
+ case "edit":
46
+ case "delete":
47
+ case "move":
48
+ return path === undefined ? { kind: "custom", label: args.title } : { kind: "edit", path };
49
+ case "execute":
50
+ return {
51
+ kind: "shell",
52
+ command: Value.Check(command, shell) ? Array.isArray(shell) ? shell.join(" ") : shell : args.title
53
+ };
54
+ default:
55
+ return { kind: "custom", label: args.title };
56
+ }
57
+ }
58
+ function blockText(block) {
59
+ switch (block.type) {
60
+ case "text":
61
+ return block.text;
62
+ case "resource_link":
63
+ return block.uri;
64
+ case "resource":
65
+ return "text" in block.resource ? block.resource.text : block.resource.uri;
66
+ default:
67
+ return `[${block.type}]`;
68
+ }
69
+ }
70
+ function toolText2(content, rawOutput) {
71
+ const lines = content.map((item) => {
72
+ switch (item.type) {
73
+ case "content":
74
+ return blockText(item.content);
75
+ case "diff":
76
+ return item.oldText === null || item.oldText === undefined ? `Wrote ${item.path}` : `Edited ${item.path}`;
77
+ default:
78
+ return `Terminal ${item.terminalId}`;
79
+ }
80
+ });
81
+ if (lines.length > 0)
82
+ return lines.join(`
83
+ `);
84
+ if (rawOutput === undefined || rawOutput === null)
85
+ return "";
86
+ return (Value.Check(Type.String(), rawOutput) ? rawOutput : JSON.stringify(rawOutput)).slice(0, 8000);
87
+ }
88
+
89
+ class Translator2 {
90
+ #model;
91
+ #output;
92
+ #stream;
93
+ #open;
94
+ constructor(model, output, stream) {
95
+ this.#model = model;
96
+ this.#output = output;
97
+ this.#stream = stream;
98
+ }
99
+ text(delta) {
100
+ const index = this.#start("text");
101
+ const block = this.#output.content[index];
102
+ if (block?.type !== "text")
103
+ return;
104
+ block.text += delta;
105
+ this.#stream.push({ type: "text_delta", contentIndex: index, delta, partial: this.#output });
106
+ }
107
+ thinking(delta) {
108
+ const index = this.#start("thinking");
109
+ const block = this.#output.content[index];
110
+ if (block?.type !== "thinking")
111
+ return;
112
+ block.thinking += delta;
113
+ this.#stream.push({
114
+ type: "thinking_delta",
115
+ contentIndex: index,
116
+ delta,
117
+ partial: this.#output
118
+ });
119
+ }
120
+ call(call) {
121
+ this.end();
122
+ const contentIndex = this.#output.content.push(call) - 1;
123
+ this.#stream.push({ type: "toolcall_start", contentIndex, partial: this.#output });
124
+ this.#stream.push({
125
+ type: "toolcall_end",
126
+ contentIndex,
127
+ toolCall: call,
128
+ partial: this.#output
129
+ });
130
+ }
131
+ usage(usage) {
132
+ const target = this.#output.usage;
133
+ target.input = usage.inputTokens;
134
+ target.output = usage.outputTokens;
135
+ target.cacheRead = usage.cachedReadTokens ?? 0;
136
+ target.cacheWrite = usage.cachedWriteTokens ?? 0;
137
+ target.totalTokens = usage.totalTokens;
138
+ calculateCost(this.#model, target);
139
+ }
140
+ end() {
141
+ const open = this.#open;
142
+ this.#open = undefined;
143
+ if (open === undefined)
144
+ return;
145
+ const block = this.#output.content[open.index];
146
+ if (block?.type === "text")
147
+ this.#stream.push({
148
+ type: "text_end",
149
+ contentIndex: open.index,
150
+ content: block.text,
151
+ partial: this.#output
152
+ });
153
+ else if (block?.type === "thinking")
154
+ this.#stream.push({
155
+ type: "thinking_end",
156
+ contentIndex: open.index,
157
+ content: block.thinking,
158
+ partial: this.#output
159
+ });
160
+ }
161
+ #start(kind) {
162
+ if (this.#open?.kind === kind)
163
+ return this.#open.index;
164
+ this.end();
165
+ const index = this.#output.content.push(kind === "text" ? { type: "text", text: "" } : { type: "thinking", thinking: "" }) - 1;
166
+ this.#open = { kind, index };
167
+ this.#stream.push({
168
+ type: kind === "text" ? "text_start" : "thinking_start",
169
+ contentIndex: index,
170
+ partial: this.#output
171
+ });
172
+ return index;
173
+ }
174
+ }
175
+
176
+ export { ACP_PROVIDER2, ACP_API2, MIRROR_TOOL2, mirrorArguments2, emptyMessage2, mirrorClass2, toolText2, Translator2 };