pi2dsh 0.5.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 (92) hide show
  1. package/README.md +37 -14
  2. package/README.zh.md +32 -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-ByUc0jmD.mjs → mcp-config-vU1LZ7fC.mjs} +4 -4
  14. package/dist/{mcp-config-ByUc0jmD.mjs.map → mcp-config-vU1LZ7fC.mjs.map} +1 -1
  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-C9Y9ql5E.mjs → pi-coding-agent-CznNsOnV.mjs} +2 -2
  20. package/dist/{pi-coding-agent-C9Y9ql5E.mjs.map → pi-coding-agent-CznNsOnV.mjs.map} +1 -1
  21. package/dist/{runtime-VK4eVnYa.mjs → runtime-xNd10ACP.mjs} +44 -19
  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/mistral-conversations-BsxbCCWx.mjs +0 -42007
  59. package/dist/mistral-conversations-BsxbCCWx.mjs.map +0 -1
  60. package/dist/multipart-parser-woKCuALW.mjs +0 -301
  61. package/dist/multipart-parser-woKCuALW.mjs.map +0 -1
  62. package/dist/openai-DkzRh5_G.mjs +0 -6732
  63. package/dist/openai-DkzRh5_G.mjs.map +0 -1
  64. package/dist/openai-codex-responses-C7vviVT2.mjs +0 -1169
  65. package/dist/openai-codex-responses-C7vviVT2.mjs.map +0 -1
  66. package/dist/openai-completions-By8QNX1P.mjs +0 -947
  67. package/dist/openai-completions-By8QNX1P.mjs.map +0 -1
  68. package/dist/openai-prompt-cache-BDWtZRKh.mjs +0 -11
  69. package/dist/openai-prompt-cache-BDWtZRKh.mjs.map +0 -1
  70. package/dist/openai-responses-DboJUcFN.mjs +0 -247
  71. package/dist/openai-responses-DboJUcFN.mjs.map +0 -1
  72. package/dist/openai-responses-shared-BDzn7nJY.mjs +0 -572
  73. package/dist/openai-responses-shared-BDzn7nJY.mjs.map +0 -1
  74. package/dist/openrouter-images-fG3Aj6M4.mjs +0 -127
  75. package/dist/openrouter-images-fG3Aj6M4.mjs.map +0 -1
  76. package/dist/otel-PimLMoiV.mjs +0 -24935
  77. package/dist/otel-PimLMoiV.mjs.map +0 -1
  78. package/dist/pi-messages-B-7Xo_I0.mjs +0 -306
  79. package/dist/pi-messages-B-7Xo_I0.mjs.map +0 -1
  80. package/dist/provider-env-D-cCRWzv.mjs +0 -40
  81. package/dist/provider-env-D-cCRWzv.mjs.map +0 -1
  82. package/dist/provider-retry-Cw6YJ4cr.mjs +0 -80
  83. package/dist/provider-retry-Cw6YJ4cr.mjs.map +0 -1
  84. package/dist/runtime-VK4eVnYa.mjs.map +0 -1
  85. package/dist/sanitize-unicode-wLA11KvZ.mjs +0 -29
  86. package/dist/sanitize-unicode-wLA11KvZ.mjs.map +0 -1
  87. package/dist/src-BEl3QrGL.mjs +0 -5031
  88. package/dist/src-BEl3QrGL.mjs.map +0 -1
  89. package/dist/transform-messages-DGq9mvhA.mjs +0 -379
  90. package/dist/transform-messages-DGq9mvhA.mjs.map +0 -1
  91. package/dist/uuid-DtFT7tOE.mjs +0 -65
  92. 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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"}