pi2dsh 0.4.0 → 0.6.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 (93) hide show
  1. package/README.md +54 -14
  2. package/README.zh.md +43 -14
  3. package/cordis.patch.yml +3 -0
  4. package/dist/cli.mjs +1 -1
  5. package/dist/compat/pi-ai.mjs +1 -1
  6. package/dist/compat/pi-coding-agent.mjs +1 -1
  7. package/dist/credentials-oauth.mjs +3 -3
  8. package/dist/host.mjs +2 -2
  9. package/dist/index.d.mts +30 -1
  10. package/dist/index.d.mts.map +1 -1
  11. package/dist/index.mjs +98 -2
  12. package/dist/index.mjs.map +1 -0
  13. package/dist/{mcp-config-B3h5jTBb.mjs → mcp-config-vU1LZ7fC.mjs} +6 -6
  14. package/dist/mcp-config-vU1LZ7fC.mjs.map +1 -0
  15. package/dist/{oauth-bridge-C6fL1qSv.mjs → oauth-bridge-CfyImWx4.mjs} +2 -2
  16. package/dist/{oauth-bridge-C6fL1qSv.mjs.map → oauth-bridge-CfyImWx4.mjs.map} +1 -1
  17. package/dist/{pi-ai-B_88Wb0r.mjs → pi-ai-7HR3ciAs.mjs} +4 -42
  18. package/dist/{pi-ai-B_88Wb0r.mjs.map → pi-ai-7HR3ciAs.mjs.map} +1 -1
  19. package/dist/{pi-coding-agent-COMX0KHL.mjs → pi-coding-agent-CznNsOnV.mjs} +3 -3
  20. package/dist/{pi-coding-agent-COMX0KHL.mjs.map → pi-coding-agent-CznNsOnV.mjs.map} +1 -1
  21. package/dist/{runtime-B7mEIRf-.mjs → runtime-xNd10ACP.mjs} +194 -21
  22. package/dist/runtime-xNd10ACP.mjs.map +1 -0
  23. package/dist/runtime.d.mts.map +1 -1
  24. package/dist/runtime.mjs +1 -1
  25. package/package.json +9 -2
  26. package/dist/all-DSpxKvHa.mjs +0 -28512
  27. package/dist/all-DSpxKvHa.mjs.map +0 -1
  28. package/dist/anthropic-messages-BL9N1Idv.mjs +0 -6438
  29. package/dist/anthropic-messages-BL9N1Idv.mjs.map +0 -1
  30. package/dist/azure-openai-responses-A67VbaZ1.mjs +0 -209
  31. package/dist/azure-openai-responses-A67VbaZ1.mjs.map +0 -1
  32. package/dist/deferred-tools-BD4g5QUx.mjs +0 -32
  33. package/dist/deferred-tools-BD4g5QUx.mjs.map +0 -1
  34. package/dist/diagnostics-CJye1UFh.mjs +0 -99
  35. package/dist/diagnostics-CJye1UFh.mjs.map +0 -1
  36. package/dist/dist-BYA74yh_.mjs +0 -1246
  37. package/dist/dist-BYA74yh_.mjs.map +0 -1
  38. package/dist/dist-DeonWo7m.mjs +0 -1089
  39. package/dist/dist-DeonWo7m.mjs.map +0 -1
  40. package/dist/error-body-DKA3lknR.mjs +0 -104
  41. package/dist/error-body-DKA3lknR.mjs.map +0 -1
  42. package/dist/github-copilot-headers-CZo2QHrt.mjs +0 -25
  43. package/dist/github-copilot-headers-CZo2QHrt.mjs.map +0 -1
  44. package/dist/google-generative-ai-DT5S8D8y.mjs +0 -358
  45. package/dist/google-generative-ai-DT5S8D8y.mjs.map +0 -1
  46. package/dist/google-shared-DYP_9cnK.mjs +0 -29042
  47. package/dist/google-shared-DYP_9cnK.mjs.map +0 -1
  48. package/dist/google-vertex-Dpq7O7Be.mjs +0 -402
  49. package/dist/google-vertex-Dpq7O7Be.mjs.map +0 -1
  50. package/dist/hash-Dbggamac.mjs +0 -19
  51. package/dist/hash-Dbggamac.mjs.map +0 -1
  52. package/dist/headers-CPzZhJQn.mjs +0 -17
  53. package/dist/headers-CPzZhJQn.mjs.map +0 -1
  54. package/dist/images-models-DJtHo9Rp.mjs +0 -1068
  55. package/dist/images-models-DJtHo9Rp.mjs.map +0 -1
  56. package/dist/json-parse-Dz5sKMTv.mjs +0 -384
  57. package/dist/json-parse-Dz5sKMTv.mjs.map +0 -1
  58. package/dist/mcp-config-B3h5jTBb.mjs.map +0 -1
  59. package/dist/mistral-conversations-BsxbCCWx.mjs +0 -42007
  60. package/dist/mistral-conversations-BsxbCCWx.mjs.map +0 -1
  61. package/dist/multipart-parser-woKCuALW.mjs +0 -301
  62. package/dist/multipart-parser-woKCuALW.mjs.map +0 -1
  63. package/dist/openai-DkzRh5_G.mjs +0 -6732
  64. package/dist/openai-DkzRh5_G.mjs.map +0 -1
  65. package/dist/openai-codex-responses-C7vviVT2.mjs +0 -1169
  66. package/dist/openai-codex-responses-C7vviVT2.mjs.map +0 -1
  67. package/dist/openai-completions-By8QNX1P.mjs +0 -947
  68. package/dist/openai-completions-By8QNX1P.mjs.map +0 -1
  69. package/dist/openai-prompt-cache-BDWtZRKh.mjs +0 -11
  70. package/dist/openai-prompt-cache-BDWtZRKh.mjs.map +0 -1
  71. package/dist/openai-responses-DboJUcFN.mjs +0 -247
  72. package/dist/openai-responses-DboJUcFN.mjs.map +0 -1
  73. package/dist/openai-responses-shared-BDzn7nJY.mjs +0 -572
  74. package/dist/openai-responses-shared-BDzn7nJY.mjs.map +0 -1
  75. package/dist/openrouter-images-fG3Aj6M4.mjs +0 -127
  76. package/dist/openrouter-images-fG3Aj6M4.mjs.map +0 -1
  77. package/dist/otel-PimLMoiV.mjs +0 -24935
  78. package/dist/otel-PimLMoiV.mjs.map +0 -1
  79. package/dist/pi-messages-B-7Xo_I0.mjs +0 -306
  80. package/dist/pi-messages-B-7Xo_I0.mjs.map +0 -1
  81. package/dist/provider-env-D-cCRWzv.mjs +0 -40
  82. package/dist/provider-env-D-cCRWzv.mjs.map +0 -1
  83. package/dist/provider-retry-Cw6YJ4cr.mjs +0 -80
  84. package/dist/provider-retry-Cw6YJ4cr.mjs.map +0 -1
  85. package/dist/runtime-B7mEIRf-.mjs.map +0 -1
  86. package/dist/sanitize-unicode-wLA11KvZ.mjs +0 -29
  87. package/dist/sanitize-unicode-wLA11KvZ.mjs.map +0 -1
  88. package/dist/src-BEl3QrGL.mjs +0 -5031
  89. package/dist/src-BEl3QrGL.mjs.map +0 -1
  90. package/dist/transform-messages-DGq9mvhA.mjs +0 -379
  91. package/dist/transform-messages-DGq9mvhA.mjs.map +0 -1
  92. package/dist/uuid-DtFT7tOE.mjs +0 -65
  93. package/dist/uuid-DtFT7tOE.mjs.map +0 -1
@@ -1,127 +0,0 @@
1
-
2
- import { n as providerHeadersToRecord, t as headersToRecord } from "./headers-CPzZhJQn.mjs";
3
- import { t as retryProviderRequest } from "./provider-retry-Cw6YJ4cr.mjs";
4
- import { t as sanitizeSurrogates } from "./sanitize-unicode-wLA11KvZ.mjs";
5
- import { n as OpenAI } from "./openai-DkzRh5_G.mjs";
6
- import { n as normalizeProviderError, t as formatProviderError } from "./error-body-DKA3lknR.mjs";
7
- //#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/openrouter-images.js
8
- const generateImages = async (model, context, options) => {
9
- const output = {
10
- api: model.api,
11
- provider: model.provider,
12
- model: model.id,
13
- output: [],
14
- stopReason: "stop",
15
- timestamp: Date.now()
16
- };
17
- try {
18
- const apiKey = options?.apiKey;
19
- if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
20
- const client = createClient(model, apiKey, options?.headers, options?.fetch);
21
- let params = buildParams(model, context);
22
- const nextParams = await options?.onPayload?.(params, model);
23
- if (nextParams !== void 0) params = nextParams;
24
- const requestOptions = {
25
- ...options?.signal ? { signal: options.signal } : {},
26
- ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {},
27
- maxRetries: 0
28
- };
29
- const { data: response, response: rawResponse } = await retryProviderRequest(() => client.chat.completions.create(params, requestOptions).withResponse(), {
30
- maxRetries: options?.maxRetries,
31
- maxRetryDelayMs: options?.maxRetryDelayMs,
32
- signal: options?.signal
33
- });
34
- await options?.onResponse?.({
35
- status: rawResponse.status,
36
- headers: headersToRecord(rawResponse.headers)
37
- }, model);
38
- const imageResponse = response;
39
- output.responseId = imageResponse.id;
40
- if (imageResponse.usage) output.usage = parseUsage(imageResponse.usage, model);
41
- const choice = imageResponse.choices[0];
42
- if (choice) {
43
- const content = choice.message.content;
44
- if (typeof content === "string" && content.length > 0) output.output.push({
45
- type: "text",
46
- text: content
47
- });
48
- for (const image of choice.message.images ?? []) {
49
- const imageUrl = typeof image.image_url === "string" ? image.image_url : image.image_url?.url;
50
- if (!imageUrl?.startsWith("data:")) continue;
51
- const matches = imageUrl.match(/^data:([^;]+);base64,(.+)$/);
52
- if (!matches) continue;
53
- output.output.push({
54
- type: "image",
55
- mimeType: matches[1],
56
- data: matches[2]
57
- });
58
- }
59
- }
60
- return output;
61
- } catch (error) {
62
- output.stopReason = options?.signal?.aborted ? "aborted" : "error";
63
- output.errorMessage = formatProviderError(normalizeProviderError(error));
64
- return output;
65
- }
66
- };
67
- function createClient(model, apiKey, optionsHeaders, fetch) {
68
- return new OpenAI({
69
- apiKey,
70
- baseURL: model.baseUrl,
71
- dangerouslyAllowBrowser: true,
72
- fetch,
73
- defaultHeaders: providerHeadersToRecord({
74
- ...model.headers,
75
- ...optionsHeaders
76
- })
77
- });
78
- }
79
- function buildParams(model, context) {
80
- const content = context.input.map((item) => {
81
- if (item.type === "text") return {
82
- type: "text",
83
- text: sanitizeSurrogates(item.text)
84
- };
85
- return {
86
- type: "image_url",
87
- image_url: { url: `data:${item.mimeType};base64,${item.data}` }
88
- };
89
- });
90
- return {
91
- model: model.id,
92
- messages: [{
93
- role: "user",
94
- content
95
- }],
96
- stream: false,
97
- modalities: model.output.includes("text") ? ["image", "text"] : ["image"]
98
- };
99
- }
100
- function parseUsage(rawUsage, model) {
101
- const promptTokens = rawUsage.prompt_tokens || 0;
102
- const reportedCachedTokens = rawUsage.prompt_tokens_details?.cached_tokens || 0;
103
- const cacheWriteTokens = rawUsage.prompt_tokens_details?.cache_write_tokens || 0;
104
- const cacheReadTokens = cacheWriteTokens > 0 ? Math.max(0, reportedCachedTokens - cacheWriteTokens) : reportedCachedTokens;
105
- const input = Math.max(0, promptTokens - cacheReadTokens - cacheWriteTokens);
106
- const output = rawUsage.completion_tokens || 0;
107
- const usage = {
108
- input,
109
- output,
110
- cacheRead: cacheReadTokens,
111
- cacheWrite: cacheWriteTokens,
112
- totalTokens: input + output + cacheReadTokens + cacheWriteTokens,
113
- cost: {
114
- input: model.cost.input / 1e6 * input,
115
- output: model.cost.output / 1e6 * output,
116
- cacheRead: model.cost.cacheRead / 1e6 * cacheReadTokens,
117
- cacheWrite: model.cost.cacheWrite / 1e6 * cacheWriteTokens,
118
- total: 0
119
- }
120
- };
121
- usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;
122
- return usage;
123
- }
124
- //#endregion
125
- export { generateImages };
126
-
127
- //# sourceMappingURL=openrouter-images-fG3Aj6M4.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openrouter-images-fG3Aj6M4.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/openrouter-images.js"],"sourcesContent":["import OpenAI from \"openai\";\nimport { formatProviderError, normalizeProviderError } from \"../utils/error-body.js\";\nimport { headersToRecord, providerHeadersToRecord } from \"../utils/headers.js\";\nimport { retryProviderRequest } from \"../utils/provider-retry.js\";\nimport { sanitizeSurrogates } from \"../utils/sanitize-unicode.js\";\nexport const generateImages = async (model, context, options) => {\n const output = {\n api: model.api,\n provider: model.provider,\n model: model.id,\n output: [],\n stopReason: \"stop\",\n timestamp: Date.now(),\n };\n try {\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?.headers, options?.fetch);\n let params = buildParams(model, context);\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: response, response: rawResponse } = await retryProviderRequest(() => client.chat.completions\n .create(params, requestOptions)\n .withResponse(), {\n maxRetries: options?.maxRetries,\n maxRetryDelayMs: options?.maxRetryDelayMs,\n signal: options?.signal,\n });\n await options?.onResponse?.({ status: rawResponse.status, headers: headersToRecord(rawResponse.headers) }, model);\n const imageResponse = response;\n output.responseId = imageResponse.id;\n if (imageResponse.usage) {\n output.usage = parseUsage(imageResponse.usage, model);\n }\n const choice = imageResponse.choices[0];\n if (choice) {\n const content = choice.message.content;\n if (typeof content === \"string\" && content.length > 0) {\n output.output.push({ type: \"text\", text: content });\n }\n for (const image of choice.message.images ?? []) {\n const imageUrl = typeof image.image_url === \"string\" ? image.image_url : image.image_url?.url;\n if (!imageUrl?.startsWith(\"data:\"))\n continue;\n const matches = imageUrl.match(/^data:([^;]+);base64,(.+)$/);\n if (!matches)\n continue;\n output.output.push({\n type: \"image\",\n mimeType: matches[1],\n data: matches[2],\n });\n }\n }\n return output;\n }\n catch (error) {\n output.stopReason = options?.signal?.aborted ? \"aborted\" : \"error\";\n output.errorMessage = formatProviderError(normalizeProviderError(error));\n return output;\n }\n};\nfunction createClient(model, apiKey, optionsHeaders, fetch) {\n return new OpenAI({\n apiKey,\n baseURL: model.baseUrl,\n dangerouslyAllowBrowser: true,\n fetch,\n defaultHeaders: providerHeadersToRecord({ ...model.headers, ...optionsHeaders }),\n });\n}\nfunction buildParams(model, context) {\n const content = context.input.map((item) => {\n if (item.type === \"text\") {\n return {\n type: \"text\",\n text: sanitizeSurrogates(item.text),\n };\n }\n return {\n type: \"image_url\",\n image_url: {\n url: `data:${item.mimeType};base64,${item.data}`,\n },\n };\n });\n return {\n model: model.id,\n messages: [\n {\n role: \"user\",\n content,\n },\n ],\n stream: false,\n modalities: model.output.includes(\"text\") ? [\"image\", \"text\"] : [\"image\"],\n };\n}\nfunction parseUsage(rawUsage, model) {\n const promptTokens = rawUsage.prompt_tokens || 0;\n const reportedCachedTokens = rawUsage.prompt_tokens_details?.cached_tokens || 0;\n const cacheWriteTokens = rawUsage.prompt_tokens_details?.cache_write_tokens || 0;\n const cacheReadTokens = cacheWriteTokens > 0 ? Math.max(0, reportedCachedTokens - cacheWriteTokens) : reportedCachedTokens;\n const input = Math.max(0, promptTokens - cacheReadTokens - cacheWriteTokens);\n const output = rawUsage.completion_tokens || 0;\n const usage = {\n input,\n output,\n cacheRead: cacheReadTokens,\n cacheWrite: cacheWriteTokens,\n totalTokens: input + output + cacheReadTokens + cacheWriteTokens,\n cost: {\n input: (model.cost.input / 1000000) * input,\n output: (model.cost.output / 1000000) * output,\n cacheRead: (model.cost.cacheRead / 1000000) * cacheReadTokens,\n cacheWrite: (model.cost.cacheWrite / 1000000) * cacheWriteTokens,\n total: 0,\n },\n };\n usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n return usage;\n}\n//# sourceMappingURL=openrouter-images.js.map"],"x_google_ignoreList":[0],"mappings":"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"}