pi2dsh 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +11 -3
  2. package/README.zh.md +8 -3
  3. package/dist/all-BChhwMVE.mjs +28512 -0
  4. package/dist/all-BChhwMVE.mjs.map +1 -0
  5. package/dist/anthropic-messages-Dlw4T0S4.mjs +6438 -0
  6. package/dist/anthropic-messages-Dlw4T0S4.mjs.map +1 -0
  7. package/dist/azure-openai-responses-vGUNukZ7.mjs +209 -0
  8. package/dist/azure-openai-responses-vGUNukZ7.mjs.map +1 -0
  9. package/dist/cli.mjs +1 -1
  10. package/dist/compat/pi-ai.d.mts.map +1 -1
  11. package/dist/compat/pi-ai.mjs +1 -1
  12. package/dist/credentials-oauth.mjs +1 -1
  13. package/dist/deferred-tools-BD4g5QUx.mjs +32 -0
  14. package/dist/deferred-tools-BD4g5QUx.mjs.map +1 -0
  15. package/dist/diagnostics-CJye1UFh.mjs +99 -0
  16. package/dist/diagnostics-CJye1UFh.mjs.map +1 -0
  17. package/dist/dist-DY2GeEQ6.mjs +1089 -0
  18. package/dist/dist-DY2GeEQ6.mjs.map +1 -0
  19. package/dist/dist-DYfTHu0C.mjs +1246 -0
  20. package/dist/dist-DYfTHu0C.mjs.map +1 -0
  21. package/dist/error-body-DKA3lknR.mjs +104 -0
  22. package/dist/error-body-DKA3lknR.mjs.map +1 -0
  23. package/dist/github-copilot-headers-CZo2QHrt.mjs +25 -0
  24. package/dist/github-copilot-headers-CZo2QHrt.mjs.map +1 -0
  25. package/dist/google-generative-ai-C30gRjRi.mjs +358 -0
  26. package/dist/google-generative-ai-C30gRjRi.mjs.map +1 -0
  27. package/dist/google-shared-W8g3Esep.mjs +29042 -0
  28. package/dist/google-shared-W8g3Esep.mjs.map +1 -0
  29. package/dist/google-vertex--O_gyVYA.mjs +402 -0
  30. package/dist/google-vertex--O_gyVYA.mjs.map +1 -0
  31. package/dist/hash-Dbggamac.mjs +19 -0
  32. package/dist/hash-Dbggamac.mjs.map +1 -0
  33. package/dist/headers-CPzZhJQn.mjs +17 -0
  34. package/dist/headers-CPzZhJQn.mjs.map +1 -0
  35. package/dist/host.mjs +2 -2
  36. package/dist/host.mjs.map +1 -1
  37. package/dist/images-models-DJtHo9Rp.mjs +1068 -0
  38. package/dist/images-models-DJtHo9Rp.mjs.map +1 -0
  39. package/dist/index.d.mts.map +1 -1
  40. package/dist/index.mjs +11 -3
  41. package/dist/index.mjs.map +1 -1
  42. package/dist/json-parse-C-vG4_qc.mjs +384 -0
  43. package/dist/json-parse-C-vG4_qc.mjs.map +1 -0
  44. package/dist/{mcp-config-vU1LZ7fC.mjs → mcp-config-Cful6uUS.mjs} +2 -2
  45. package/dist/{mcp-config-vU1LZ7fC.mjs.map → mcp-config-Cful6uUS.mjs.map} +1 -1
  46. package/dist/mistral-conversations-LSDG9sjq.mjs +42007 -0
  47. package/dist/mistral-conversations-LSDG9sjq.mjs.map +1 -0
  48. package/dist/multipart-parser-CoM3rwav.mjs +301 -0
  49. package/dist/multipart-parser-CoM3rwav.mjs.map +1 -0
  50. package/dist/openai-codex-responses-JxII_OUX.mjs +1169 -0
  51. package/dist/openai-codex-responses-JxII_OUX.mjs.map +1 -0
  52. package/dist/openai-completions-Dp-VwLzJ.mjs +947 -0
  53. package/dist/openai-completions-Dp-VwLzJ.mjs.map +1 -0
  54. package/dist/openai-completions-lite-BrM7gJzs.mjs +316 -0
  55. package/dist/openai-completions-lite-BrM7gJzs.mjs.map +1 -0
  56. package/dist/openai-prompt-cache-BDWtZRKh.mjs +11 -0
  57. package/dist/openai-prompt-cache-BDWtZRKh.mjs.map +1 -0
  58. package/dist/openai-responses-CWmNks8K.mjs +247 -0
  59. package/dist/openai-responses-CWmNks8K.mjs.map +1 -0
  60. package/dist/openai-responses-shared-CYgIDTf3.mjs +572 -0
  61. package/dist/openai-responses-shared-CYgIDTf3.mjs.map +1 -0
  62. package/dist/openrouter-images-DfAULV7l.mjs +127 -0
  63. package/dist/openrouter-images-DfAULV7l.mjs.map +1 -0
  64. package/dist/otel-Boafyju5.mjs +24935 -0
  65. package/dist/otel-Boafyju5.mjs.map +1 -0
  66. package/dist/{pi-ai-7HR3ciAs.mjs → pi-ai-B4hucafU.mjs} +43 -5
  67. package/dist/{pi-ai-7HR3ciAs.mjs.map → pi-ai-B4hucafU.mjs.map} +1 -1
  68. package/dist/pi-messages-HzGtvc5_.mjs +306 -0
  69. package/dist/pi-messages-HzGtvc5_.mjs.map +1 -0
  70. package/dist/provider-env-C9gOBFJi.mjs +40 -0
  71. package/dist/provider-env-C9gOBFJi.mjs.map +1 -0
  72. package/dist/provider-retry-Cw6YJ4cr.mjs +80 -0
  73. package/dist/provider-retry-Cw6YJ4cr.mjs.map +1 -0
  74. package/dist/{runtime-xNd10ACP.mjs → runtime-k3IlCgjQ.mjs} +18 -3
  75. package/dist/{runtime-xNd10ACP.mjs.map → runtime-k3IlCgjQ.mjs.map} +1 -1
  76. package/dist/runtime.d.mts +8 -1
  77. package/dist/runtime.d.mts.map +1 -1
  78. package/dist/runtime.mjs +2 -2
  79. package/dist/sanitize-unicode-wLA11KvZ.mjs +29 -0
  80. package/dist/sanitize-unicode-wLA11KvZ.mjs.map +1 -0
  81. package/dist/src-D0GRWCE8.mjs +5031 -0
  82. package/dist/src-D0GRWCE8.mjs.map +1 -0
  83. package/dist/transform-messages-DGq9mvhA.mjs +379 -0
  84. package/dist/transform-messages-DGq9mvhA.mjs.map +1 -0
  85. package/dist/uuid-DtFT7tOE.mjs +65 -0
  86. package/dist/uuid-DtFT7tOE.mjs.map +1 -0
  87. package/package.json +2 -2
@@ -0,0 +1,209 @@
1
+
2
+ import { a as AssistantMessageEventStream } from "./diagnostics-CJye1UFh.mjs";
3
+ import { o as clampThinkingLevel } from "./images-models-DJtHo9Rp.mjs";
4
+ import { t as headersToRecord } from "./headers-CPzZhJQn.mjs";
5
+ import { t as getProviderEnvValue } from "./provider-env-C9gOBFJi.mjs";
6
+ import { t as retryProviderRequest } from "./provider-retry-Cw6YJ4cr.mjs";
7
+ import { c as createGrammarToolInputProperties, i as buildBaseOptions } from "./transform-messages-DGq9mvhA.mjs";
8
+ import { n as normalizeProviderError, t as formatProviderError } from "./error-body-DKA3lknR.mjs";
9
+ import { t as clampOpenAIPromptCacheKey } from "./openai-prompt-cache-BDWtZRKh.mjs";
10
+ import { n as convertResponsesTools, r as processResponsesStream, t as convertResponsesMessages } from "./openai-responses-shared-CYgIDTf3.mjs";
11
+ import { AzureOpenAI } from "openai";
12
+ //#region node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js
13
+ const DEFAULT_AZURE_API_VERSION = "v1";
14
+ const AZURE_TOOL_CALL_PROVIDERS = /* @__PURE__ */ new Set([
15
+ "openai",
16
+ "openai-codex",
17
+ "opencode",
18
+ "azure-openai-responses"
19
+ ]);
20
+ const OPENAI_RESPONSES_MIN_OUTPUT_TOKENS = 16;
21
+ function parseDeploymentNameMap(value) {
22
+ const map = /* @__PURE__ */ new Map();
23
+ if (!value) return map;
24
+ for (const entry of value.split(",")) {
25
+ const trimmed = entry.trim();
26
+ if (!trimmed) continue;
27
+ const [modelId, deploymentName] = trimmed.split("=", 2);
28
+ if (!modelId || !deploymentName) continue;
29
+ map.set(modelId.trim(), deploymentName.trim());
30
+ }
31
+ return map;
32
+ }
33
+ function resolveDeploymentName(model, options) {
34
+ if (options?.azureDeploymentName) return options.azureDeploymentName;
35
+ return parseDeploymentNameMap(getProviderEnvValue("AZURE_OPENAI_DEPLOYMENT_NAME_MAP", options?.env)).get(model.id) || model.id;
36
+ }
37
+ function formatAzureOpenAIError(error) {
38
+ return formatProviderError(normalizeProviderError(error), "Azure OpenAI API error");
39
+ }
40
+ /**
41
+ * Generate function for Azure OpenAI Responses API
42
+ */
43
+ const stream = (model, context, options) => {
44
+ const stream = new AssistantMessageEventStream();
45
+ (async () => {
46
+ const deploymentName = resolveDeploymentName(model, options);
47
+ const output = {
48
+ role: "assistant",
49
+ content: [],
50
+ api: "azure-openai-responses",
51
+ provider: model.provider,
52
+ model: model.id,
53
+ usage: {
54
+ input: 0,
55
+ output: 0,
56
+ cacheRead: 0,
57
+ cacheWrite: 0,
58
+ totalTokens: 0,
59
+ cost: {
60
+ input: 0,
61
+ output: 0,
62
+ cacheRead: 0,
63
+ cacheWrite: 0,
64
+ total: 0
65
+ }
66
+ },
67
+ stopReason: "pending",
68
+ timestamp: Date.now()
69
+ };
70
+ try {
71
+ const apiKey = options?.apiKey;
72
+ if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
73
+ const client = createClient(model, apiKey, options);
74
+ const grammarToolInputProperties = createGrammarToolInputProperties(context.tools, model.compat?.supportsOpenAIGrammarTools ?? false);
75
+ let params = buildParams(model, context, options, deploymentName, grammarToolInputProperties);
76
+ const nextParams = await options?.onPayload?.(params, model);
77
+ if (nextParams !== void 0) params = nextParams;
78
+ const requestOptions = {
79
+ ...options?.signal ? { signal: options.signal } : {},
80
+ ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {},
81
+ maxRetries: 0
82
+ };
83
+ const { data: openaiStream, response } = await retryProviderRequest(() => client.responses.create(params, requestOptions).withResponse(), {
84
+ maxRetries: options?.maxRetries,
85
+ maxRetryDelayMs: options?.maxRetryDelayMs,
86
+ signal: options?.signal
87
+ });
88
+ await options?.onResponse?.({
89
+ status: response.status,
90
+ headers: headersToRecord(response.headers)
91
+ }, model);
92
+ stream.push({
93
+ type: "start",
94
+ partial: output
95
+ });
96
+ await processResponsesStream(openaiStream, output, stream, model, { grammarToolInputProperties });
97
+ if (options?.signal?.aborted) throw new Error("Request was aborted");
98
+ if (output.stopReason === "pending") throw new Error("Azure OpenAI Responses stream ended without a stop reason");
99
+ if (output.stopReason === "aborted" || output.stopReason === "error") throw new Error(output.errorMessage || "An unknown error occurred");
100
+ stream.push({
101
+ type: "done",
102
+ reason: output.stopReason,
103
+ message: output
104
+ });
105
+ stream.end();
106
+ } catch (error) {
107
+ for (const block of output.content) {
108
+ delete block.index;
109
+ delete block.partialJson;
110
+ delete block.customInput;
111
+ }
112
+ output.stopReason = options?.signal?.aborted ? "aborted" : "error";
113
+ output.errorMessage = formatAzureOpenAIError(error);
114
+ stream.push({
115
+ type: "error",
116
+ reason: output.stopReason,
117
+ error: output
118
+ });
119
+ stream.end();
120
+ }
121
+ })();
122
+ return stream;
123
+ };
124
+ const streamSimple = (model, context, options) => {
125
+ const apiKey = options?.apiKey;
126
+ if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
127
+ const base = buildBaseOptions(model, context, options, apiKey);
128
+ const clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : void 0;
129
+ const reasoningEffort = clampedReasoning === "off" ? void 0 : clampedReasoning;
130
+ return stream(model, context, {
131
+ ...base,
132
+ reasoningEffort
133
+ });
134
+ };
135
+ function normalizeAzureBaseUrl(baseUrl) {
136
+ const trimmed = baseUrl.trim().replace(/\/+$/, "");
137
+ let url;
138
+ try {
139
+ url = new URL(trimmed);
140
+ } catch {
141
+ throw new Error(`Invalid Azure OpenAI base URL: ${baseUrl}`);
142
+ }
143
+ const isAzureHost = url.hostname.endsWith(".openai.azure.com") || url.hostname.endsWith(".cognitiveservices.azure.com") || url.hostname.endsWith(".ai.azure.com");
144
+ const normalizedPath = url.pathname.replace(/\/+$/, "");
145
+ if (isAzureHost && (normalizedPath === "" || normalizedPath === "/" || normalizedPath === "/openai" || normalizedPath === "/openai/v1/responses")) {
146
+ url.pathname = "/openai/v1";
147
+ url.search = "";
148
+ }
149
+ return url.toString().replace(/\/+$/, "");
150
+ }
151
+ function buildDefaultBaseUrl(resourceName) {
152
+ return `https://${resourceName}.openai.azure.com/openai/v1`;
153
+ }
154
+ function resolveAzureConfig(model, options) {
155
+ const apiVersion = options?.azureApiVersion || getProviderEnvValue("AZURE_OPENAI_API_VERSION", options?.env) || DEFAULT_AZURE_API_VERSION;
156
+ const baseUrl = options?.azureBaseUrl?.trim() || getProviderEnvValue("AZURE_OPENAI_BASE_URL", options?.env)?.trim() || void 0;
157
+ const resourceName = options?.azureResourceName || getProviderEnvValue("AZURE_OPENAI_RESOURCE_NAME", options?.env);
158
+ let resolvedBaseUrl = baseUrl;
159
+ if (!resolvedBaseUrl && resourceName) resolvedBaseUrl = buildDefaultBaseUrl(resourceName);
160
+ if (!resolvedBaseUrl && model.baseUrl) resolvedBaseUrl = model.baseUrl;
161
+ if (!resolvedBaseUrl) throw new Error("Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or pass azureBaseUrl, azureResourceName, or model.baseUrl.");
162
+ return {
163
+ baseUrl: normalizeAzureBaseUrl(resolvedBaseUrl),
164
+ apiVersion
165
+ };
166
+ }
167
+ function createClient(model, apiKey, options) {
168
+ const headers = { ...model.headers };
169
+ if (options?.headers) Object.assign(headers, options.headers);
170
+ const { baseUrl, apiVersion } = resolveAzureConfig(model, options);
171
+ return new AzureOpenAI({
172
+ apiKey,
173
+ apiVersion,
174
+ dangerouslyAllowBrowser: true,
175
+ fetch: options?.fetch,
176
+ defaultHeaders: headers,
177
+ baseURL: baseUrl
178
+ });
179
+ }
180
+ function buildParams(model, context, options, deploymentName, grammarToolInputProperties = createGrammarToolInputProperties(context.tools, model.compat?.supportsOpenAIGrammarTools ?? false)) {
181
+ const params = {
182
+ model: deploymentName,
183
+ input: convertResponsesMessages(model, context, AZURE_TOOL_CALL_PROVIDERS, { grammarToolInputProperties }),
184
+ stream: true,
185
+ prompt_cache_key: clampOpenAIPromptCacheKey(options?.sessionId),
186
+ store: false
187
+ };
188
+ if (options?.maxTokens) params.max_output_tokens = Math.max(options.maxTokens, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS);
189
+ if (options?.temperature !== void 0) params.temperature = options?.temperature;
190
+ if (context.tools && context.tools.length > 0) params.tools = convertResponsesTools(context.tools, {
191
+ supportsStrictMode: model.compat?.supportsStrictMode ?? true,
192
+ supportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false
193
+ });
194
+ if (model.reasoning) {
195
+ if (options?.reasoningEffort || options?.reasoningSummary) {
196
+ params.reasoning = {
197
+ effort: options?.reasoningEffort ? model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort : "medium",
198
+ summary: options?.reasoningSummary || "auto"
199
+ };
200
+ params.include = ["reasoning.encrypted_content"];
201
+ } else if (model.thinkingLevelMap?.off !== null) params.reasoning = { effort: model.thinkingLevelMap?.off ?? "none" };
202
+ }
203
+ if (options?.samplingParams) Object.assign(params, options.samplingParams);
204
+ return params;
205
+ }
206
+ //#endregion
207
+ export { stream, streamSimple };
208
+
209
+ //# sourceMappingURL=azure-openai-responses-vGUNukZ7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-openai-responses-vGUNukZ7.mjs","names":[],"sources":["../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js"],"sourcesContent":["import { AzureOpenAI } from \"openai\";\nimport { clampThinkingLevel } from \"../models.js\";\nimport { formatProviderError, normalizeProviderError } from \"../utils/error-body.js\";\nimport { AssistantMessageEventStream } from \"../utils/event-stream.js\";\nimport { headersToRecord } from \"../utils/headers.js\";\nimport { getProviderEnvValue } from \"../utils/provider-env.js\";\nimport { retryProviderRequest } from \"../utils/provider-retry.js\";\nimport { createGrammarToolInputProperties } from \"./constrained-sampling.js\";\nimport { clampOpenAIPromptCacheKey } from \"./openai-prompt-cache.js\";\nimport { convertResponsesMessages, convertResponsesTools, processResponsesStream } from \"./openai-responses-shared.js\";\nimport { buildBaseOptions } from \"./simple-options.js\";\nconst DEFAULT_AZURE_API_VERSION = \"v1\";\nconst AZURE_TOOL_CALL_PROVIDERS = new Set([\"openai\", \"openai-codex\", \"opencode\", \"azure-openai-responses\"]);\n// OpenAI Responses rejects max_output_tokens below 16: https://github.com/earendil-works/pi/issues/6265\nconst OPENAI_RESPONSES_MIN_OUTPUT_TOKENS = 16;\nfunction parseDeploymentNameMap(value) {\n const map = new Map();\n if (!value)\n return map;\n for (const entry of value.split(\",\")) {\n const trimmed = entry.trim();\n if (!trimmed)\n continue;\n const [modelId, deploymentName] = trimmed.split(\"=\", 2);\n if (!modelId || !deploymentName)\n continue;\n map.set(modelId.trim(), deploymentName.trim());\n }\n return map;\n}\nfunction resolveDeploymentName(model, options) {\n if (options?.azureDeploymentName) {\n return options.azureDeploymentName;\n }\n const mappedDeployment = parseDeploymentNameMap(getProviderEnvValue(\"AZURE_OPENAI_DEPLOYMENT_NAME_MAP\", options?.env)).get(model.id);\n return mappedDeployment || model.id;\n}\nfunction formatAzureOpenAIError(error) {\n return formatProviderError(normalizeProviderError(error), \"Azure OpenAI API error\");\n}\n/**\n * Generate function for Azure OpenAI Responses API\n */\nexport const stream = (model, context, options) => {\n const stream = new AssistantMessageEventStream();\n // Start async processing\n (async () => {\n const deploymentName = resolveDeploymentName(model, options);\n const output = {\n role: \"assistant\",\n content: [],\n api: \"azure-openai-responses\",\n provider: model.provider,\n model: model.id,\n usage: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n },\n stopReason: \"pending\",\n timestamp: Date.now(),\n };\n try {\n // Create Azure OpenAI client\n const apiKey = options?.apiKey;\n if (!apiKey) {\n throw new Error(`No API key for provider: ${model.provider}`);\n }\n const client = createClient(model, apiKey, options);\n const grammarToolInputProperties = createGrammarToolInputProperties(context.tools, model.compat?.supportsOpenAIGrammarTools ?? false);\n let params = buildParams(model, context, options, deploymentName, grammarToolInputProperties);\n const nextParams = await options?.onPayload?.(params, model);\n if (nextParams !== undefined) {\n params = nextParams;\n }\n const requestOptions = {\n ...(options?.signal ? { signal: options.signal } : {}),\n ...(options?.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),\n maxRetries: 0,\n };\n const { data: openaiStream, response } = await retryProviderRequest(() => client.responses.create(params, requestOptions).withResponse(), {\n maxRetries: options?.maxRetries,\n maxRetryDelayMs: options?.maxRetryDelayMs,\n signal: options?.signal,\n });\n await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);\n stream.push({ type: \"start\", partial: output });\n await processResponsesStream(openaiStream, output, stream, model, { grammarToolInputProperties });\n if (options?.signal?.aborted) {\n throw new Error(\"Request was aborted\");\n }\n if (output.stopReason === \"pending\") {\n throw new Error(\"Azure OpenAI Responses stream ended without a stop reason\");\n }\n if (output.stopReason === \"aborted\" || output.stopReason === \"error\") {\n throw new Error(output.errorMessage || \"An unknown error occurred\");\n }\n stream.push({ type: \"done\", reason: output.stopReason, message: output });\n stream.end();\n }\n catch (error) {\n for (const block of output.content) {\n delete block.index;\n // Streaming scratch buffers are only used during parsing; never persist them.\n delete block.partialJson;\n delete block.customInput;\n }\n output.stopReason = options?.signal?.aborted ? \"aborted\" : \"error\";\n output.errorMessage = formatAzureOpenAIError(error);\n stream.push({ type: \"error\", reason: output.stopReason, error: output });\n stream.end();\n }\n })();\n return stream;\n};\nexport const streamSimple = (model, context, options) => {\n const apiKey = options?.apiKey;\n if (!apiKey) {\n throw new Error(`No API key for provider: ${model.provider}`);\n }\n const base = buildBaseOptions(model, context, options, apiKey);\n const clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : undefined;\n const reasoningEffort = clampedReasoning === \"off\" ? undefined : clampedReasoning;\n return stream(model, context, {\n ...base,\n reasoningEffort,\n });\n};\nfunction normalizeAzureBaseUrl(baseUrl) {\n const trimmed = baseUrl.trim().replace(/\\/+$/, \"\");\n let url;\n try {\n url = new URL(trimmed);\n }\n catch {\n throw new Error(`Invalid Azure OpenAI base URL: ${baseUrl}`);\n }\n const isAzureHost = url.hostname.endsWith(\".openai.azure.com\") ||\n url.hostname.endsWith(\".cognitiveservices.azure.com\") ||\n url.hostname.endsWith(\".ai.azure.com\");\n const normalizedPath = url.pathname.replace(/\\/+$/, \"\");\n // Ensure Azure hosts have /openai/v1 as base path so the AzureOpenAI SDK\n // can append /deployments/<model>/... and ?api-version=v1 correctly.\n if (isAzureHost &&\n (normalizedPath === \"\" ||\n normalizedPath === \"/\" ||\n normalizedPath === \"/openai\" ||\n normalizedPath === \"/openai/v1/responses\")) {\n url.pathname = \"/openai/v1\";\n url.search = \"\";\n }\n return url.toString().replace(/\\/+$/, \"\");\n}\nfunction buildDefaultBaseUrl(resourceName) {\n return `https://${resourceName}.openai.azure.com/openai/v1`;\n}\nfunction resolveAzureConfig(model, options) {\n const apiVersion = options?.azureApiVersion ||\n getProviderEnvValue(\"AZURE_OPENAI_API_VERSION\", options?.env) ||\n DEFAULT_AZURE_API_VERSION;\n const baseUrl = options?.azureBaseUrl?.trim() || getProviderEnvValue(\"AZURE_OPENAI_BASE_URL\", options?.env)?.trim() || undefined;\n const resourceName = options?.azureResourceName || getProviderEnvValue(\"AZURE_OPENAI_RESOURCE_NAME\", options?.env);\n let resolvedBaseUrl = baseUrl;\n if (!resolvedBaseUrl && resourceName) {\n resolvedBaseUrl = buildDefaultBaseUrl(resourceName);\n }\n if (!resolvedBaseUrl && model.baseUrl) {\n resolvedBaseUrl = model.baseUrl;\n }\n if (!resolvedBaseUrl) {\n throw new Error(\"Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or pass azureBaseUrl, azureResourceName, or model.baseUrl.\");\n }\n return {\n baseUrl: normalizeAzureBaseUrl(resolvedBaseUrl),\n apiVersion,\n };\n}\nfunction createClient(model, apiKey, options) {\n const headers = { ...model.headers };\n if (options?.headers) {\n Object.assign(headers, options.headers);\n }\n const { baseUrl, apiVersion } = resolveAzureConfig(model, options);\n return new AzureOpenAI({\n apiKey,\n apiVersion,\n dangerouslyAllowBrowser: true,\n fetch: options?.fetch,\n defaultHeaders: headers,\n baseURL: baseUrl,\n });\n}\nfunction buildParams(model, context, options, deploymentName, grammarToolInputProperties = createGrammarToolInputProperties(context.tools, model.compat?.supportsOpenAIGrammarTools ?? false)) {\n const messages = convertResponsesMessages(model, context, AZURE_TOOL_CALL_PROVIDERS, {\n grammarToolInputProperties,\n });\n const params = {\n model: deploymentName,\n input: messages,\n stream: true,\n prompt_cache_key: clampOpenAIPromptCacheKey(options?.sessionId),\n store: false,\n };\n if (options?.maxTokens) {\n params.max_output_tokens = Math.max(options.maxTokens, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS);\n }\n if (options?.temperature !== undefined) {\n params.temperature = options?.temperature;\n }\n if (context.tools && context.tools.length > 0) {\n params.tools = convertResponsesTools(context.tools, {\n supportsStrictMode: model.compat?.supportsStrictMode ?? true,\n supportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false,\n });\n }\n if (model.reasoning) {\n if (options?.reasoningEffort || options?.reasoningSummary) {\n const effort = options?.reasoningEffort\n ? (model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort)\n : \"medium\";\n params.reasoning = {\n effort: effort,\n summary: options?.reasoningSummary || \"auto\",\n };\n params.include = [\"reasoning.encrypted_content\"];\n }\n else if (model.thinkingLevelMap?.off !== null) {\n params.reasoning = {\n effort: (model.thinkingLevelMap?.off ?? \"none\"),\n };\n }\n }\n // Last so custom keys override the named request fields.\n if (options?.samplingParams) {\n Object.assign(params, options.samplingParams);\n }\n return params;\n}\n//# sourceMappingURL=azure-openai-responses.js.map"],"x_google_ignoreList":[0],"mappings":"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"}
package/dist/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { t as resolvePiPackage } from "./source-0sA5z08z.mjs";
3
- import { a as analyzePackage, c as EVENT_RULES, i as generateBundle, l as HOST_IMPORT_RULES, n as convertPiMcpConfig, o as API_RULES, p as UI_CONTEXT_RULES, r as renderMcpPatch, s as CONTEXT_RULES } from "./mcp-config-vU1LZ7fC.mjs";
3
+ import { a as analyzePackage, c as EVENT_RULES, i as generateBundle, l as HOST_IMPORT_RULES, n as convertPiMcpConfig, o as API_RULES, p as UI_CONTEXT_RULES, r as renderMcpPatch, s as CONTEXT_RULES } from "./mcp-config-Cful6uUS.mjs";
4
4
  import { writeFileSync } from "node:fs";
5
5
  import { parseArgs } from "node:util";
6
6
  //#region src/cli.ts
@@ -1 +1 @@
1
- {"version":3,"file":"pi-ai.d.mts","names":[],"sources":["../../src/compat/vendor/pi-ai-overflow.ts","../../src/compat/vendor/pi-ai-retry.ts","../../src/compat/vendor/pi-uuid.ts","../../src/compat/vendor/pi-ai-provider.ts","../../src/compat/vendor/pi-ai-event-stream.ts","../../src/compat/vendor/pi-ai-lazy.ts","../../src/compat/vendor/pi-oauth-flows/openai-codex.ts","../../src/compat/vendor/pi-oauth-flows/anthropic.ts","../../src/compat/vendor/pi-oauth-flows/github-copilot.ts","../../src/compat/vendor/pi-oauth-flows/kimi-coding.ts","../../src/compat/vendor/pi-oauth-flows/pkce.ts","../../src/compat/vendor/pi-oauth-flows/device-code.ts","../../src/compat/pi-ai.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsIgB,kBAAkB,SAAS,kBAAkB;;;;;;;iBAqC7C,oBAAoB,SAAS,kBAAkB;;;;;;;;;;;;iBCoD/C,0BAA0B,SAAS;;;;iBChNnC;;;cCLH,oBAAoB;EAC7B;EACY,YAAA,WAAM,cAAS;;;;;;;;iBAYf,eAAe;;;;;;;oCAAf;;;;;;;cCtBH;EACT;EACA;EACA;EACA,oBAAkB;EAClB;EACA;EACA;EACY,YAAA,iBAAY;EAOxB,KAAK;EAgBL,IAAI;GAWI,OAAO,kBAAc;EAgB7B,UAAM;;cAIG,oCAAoC;EAAA;;;;;;;;;iBC5BjC,WAAW,YAAO,aAAK;iBAWvB,QAAQ,WAAM;sDAAd;4DAAA;;;;cC2XH;;;;;;;;;;;;;;;;;;;;;;;iBC7OE,eAAe,mBAAW;;;;;;cA+G5B;;;;;;;;;;;;;;;;iBCvBE,mBAAmB,mBAAW;;;;;;;;cAoChC;;;;;;;;;;;;;;;;;;;;iBC7EE,gBAAgB,mBAAW;;;;;;cAa7B;;;;;;;;;;;;;;;;;;;;;;;iBCrOS,gBAAY;;;;;;iBCOZ,wBAAwB,eAAO;;;KCDzC;KACA,6BAA6B;KAC7B,mBAAmB,QAAQ,OAAO;KAClC;UAEK,MAAM,aAAa,MAAM;EACxC;EACA;EACA,MAAM;EACN;EACA;EACA;EACA,mBAAmB;EACnB;EACA;EACA;GACC;;iBAKa,2BAA2B,aAAa,KAAK,OAAO,MAAM,QAAQ;iBASlE,mBAAmB,aAAa,KAC9C,OAAO,MAAM,OACb,OAAO,qBACN;iBAgBa,eAAe,aAAa,KAC1C,GAAG,MAAM,0BACT,GAAG,MAAM;UAMD;EACR;EACA;GACC;;iBAGa,YAAY,2BAA2B,kBAAkB;iBAazD,iBAAiB,cAAc;iBAM/B;iBAIA,YAAY;iBAIZ,SAAS,mBAAmB;iBAI5B,UAAU;;;;;;;iBAsDJ,oBAAoB,qBAAqB,QAAQ;iBAcvD;iBAIA;iBAIA;iBAwBA,oBAAoB;EAAQ;EAAY;EAAc;EAAa;EAAiB;EAAiB;IAAQ;;;cAYhH,4BAAiC;cACjC,0BAA+B;cAC/B,8BAAmC;cACnC,2BAAgC;UASnC;EACR;EACA,YAAY;EACZ,kBAAkB;;iBAaJ,oBAAoB,UAAU,mBAAmB;iBAWjD,eAAe,cAAc;iBAI7B,mBAAmB;iBAInB,uBAAuB;KAUlC,iBAAiB,OAAO,eAAe,SAAS,eAAe,SAAS;EAC3E,UAAU;GACT,OAAO,kBAAkB;;KAGvB,gBAAgB;iBAIL,mBAAmB,QAAQ;iBAWrB,SAAS,OAAO,eAAe,SAAS,eAAe,UAAU,gBAAgB;iBAOvF,OAAO,OAAO,eAAe,SAAS,eAAe,UAAU;UAI9D,kBAAkB;EACjC;EACA,UAAU;;iBAGI,WAAW,6BACzB,QAAQ,GACR,UAAS,kBAAkB;EACxB;EAAgB,MAAM;EAAG;EAAsB,UAAU"}
1
+ {"version":3,"file":"pi-ai.d.mts","names":[],"sources":["../../src/compat/vendor/pi-ai-overflow.ts","../../src/compat/vendor/pi-ai-retry.ts","../../src/compat/vendor/pi-uuid.ts","../../src/compat/vendor/pi-ai-provider.ts","../../src/compat/vendor/pi-ai-event-stream.ts","../../src/compat/vendor/pi-ai-lazy.ts","../../src/compat/vendor/pi-oauth-flows/openai-codex.ts","../../src/compat/vendor/pi-oauth-flows/anthropic.ts","../../src/compat/vendor/pi-oauth-flows/github-copilot.ts","../../src/compat/vendor/pi-oauth-flows/kimi-coding.ts","../../src/compat/vendor/pi-oauth-flows/pkce.ts","../../src/compat/vendor/pi-oauth-flows/device-code.ts","../../src/compat/pi-ai.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsIgB,kBAAkB,SAAS,kBAAkB;;;;;;;iBAqC7C,oBAAoB,SAAS,kBAAkB;;;;;;;;;;;;iBCoD/C,0BAA0B,SAAS;;;;iBChNnC;;;cCLH,oBAAoB;EAC7B;EACY,YAAA,WAAM,cAAS;;;;;;;;iBAYf,eAAe;;;;;;;oCAAf;;;;;;;cCtBH;EACT;EACA;EACA;EACA,oBAAkB;EAClB;EACA;EACA;EACY,YAAA,iBAAY;EAOxB,KAAK;EAgBL,IAAI;GAWI,OAAO,kBAAc;EAgB7B,UAAM;;cAIG,oCAAoC;EAAA;;;;;;;;;iBC5BjC,WAAW,YAAO,aAAK;iBAWvB,QAAQ,WAAM;sDAAd;4DAAA;;;;cC2XH;;;;;;;;;;;;;;;;;;;;;;;iBC7OE,eAAe,mBAAW;;;;;;cA+G5B;;;;;;;;;;;;;;;;iBCvBE,mBAAmB,mBAAW;;;;;;;;cAoChC;;;;;;;;;;;;;;;;;;;;iBC7EE,gBAAgB,mBAAW;;;;;;cAa7B;;;;;;;;;;;;;;;;;;;;;;;iBCrOS,gBAAY;;;;;;iBCOZ,wBAAwB,eAAO;;;KCDzC;KACA,6BAA6B;KAC7B,mBAAmB,QAAQ,OAAO;KAClC;UAEK,MAAM,aAAa,MAAM;EACxC;EACA;EACA,MAAM;EACN;EACA;EACA;EACA,mBAAmB;EACnB;EACA;EACA;GACC;;iBAKa,2BAA2B,aAAa,KAAK,OAAO,MAAM,QAAQ;iBASlE,mBAAmB,aAAa,KAC9C,OAAO,MAAM,OACb,OAAO,qBACN;iBAgBa,eAAe,aAAa,KAC1C,GAAG,MAAM,0BACT,GAAG,MAAM;UAMD;EACR;EACA;GACC;;iBAGa,YAAY,2BAA2B,kBAAkB;iBAazD,iBAAiB,cAAc;iBAM/B;iBAIA,YAAY;iBAIZ,SAAS,mBAAmB;iBAI5B,UAAU;;;;;;;iBAsDJ,oBAAoB,qBAAqB,QAAQ;iBAcvD;iBASA;iBAIA;iBAwBA,oBAAoB;EAAQ;EAAY;EAAc;EAAa;EAAiB;EAAiB;IAAQ;;;cAYhH,4BAAiC;cACjC,0BAA+B;cAC/B,8BAAmC;cACnC,2BAAgC;UASnC;EACR;EACA,YAAY;EACZ,kBAAkB;;iBAaJ,oBAAoB,UAAU,mBAAmB;iBAWjD,eAAe,cAAc;iBAI7B,mBAAmB;iBAInB,uBAAuB;KAUlC,iBAAiB,OAAO,eAAe,SAAS,eAAe,SAAS;EAC3E,UAAU;GACT,OAAO,kBAAkB;;KAGvB,gBAAgB;iBAIL,mBAAmB,QAAQ;iBAWrB,SAAS,OAAO,eAAe,SAAS,eAAe,UAAU,gBAAgB;iBAOvF,OAAO,OAAO,eAAe,SAAS,eAAe,UAAU;UAI9D,kBAAkB;EACjC;EACA,UAAU;;iBAGI,WAAW,6BACzB,QAAQ,GACR,UAAS,kBAAkB;EACxB;EAAgB,MAAM;EAAG;EAAsB,UAAU"}
@@ -1,4 +1,4 @@
1
1
 
2
- import { A as anthropicOAuth, B as isContextOverflow, C as realBuiltinProvider, D as unregisterApiProviders, E as stream, F as createProvider, I as lazyApi, L as lazyStream, M as generatePKCE, N as pollOAuthDeviceCodeFlow, O as kimiCodingOAuth, P as ModelsError, R as AssistantMessageEventStream, S as openAIResponsesApi, T as registerProvider, V as isRecoverableLength, _ as loadGitHubCopilotOAuth, a as builtinProviders, b as modelsAreEqual, c as contentText, d as getModel, f as getModels, g as loadAnthropicOAuth, h as getSupportedThinkingLevels, i as anthropicMessagesApi, j as openaiCodexOAuth, k as githubCopilotOAuth, l as getApiProvider, m as getProviders, n as Type, o as clampThinkingLevel, p as getProvider, r as __setPiAiLlmBridge, s as complete, t as StringEnum, u as getApiProviders, v as loadKimiCodingOAuth, w as registerApiProvider, x as openAICompletionsApi, y as loadOpenAICodexOAuth, z as isRetryableAssistantError } from "../pi-ai-7HR3ciAs.mjs";
2
+ import { A as anthropicOAuth, B as isContextOverflow, C as realBuiltinProvider, D as unregisterApiProviders, E as stream, F as createProvider, I as lazyApi, L as lazyStream, M as generatePKCE, N as pollOAuthDeviceCodeFlow, O as kimiCodingOAuth, P as ModelsError, R as AssistantMessageEventStream, S as openAIResponsesApi, T as registerProvider, V as isRecoverableLength, _ as loadGitHubCopilotOAuth, a as builtinProviders, b as modelsAreEqual, c as contentText, d as getModel, f as getModels, g as loadAnthropicOAuth, h as getSupportedThinkingLevels, i as anthropicMessagesApi, j as openaiCodexOAuth, k as githubCopilotOAuth, l as getApiProvider, m as getProviders, n as Type, o as clampThinkingLevel, p as getProvider, r as __setPiAiLlmBridge, s as complete, t as StringEnum, u as getApiProviders, v as loadKimiCodingOAuth, w as registerApiProvider, x as openAICompletionsApi, y as loadOpenAICodexOAuth, z as isRetryableAssistantError } from "../pi-ai-B4hucafU.mjs";
3
3
  import { t as uuidv7 } from "../pi-uuid-Db8ShZsK.mjs";
4
4
  export { AssistantMessageEventStream, ModelsError, StringEnum, Type, __setPiAiLlmBridge, anthropicMessagesApi, anthropicOAuth, builtinProviders, clampThinkingLevel, complete, contentText, createProvider, generatePKCE, getApiProvider, getApiProviders, getModel, getModels, getProvider, getProviders, getSupportedThinkingLevels, githubCopilotOAuth, isContextOverflow, isRecoverableLength, isRetryableAssistantError, kimiCodingOAuth, lazyApi, lazyStream, loadAnthropicOAuth, loadGitHubCopilotOAuth, loadKimiCodingOAuth, loadOpenAICodexOAuth, modelsAreEqual, openAICompletionsApi, openAIResponsesApi, openaiCodexOAuth, pollOAuthDeviceCodeFlow, realBuiltinProvider, registerApiProvider, registerProvider, stream, unregisterApiProviders, uuidv7 };
@@ -1,5 +1,5 @@
1
1
 
2
- import { a as builtinProviders } from "./pi-ai-7HR3ciAs.mjs";
2
+ import { a as builtinProviders } from "./pi-ai-B4hucafU.mjs";
3
3
  import { t as getAgentDir } from "./pi-config-shim-CZ1wFzqM.mjs";
4
4
  import "./pi-coding-agent-CznNsOnV.mjs";
5
5
  import { i as resolveOAuthApiKey, o as storedOAuthCredential, r as providerSupportsOAuth, t as FileCredentialStore } from "./oauth-bridge-CfyImWx4.mjs";
@@ -0,0 +1,32 @@
1
+
2
+ //#region node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/utils/deferred-tools.js
3
+ const identityToolName = (name) => name;
4
+ /** Split current tools into prefix and transcript-loaded definitions. */
5
+ function splitDeferredTools(context, enabled, normalizeName = identityToolName) {
6
+ const uniqueTools = /* @__PURE__ */ new Map();
7
+ for (const tool of context.tools ?? []) uniqueTools.set(normalizeName(tool.name), tool);
8
+ if (!enabled) return {
9
+ immediate: [...uniqueTools.values()],
10
+ deferred: /* @__PURE__ */ new Map()
11
+ };
12
+ const deferredNames = /* @__PURE__ */ new Set();
13
+ const usedNames = /* @__PURE__ */ new Set();
14
+ for (const message of context.messages) if (message.role === "assistant") {
15
+ for (const block of message.content) if (block.type === "toolCall") usedNames.add(normalizeName(block.name));
16
+ } else if (message.role === "toolResult") for (const name of message.addedToolNames ?? []) {
17
+ const normalizedName = normalizeName(name);
18
+ if (!usedNames.has(normalizedName)) deferredNames.add(normalizedName);
19
+ }
20
+ const immediate = [];
21
+ const deferred = /* @__PURE__ */ new Map();
22
+ for (const [name, tool] of uniqueTools) if (deferredNames.has(name)) deferred.set(name, tool);
23
+ else immediate.push(tool);
24
+ return {
25
+ immediate,
26
+ deferred
27
+ };
28
+ }
29
+ //#endregion
30
+ export { splitDeferredTools as t };
31
+
32
+ //# sourceMappingURL=deferred-tools-BD4g5QUx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferred-tools-BD4g5QUx.mjs","names":[],"sources":["../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/utils/deferred-tools.js"],"sourcesContent":["const identityToolName = (name) => name;\n/** Split current tools into prefix and transcript-loaded definitions. */\nexport function splitDeferredTools(context, enabled, normalizeName = identityToolName) {\n const uniqueTools = new Map();\n for (const tool of context.tools ?? [])\n uniqueTools.set(normalizeName(tool.name), tool);\n if (!enabled)\n return { immediate: [...uniqueTools.values()], deferred: new Map() };\n const deferredNames = new Set();\n const usedNames = new Set();\n for (const message of context.messages) {\n if (message.role === \"assistant\") {\n for (const block of message.content) {\n if (block.type === \"toolCall\")\n usedNames.add(normalizeName(block.name));\n }\n }\n else if (message.role === \"toolResult\") {\n for (const name of message.addedToolNames ?? []) {\n const normalizedName = normalizeName(name);\n if (!usedNames.has(normalizedName))\n deferredNames.add(normalizedName);\n }\n }\n }\n const immediate = [];\n const deferred = new Map();\n for (const [name, tool] of uniqueTools) {\n if (deferredNames.has(name))\n deferred.set(name, tool);\n else\n immediate.push(tool);\n }\n return { immediate, deferred };\n}\n//# sourceMappingURL=deferred-tools.js.map"],"x_google_ignoreList":[0],"mappings":";;AAAA,MAAM,oBAAoB,SAAS;;AAEnC,SAAgB,mBAAmB,SAAS,SAAS,gBAAgB,kBAAkB;CACnF,MAAM,8BAAc,IAAI,IAAI;CAC5B,KAAK,MAAM,QAAQ,QAAQ,SAAS,CAAC,GACjC,YAAY,IAAI,cAAc,KAAK,IAAI,GAAG,IAAI;CAClD,IAAI,CAAC,SACD,OAAO;EAAE,WAAW,CAAC,GAAG,YAAY,OAAO,CAAC;EAAG,0BAAU,IAAI,IAAI;CAAE;CACvE,MAAM,gCAAgB,IAAI,IAAI;CAC9B,MAAM,4BAAY,IAAI,IAAI;CAC1B,KAAK,MAAM,WAAW,QAAQ,UAC1B,IAAI,QAAQ,SAAS,aACZ;OAAA,MAAM,SAAS,QAAQ,SACxB,IAAI,MAAM,SAAS,YACf,UAAU,IAAI,cAAc,MAAM,IAAI,CAAC;CAAA,OAG9C,IAAI,QAAQ,SAAS,cACtB,KAAK,MAAM,QAAQ,QAAQ,kBAAkB,CAAC,GAAG;EAC7C,MAAM,iBAAiB,cAAc,IAAI;EACzC,IAAI,CAAC,UAAU,IAAI,cAAc,GAC7B,cAAc,IAAI,cAAc;CACxC;CAGR,MAAM,YAAY,CAAC;CACnB,MAAM,2BAAW,IAAI,IAAI;CACzB,KAAK,MAAM,CAAC,MAAM,SAAS,aACvB,IAAI,cAAc,IAAI,IAAI,GACtB,SAAS,IAAI,MAAM,IAAI;MAEvB,UAAU,KAAK,IAAI;CAE3B,OAAO;EAAE;EAAW;CAAS;AACjC"}
@@ -0,0 +1,99 @@
1
+
2
+ //#region node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js
3
+ var EventStream = class {
4
+ queue = [];
5
+ waiting = [];
6
+ done = false;
7
+ finalResultPromise;
8
+ resolveFinalResult;
9
+ isComplete;
10
+ extractResult;
11
+ constructor(isComplete, extractResult) {
12
+ this.isComplete = isComplete;
13
+ this.extractResult = extractResult;
14
+ this.finalResultPromise = new Promise((resolve) => {
15
+ this.resolveFinalResult = resolve;
16
+ });
17
+ }
18
+ push(event) {
19
+ if (this.done) return;
20
+ if (this.isComplete(event)) {
21
+ this.done = true;
22
+ this.resolveFinalResult(this.extractResult(event));
23
+ }
24
+ const waiter = this.waiting.shift();
25
+ if (waiter) waiter({
26
+ value: event,
27
+ done: false
28
+ });
29
+ else this.queue.push(event);
30
+ }
31
+ end(result) {
32
+ this.done = true;
33
+ if (result !== void 0) this.resolveFinalResult(result);
34
+ while (this.waiting.length > 0) this.waiting.shift()({
35
+ value: void 0,
36
+ done: true
37
+ });
38
+ }
39
+ async *[Symbol.asyncIterator]() {
40
+ while (true) if (this.queue.length > 0) yield this.queue.shift();
41
+ else if (this.done) return;
42
+ else {
43
+ const result = await new Promise((resolve) => this.waiting.push(resolve));
44
+ if (result.done) return;
45
+ yield result.value;
46
+ }
47
+ }
48
+ result() {
49
+ return this.finalResultPromise;
50
+ }
51
+ };
52
+ var AssistantMessageEventStream = class extends EventStream {
53
+ constructor() {
54
+ super((event) => event.type === "done" || event.type === "error", (event) => {
55
+ if (event.type === "done") return event.message;
56
+ else if (event.type === "error") return event.error;
57
+ throw new Error("Unexpected event type for final result");
58
+ });
59
+ }
60
+ };
61
+ /** Factory function for AssistantMessageEventStream (for use in extensions) */
62
+ function createAssistantMessageEventStream() {
63
+ return new AssistantMessageEventStream();
64
+ }
65
+ //#endregion
66
+ //#region node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/utils/diagnostics.js
67
+ function formatThrownValue(value) {
68
+ if (value instanceof Error) return value.message || value.name;
69
+ if (typeof value === "string") return value;
70
+ return String(value);
71
+ }
72
+ function extractDiagnosticError(error) {
73
+ if (!(error instanceof Error)) return {
74
+ name: "ThrownValue",
75
+ message: formatThrownValue(error)
76
+ };
77
+ const code = error.code;
78
+ return {
79
+ name: error.name || void 0,
80
+ message: error.message || error.name,
81
+ stack: error.stack,
82
+ code: typeof code === "string" || typeof code === "number" ? code : void 0
83
+ };
84
+ }
85
+ function createAssistantMessageDiagnostic(type, error, details) {
86
+ return {
87
+ type,
88
+ timestamp: Date.now(),
89
+ error: extractDiagnosticError(error),
90
+ details
91
+ };
92
+ }
93
+ function appendAssistantMessageDiagnostic(message, diagnostic) {
94
+ message.diagnostics = [...message.diagnostics ?? [], diagnostic];
95
+ }
96
+ //#endregion
97
+ export { AssistantMessageEventStream as a, formatThrownValue as i, createAssistantMessageDiagnostic as n, EventStream as o, extractDiagnosticError as r, createAssistantMessageEventStream as s, appendAssistantMessageDiagnostic as t };
98
+
99
+ //# sourceMappingURL=diagnostics-CJye1UFh.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-CJye1UFh.mjs","names":[],"sources":["../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/utils/diagnostics.js"],"sourcesContent":["// Generic event stream class for async iteration\nexport class EventStream {\n queue = [];\n waiting = [];\n done = false;\n finalResultPromise;\n resolveFinalResult;\n isComplete;\n extractResult;\n constructor(isComplete, extractResult) {\n this.isComplete = isComplete;\n this.extractResult = extractResult;\n this.finalResultPromise = new Promise((resolve) => {\n this.resolveFinalResult = resolve;\n });\n }\n push(event) {\n if (this.done)\n return;\n if (this.isComplete(event)) {\n this.done = true;\n this.resolveFinalResult(this.extractResult(event));\n }\n // Deliver to waiting consumer or queue it\n const waiter = this.waiting.shift();\n if (waiter) {\n waiter({ value: event, done: false });\n }\n else {\n this.queue.push(event);\n }\n }\n end(result) {\n this.done = true;\n if (result !== undefined) {\n this.resolveFinalResult(result);\n }\n // Notify all waiting consumers that we're done\n while (this.waiting.length > 0) {\n const waiter = this.waiting.shift();\n waiter({ value: undefined, done: true });\n }\n }\n async *[Symbol.asyncIterator]() {\n while (true) {\n if (this.queue.length > 0) {\n yield this.queue.shift();\n }\n else if (this.done) {\n return;\n }\n else {\n const result = await new Promise((resolve) => this.waiting.push(resolve));\n if (result.done)\n return;\n yield result.value;\n }\n }\n }\n result() {\n return this.finalResultPromise;\n }\n}\nexport class AssistantMessageEventStream extends EventStream {\n constructor() {\n super((event) => event.type === \"done\" || event.type === \"error\", (event) => {\n if (event.type === \"done\") {\n return event.message;\n }\n else if (event.type === \"error\") {\n return event.error;\n }\n throw new Error(\"Unexpected event type for final result\");\n });\n }\n}\n/** Factory function for AssistantMessageEventStream (for use in extensions) */\nexport function createAssistantMessageEventStream() {\n return new AssistantMessageEventStream();\n}\n//# sourceMappingURL=event-stream.js.map","export function formatThrownValue(value) {\n if (value instanceof Error)\n return value.message || value.name;\n if (typeof value === \"string\")\n return value;\n return String(value);\n}\nexport function extractDiagnosticError(error) {\n if (!(error instanceof Error))\n return { name: \"ThrownValue\", message: formatThrownValue(error) };\n const code = error.code;\n return {\n name: error.name || undefined,\n message: error.message || error.name,\n stack: error.stack,\n code: typeof code === \"string\" || typeof code === \"number\" ? code : undefined,\n };\n}\nexport function createAssistantMessageDiagnostic(type, error, details) {\n return { type, timestamp: Date.now(), error: extractDiagnosticError(error), details };\n}\nexport function appendAssistantMessageDiagnostic(message, diagnostic) {\n message.diagnostics = [...(message.diagnostics ?? []), diagnostic];\n}\n//# sourceMappingURL=diagnostics.js.map"],"x_google_ignoreList":[0,1],"mappings":";;AACA,IAAa,cAAb,MAAyB;CACrB,QAAQ,CAAC;CACT,UAAU,CAAC;CACX,OAAO;CACP;CACA;CACA;CACA;CACA,YAAY,YAAY,eAAe;EACnC,KAAK,aAAa;EAClB,KAAK,gBAAgB;EACrB,KAAK,qBAAqB,IAAI,SAAS,YAAY;GAC/C,KAAK,qBAAqB;EAC9B,CAAC;CACL;CACA,KAAK,OAAO;EACR,IAAI,KAAK,MACL;EACJ,IAAI,KAAK,WAAW,KAAK,GAAG;GACxB,KAAK,OAAO;GACZ,KAAK,mBAAmB,KAAK,cAAc,KAAK,CAAC;EACrD;EAEA,MAAM,SAAS,KAAK,QAAQ,MAAM;EAClC,IAAI,QACA,OAAO;GAAE,OAAO;GAAO,MAAM;EAAM,CAAC;OAGpC,KAAK,MAAM,KAAK,KAAK;CAE7B;CACA,IAAI,QAAQ;EACR,KAAK,OAAO;EACZ,IAAI,WAAW,KAAA,GACX,KAAK,mBAAmB,MAAM;EAGlC,OAAO,KAAK,QAAQ,SAAS,GAEzB,KADoB,QAAQ,MACvB,CAAC,CAAC;GAAE,OAAO,KAAA;GAAW,MAAM;EAAK,CAAC;CAE/C;CACA,QAAQ,OAAO,iBAAiB;EAC5B,OAAO,MACH,IAAI,KAAK,MAAM,SAAS,GACpB,MAAM,KAAK,MAAM,MAAM;OAEtB,IAAI,KAAK,MACV;OAEC;GACD,MAAM,SAAS,MAAM,IAAI,SAAS,YAAY,KAAK,QAAQ,KAAK,OAAO,CAAC;GACxE,IAAI,OAAO,MACP;GACJ,MAAM,OAAO;EACjB;CAER;CACA,SAAS;EACL,OAAO,KAAK;CAChB;AACJ;AACA,IAAa,8BAAb,cAAiD,YAAY;CACzD,cAAc;EACV,OAAO,UAAU,MAAM,SAAS,UAAU,MAAM,SAAS,UAAU,UAAU;GACzE,IAAI,MAAM,SAAS,QACf,OAAO,MAAM;QAEZ,IAAI,MAAM,SAAS,SACpB,OAAO,MAAM;GAEjB,MAAM,IAAI,MAAM,wCAAwC;EAC5D,CAAC;CACL;AACJ;;AAEA,SAAgB,oCAAoC;CAChD,OAAO,IAAI,4BAA4B;AAC3C;;;AC/EA,SAAgB,kBAAkB,OAAO;CACrC,IAAI,iBAAiB,OACjB,OAAO,MAAM,WAAW,MAAM;CAClC,IAAI,OAAO,UAAU,UACjB,OAAO;CACX,OAAO,OAAO,KAAK;AACvB;AACA,SAAgB,uBAAuB,OAAO;CAC1C,IAAI,EAAE,iBAAiB,QACnB,OAAO;EAAE,MAAM;EAAe,SAAS,kBAAkB,KAAK;CAAE;CACpE,MAAM,OAAO,MAAM;CACnB,OAAO;EACH,MAAM,MAAM,QAAQ,KAAA;EACpB,SAAS,MAAM,WAAW,MAAM;EAChC,OAAO,MAAM;EACb,MAAM,OAAO,SAAS,YAAY,OAAO,SAAS,WAAW,OAAO,KAAA;CACxE;AACJ;AACA,SAAgB,iCAAiC,MAAM,OAAO,SAAS;CACnE,OAAO;EAAE;EAAM,WAAW,KAAK,IAAI;EAAG,OAAO,uBAAuB,KAAK;EAAG;CAAQ;AACxF;AACA,SAAgB,iCAAiC,SAAS,YAAY;CAClE,QAAQ,cAAc,CAAC,GAAI,QAAQ,eAAe,CAAC,GAAI,UAAU;AACrE"}