pi2dsh 0.5.0 → 0.6.1

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 +42 -14
  2. package/README.zh.md +36 -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 +100 -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-CPvg87et.mjs} +60 -20
  22. package/dist/runtime-CPvg87et.mjs.map +1 -0
  23. package/dist/runtime.d.mts +8 -1
  24. package/dist/runtime.d.mts.map +1 -1
  25. package/dist/runtime.mjs +2 -2
  26. package/package.json +9 -2
  27. package/dist/all-DSpxKvHa.mjs +0 -28512
  28. package/dist/all-DSpxKvHa.mjs.map +0 -1
  29. package/dist/anthropic-messages-BL9N1Idv.mjs +0 -6438
  30. package/dist/anthropic-messages-BL9N1Idv.mjs.map +0 -1
  31. package/dist/azure-openai-responses-A67VbaZ1.mjs +0 -209
  32. package/dist/azure-openai-responses-A67VbaZ1.mjs.map +0 -1
  33. package/dist/deferred-tools-BD4g5QUx.mjs +0 -32
  34. package/dist/deferred-tools-BD4g5QUx.mjs.map +0 -1
  35. package/dist/diagnostics-CJye1UFh.mjs +0 -99
  36. package/dist/diagnostics-CJye1UFh.mjs.map +0 -1
  37. package/dist/dist-BYA74yh_.mjs +0 -1246
  38. package/dist/dist-BYA74yh_.mjs.map +0 -1
  39. package/dist/dist-DeonWo7m.mjs +0 -1089
  40. package/dist/dist-DeonWo7m.mjs.map +0 -1
  41. package/dist/error-body-DKA3lknR.mjs +0 -104
  42. package/dist/error-body-DKA3lknR.mjs.map +0 -1
  43. package/dist/github-copilot-headers-CZo2QHrt.mjs +0 -25
  44. package/dist/github-copilot-headers-CZo2QHrt.mjs.map +0 -1
  45. package/dist/google-generative-ai-DT5S8D8y.mjs +0 -358
  46. package/dist/google-generative-ai-DT5S8D8y.mjs.map +0 -1
  47. package/dist/google-shared-DYP_9cnK.mjs +0 -29042
  48. package/dist/google-shared-DYP_9cnK.mjs.map +0 -1
  49. package/dist/google-vertex-Dpq7O7Be.mjs +0 -402
  50. package/dist/google-vertex-Dpq7O7Be.mjs.map +0 -1
  51. package/dist/hash-Dbggamac.mjs +0 -19
  52. package/dist/hash-Dbggamac.mjs.map +0 -1
  53. package/dist/headers-CPzZhJQn.mjs +0 -17
  54. package/dist/headers-CPzZhJQn.mjs.map +0 -1
  55. package/dist/images-models-DJtHo9Rp.mjs +0 -1068
  56. package/dist/images-models-DJtHo9Rp.mjs.map +0 -1
  57. package/dist/json-parse-Dz5sKMTv.mjs +0 -384
  58. package/dist/json-parse-Dz5sKMTv.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-VK4eVnYa.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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"}