@deslop/workbench 0.0.360 → 0.0.381

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 (157) hide show
  1. package/dist/anthropic-C02QVQ9u.mjs +6313 -0
  2. package/dist/azure-openai-responses-CUFLNwdy.mjs +207 -0
  3. package/dist/client/assets/{(home)-DVKAaI4b.js → (home)-BL3S5BVq.js} +1 -1
  4. package/dist/client/assets/-workbench-terminal-YB9hQXjr.js +145 -0
  5. package/dist/client/assets/agent-BmwIVlVZ.js +1 -0
  6. package/dist/client/assets/agent-CE67X_hb.js +2 -0
  7. package/dist/client/assets/{arc-CuHXSNPr.js → arc-BjSQqbzd.js} +1 -1
  8. package/dist/client/assets/architectureDiagram-3BPJPVTR-CTWT1AFv.js +36 -0
  9. package/dist/client/assets/{blockDiagram-GPEHLZMM-D3jiL-uN.js → blockDiagram-GPEHLZMM-CISQUfO9.js} +1 -1
  10. package/dist/client/assets/{c4Diagram-AAUBKEIU-bA47L7u8.js → c4Diagram-AAUBKEIU-Ct3OGD9a.js} +1 -1
  11. package/dist/client/assets/channel-S3CdaK6m.js +1 -0
  12. package/dist/client/assets/{chunk-2J33WTMH-optplvap.js → chunk-2J33WTMH-BUMgKaV6.js} +1 -1
  13. package/dist/client/assets/{chunk-3OPIFGDE-k7mTnOn5.js → chunk-3OPIFGDE-BlIdNnu8.js} +1 -1
  14. package/dist/client/assets/{chunk-4BX2VUAB-Co5qfYem.js → chunk-4BX2VUAB-CiBu5cRv.js} +1 -1
  15. package/dist/client/assets/{chunk-55IACEB6-7AWIUH7L.js → chunk-55IACEB6-nU8KvKB3.js} +1 -1
  16. package/dist/client/assets/{chunk-5ZQYHXKU-Bub4jU0C.js → chunk-5ZQYHXKU-DbN9DSns.js} +1 -1
  17. package/dist/client/assets/{chunk-727SXJPM-DcofuxtV.js → chunk-727SXJPM-DkPu5ecB.js} +2 -2
  18. package/dist/client/assets/{chunk-AQP2D5EJ-CBwGmuY5.js → chunk-AQP2D5EJ-B8lrSg7a.js} +1 -1
  19. package/dist/client/assets/{chunk-BSJP7CBP-BInTsaMb.js → chunk-BSJP7CBP-C450xCVa.js} +1 -1
  20. package/dist/client/assets/{chunk-CSCIHK7Q-BTHSw3Fl.js → chunk-CSCIHK7Q-DoGVP1BZ.js} +2 -2
  21. package/dist/client/assets/{chunk-FMBD7UC4-BQD4ioRx.js → chunk-FMBD7UC4-cqorOok8.js} +1 -1
  22. package/dist/client/assets/{chunk-KSCS5N6A-CUDSaUx0.js → chunk-KSCS5N6A-dbmnxO_p.js} +1 -1
  23. package/dist/client/assets/{chunk-L5ZTLDWV-D0-tvK0S.js → chunk-L5ZTLDWV-D9P-YjsA.js} +1 -1
  24. package/dist/client/assets/{chunk-LZXEDZCA-BkJ5xlLM.js → chunk-LZXEDZCA-BdVT_AWc.js} +2 -2
  25. package/dist/client/assets/{chunk-ND2GUHAM-COdW9HuZ.js → chunk-ND2GUHAM-CmHIi1wD.js} +1 -1
  26. package/dist/client/assets/{chunk-NZK2D7GU-Byrnkfto.js → chunk-NZK2D7GU-hkTOm2qR.js} +1 -1
  27. package/dist/client/assets/{chunk-O5CBEL6O-C_CProRX.js → chunk-O5CBEL6O-D1fDxsSH.js} +1 -1
  28. package/dist/client/assets/chunk-QZHKN3VN-BS_CF_l3.js +1 -0
  29. package/dist/client/assets/chunk-WU5MYG2G-CtG2KJlt.js +1 -0
  30. package/dist/client/assets/{chunk-XPW4576I-DWr3727k.js → chunk-XPW4576I-BjBK3ctW.js} +2 -2
  31. package/dist/client/assets/classDiagram-4FO5ZUOK-BdTSUdNF.js +1 -0
  32. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BdTSUdNF.js +1 -0
  33. package/dist/client/assets/compiler-runtime-CLAvuQ-D.js +1 -0
  34. package/dist/client/assets/cose-bilkent-S5V4N54A-BGt2II16.js +1 -0
  35. package/dist/client/assets/{cytoscape.esm-FqbQrHcz.js → cytoscape.esm-Kic9WIU3.js} +2 -2
  36. package/dist/client/assets/{dagre-BM42HDAG-Bwiv8kFL.js → dagre-BM42HDAG-CN7Tha00.js} +1 -1
  37. package/dist/client/assets/{diagram-2AECGRRQ-BY9KXQPi.js → diagram-2AECGRRQ-DnobmroZ.js} +1 -1
  38. package/dist/client/assets/{diagram-5GNKFQAL-C-jmG8LL.js → diagram-5GNKFQAL-D6NqAeoi.js} +1 -1
  39. package/dist/client/assets/{diagram-KO2AKTUF-qDHWGr5P.js → diagram-KO2AKTUF-y8QX4vEL.js} +1 -1
  40. package/dist/client/assets/{diagram-LMA3HP47-Dg8zuIuL.js → diagram-LMA3HP47-DAEPoAHp.js} +1 -1
  41. package/dist/client/assets/{diagram-OG6HWLK6-DupmLmKo.js → diagram-OG6HWLK6-B3KiYvxM.js} +1 -1
  42. package/dist/client/assets/dialog-B0kBnYwI.js +153 -0
  43. package/dist/client/assets/diff-BP9B4x7R.js +2 -0
  44. package/dist/client/assets/diff-OmMK6IL0.js +221 -0
  45. package/dist/client/assets/dist-D9sYb5Oa.js +1 -0
  46. package/dist/client/assets/{erDiagram-TEJ5UH35-DcYoMsDA.js → erDiagram-TEJ5UH35-CbzdEpkS.js} +1 -1
  47. package/dist/client/assets/external-link-D7Q28KpR.js +1 -0
  48. package/dist/client/assets/fallbacks-DwGmG_0c.js +16 -0
  49. package/dist/client/assets/{flowDiagram-I6XJVG4X-xLfWiyaL.js → flowDiagram-I6XJVG4X-C2H7PQev.js} +1 -1
  50. package/dist/client/assets/ganttDiagram-6RSMTGT7-BZql2QFP.js +292 -0
  51. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-DE7nmb1q.js → gitGraphDiagram-PVQCEYII-d2_5HIIo.js} +1 -1
  52. package/dist/client/assets/{index-D1icept3.js → index-Cc-cDoXa.js} +4 -4
  53. package/dist/client/assets/index-DT_QSnKQ.css +2 -0
  54. package/dist/client/assets/{infoDiagram-5YYISTIA-CUzdfhph.js → infoDiagram-5YYISTIA-DaDFMb3D.js} +1 -1
  55. package/dist/client/assets/input-CEh4Uy0l.js +1 -0
  56. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-D3h5fT3O.js → ishikawaDiagram-YF4QCWOH-7tWPtPSR.js} +1 -1
  57. package/dist/client/assets/{journeyDiagram-JHISSGLW-DXqP7IZk.js → journeyDiagram-JHISSGLW-CYDeiigr.js} +1 -1
  58. package/dist/client/assets/{kanban-definition-UN3LZRKU-BBdz3OGi.js → kanban-definition-UN3LZRKU-BFoF4JfY.js} +3 -3
  59. package/dist/client/assets/{katex-Vhh-h91d.js → katex-CddkPoXu.js} +1 -1
  60. package/dist/client/assets/{line-D2nnU070.js → line-CcJ0IOWh.js} +1 -1
  61. package/dist/client/assets/{linear-BifnMVyn.js → linear-Ct8JHF0c.js} +1 -1
  62. package/dist/client/assets/mermaid-parser.core-CKHoAf1J.js +2 -2
  63. package/dist/client/assets/{mindmap-definition-RKZ34NQL-BAbACAeS.js → mindmap-definition-RKZ34NQL-DTgZ_Z5F.js} +1 -1
  64. package/dist/client/assets/{pieDiagram-4H26LBE5-YjWBEaV3.js → pieDiagram-4H26LBE5-BmpbjVUG.js} +1 -1
  65. package/dist/client/assets/pierre-dark-vibrant-D4RhcSIK.js +1 -0
  66. package/dist/client/assets/pierre-light-vibrant-B76X7i5Y.js +1 -0
  67. package/dist/client/assets/portless-4_iTgOr5.js +1 -0
  68. package/dist/client/assets/portless-qyhmpSUj.js +2 -0
  69. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-0qpR8bhI.js → quadrantDiagram-W4KKPZXB-BncnX7WL.js} +1 -1
  70. package/dist/client/assets/{requirementDiagram-4Y6WPE33-UxrH60_h.js → requirementDiagram-4Y6WPE33-C4viwYDb.js} +1 -1
  71. package/dist/client/assets/resizable-A9BpOcmt.js +1 -0
  72. package/dist/client/assets/route-Da0uHKH9.js +45 -0
  73. package/dist/client/assets/route-ULg8h9n0.js +2 -0
  74. package/dist/client/assets/run-CCCofwDU.js +2 -0
  75. package/dist/client/assets/run-D7w-8aQA.js +1 -0
  76. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-CtfCq9EV.js → sankeyDiagram-5OEKKPKP-cs1kWOqp.js} +1 -1
  77. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BgLwmDnV.js → sequenceDiagram-3UESZ5HK-D7Bj1Dg6.js} +1 -1
  78. package/dist/client/assets/sonner-DgKrvTU1.js +1 -0
  79. package/dist/client/assets/src-DzxfdEt6.js +1 -0
  80. package/dist/client/assets/state-_2CmL5IM.js +2 -0
  81. package/dist/client/assets/{stateDiagram-AJRCARHV--lvnWH2s.js → stateDiagram-AJRCARHV-xBL-crbl.js} +1 -1
  82. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-ZbAyaVmU.js +1 -0
  83. package/dist/client/assets/terminal-DJ8tjXNh.js +1 -0
  84. package/dist/client/assets/terminal-Dx10AUUW.js +2 -0
  85. package/dist/client/assets/{timeline-definition-PNZ67QCA-BbIMEZmJ.js → timeline-definition-PNZ67QCA-Bs3JkoMQ.js} +2 -2
  86. package/dist/client/assets/triangle-alert-cDPYgb7f.js +1 -0
  87. package/dist/client/assets/{vennDiagram-CIIHVFJN-ClrNZ6mc.js → vennDiagram-CIIHVFJN-D25dPloy.js} +1 -1
  88. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-B104yVOC.js → wardleyDiagram-YWT4CUSO-B7X6xZZ7.js} +1 -1
  89. package/dist/client/assets/{xychartDiagram-2RQKCTM6-BBRSu-ZO.js → xychartDiagram-2RQKCTM6-Cgc-2R8L.js} +1 -1
  90. package/dist/client/index.html +13 -14
  91. package/dist/completionchunk-DDfxP5hO.mjs +5196 -0
  92. package/dist/dist-CsBDFjO2.mjs +1163 -0
  93. package/dist/{execAsync-BeHTdVKh.mjs → execAsync-B-b5b4hb.mjs} +2 -2
  94. package/dist/from-DGwFTZmN.mjs +3845 -0
  95. package/dist/{getMachineId-bsd-8V0SSHI2.mjs → getMachineId-bsd-C-aUDBo5.mjs} +4 -3
  96. package/dist/{getMachineId-darwin-fwMRmXNE.mjs → getMachineId-darwin-CQg0u9gI.mjs} +4 -3
  97. package/dist/{getMachineId-linux-BglPdw6k.mjs → getMachineId-linux-DQmpbzHz.mjs} +3 -2
  98. package/dist/{getMachineId-unsupported-B6r8oWEG.mjs → getMachineId-unsupported-BT4Te_jg.mjs} +3 -2
  99. package/dist/{getMachineId-win-Bvbq3C3K.mjs → getMachineId-win-zoUdci1a.mjs} +4 -3
  100. package/dist/github-copilot-headers-B--aVYl2.mjs +39 -0
  101. package/dist/google-DHtiCcEt.mjs +348 -0
  102. package/dist/google-shared-BT0mQb3v.mjs +25358 -0
  103. package/dist/google-vertex-CRkz0MgQ.mjs +391 -0
  104. package/dist/hash-CDrrQIkY.mjs +17 -0
  105. package/dist/headers-m19bM8_9.mjs +9 -0
  106. package/dist/mistral-DXtHhhUc.mjs +36806 -0
  107. package/dist/multipart-parser-6y-zJbR0.mjs +295 -0
  108. package/dist/openai-CUH8rb7p.mjs +6671 -0
  109. package/dist/openai-codex-responses-BSLixEC8.mjs +1081 -0
  110. package/dist/openai-completions-CE-LDmL4.mjs +735 -0
  111. package/dist/openai-prompt-cache-6hf3xB_x.mjs +9 -0
  112. package/dist/openai-responses-41QiypX_.mjs +217 -0
  113. package/dist/openai-responses-shared-BAoGGIxP.mjs +415 -0
  114. package/dist/openrouter-CDq1vETJ.mjs +125 -0
  115. package/dist/otel-ugdFQeJO.mjs +23177 -0
  116. package/dist/photon_rs-D6BNoOSO.mjs +4253 -0
  117. package/dist/rolldown-runtime-EQORzF3F.mjs +38 -0
  118. package/dist/sanitize-unicode-CPcy0g31.mjs +27 -0
  119. package/dist/server.js +247457 -56643
  120. package/dist/src-BHoXDvRK.mjs +1178 -0
  121. package/dist/transform-messages-CUKh2_5w.mjs +188 -0
  122. package/package.json +4 -3
  123. package/dist/client/assets/-workbench-terminal-CoufoT41.js +0 -145
  124. package/dist/client/assets/agent-B0AsYIb3.js +0 -2
  125. package/dist/client/assets/agent-DCVbbaGs.js +0 -1
  126. package/dist/client/assets/architectureDiagram-3BPJPVTR-hs4IN-ZW.js +0 -36
  127. package/dist/client/assets/button-Dz6Az3h_.js +0 -16
  128. package/dist/client/assets/channel-CHiC1IgU.js +0 -1
  129. package/dist/client/assets/chunk-QZHKN3VN-SFi3gsXX.js +0 -1
  130. package/dist/client/assets/chunk-WU5MYG2G-OzrGGim9.js +0 -1
  131. package/dist/client/assets/classDiagram-4FO5ZUOK-DvZGz7Ek.js +0 -1
  132. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DvZGz7Ek.js +0 -1
  133. package/dist/client/assets/compiler-runtime-rGeCHUuX.js +0 -1
  134. package/dist/client/assets/cose-bilkent-S5V4N54A-BzitJXTQ.js +0 -1
  135. package/dist/client/assets/diff-BqnMP7Ys.js +0 -217
  136. package/dist/client/assets/diff-CLnQZZVT.js +0 -2
  137. package/dist/client/assets/dist-lRkD-JPF.js +0 -1
  138. package/dist/client/assets/external-link-DPI4TAq4.js +0 -1
  139. package/dist/client/assets/fallbacks-uU4M5NOw.js +0 -1
  140. package/dist/client/assets/ganttDiagram-6RSMTGT7-hA3inn7u.js +0 -292
  141. package/dist/client/assets/index-DNWcrdqu.css +0 -2
  142. package/dist/client/assets/input-group-1-P7Y_75.js +0 -153
  143. package/dist/client/assets/loader-circle-BxillczB.js +0 -1
  144. package/dist/client/assets/portless-ClPWjTC4.js +0 -1
  145. package/dist/client/assets/portless-QJD7ZmA9.js +0 -2
  146. package/dist/client/assets/resizable-BaJ5ba6-.js +0 -1
  147. package/dist/client/assets/route-C-L2dkin.js +0 -45
  148. package/dist/client/assets/route-b5JXfzPO.js +0 -2
  149. package/dist/client/assets/run-C7DiKMnt.js +0 -1
  150. package/dist/client/assets/run-Dt91HvlA.js +0 -2
  151. package/dist/client/assets/src-oaGqIoNi.js +0 -1
  152. package/dist/client/assets/state-CVjPP5QG.js +0 -2
  153. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BggoNPhO.js +0 -1
  154. package/dist/client/assets/terminal-C4sv4xT5.js +0 -2
  155. package/dist/client/assets/terminal-kxE_eoTZ.js +0 -1
  156. package/dist/client/assets/triangle-alert-CTEZG9zF.js +0 -1
  157. /package/dist/client/assets/{chunk-QTnfLwEv.js → rolldown-runtime-QTnfLwEv.js} +0 -0
@@ -0,0 +1,391 @@
1
+ #!/usr/bin/env -S node --max-old-space-size=16384 --heapsnapshot-near-heap-limit=3 --report-on-fatalerror
2
+ import { Ir as calculateCost, Lr as clampThinkingLevel, Rr as getProviderEnvValue, Vr as registerApiProvider, zr as AssistantMessageEventStream } from "./server.js";
3
+ import { t as sanitizeSurrogates } from "./sanitize-unicode-CPcy0g31.mjs";
4
+ import { r as buildBaseOptions } from "./transform-messages-CUKh2_5w.mjs";
5
+ import { a as mapToolChoice, c as ResourceScope, i as mapStopReason, l as ThinkingLevel, n as convertTools, o as retainThoughtSignature, r as isThinkingPart, s as GoogleGenAI, t as convertMessages } from "./google-shared-BT0mQb3v.mjs";
6
+ //#region ../../node_modules/.pnpm/@earendil-works+pi-ai@0.79.8_@modelcontextprotocol+sdk@1.29.0_zod@4.4.3__ws@8.21.0_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js
7
+ const API_VERSION = "v1";
8
+ const GCP_VERTEX_CREDENTIALS_MARKER = "gcp-vertex-credentials";
9
+ const THINKING_LEVEL_MAP = {
10
+ THINKING_LEVEL_UNSPECIFIED: ThinkingLevel.THINKING_LEVEL_UNSPECIFIED,
11
+ MINIMAL: ThinkingLevel.MINIMAL,
12
+ LOW: ThinkingLevel.LOW,
13
+ MEDIUM: ThinkingLevel.MEDIUM,
14
+ HIGH: ThinkingLevel.HIGH
15
+ };
16
+ let toolCallCounter = 0;
17
+ const streamGoogleVertex = (model, context, options) => {
18
+ const stream = new AssistantMessageEventStream();
19
+ (async () => {
20
+ const output = {
21
+ role: "assistant",
22
+ content: [],
23
+ api: "google-vertex",
24
+ provider: model.provider,
25
+ model: model.id,
26
+ usage: {
27
+ input: 0,
28
+ output: 0,
29
+ cacheRead: 0,
30
+ cacheWrite: 0,
31
+ totalTokens: 0,
32
+ cost: {
33
+ input: 0,
34
+ output: 0,
35
+ cacheRead: 0,
36
+ cacheWrite: 0,
37
+ total: 0
38
+ }
39
+ },
40
+ stopReason: "stop",
41
+ timestamp: Date.now()
42
+ };
43
+ try {
44
+ const apiKey = resolveApiKey(options);
45
+ const client = apiKey ? createClientWithApiKey(model, apiKey, options?.headers) : createClient(model, resolveProject(options), resolveLocation(options), options?.headers, options?.env);
46
+ let params = buildParams(model, context, options);
47
+ const nextParams = await options?.onPayload?.(params, model);
48
+ if (nextParams !== void 0) params = nextParams;
49
+ const googleStream = await client.models.generateContentStream(params);
50
+ stream.push({
51
+ type: "start",
52
+ partial: output
53
+ });
54
+ let currentBlock = null;
55
+ const blocks = output.content;
56
+ const blockIndex = () => blocks.length - 1;
57
+ for await (const chunk of googleStream) {
58
+ output.responseId ||= chunk.responseId;
59
+ const candidate = chunk.candidates?.[0];
60
+ if (candidate?.content?.parts) for (const part of candidate.content.parts) {
61
+ if (part.text !== void 0) {
62
+ const isThinking = isThinkingPart(part);
63
+ if (!currentBlock || isThinking && currentBlock.type !== "thinking" || !isThinking && currentBlock.type !== "text") {
64
+ if (currentBlock) if (currentBlock.type === "text") stream.push({
65
+ type: "text_end",
66
+ contentIndex: blocks.length - 1,
67
+ content: currentBlock.text,
68
+ partial: output
69
+ });
70
+ else stream.push({
71
+ type: "thinking_end",
72
+ contentIndex: blockIndex(),
73
+ content: currentBlock.thinking,
74
+ partial: output
75
+ });
76
+ if (isThinking) {
77
+ currentBlock = {
78
+ type: "thinking",
79
+ thinking: "",
80
+ thinkingSignature: void 0
81
+ };
82
+ output.content.push(currentBlock);
83
+ stream.push({
84
+ type: "thinking_start",
85
+ contentIndex: blockIndex(),
86
+ partial: output
87
+ });
88
+ } else {
89
+ currentBlock = {
90
+ type: "text",
91
+ text: ""
92
+ };
93
+ output.content.push(currentBlock);
94
+ stream.push({
95
+ type: "text_start",
96
+ contentIndex: blockIndex(),
97
+ partial: output
98
+ });
99
+ }
100
+ }
101
+ if (currentBlock.type === "thinking") {
102
+ currentBlock.thinking += part.text;
103
+ currentBlock.thinkingSignature = retainThoughtSignature(currentBlock.thinkingSignature, part.thoughtSignature);
104
+ stream.push({
105
+ type: "thinking_delta",
106
+ contentIndex: blockIndex(),
107
+ delta: part.text,
108
+ partial: output
109
+ });
110
+ } else {
111
+ currentBlock.text += part.text;
112
+ currentBlock.textSignature = retainThoughtSignature(currentBlock.textSignature, part.thoughtSignature);
113
+ stream.push({
114
+ type: "text_delta",
115
+ contentIndex: blockIndex(),
116
+ delta: part.text,
117
+ partial: output
118
+ });
119
+ }
120
+ }
121
+ if (part.functionCall) {
122
+ if (currentBlock) {
123
+ if (currentBlock.type === "text") stream.push({
124
+ type: "text_end",
125
+ contentIndex: blockIndex(),
126
+ content: currentBlock.text,
127
+ partial: output
128
+ });
129
+ else stream.push({
130
+ type: "thinking_end",
131
+ contentIndex: blockIndex(),
132
+ content: currentBlock.thinking,
133
+ partial: output
134
+ });
135
+ currentBlock = null;
136
+ }
137
+ const providedId = part.functionCall.id;
138
+ const toolCall = {
139
+ type: "toolCall",
140
+ id: !providedId || output.content.some((b) => b.type === "toolCall" && b.id === providedId) ? `${part.functionCall.name}_${Date.now()}_${++toolCallCounter}` : providedId,
141
+ name: part.functionCall.name || "",
142
+ arguments: part.functionCall.args ?? {},
143
+ ...part.thoughtSignature && { thoughtSignature: part.thoughtSignature }
144
+ };
145
+ output.content.push(toolCall);
146
+ stream.push({
147
+ type: "toolcall_start",
148
+ contentIndex: blockIndex(),
149
+ partial: output
150
+ });
151
+ stream.push({
152
+ type: "toolcall_delta",
153
+ contentIndex: blockIndex(),
154
+ delta: JSON.stringify(toolCall.arguments),
155
+ partial: output
156
+ });
157
+ stream.push({
158
+ type: "toolcall_end",
159
+ contentIndex: blockIndex(),
160
+ toolCall,
161
+ partial: output
162
+ });
163
+ }
164
+ }
165
+ if (candidate?.finishReason) {
166
+ output.stopReason = mapStopReason(candidate.finishReason);
167
+ if (output.content.some((b) => b.type === "toolCall")) output.stopReason = "toolUse";
168
+ }
169
+ if (chunk.usageMetadata) {
170
+ output.usage = {
171
+ input: (chunk.usageMetadata.promptTokenCount || 0) - (chunk.usageMetadata.cachedContentTokenCount || 0),
172
+ output: (chunk.usageMetadata.candidatesTokenCount || 0) + (chunk.usageMetadata.thoughtsTokenCount || 0),
173
+ cacheRead: chunk.usageMetadata.cachedContentTokenCount || 0,
174
+ cacheWrite: 0,
175
+ totalTokens: chunk.usageMetadata.totalTokenCount || 0,
176
+ cost: {
177
+ input: 0,
178
+ output: 0,
179
+ cacheRead: 0,
180
+ cacheWrite: 0,
181
+ total: 0
182
+ }
183
+ };
184
+ calculateCost(model, output.usage);
185
+ }
186
+ }
187
+ if (currentBlock) if (currentBlock.type === "text") stream.push({
188
+ type: "text_end",
189
+ contentIndex: blockIndex(),
190
+ content: currentBlock.text,
191
+ partial: output
192
+ });
193
+ else stream.push({
194
+ type: "thinking_end",
195
+ contentIndex: blockIndex(),
196
+ content: currentBlock.thinking,
197
+ partial: output
198
+ });
199
+ if (options?.signal?.aborted) throw new Error("Request was aborted");
200
+ if (output.stopReason === "aborted" || output.stopReason === "error") throw new Error("An unknown error occurred");
201
+ stream.push({
202
+ type: "done",
203
+ reason: output.stopReason,
204
+ message: output
205
+ });
206
+ stream.end();
207
+ } catch (error) {
208
+ for (const block of output.content) if ("index" in block) delete block.index;
209
+ output.stopReason = options?.signal?.aborted ? "aborted" : "error";
210
+ output.errorMessage = error instanceof Error ? error.message : JSON.stringify(error);
211
+ stream.push({
212
+ type: "error",
213
+ reason: output.stopReason,
214
+ error: output
215
+ });
216
+ stream.end();
217
+ }
218
+ })();
219
+ return stream;
220
+ };
221
+ const streamSimpleGoogleVertex = (model, context, options) => {
222
+ const base = buildBaseOptions(model, options, void 0);
223
+ if (!options?.reasoning) return streamGoogleVertex(model, context, {
224
+ ...base,
225
+ thinking: { enabled: false }
226
+ });
227
+ const clampedReasoning = clampThinkingLevel(model, options.reasoning);
228
+ const effort = clampedReasoning === "off" ? "high" : clampedReasoning;
229
+ const geminiModel = model;
230
+ if (isGemini3ProModel(geminiModel) || isGemini3FlashModel(geminiModel)) return streamGoogleVertex(model, context, {
231
+ ...base,
232
+ thinking: {
233
+ enabled: true,
234
+ level: getGemini3ThinkingLevel(effort, geminiModel)
235
+ }
236
+ });
237
+ return streamGoogleVertex(model, context, {
238
+ ...base,
239
+ thinking: {
240
+ enabled: true,
241
+ budgetTokens: getGoogleBudget(geminiModel, effort, options.thinkingBudgets)
242
+ }
243
+ });
244
+ };
245
+ function register() {
246
+ registerApiProvider({
247
+ api: "google-vertex",
248
+ stream: streamGoogleVertex,
249
+ streamSimple: streamSimpleGoogleVertex
250
+ });
251
+ }
252
+ function createClient(model, project, location, optionsHeaders, env) {
253
+ const googleAuthOptions = buildGoogleAuthOptions(env);
254
+ return new GoogleGenAI({
255
+ vertexai: true,
256
+ project,
257
+ location,
258
+ apiVersion: API_VERSION,
259
+ ...googleAuthOptions ? { googleAuthOptions } : {},
260
+ httpOptions: buildHttpOptions(model, optionsHeaders)
261
+ });
262
+ }
263
+ function createClientWithApiKey(model, apiKey, optionsHeaders) {
264
+ return new GoogleGenAI({
265
+ vertexai: true,
266
+ apiKey,
267
+ apiVersion: API_VERSION,
268
+ httpOptions: buildHttpOptions(model, optionsHeaders)
269
+ });
270
+ }
271
+ function buildHttpOptions(model, optionsHeaders) {
272
+ const httpOptions = {};
273
+ const baseUrl = resolveCustomBaseUrl(model.baseUrl);
274
+ if (baseUrl) {
275
+ httpOptions.baseUrl = baseUrl;
276
+ httpOptions.baseUrlResourceScope = ResourceScope.COLLECTION;
277
+ if (baseUrlIncludesApiVersion(baseUrl)) httpOptions.apiVersion = "";
278
+ }
279
+ if (model.headers || optionsHeaders) httpOptions.headers = {
280
+ ...model.headers,
281
+ ...optionsHeaders
282
+ };
283
+ return Object.keys(httpOptions).length > 0 ? httpOptions : void 0;
284
+ }
285
+ function resolveCustomBaseUrl(baseUrl) {
286
+ const trimmed = baseUrl.trim();
287
+ if (!trimmed || trimmed.includes("{location}")) return;
288
+ return trimmed;
289
+ }
290
+ function baseUrlIncludesApiVersion(baseUrl) {
291
+ try {
292
+ return new URL(baseUrl).pathname.split("/").some((part) => /^v\d+(?:beta\d*)?$/.test(part));
293
+ } catch {
294
+ return /(?:^|\/)v\d+(?:beta\d*)?(?:\/|$)/.test(baseUrl);
295
+ }
296
+ }
297
+ function buildGoogleAuthOptions(env) {
298
+ const keyFilename = getProviderEnvValue("GOOGLE_APPLICATION_CREDENTIALS", env);
299
+ return keyFilename ? { keyFilename } : void 0;
300
+ }
301
+ function resolveApiKey(options) {
302
+ const apiKey = options?.apiKey?.trim();
303
+ if (!apiKey || apiKey === GCP_VERTEX_CREDENTIALS_MARKER || isPlaceholderApiKey(apiKey)) return;
304
+ return apiKey;
305
+ }
306
+ function isPlaceholderApiKey(apiKey) {
307
+ return /^<[^>]+>$/.test(apiKey);
308
+ }
309
+ function resolveProject(options) {
310
+ const project = options?.project || getProviderEnvValue("GOOGLE_CLOUD_PROJECT", options?.env) || getProviderEnvValue("GCLOUD_PROJECT", options?.env);
311
+ if (!project) throw new Error("Vertex AI requires a project ID. Set GOOGLE_CLOUD_PROJECT/GCLOUD_PROJECT or pass project in options.");
312
+ return project;
313
+ }
314
+ function resolveLocation(options) {
315
+ const location = options?.location || getProviderEnvValue("GOOGLE_CLOUD_LOCATION", options?.env);
316
+ if (!location) throw new Error("Vertex AI requires a location. Set GOOGLE_CLOUD_LOCATION or pass location in options.");
317
+ return location;
318
+ }
319
+ function buildParams(model, context, options = {}) {
320
+ const contents = convertMessages(model, context);
321
+ const generationConfig = {};
322
+ if (options.temperature !== void 0) generationConfig.temperature = options.temperature;
323
+ if (options.maxTokens !== void 0) generationConfig.maxOutputTokens = options.maxTokens;
324
+ const config = {
325
+ ...Object.keys(generationConfig).length > 0 && generationConfig,
326
+ ...context.systemPrompt && { systemInstruction: sanitizeSurrogates(context.systemPrompt) },
327
+ ...context.tools && context.tools.length > 0 && { tools: convertTools(context.tools) }
328
+ };
329
+ if (context.tools && context.tools.length > 0 && options.toolChoice) config.toolConfig = { functionCallingConfig: { mode: mapToolChoice(options.toolChoice) } };
330
+ else config.toolConfig = void 0;
331
+ if (options.thinking?.enabled && model.reasoning) {
332
+ const thinkingConfig = { includeThoughts: true };
333
+ if (options.thinking.level !== void 0) thinkingConfig.thinkingLevel = THINKING_LEVEL_MAP[options.thinking.level];
334
+ else if (options.thinking.budgetTokens !== void 0) thinkingConfig.thinkingBudget = options.thinking.budgetTokens;
335
+ config.thinkingConfig = thinkingConfig;
336
+ } else if (model.reasoning && options.thinking && !options.thinking.enabled) config.thinkingConfig = getDisabledThinkingConfig(model);
337
+ if (options.signal) {
338
+ if (options.signal.aborted) throw new Error("Request aborted");
339
+ config.abortSignal = options.signal;
340
+ }
341
+ return {
342
+ model: model.id,
343
+ contents,
344
+ config
345
+ };
346
+ }
347
+ function isGemini3ProModel(model) {
348
+ return /gemini-3(?:\.\d+)?-pro/.test(model.id.toLowerCase());
349
+ }
350
+ function isGemini3FlashModel(model) {
351
+ const id = model.id.toLowerCase();
352
+ return /gemini-3(?:\.\d+)?-flash/.test(id) || id === "gemini-flash-latest" || id === "gemini-flash-lite-latest";
353
+ }
354
+ function getDisabledThinkingConfig(model) {
355
+ const geminiModel = model;
356
+ if (isGemini3ProModel(geminiModel)) return { thinkingLevel: ThinkingLevel.LOW };
357
+ if (isGemini3FlashModel(geminiModel)) return { thinkingLevel: ThinkingLevel.MINIMAL };
358
+ return { thinkingBudget: 0 };
359
+ }
360
+ function getGemini3ThinkingLevel(effort, model) {
361
+ if (isGemini3ProModel(model)) switch (effort) {
362
+ case "minimal":
363
+ case "low": return "LOW";
364
+ case "medium":
365
+ case "high": return "HIGH";
366
+ }
367
+ switch (effort) {
368
+ case "minimal": return "MINIMAL";
369
+ case "low": return "LOW";
370
+ case "medium": return "MEDIUM";
371
+ case "high": return "HIGH";
372
+ }
373
+ }
374
+ function getGoogleBudget(model, effort, customBudgets) {
375
+ if (customBudgets?.[effort] !== void 0) return customBudgets[effort];
376
+ if (model.id.includes("2.5-pro")) return {
377
+ minimal: 128,
378
+ low: 2048,
379
+ medium: 8192,
380
+ high: 32768
381
+ }[effort];
382
+ if (model.id.includes("2.5-flash")) return {
383
+ minimal: 128,
384
+ low: 2048,
385
+ medium: 8192,
386
+ high: 24576
387
+ }[effort];
388
+ return -1;
389
+ }
390
+ //#endregion
391
+ export { register, streamGoogleVertex, streamSimpleGoogleVertex };
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env -S node --max-old-space-size=16384 --heapsnapshot-near-heap-limit=3 --report-on-fatalerror
2
+ //#region ../../node_modules/.pnpm/@earendil-works+pi-ai@0.79.8_@modelcontextprotocol+sdk@1.29.0_zod@4.4.3__ws@8.21.0_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/utils/hash.js
3
+ /** Fast deterministic hash to shorten long strings */
4
+ function shortHash(str) {
5
+ let h1 = 3735928559;
6
+ let h2 = 1103547991;
7
+ for (let i = 0; i < str.length; i++) {
8
+ const ch = str.charCodeAt(i);
9
+ h1 = Math.imul(h1 ^ ch, 2654435761);
10
+ h2 = Math.imul(h2 ^ ch, 1597334677);
11
+ }
12
+ h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);
13
+ h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);
14
+ return (h2 >>> 0).toString(36) + (h1 >>> 0).toString(36);
15
+ }
16
+ //#endregion
17
+ export { shortHash as t };
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env -S node --max-old-space-size=16384 --heapsnapshot-near-heap-limit=3 --report-on-fatalerror
2
+ //#region ../../node_modules/.pnpm/@earendil-works+pi-ai@0.79.8_@modelcontextprotocol+sdk@1.29.0_zod@4.4.3__ws@8.21.0_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/utils/headers.js
3
+ function headersToRecord(headers) {
4
+ const result = {};
5
+ for (const [key, value] of headers.entries()) result[key] = value;
6
+ return result;
7
+ }
8
+ //#endregion
9
+ export { headersToRecord as t };