@turingfocus/chat-gateway-tfrobot 0.6.0 → 0.8.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.
- package/dist/attachment-uploader.d.ts +16 -0
- package/dist/attachment-uploader.d.ts.map +1 -0
- package/dist/attachment-uploader.js +63 -0
- package/dist/attachment-uploader.js.map +1 -0
- package/dist/dto.d.ts +14 -1
- package/dist/dto.d.ts.map +1 -1
- package/dist/dto.js +43 -6
- package/dist/dto.js.map +1 -1
- package/dist/gateway.d.ts +4 -1
- package/dist/gateway.d.ts.map +1 -1
- package/dist/gateway.js +317 -19
- package/dist/gateway.js.map +1 -1
- package/dist/http.d.ts +6 -2
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +52 -40
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mapper.d.ts +1 -0
- package/dist/mapper.d.ts.map +1 -1
- package/dist/mapper.js +145 -8
- package/dist/mapper.js.map +1 -1
- package/dist/outbound-message.d.ts +7 -0
- package/dist/outbound-message.d.ts.map +1 -0
- package/dist/outbound-message.js +91 -0
- package/dist/outbound-message.js.map +1 -0
- package/dist/presentation.d.ts +5 -0
- package/dist/presentation.d.ts.map +1 -0
- package/dist/presentation.js +102 -0
- package/dist/presentation.js.map +1 -0
- package/dist/redaction.d.ts +4 -0
- package/dist/redaction.d.ts.map +1 -1
- package/dist/redaction.js +75 -24
- package/dist/redaction.js.map +1 -1
- package/dist/socket.d.ts +21 -3
- package/dist/socket.d.ts.map +1 -1
- package/dist/socket.js +317 -48
- package/dist/socket.js.map +1 -1
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SendMessageInput } from "@turingfocus/chat-protocol";
|
|
2
|
+
import type { TFRobotMessageCreator } from "./types.js";
|
|
3
|
+
type TFRobotMessage = Readonly<Record<string, unknown>>;
|
|
4
|
+
/** Maps one normalized user turn to the currently verified TFRobot DTO. */
|
|
5
|
+
export declare const buildTFRobotOutboundMessage: (input: SendMessageInput, creator: TFRobotMessageCreator, conversationId: number | string) => TFRobotMessage;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=outbound-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbound-message.d.ts","sourceRoot":"","sources":["../src/outbound-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,KAAK,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAyCxD,2EAA2E;AAC3E,eAAO,MAAM,2BAA2B,GACtC,OAAO,gBAAgB,EACvB,SAAS,qBAAqB,EAC9B,gBAAgB,MAAM,GAAG,MAAM,KAC9B,cAuDF,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const mediaKind = (attachment) => {
|
|
2
|
+
const mime = attachment.mimeType.toLowerCase();
|
|
3
|
+
if (mime.startsWith("image/"))
|
|
4
|
+
return "image";
|
|
5
|
+
if (mime.startsWith("video/"))
|
|
6
|
+
return "video";
|
|
7
|
+
if (mime.startsWith("audio/"))
|
|
8
|
+
return "audio";
|
|
9
|
+
return mime === "application/pdf" ? "pdf" : undefined;
|
|
10
|
+
};
|
|
11
|
+
const baseMessage = (creator, conversationId) => ({
|
|
12
|
+
additionalKwargs: {},
|
|
13
|
+
attachments: null,
|
|
14
|
+
createTimestamp: 0,
|
|
15
|
+
creator,
|
|
16
|
+
conversationId,
|
|
17
|
+
role: "user",
|
|
18
|
+
});
|
|
19
|
+
const mediaPart = (attachment, kind) => {
|
|
20
|
+
const media = {
|
|
21
|
+
url: attachment.uri,
|
|
22
|
+
mimeType: attachment.mimeType,
|
|
23
|
+
...(attachment.name === undefined ? {} : { name: attachment.name }),
|
|
24
|
+
};
|
|
25
|
+
switch (kind) {
|
|
26
|
+
case "image":
|
|
27
|
+
return { partType: "image_url", imageUrl: media };
|
|
28
|
+
case "video":
|
|
29
|
+
return { partType: "video_url", videoUrl: media };
|
|
30
|
+
case "audio":
|
|
31
|
+
return { partType: "audio_url", audioUrl: media };
|
|
32
|
+
case "pdf":
|
|
33
|
+
return { partType: "pdf_url", pdfUrl: media };
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
/** Maps one normalized user turn to the currently verified TFRobot DTO. */
|
|
37
|
+
export const buildTFRobotOutboundMessage = (input, creator, conversationId) => {
|
|
38
|
+
const base = baseMessage(creator, conversationId);
|
|
39
|
+
const text = input.text ?? "";
|
|
40
|
+
const attachments = input.attachments ?? [];
|
|
41
|
+
const media = attachments.flatMap((attachment) => {
|
|
42
|
+
const kind = mediaKind(attachment);
|
|
43
|
+
return kind === undefined ? [] : [{ attachment, kind }];
|
|
44
|
+
});
|
|
45
|
+
const generic = attachments.filter((attachment) => mediaKind(attachment) === undefined);
|
|
46
|
+
const messages = [];
|
|
47
|
+
if (media.length > 0 && (text.length > 0 || media.length > 1)) {
|
|
48
|
+
messages.push({
|
|
49
|
+
...base,
|
|
50
|
+
msgType: "multipart",
|
|
51
|
+
content: [
|
|
52
|
+
...(text.length === 0 ? [] : [{ partType: "text", text }]),
|
|
53
|
+
...media.map(({ attachment, kind }) => mediaPart(attachment, kind)),
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
for (const { attachment, kind } of media) {
|
|
59
|
+
messages.push({
|
|
60
|
+
...base,
|
|
61
|
+
msgType: kind === "pdf" ? "file" : kind,
|
|
62
|
+
content: attachment.uri,
|
|
63
|
+
...(kind === "image"
|
|
64
|
+
? {
|
|
65
|
+
additionalKwargs: {
|
|
66
|
+
mimeType: attachment.mimeType,
|
|
67
|
+
...(attachment.name === undefined
|
|
68
|
+
? {}
|
|
69
|
+
: { altText: attachment.name }),
|
|
70
|
+
},
|
|
71
|
+
}
|
|
72
|
+
: {}),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (text.length > 0) {
|
|
76
|
+
messages.push({ ...base, msgType: "text", content: text });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
for (const attachment of generic) {
|
|
80
|
+
messages.push({ ...base, msgType: "file", content: attachment.uri });
|
|
81
|
+
}
|
|
82
|
+
if (messages.length === 1)
|
|
83
|
+
return messages[0];
|
|
84
|
+
return {
|
|
85
|
+
...base,
|
|
86
|
+
msgType: "history",
|
|
87
|
+
historyPrefix: "",
|
|
88
|
+
content: messages,
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=outbound-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbound-message.js","sourceRoot":"","sources":["../src/outbound-message.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ToolAttachment, type ToolPresentation } from "@turingfocus/chat-protocol";
|
|
2
|
+
/** Transformed display data never changes the existing origin/result field. */
|
|
3
|
+
export declare function mapToolPresentation(toolReturn: Record<string, unknown>): ToolPresentation | undefined;
|
|
4
|
+
export declare function mapToolAttachments(value: unknown): readonly ToolAttachment[];
|
|
5
|
+
//# sourceMappingURL=presentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;AAiFpC,+EAA+E;AAC/E,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,gBAAgB,GAAG,SAAS,CAM9B;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,cAAc,EAAE,CAoB5E"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { toolAttachmentSchema, toolPresentationSchema, } from "@turingfocus/chat-protocol";
|
|
2
|
+
const record = (value) => value !== null && typeof value === "object" && !Array.isArray(value)
|
|
3
|
+
? value
|
|
4
|
+
: undefined;
|
|
5
|
+
const string = (value) => typeof value === "string" ? value : undefined;
|
|
6
|
+
const decode = (value) => {
|
|
7
|
+
if (typeof value !== "string")
|
|
8
|
+
return value;
|
|
9
|
+
try {
|
|
10
|
+
return JSON.parse(value);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
function presentation(value) {
|
|
17
|
+
const data = record(decode(value));
|
|
18
|
+
if (data === undefined)
|
|
19
|
+
return undefined;
|
|
20
|
+
const content = string(data["content"]);
|
|
21
|
+
const url = string(data["url"]);
|
|
22
|
+
const language = string(data["language"]);
|
|
23
|
+
let candidate;
|
|
24
|
+
if (typeof data["original"] === "string" &&
|
|
25
|
+
typeof data["modified"] === "string") {
|
|
26
|
+
candidate = {
|
|
27
|
+
kind: "editor",
|
|
28
|
+
original: data["original"],
|
|
29
|
+
modified: data["modified"],
|
|
30
|
+
language,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else if (["command", "username", "hostname"].some((key) => key in data) &&
|
|
34
|
+
(content !== undefined ||
|
|
35
|
+
["command", "username", "hostname"].some((key) => typeof data[key] === "string"))) {
|
|
36
|
+
candidate = {
|
|
37
|
+
kind: "shell",
|
|
38
|
+
output: content ?? "",
|
|
39
|
+
command: string(data["command"]),
|
|
40
|
+
username: string(data["username"]),
|
|
41
|
+
hostname: string(data["hostname"]),
|
|
42
|
+
path: string(data["path"]),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
else if (content !== undefined && "language" in data) {
|
|
46
|
+
candidate = { kind: "preview", code: content, language };
|
|
47
|
+
}
|
|
48
|
+
else if (url !== undefined ||
|
|
49
|
+
typeof data["image"] === "string" ||
|
|
50
|
+
content !== undefined) {
|
|
51
|
+
const downloadable = url !== undefined &&
|
|
52
|
+
/\.(?:pdf|zip|xlsx?|docx?|csv|txt|mp[34]|wav|webm)(?:[?#]|$)/i.test(url);
|
|
53
|
+
candidate = downloadable
|
|
54
|
+
? {
|
|
55
|
+
kind: "download",
|
|
56
|
+
resource: {
|
|
57
|
+
uri: url,
|
|
58
|
+
name: string(data["filename"]) ?? string(data["name"]),
|
|
59
|
+
},
|
|
60
|
+
}
|
|
61
|
+
: {
|
|
62
|
+
kind: "browser",
|
|
63
|
+
url,
|
|
64
|
+
markdown: content,
|
|
65
|
+
image: typeof data["image"] === "string"
|
|
66
|
+
? { uri: data["image"] }
|
|
67
|
+
: undefined,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const result = toolPresentationSchema.safeParse(candidate);
|
|
71
|
+
return result.success ? result.data : undefined;
|
|
72
|
+
}
|
|
73
|
+
/** Transformed display data never changes the existing origin/result field. */
|
|
74
|
+
export function mapToolPresentation(toolReturn) {
|
|
75
|
+
const mcp = record(record(toolReturn["meta"])?.["__MCP__"]);
|
|
76
|
+
return (presentation(mcp?.["a2c_vrl_transformed"]) ??
|
|
77
|
+
presentation(toolReturn["origin"]));
|
|
78
|
+
}
|
|
79
|
+
export function mapToolAttachments(value) {
|
|
80
|
+
if (!Array.isArray(value))
|
|
81
|
+
return [];
|
|
82
|
+
return value.slice(0, 100).flatMap((item) => {
|
|
83
|
+
const data = record(item);
|
|
84
|
+
if (data === undefined)
|
|
85
|
+
return [];
|
|
86
|
+
const mimeType = string(data["mimeType"]);
|
|
87
|
+
const category = string(data["category"]) ?? mimeType?.split("/")[0];
|
|
88
|
+
const result = toolAttachmentSchema.safeParse({
|
|
89
|
+
kind: ["image", "audio", "video", "file"].includes(category ?? "")
|
|
90
|
+
? category
|
|
91
|
+
: "unknown",
|
|
92
|
+
resource: {
|
|
93
|
+
uri: data["attachment"],
|
|
94
|
+
mimeType,
|
|
95
|
+
name: string(data["name"]),
|
|
96
|
+
size: data["size"],
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
return result.success ? [result.data] : [];
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=presentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation.js","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"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"}
|
package/dist/redaction.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { type ChatError, type ReadonlyJsonValue } from "@turingfocus/chat-protocol";
|
|
2
|
+
export declare class TransportPayloadError extends TypeError {
|
|
3
|
+
}
|
|
2
4
|
export declare const sanitizeCredentialText: (input: string, credentialValues: Iterable<string>) => string;
|
|
3
5
|
export declare const sanitizeCredentialRaw: (value: unknown, credentialValues: Iterable<string>) => ReadonlyJsonValue;
|
|
6
|
+
/** Redacts transport JSON before mapping, without diagnostic string/total limits. */
|
|
7
|
+
export declare const sanitizeCredentialPayload: (input: unknown, credentialValues: Iterable<string>) => ReadonlyJsonValue;
|
|
4
8
|
export declare const sanitizeCredentialError: (error: ChatError, credentialValues: Iterable<string>) => ChatError;
|
|
5
9
|
//# sourceMappingURL=redaction.d.ts.map
|
package/dist/redaction.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AASpC,qBAAa,qBAAsB,SAAQ,SAAS;CAAG;AAEvD,eAAO,MAAM,sBAAsB,GACjC,OAAO,MAAM,EACb,kBAAkB,QAAQ,CAAC,MAAM,CAAC,KACjC,MASF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,OAAO,OAAO,EACd,kBAAkB,QAAQ,CAAC,MAAM,CAAC,KACjC,iBAC8D,CAAC;AAElE,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,GACpC,OAAO,OAAO,EACd,kBAAkB,QAAQ,CAAC,MAAM,CAAC,KACjC,iBAmFF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,OAAO,SAAS,EAChB,kBAAkB,QAAQ,CAAC,MAAM,CAAC,KACjC,SAcD,CAAC"}
|
package/dist/redaction.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import { sanitizeDiagnosticText, sanitizeRaw, } from "@turingfocus/chat-protocol";
|
|
1
|
+
import { isSensitiveRawKey, sanitizeDiagnosticText, sanitizeRaw, } from "@turingfocus/chat-protocol";
|
|
2
2
|
const REDACTED_VALUE = "[REDACTED]";
|
|
3
|
+
// Transport pages contain many independent model items. Their traversal guard
|
|
4
|
+
// must not impose the diagnostic raw budget on the whole business response.
|
|
5
|
+
const MAX_TRANSPORT_DEPTH = 64;
|
|
6
|
+
const MAX_TRANSPORT_NODES = 100_000;
|
|
7
|
+
export class TransportPayloadError extends TypeError {
|
|
8
|
+
}
|
|
3
9
|
export const sanitizeCredentialText = (input, credentialValues) => {
|
|
4
10
|
let output = sanitizeDiagnosticText(input);
|
|
5
11
|
const uniqueValues = [...new Set(credentialValues)]
|
|
@@ -10,30 +16,75 @@ export const sanitizeCredentialText = (input, credentialValues) => {
|
|
|
10
16
|
}
|
|
11
17
|
return output;
|
|
12
18
|
};
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
value
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
19
|
+
export const sanitizeCredentialRaw = (value, credentialValues) => sanitizeCredentialPayload(sanitizeRaw(value), credentialValues);
|
|
20
|
+
/** Redacts transport JSON before mapping, without diagnostic string/total limits. */
|
|
21
|
+
export const sanitizeCredentialPayload = (input, credentialValues) => {
|
|
22
|
+
const credentials = [...credentialValues];
|
|
23
|
+
const ancestors = new WeakSet();
|
|
24
|
+
let nodes = 0;
|
|
25
|
+
const visit = (value, depth) => {
|
|
26
|
+
nodes += 1;
|
|
27
|
+
if (nodes > MAX_TRANSPORT_NODES || depth > MAX_TRANSPORT_DEPTH) {
|
|
28
|
+
throw new TransportPayloadError("TFRobot payload exceeds transport structure limits (100000 nodes or depth 64)");
|
|
29
|
+
}
|
|
30
|
+
if (typeof value === "string") {
|
|
31
|
+
return sanitizeCredentialText(value, credentials);
|
|
32
|
+
}
|
|
33
|
+
if (value === null || typeof value === "boolean")
|
|
34
|
+
return value;
|
|
35
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
36
|
+
return value;
|
|
37
|
+
if (typeof value !== "object") {
|
|
38
|
+
throw new TransportPayloadError("TFRobot payload must contain valid JSON values");
|
|
39
|
+
}
|
|
40
|
+
if (ancestors.has(value)) {
|
|
41
|
+
throw new TransportPayloadError("TFRobot payload must not contain circular references");
|
|
42
|
+
}
|
|
43
|
+
ancestors.add(value);
|
|
44
|
+
try {
|
|
45
|
+
if (Array.isArray(value)) {
|
|
46
|
+
if (value.length > MAX_TRANSPORT_NODES - nodes) {
|
|
47
|
+
throw new TransportPayloadError("TFRobot payload exceeds transport node limit (100000)");
|
|
48
|
+
}
|
|
49
|
+
const headerTuple = value.length === 2 &&
|
|
50
|
+
typeof value[0] === "string" &&
|
|
51
|
+
isSensitiveRawKey(value[0]);
|
|
52
|
+
const output = [];
|
|
53
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
54
|
+
if (!Object.hasOwn(value, index)) {
|
|
55
|
+
throw new TransportPayloadError("TFRobot payload arrays must not be sparse");
|
|
56
|
+
}
|
|
57
|
+
output.push(visit(headerTuple && index === 1 ? REDACTED_VALUE : value[index], depth + 1));
|
|
58
|
+
}
|
|
59
|
+
return Object.freeze(output);
|
|
60
|
+
}
|
|
61
|
+
const prototype = Object.getPrototypeOf(value);
|
|
62
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
63
|
+
throw new TransportPayloadError("TFRobot payload must contain plain JSON objects");
|
|
64
|
+
}
|
|
65
|
+
const output = {};
|
|
66
|
+
for (const key of Object.keys(value)) {
|
|
67
|
+
const safeKey = sanitizeCredentialText(key, credentials);
|
|
68
|
+
const entry = visit(isSensitiveRawKey(key)
|
|
69
|
+
? REDACTED_VALUE
|
|
70
|
+
: value[key], depth + 1);
|
|
71
|
+
if (Object.hasOwn(output, safeKey))
|
|
72
|
+
continue;
|
|
73
|
+
Object.defineProperty(output, safeKey, {
|
|
74
|
+
value: entry,
|
|
75
|
+
enumerable: true,
|
|
76
|
+
configurable: false,
|
|
77
|
+
writable: false,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return Object.freeze(output);
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
ancestors.delete(value);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
return visit(input, 0);
|
|
35
87
|
};
|
|
36
|
-
export const sanitizeCredentialRaw = (value, credentialValues) => redactJsonValue(sanitizeRaw(value), credentialValues);
|
|
37
88
|
export const sanitizeCredentialError = (error, credentialValues) => ({
|
|
38
89
|
...error,
|
|
39
90
|
message: sanitizeCredentialText(error.message, credentialValues),
|
package/dist/redaction.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,WAAW,GAGZ,MAAM,4BAA4B,CAAC;AAEpC,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAAa,EACb,gBAAkC,EAC1B,EAAE;IACV,IAAI,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;SAChD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACnC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"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"}
|
package/dist/socket.d.ts
CHANGED
|
@@ -1,16 +1,34 @@
|
|
|
1
1
|
import { io } from "socket.io-client";
|
|
2
|
-
import { type GatewayObserver, type GatewayRequestOptions, type GatewayResult, type GatewaySubscription, type Run } from "@turingfocus/chat-protocol";
|
|
2
|
+
import { type ChatSnapshot, type ChatUpdate, type GatewayObserver, type GatewayRequestOptions, type GatewayResult, type GatewaySubscription, type Run } from "@turingfocus/chat-protocol";
|
|
3
3
|
import type { StatusDto } from "./dto.js";
|
|
4
|
-
import type { TFRobotGatewayOptions, TFRobotSocketFactory } from "./types.js";
|
|
4
|
+
import type { ResolvedTFRobotCurrentServerRebaseOptions, TFRobotGatewayOptions, TFRobotSession, TFRobotSocketFactory } from "./types.js";
|
|
5
5
|
export declare const createSocketIoFactoryWith: (connect: typeof io) => TFRobotSocketFactory;
|
|
6
6
|
export declare const createSocketIoFactory: TFRobotSocketFactory;
|
|
7
7
|
type ReconnectStatusLoader = (conversationId: string) => Promise<GatewayResult<StatusDto>>;
|
|
8
|
+
export interface CurrentServerRestInput extends GatewayRequestOptions {
|
|
9
|
+
readonly checkpoint: ReadonlySet<string>;
|
|
10
|
+
readonly conversationId: string;
|
|
11
|
+
readonly limits: ResolvedTFRobotCurrentServerRebaseOptions;
|
|
12
|
+
readonly session: TFRobotSession;
|
|
13
|
+
readonly signal: AbortSignal;
|
|
14
|
+
}
|
|
15
|
+
export interface CurrentServerRestSnapshot {
|
|
16
|
+
readonly boundedBy?: "cursor-cycle" | "max-items" | "max-pages" | undefined;
|
|
17
|
+
readonly checkpointReached: boolean;
|
|
18
|
+
readonly exhausted: boolean;
|
|
19
|
+
readonly run: Run | null;
|
|
20
|
+
readonly updates: readonly ChatUpdate[];
|
|
21
|
+
}
|
|
22
|
+
export type CurrentServerRestLoader = (input: CurrentServerRestInput) => Promise<GatewayResult<CurrentServerRestSnapshot>>;
|
|
23
|
+
export declare const recoveryIdentityOfUpdate: (update: ChatUpdate) => string | undefined;
|
|
8
24
|
export declare class TFRobotSocketClient {
|
|
9
25
|
#private;
|
|
10
|
-
constructor(options: TFRobotGatewayOptions, reconnectStatusLoader: ReconnectStatusLoader);
|
|
26
|
+
constructor(options: TFRobotGatewayOptions, reconnectStatusLoader: ReconnectStatusLoader, currentServerRestLoader: CurrentServerRestLoader);
|
|
11
27
|
subscribe(conversationId: string, options: GatewayRequestOptions, observer: GatewayObserver): Promise<GatewayResult<GatewaySubscription>>;
|
|
12
28
|
dispose(): void;
|
|
29
|
+
rememberSnapshot(snapshot: ChatSnapshot): void;
|
|
13
30
|
rememberRun(conversationId: string, run: Run | null): void;
|
|
31
|
+
forgetConversation(conversationId: string): void;
|
|
14
32
|
}
|
|
15
33
|
export {};
|
|
16
34
|
//# sourceMappingURL=socket.d.ts.map
|
package/dist/socket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtC,OAAO,EASL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,GAAG,EAET,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtC,OAAO,EASL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,GAAG,EAET,MAAM,4BAA4B,CAAC;AAyBpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EACV,yCAAyC,EAEzC,qBAAqB,EACrB,cAAc,EAId,oBAAoB,EAErB,MAAM,YAAY,CAAC;AA4QpB,eAAO,MAAM,yBAAyB,GACnC,SAAS,OAAO,EAAE,KAAG,oBAYU,CAAC;AAEnC,eAAO,MAAM,qBAAqB,sBAAgC,CAAC;AAuBnE,KAAK,qBAAqB,GAAG,CAC3B,cAAc,EAAE,MAAM,KACnB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;AAkCvC,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,yCAAyC,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5E,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC;AAED,MAAM,MAAM,uBAAuB,GAAG,CACpC,KAAK,EAAE,sBAAsB,KAC1B,OAAO,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAEvD,eAAO,MAAM,wBAAwB,GACnC,QAAQ,UAAU,KACjB,MAAM,GAAG,SAQX,CAAC;AAaF,qBAAa,mBAAmB;;gBAwB5B,OAAO,EAAE,qBAAqB,EAC9B,qBAAqB,EAAE,qBAAqB,EAC5C,uBAAuB,EAAE,uBAAuB;IAa5C,SAAS,CACb,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IA00C9C,OAAO,IAAI,IAAI;IAaf,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAY9C,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IAK1D,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;CAyLjD"}
|