@orq-ai/node 3.2.4 → 3.2.6

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 (94) hide show
  1. package/README.md +39 -1
  2. package/bin/mcp-server.js +2424 -704
  3. package/bin/mcp-server.js.map +28 -24
  4. package/docs/sdks/deployments/README.md +81 -0
  5. package/docs/sdks/prompts/README.md +110 -110
  6. package/funcs/deploymentsStream.d.ts +17 -0
  7. package/funcs/deploymentsStream.d.ts.map +1 -0
  8. package/funcs/deploymentsStream.js +130 -0
  9. package/funcs/deploymentsStream.js.map +1 -0
  10. package/funcs/promptsList.js +1 -1
  11. package/funcs/promptsList.js.map +1 -1
  12. package/jsr.json +2 -1
  13. package/lib/config.d.ts +2 -2
  14. package/lib/config.js +2 -2
  15. package/lib/event-streams.d.ts +17 -0
  16. package/lib/event-streams.d.ts.map +1 -0
  17. package/lib/event-streams.js +220 -0
  18. package/lib/event-streams.js.map +1 -0
  19. package/lib/matchers.d.ts.map +1 -1
  20. package/lib/matchers.js +4 -1
  21. package/lib/matchers.js.map +1 -1
  22. package/mcp-server/mcp-server.js +1 -1
  23. package/mcp-server/server.d.ts.map +1 -1
  24. package/mcp-server/server.js +4 -2
  25. package/mcp-server/server.js.map +1 -1
  26. package/mcp-server/tools/deploymentsStream.d.ts +8 -0
  27. package/mcp-server/tools/deploymentsStream.d.ts.map +1 -0
  28. package/mcp-server/tools/deploymentsStream.js +64 -0
  29. package/mcp-server/tools/deploymentsStream.js.map +1 -0
  30. package/models/operations/bulkcreatedatapoints.js +2 -2
  31. package/models/operations/createcontact.js +2 -2
  32. package/models/operations/createdataset.js +2 -2
  33. package/models/operations/createdatasetitem.js +2 -2
  34. package/models/operations/createprompt.d.ts +317 -317
  35. package/models/operations/createprompt.d.ts.map +1 -1
  36. package/models/operations/createprompt.js +444 -442
  37. package/models/operations/createprompt.js.map +1 -1
  38. package/models/operations/deploymentstream.d.ts +2938 -0
  39. package/models/operations/deploymentstream.d.ts.map +1 -0
  40. package/models/operations/deploymentstream.js +2828 -0
  41. package/models/operations/deploymentstream.js.map +1 -0
  42. package/models/operations/fileget.js +2 -2
  43. package/models/operations/filelist.js +2 -2
  44. package/models/operations/fileupload.js +2 -2
  45. package/models/operations/index.d.ts +1 -0
  46. package/models/operations/index.d.ts.map +1 -1
  47. package/models/operations/index.js +1 -0
  48. package/models/operations/index.js.map +1 -1
  49. package/models/operations/listdatasetdatapoints.js +2 -2
  50. package/models/operations/listdatasets.js +2 -2
  51. package/models/operations/retrievedatapoint.js +2 -2
  52. package/models/operations/retrievedataset.js +2 -2
  53. package/models/operations/updatedatapoint.js +2 -2
  54. package/models/operations/updatedataset.js +2 -2
  55. package/models/operations/updateprompt.d.ts +317 -317
  56. package/models/operations/updateprompt.d.ts.map +1 -1
  57. package/models/operations/updateprompt.js +444 -444
  58. package/models/operations/updateprompt.js.map +1 -1
  59. package/package.json +1 -1
  60. package/sdk/deployments.d.ts +8 -0
  61. package/sdk/deployments.d.ts.map +1 -1
  62. package/sdk/deployments.js +10 -0
  63. package/sdk/deployments.js.map +1 -1
  64. package/sdk/prompts.d.ts +4 -4
  65. package/sdk/prompts.d.ts.map +1 -1
  66. package/sdk/prompts.js +6 -6
  67. package/sdk/prompts.js.map +1 -1
  68. package/src/funcs/deploymentsStream.ts +178 -0
  69. package/src/funcs/promptsList.ts +1 -1
  70. package/src/lib/config.ts +2 -2
  71. package/src/lib/event-streams.ts +264 -0
  72. package/src/lib/matchers.ts +4 -1
  73. package/src/mcp-server/mcp-server.ts +1 -1
  74. package/src/mcp-server/server.ts +4 -2
  75. package/src/mcp-server/tools/deploymentsStream.ts +37 -0
  76. package/src/models/operations/bulkcreatedatapoints.ts +2 -2
  77. package/src/models/operations/createcontact.ts +2 -2
  78. package/src/models/operations/createdataset.ts +2 -2
  79. package/src/models/operations/createdatasetitem.ts +2 -2
  80. package/src/models/operations/createprompt.ts +599 -680
  81. package/src/models/operations/deploymentstream.ts +5960 -0
  82. package/src/models/operations/fileget.ts +2 -2
  83. package/src/models/operations/filelist.ts +2 -2
  84. package/src/models/operations/fileupload.ts +2 -2
  85. package/src/models/operations/index.ts +1 -0
  86. package/src/models/operations/listdatasetdatapoints.ts +2 -2
  87. package/src/models/operations/listdatasets.ts +2 -2
  88. package/src/models/operations/retrievedatapoint.ts +2 -2
  89. package/src/models/operations/retrievedataset.ts +2 -2
  90. package/src/models/operations/updatedatapoint.ts +2 -2
  91. package/src/models/operations/updatedataset.ts +2 -2
  92. package/src/models/operations/updateprompt.ts +682 -599
  93. package/src/sdk/deployments.ts +19 -0
  94. package/src/sdk/prompts.ts +14 -14
@@ -0,0 +1,264 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ export type ServerEvent<T> = {
6
+ data?: T | undefined;
7
+ event?: string | undefined;
8
+ retry?: number | undefined;
9
+ id?: string | undefined;
10
+ };
11
+ const LF = 0x0a;
12
+ const CR = 0x0d;
13
+ const NEWLINE_CHARS = new Set([LF, CR]);
14
+ const MESSAGE_BOUNDARIES = [
15
+ new Uint8Array([CR, LF, CR, LF]),
16
+ new Uint8Array([CR, CR]),
17
+ new Uint8Array([LF, LF]),
18
+ ];
19
+
20
+ export class EventStream<Event extends ServerEvent<unknown>> {
21
+ private readonly stream: ReadableStream<Uint8Array>;
22
+ private readonly decoder: (rawEvent: ServerEvent<string>) => Event;
23
+
24
+ constructor(init: {
25
+ stream: ReadableStream<Uint8Array>;
26
+ decoder: (rawEvent: ServerEvent<string>) => Event;
27
+ }) {
28
+ this.stream = init.stream;
29
+ this.decoder = init.decoder;
30
+ }
31
+
32
+ async *[Symbol.asyncIterator](): AsyncGenerator<Event, void, unknown> {
33
+ const reader = this.stream.getReader();
34
+ let buffer = new Uint8Array([]);
35
+ let position = 0;
36
+
37
+ try {
38
+ while (true) {
39
+ const { done, value } = await reader.read();
40
+ if (done) {
41
+ break;
42
+ }
43
+
44
+ const newBuffer = new Uint8Array(buffer.length + value.length);
45
+ newBuffer.set(buffer);
46
+ newBuffer.set(value, buffer.length);
47
+ buffer = newBuffer;
48
+
49
+ for (let i = position; i < buffer.length; i++) {
50
+ const boundary = findBoundary(buffer, i);
51
+ if (boundary == null) {
52
+ continue;
53
+ }
54
+
55
+ const chunk = buffer.slice(position, i);
56
+ position = i + boundary.length;
57
+ const event = parseEvent(chunk, this.decoder);
58
+ if (event != null) {
59
+ yield event;
60
+ }
61
+ }
62
+
63
+ if (position > 0) {
64
+ buffer = buffer.slice(position);
65
+ position = 0;
66
+ }
67
+ }
68
+
69
+ if (buffer.length > 0) {
70
+ const event = parseEvent(buffer, this.decoder);
71
+ if (event != null) {
72
+ yield event;
73
+ }
74
+ }
75
+ } catch (e: unknown) {
76
+ if (e instanceof Error && e.name === "AbortError") {
77
+ return;
78
+ }
79
+
80
+ throw e;
81
+ } finally {
82
+ reader.releaseLock();
83
+ }
84
+ }
85
+ }
86
+
87
+ function findBoundary(buffer: Uint8Array, start: number): Uint8Array | null {
88
+ const char1 = buffer[start];
89
+ const char2 = buffer[start + 1];
90
+
91
+ // Don't bother checking if the first two characters are not new line
92
+ // characters.
93
+ if (
94
+ char1 == null
95
+ || char2 == null
96
+ || !NEWLINE_CHARS.has(char1)
97
+ || !NEWLINE_CHARS.has(char2)
98
+ ) {
99
+ return null;
100
+ }
101
+
102
+ for (const s of MESSAGE_BOUNDARIES) {
103
+ const seq = peekSequence(start, buffer, s);
104
+ if (seq != null) {
105
+ return seq;
106
+ }
107
+ }
108
+
109
+ return null;
110
+ }
111
+
112
+ function peekSequence(
113
+ position: number,
114
+ buffer: Uint8Array,
115
+ sequence: Uint8Array,
116
+ ): Uint8Array | null {
117
+ if (sequence.length > buffer.length - position) {
118
+ return null;
119
+ }
120
+
121
+ for (let i = 0; i < sequence.length; i++) {
122
+ if (buffer[position + i] !== sequence[i]) {
123
+ return null;
124
+ }
125
+ }
126
+
127
+ return sequence;
128
+ }
129
+
130
+ function parseEvent<Event extends ServerEvent<unknown>>(
131
+ chunk: Uint8Array,
132
+ decoder: (rawEvent: ServerEvent<string>) => Event,
133
+ ) {
134
+ if (!chunk.length) {
135
+ return null;
136
+ }
137
+
138
+ const td = new TextDecoder();
139
+ const raw = td.decode(chunk);
140
+ const lines = raw.split(/\r?\n|\r/g);
141
+ let publish = false;
142
+ const rawEvent: ServerEvent<string> = {};
143
+
144
+ for (const line of lines) {
145
+ if (!line) {
146
+ continue;
147
+ }
148
+
149
+ const delim = line.indexOf(":");
150
+ // Lines starting with a colon are ignored.
151
+ if (delim === 0) {
152
+ continue;
153
+ }
154
+
155
+ const field = delim > 0 ? line.substring(0, delim) : "";
156
+ let value = delim > 0 ? line.substring(delim + 1) : "";
157
+ if (value.charAt(0) === " ") {
158
+ value = value.substring(1);
159
+ }
160
+
161
+ switch (field) {
162
+ case "event": {
163
+ publish = true;
164
+ rawEvent.event = value;
165
+ break;
166
+ }
167
+ case "data": {
168
+ publish = true;
169
+ rawEvent.data ??= "";
170
+ rawEvent.data += value + "\n";
171
+ break;
172
+ }
173
+ case "id": {
174
+ publish = true;
175
+ rawEvent.id = value;
176
+ break;
177
+ }
178
+ case "retry": {
179
+ const r = parseInt(value, 10);
180
+ if (!Number.isNaN(r)) {
181
+ publish = true;
182
+ rawEvent.retry = r;
183
+ }
184
+ break;
185
+ }
186
+ }
187
+ }
188
+
189
+ if (!publish) {
190
+ return null;
191
+ }
192
+
193
+ if (rawEvent.data != null) {
194
+ rawEvent.data = rawEvent.data.slice(0, -1);
195
+ }
196
+
197
+ return decoder(rawEvent);
198
+ }
199
+
200
+ export function discardSentinel(
201
+ stream: ReadableStream<Uint8Array>,
202
+ sentinel: string,
203
+ ): ReadableStream<Uint8Array> {
204
+ return new ReadableStream<Uint8Array>({
205
+ async start(controller) {
206
+ let buffer = new Uint8Array([]);
207
+ let position = 0;
208
+ let done = false;
209
+ let discard = false;
210
+ const rdr = stream.getReader();
211
+ try {
212
+ while (!done) {
213
+ const result = await rdr.read();
214
+ const value = result.value;
215
+ done = done || result.done;
216
+ // We keep consuming from the source to its completion so it can
217
+ // flush all its contents and release resources.
218
+ if (discard) {
219
+ continue;
220
+ }
221
+ if (typeof value === "undefined") {
222
+ continue;
223
+ }
224
+
225
+ const newBuffer = new Uint8Array(buffer.length + value.length);
226
+ newBuffer.set(buffer);
227
+ newBuffer.set(value, buffer.length);
228
+ buffer = newBuffer;
229
+
230
+ for (let i = position; i < buffer.length; i++) {
231
+ const boundary = findBoundary(buffer, i);
232
+ if (boundary == null) {
233
+ continue;
234
+ }
235
+
236
+ const start = position;
237
+ const chunk = buffer.slice(start, i);
238
+ position = i + boundary.length;
239
+ const event = parseEvent(chunk, id);
240
+ if (event?.data === sentinel) {
241
+ controller.enqueue(buffer.slice(0, start));
242
+ discard = true;
243
+ } else {
244
+ controller.enqueue(buffer.slice(0, position));
245
+ buffer = buffer.slice(position);
246
+ position = 0;
247
+ }
248
+ }
249
+ }
250
+ } catch (e) {
251
+ controller.error(e);
252
+ } finally {
253
+ // If the source stream terminates, flush its contents and terminate.
254
+ // If the sentinel event was found, flush everything up to its start.
255
+ controller.close();
256
+ rdr.releaseLock();
257
+ }
258
+ },
259
+ });
260
+ }
261
+
262
+ function id<T>(v: T): T {
263
+ return v;
264
+ }
@@ -5,6 +5,7 @@
5
5
  import { APIError } from "../models/errors/apierror.js";
6
6
  import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
7
7
  import { Result } from "../types/fp.js";
8
+ import { discardSentinel } from "./event-streams.js";
8
9
  import { matchResponse, matchStatusCode, StatusCodePredicate } from "./http.js";
9
10
  import { isPlainObject } from "./is-plain-object.js";
10
11
  import { safeParse } from "./schemas.js";
@@ -214,7 +215,9 @@ export function match<T, E>(
214
215
  raw = await response.text();
215
216
  break;
216
217
  case "sse":
217
- raw = response.body;
218
+ raw = response.body && matcher.sseSentinel
219
+ ? discardSentinel(response.body, matcher.sseSentinel)
220
+ : response.body;
218
221
  break;
219
222
  case "nil":
220
223
  raw = await discardResponseBody(response);
@@ -19,7 +19,7 @@ const routes = buildRouteMap({
19
19
  export const app = buildApplication(routes, {
20
20
  name: "mcp",
21
21
  versionInfo: {
22
- currentVersion: "3.2.4",
22
+ currentVersion: "3.2.6",
23
23
  },
24
24
  });
25
25
 
@@ -30,6 +30,7 @@ import { tool$deploymentsGetConfig } from "./tools/deploymentsGetConfig.js";
30
30
  import { tool$deploymentsInvoke } from "./tools/deploymentsInvoke.js";
31
31
  import { tool$deploymentsList } from "./tools/deploymentsList.js";
32
32
  import { tool$deploymentsMetricsCreate } from "./tools/deploymentsMetricsCreate.js";
33
+ import { tool$deploymentsStream } from "./tools/deploymentsStream.js";
33
34
  import { tool$feedbackCreate } from "./tools/feedbackCreate.js";
34
35
  import { tool$filesCreate } from "./tools/filesCreate.js";
35
36
  import { tool$filesDelete } from "./tools/filesDelete.js";
@@ -56,7 +57,7 @@ export function createMCPServer(deps: {
56
57
  }) {
57
58
  const server = new McpServer({
58
59
  name: "Orq",
59
- version: "3.2.4",
60
+ version: "3.2.6",
60
61
  });
61
62
 
62
63
  const client = new OrqCore({
@@ -93,15 +94,16 @@ export function createMCPServer(deps: {
93
94
  tool(tool$deploymentsList);
94
95
  tool(tool$deploymentsGetConfig);
95
96
  tool(tool$deploymentsInvoke);
97
+ tool(tool$deploymentsStream);
96
98
  tool(tool$filesCreate);
97
99
  tool(tool$filesList);
98
100
  tool(tool$filesGet);
99
101
  tool(tool$filesDelete);
100
102
  tool(tool$promptsList);
103
+ tool(tool$promptsCreate);
101
104
  tool(tool$promptsRetrieve);
102
105
  tool(tool$promptsUpdate);
103
106
  tool(tool$promptsDelete);
104
- tool(tool$promptsCreate);
105
107
  tool(tool$promptsListVersions);
106
108
  tool(tool$promptsGetVersion);
107
109
  tool(tool$remoteconfigsRetrieve);
@@ -0,0 +1,37 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { deploymentsStream } from "../../funcs/deploymentsStream.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.DeploymentStreamRequestBody$inboundSchema,
11
+ };
12
+
13
+ export const tool$deploymentsStream: ToolDefinition<typeof args> = {
14
+ name: "deployments-stream",
15
+ description: `Stream
16
+
17
+ Stream deployment generation. Only supported for completions and chat completions.`,
18
+ args,
19
+ tool: async (client, args, ctx) => {
20
+ const [result, apiCall] = await deploymentsStream(
21
+ client,
22
+ args.request,
23
+ { fetchOptions: { signal: ctx.signal } },
24
+ ).$inspect();
25
+
26
+ if (!result.ok) {
27
+ return {
28
+ content: [{ type: "text", text: result.error.message }],
29
+ isError: true,
30
+ };
31
+ }
32
+
33
+ const value = result.value;
34
+
35
+ return formatResult(value, apiCall);
36
+ },
37
+ };
@@ -1731,7 +1731,7 @@ export const ResponseBody$inboundSchema: z.ZodType<
1731
1731
  created: z.string().datetime({ offset: true }).transform(v => new Date(v))
1732
1732
  .optional(),
1733
1733
  updated: z.string().datetime({ offset: true }).default(
1734
- "2025-03-19T22:16:46.151Z",
1734
+ "2025-03-20T14:51:11.226Z",
1735
1735
  ).transform(v => new Date(v)),
1736
1736
  }).transform((v) => {
1737
1737
  return remap$(v, {
@@ -1775,7 +1775,7 @@ export const ResponseBody$outboundSchema: z.ZodType<
1775
1775
  createdById: z.string().optional(),
1776
1776
  updatedById: z.string().optional(),
1777
1777
  created: z.date().transform(v => v.toISOString()).optional(),
1778
- updated: z.date().default(() => new Date("2025-03-19T22:16:46.151Z"))
1778
+ updated: z.date().default(() => new Date("2025-03-20T14:51:11.226Z"))
1779
1779
  .transform(v => v.toISOString()),
1780
1780
  }).transform((v) => {
1781
1781
  return remap$(v, {
@@ -177,7 +177,7 @@ export const CreateContactResponseBody$inboundSchema: z.ZodType<
177
177
  created: z.string().datetime({ offset: true }).transform(v => new Date(v))
178
178
  .optional(),
179
179
  updated: z.string().datetime({ offset: true }).default(
180
- "2025-03-19T22:16:46.151Z",
180
+ "2025-03-20T14:51:11.226Z",
181
181
  ).transform(v => new Date(v)),
182
182
  }).transform((v) => {
183
183
  return remap$(v, {
@@ -214,7 +214,7 @@ export const CreateContactResponseBody$outboundSchema: z.ZodType<
214
214
  tags: z.array(z.string()).optional(),
215
215
  metadata: z.record(z.any()).optional(),
216
216
  created: z.date().transform(v => v.toISOString()).optional(),
217
- updated: z.date().default(() => new Date("2025-03-19T22:16:46.151Z"))
217
+ updated: z.date().default(() => new Date("2025-03-20T14:51:11.226Z"))
218
218
  .transform(v => v.toISOString()),
219
219
  }).transform((v) => {
220
220
  return remap$(v, {
@@ -211,7 +211,7 @@ export const CreateDatasetResponseBody$inboundSchema: z.ZodType<
211
211
  created: z.string().datetime({ offset: true }).transform(v => new Date(v))
212
212
  .optional(),
213
213
  updated: z.string().datetime({ offset: true }).default(
214
- "2025-03-19T22:16:46.151Z",
214
+ "2025-03-20T14:51:11.226Z",
215
215
  ).transform(v => new Date(v)),
216
216
  }).transform((v) => {
217
217
  return remap$(v, {
@@ -251,7 +251,7 @@ export const CreateDatasetResponseBody$outboundSchema: z.ZodType<
251
251
  updatedById: z.string().optional(),
252
252
  metadata: z.lazy(() => CreateDatasetMetadata$outboundSchema),
253
253
  created: z.date().transform(v => v.toISOString()).optional(),
254
- updated: z.date().default(() => new Date("2025-03-19T22:16:46.151Z"))
254
+ updated: z.date().default(() => new Date("2025-03-20T14:51:11.226Z"))
255
255
  .transform(v => v.toISOString()),
256
256
  }).transform((v) => {
257
257
  return remap$(v, {
@@ -1649,7 +1649,7 @@ export const CreateDatasetItemResponseBody$inboundSchema: z.ZodType<
1649
1649
  created: z.string().datetime({ offset: true }).transform(v => new Date(v))
1650
1650
  .optional(),
1651
1651
  updated: z.string().datetime({ offset: true }).default(
1652
- "2025-03-19T22:16:46.151Z",
1652
+ "2025-03-20T14:51:11.226Z",
1653
1653
  ).transform(v => new Date(v)),
1654
1654
  }).transform((v) => {
1655
1655
  return remap$(v, {
@@ -1693,7 +1693,7 @@ export const CreateDatasetItemResponseBody$outboundSchema: z.ZodType<
1693
1693
  createdById: z.string().optional(),
1694
1694
  updatedById: z.string().optional(),
1695
1695
  created: z.date().transform(v => v.toISOString()).optional(),
1696
- updated: z.date().default(() => new Date("2025-03-19T22:16:46.151Z"))
1696
+ updated: z.date().default(() => new Date("2025-03-20T14:51:11.226Z"))
1697
1697
  .transform(v => v.toISOString()),
1698
1698
  }).transform((v) => {
1699
1699
  return remap$(v, {