linkque-cli-v2 1.0.5 → 1.0.7

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 (51) hide show
  1. package/README.md +1 -1
  2. package/linkquejs.js +23 -2212
  3. package/package.json +4 -1
  4. package/vendor/linkque-agent-appwrite-integrate/dist/esm/anthropic-messages-B5T6TFD2.js +7172 -0
  5. package/vendor/linkque-agent-appwrite-integrate/dist/esm/azure-openai-responses-S7HNQOSE.js +229 -0
  6. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-2NGJGNYB.js +1765 -0
  7. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-3S3TOEBZ.js +608 -0
  8. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-46SEH6ER.js +78 -0
  9. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-6MHDOBWO.js +12 -0
  10. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-6WHNFJT4.js +31278 -0
  11. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-7BQRUS4C.js +671 -0
  12. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-7QWAKKTY.js +7054 -0
  13. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-CT4G24PS.js +8 -0
  14. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-DYEQRE6N.js +343 -0
  15. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-E2P6TIFG.js +31 -0
  16. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-FHNQ6DPF.js +14 -0
  17. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-FJ2BZPIM.js +60308 -0
  18. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-HTG7JBF2.js +38 -0
  19. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-I64V3ICJ.js +11166 -0
  20. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-IAT272TH.js +12121 -0
  21. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-IKZ25GJD.js +497 -0
  22. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-MKS245OU.js +3570 -0
  23. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-NKEOCGYU.js +76 -0
  24. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-OXGCUIKV.js +33 -0
  25. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-RYONFGPP.js +317 -0
  26. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-UEVQXSKG.js +4765 -0
  27. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-UFVAKOTZ.js +17 -0
  28. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-VS2QQHAK.js +46 -0
  29. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-XMVFOHGJ.js +31 -0
  30. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-XUFLSZM4.js +5319 -0
  31. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-Y6UTJIT4.js +23 -0
  32. package/vendor/linkque-agent-appwrite-integrate/dist/esm/chunk-YDKZZ6EH.js +3584 -0
  33. package/vendor/linkque-agent-appwrite-integrate/dist/esm/dist-QD3CV4KC.js +1224 -0
  34. package/vendor/linkque-agent-appwrite-integrate/dist/esm/google-generative-ai-IOXNKFEV.js +412 -0
  35. package/vendor/linkque-agent-appwrite-integrate/dist/esm/google-vertex-U4ZV5IXZ.js +461 -0
  36. package/vendor/linkque-agent-appwrite-integrate/dist/esm/mistral-conversations-G3K7SSWR.js +30344 -0
  37. package/vendor/linkque-agent-appwrite-integrate/dist/esm/multipart-parser-2VJ7LVQD.js +170 -0
  38. package/vendor/linkque-agent-appwrite-integrate/dist/esm/multipart-parser-AJMV6U6H.js +178 -0
  39. package/vendor/linkque-agent-appwrite-integrate/dist/esm/multipart-parser-PULXGNYO.js +368 -0
  40. package/vendor/linkque-agent-appwrite-integrate/dist/esm/openai-codex-responses-4JJLPTCS.js +1308 -0
  41. package/vendor/linkque-agent-appwrite-integrate/dist/esm/openai-completions-PH4WW6E7.js +977 -0
  42. package/vendor/linkque-agent-appwrite-integrate/dist/esm/openai-responses-KGWAX6HR.js +264 -0
  43. package/vendor/linkque-agent-appwrite-integrate/dist/esm/openrouter-images-LMBZZQ76.js +138 -0
  44. package/vendor/linkque-agent-appwrite-integrate/dist/esm/otel-7GSG7QQO.js +6657 -0
  45. package/vendor/linkque-agent-appwrite-integrate/dist/esm/pi-messages-ZX3KUWSZ.js +309 -0
  46. package/vendor/linkque-agent-appwrite-integrate/dist/esm/runtime/handler/chat.js +2348 -0
  47. package/vendor/linkque-agent-appwrite-integrate/dist/esm/runtime/handler/clientCapability.js +16 -0
  48. package/vendor/linkque-agent-appwrite-integrate/dist/esm/runtime/protocol.js +17 -0
  49. package/vendor/linkque-agent-appwrite-integrate/dist/esm/src-NGZW4JXI.js +1396 -0
  50. package/vendor/linkque-agent-appwrite-integrate/package.json +1 -0
  51. package/worker.js +16 -6
@@ -0,0 +1,309 @@
1
+ import {
2
+ appendAssistantMessageDiagnostic,
3
+ createAssistantMessageDiagnostic
4
+ } from "./chunk-E2P6TIFG.js";
5
+ import {
6
+ headersToRecord,
7
+ providerHeadersToRecord
8
+ } from "./chunk-Y6UTJIT4.js";
9
+ import {
10
+ getProviderEnvValue
11
+ } from "./chunk-OXGCUIKV.js";
12
+ import {
13
+ parseStreamingJson
14
+ } from "./chunk-DYEQRE6N.js";
15
+ import {
16
+ AssistantMessageEventStream
17
+ } from "./chunk-46SEH6ER.js";
18
+ import "./chunk-VS2QQHAK.js";
19
+
20
+ // ../../node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js
21
+ var PiMessagesResponseError = class extends Error {
22
+ code;
23
+ diagnosticDetails;
24
+ constructor(message, code, diagnosticDetails) {
25
+ super(message);
26
+ this.name = "PiMessagesResponseError";
27
+ this.code = code;
28
+ this.diagnosticDetails = diagnosticDetails;
29
+ }
30
+ };
31
+ function isRecord(value) {
32
+ return typeof value === "object" && value !== null && !Array.isArray(value);
33
+ }
34
+ function parsePiMessagesErrorBody(body) {
35
+ try {
36
+ const parsed = JSON.parse(body);
37
+ return isRecord(parsed) && isRecord(parsed.error) ? parsed : void 0;
38
+ } catch {
39
+ return void 0;
40
+ }
41
+ }
42
+ function truncateDiagnosticString(value) {
43
+ const maxLength = 8192;
44
+ return value.length > maxLength ? `${value.slice(0, maxLength)}\u2026` : value;
45
+ }
46
+ function formatPiMessagesResponseError(response, body, errorBody) {
47
+ const message = typeof errorBody?.error?.message === "string" ? errorBody.error.message : void 0;
48
+ const code = typeof errorBody?.error?.code === "string" ? errorBody.error.code : void 0;
49
+ const suffix = message ?? body;
50
+ const codeSuffix = code ? ` (${code})` : "";
51
+ return `${response.status} ${response.statusText}: ${suffix}${codeSuffix}`;
52
+ }
53
+ function createPiMessagesResponseError(model, url, response, body) {
54
+ const errorBody = parsePiMessagesErrorBody(body);
55
+ const code = typeof errorBody?.error?.code === "string" ? errorBody.error.code : void 0;
56
+ return new PiMessagesResponseError(formatPiMessagesResponseError(response, body, errorBody), code, {
57
+ version: 1,
58
+ provider: model.provider,
59
+ model: model.id,
60
+ url: url.toString(),
61
+ status: response.status,
62
+ statusText: response.statusText,
63
+ error: errorBody?.error,
64
+ body: errorBody ? void 0 : truncateDiagnosticString(body),
65
+ timestampMs: Date.now()
66
+ });
67
+ }
68
+ function createEmptyUsage() {
69
+ return {
70
+ input: 0,
71
+ output: 0,
72
+ cacheRead: 0,
73
+ cacheWrite: 0,
74
+ totalTokens: 0,
75
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }
76
+ };
77
+ }
78
+ function appendRewriteDiagnostic(message, rewrite) {
79
+ if (!rewrite) {
80
+ return;
81
+ }
82
+ appendAssistantMessageDiagnostic(message, {
83
+ type: "pi_messages_rewrite",
84
+ timestamp: Date.now(),
85
+ details: { ...rewrite }
86
+ });
87
+ }
88
+ function createEventConverter(model) {
89
+ const partial = {
90
+ role: "assistant",
91
+ content: [],
92
+ api: model.api,
93
+ provider: model.provider,
94
+ model: model.id,
95
+ usage: createEmptyUsage(),
96
+ stopReason: "stop",
97
+ timestamp: Date.now()
98
+ };
99
+ const toolJson = /* @__PURE__ */ new Map();
100
+ return (event) => {
101
+ switch (event.type) {
102
+ case "done":
103
+ Object.assign(partial, {
104
+ stopReason: event.reason,
105
+ usage: event.usage,
106
+ responseId: event.responseId
107
+ });
108
+ appendRewriteDiagnostic(partial, event.rewrite);
109
+ return { type: "done", reason: event.reason, message: partial };
110
+ case "error":
111
+ Object.assign(partial, {
112
+ stopReason: event.reason,
113
+ usage: event.usage,
114
+ errorMessage: event.errorMessage,
115
+ responseId: event.responseId
116
+ });
117
+ appendRewriteDiagnostic(partial, event.rewrite);
118
+ return { type: "error", reason: event.reason, error: partial };
119
+ case "start":
120
+ break;
121
+ case "text_start":
122
+ partial.content[event.contentIndex] = { type: "text", text: "" };
123
+ break;
124
+ case "text_delta":
125
+ partial.content[event.contentIndex].text += event.delta;
126
+ break;
127
+ case "text_end":
128
+ Object.assign(partial.content[event.contentIndex], {
129
+ text: event.content,
130
+ textSignature: event.contentSignature
131
+ });
132
+ break;
133
+ case "thinking_start":
134
+ partial.content[event.contentIndex] = { type: "thinking", thinking: "" };
135
+ break;
136
+ case "thinking_delta":
137
+ partial.content[event.contentIndex].thinking += event.delta;
138
+ break;
139
+ case "thinking_end":
140
+ Object.assign(partial.content[event.contentIndex], {
141
+ thinking: event.content,
142
+ thinkingSignature: event.contentSignature,
143
+ redacted: event.redacted
144
+ });
145
+ break;
146
+ case "toolcall_start":
147
+ partial.content[event.contentIndex] = {
148
+ type: "toolCall",
149
+ id: event.id,
150
+ name: event.toolName,
151
+ arguments: {}
152
+ };
153
+ toolJson.set(event.contentIndex, "");
154
+ break;
155
+ case "toolcall_delta": {
156
+ const json = `${toolJson.get(event.contentIndex) ?? ""}${event.delta}`;
157
+ toolJson.set(event.contentIndex, json);
158
+ partial.content[event.contentIndex].arguments = parseStreamingJson(json);
159
+ break;
160
+ }
161
+ case "toolcall_end":
162
+ Object.assign(partial.content[event.contentIndex], event.toolCall);
163
+ toolJson.delete(event.contentIndex);
164
+ return {
165
+ type: "toolcall_end",
166
+ contentIndex: event.contentIndex,
167
+ toolCall: partial.content[event.contentIndex],
168
+ partial
169
+ };
170
+ }
171
+ return { ...event, partial };
172
+ };
173
+ }
174
+ async function* readPiMessagesEvents(stream2) {
175
+ const decoder = new TextDecoder();
176
+ const reader = stream2.getReader();
177
+ let buffer = "";
178
+ try {
179
+ while (true) {
180
+ const { done, value } = await reader.read();
181
+ buffer += done ? decoder.decode() : decoder.decode(value, { stream: true });
182
+ buffer = buffer.replace(/\r\n/g, "\n");
183
+ let split = buffer.indexOf("\n\n");
184
+ while (split !== -1) {
185
+ const event = parsePiMessagesEvent(buffer.slice(0, split));
186
+ if (event) {
187
+ yield event;
188
+ }
189
+ buffer = buffer.slice(split + 2);
190
+ split = buffer.indexOf("\n\n");
191
+ }
192
+ if (done) {
193
+ break;
194
+ }
195
+ }
196
+ if (buffer.trim()) {
197
+ const event = parsePiMessagesEvent(buffer);
198
+ if (event) {
199
+ yield event;
200
+ }
201
+ }
202
+ } finally {
203
+ reader.releaseLock();
204
+ }
205
+ }
206
+ function parsePiMessagesEvent(raw) {
207
+ const data = raw.split("\n").find((line) => line.startsWith("data:"))?.slice(5).trim();
208
+ return data && data !== "[DONE]" ? JSON.parse(data) : void 0;
209
+ }
210
+ function createErrorEvent(model, error, aborted) {
211
+ const reason = aborted ? "aborted" : "error";
212
+ const assistantMessage = {
213
+ role: "assistant",
214
+ content: [],
215
+ api: model.api,
216
+ provider: model.provider,
217
+ model: model.id,
218
+ usage: createEmptyUsage(),
219
+ stopReason: reason,
220
+ errorMessage: error instanceof Error ? error.message : String(error),
221
+ timestamp: Date.now()
222
+ };
223
+ if (!aborted && error instanceof PiMessagesResponseError) {
224
+ appendAssistantMessageDiagnostic(assistantMessage, createAssistantMessageDiagnostic("pi_messages_response_failure", error, error.diagnosticDetails));
225
+ }
226
+ return { type: "error", reason, error: assistantMessage };
227
+ }
228
+ function resolveCacheRetention(cacheRetention, env) {
229
+ if (cacheRetention) {
230
+ return cacheRetention;
231
+ }
232
+ return getProviderEnvValue("PI_CACHE_RETENTION", env) === "long" ? "long" : void 0;
233
+ }
234
+ var stream = (model, context, options) => {
235
+ const eventStream = new AssistantMessageEventStream();
236
+ const convertEvent = createEventConverter(model);
237
+ void (async () => {
238
+ try {
239
+ const apiKey = options?.apiKey;
240
+ if (!apiKey) {
241
+ throw new Error(`No API key provided for provider "${model.provider}"`);
242
+ }
243
+ const url = new URL(`${model.baseUrl.replace(/\/+$/u, "")}/messages`);
244
+ if (options?.debug) {
245
+ url.searchParams.set("debug", "1");
246
+ }
247
+ let payload = {
248
+ model: model.id,
249
+ context,
250
+ options: {
251
+ temperature: options?.temperature,
252
+ maxTokens: options?.maxTokens,
253
+ reasoning: options?.reasoning,
254
+ cacheRetention: resolveCacheRetention(options?.cacheRetention, options?.env),
255
+ sessionId: options?.sessionId,
256
+ toolChoice: options?.toolChoice
257
+ }
258
+ };
259
+ const nextPayload = await options?.onPayload?.(payload, model);
260
+ if (nextPayload !== void 0) {
261
+ payload = nextPayload;
262
+ }
263
+ const response = await fetch(url, {
264
+ method: "POST",
265
+ headers: {
266
+ authorization: `Bearer ${apiKey}`,
267
+ accept: "text/event-stream",
268
+ "content-type": "application/json",
269
+ ...providerHeadersToRecord(options?.headers)
270
+ },
271
+ body: JSON.stringify(payload),
272
+ signal: options?.signal
273
+ });
274
+ await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);
275
+ if (!response.ok) {
276
+ const body = await response.text();
277
+ throw createPiMessagesResponseError(model, url, response, body);
278
+ }
279
+ if (!response.body) {
280
+ throw new Error(`${model.provider} response has no body`);
281
+ }
282
+ for await (const piEvent of readPiMessagesEvents(response.body)) {
283
+ const event = convertEvent(piEvent);
284
+ eventStream.push(event);
285
+ if (event.type === "done" || event.type === "error") {
286
+ return;
287
+ }
288
+ }
289
+ throw new Error(`${model.provider} stream ended without a terminal event`);
290
+ } catch (error) {
291
+ eventStream.push(createErrorEvent(model, error, options?.signal?.aborted ?? false));
292
+ }
293
+ })();
294
+ return eventStream;
295
+ };
296
+ var streamSimple = (model, context, options) => {
297
+ const extra = options;
298
+ return stream(model, context, {
299
+ ...options,
300
+ reasoning: options?.reasoning,
301
+ toolChoice: extra?.toolChoice,
302
+ debug: extra?.debug
303
+ });
304
+ };
305
+ export {
306
+ PiMessagesResponseError,
307
+ stream,
308
+ streamSimple
309
+ };