@falai/agent 3.2.0 → 3.2.2
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/cjs/core/ResponseModal.d.ts +14 -7
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +52 -20
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -1
- package/dist/cjs/providers/ProviderAdapter.js +20 -8
- package/dist/cjs/providers/ProviderAdapter.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +1 -1
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +2 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/json.d.ts +22 -0
- package/dist/cjs/utils/json.d.ts.map +1 -1
- package/dist/cjs/utils/json.js +156 -1
- package/dist/cjs/utils/json.js.map +1 -1
- package/dist/core/ResponseModal.d.ts +14 -7
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +53 -21
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/providers/ProviderAdapter.d.ts.map +1 -1
- package/dist/providers/ProviderAdapter.js +20 -8
- package/dist/providers/ProviderAdapter.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/json.d.ts +22 -0
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js +154 -1
- package/dist/utils/json.js.map +1 -1
- package/package.json +1 -1
- package/src/core/ResponseModal.ts +59 -28
- package/src/providers/ProviderAdapter.ts +21 -7
- package/src/utils/index.ts +1 -1
- package/src/utils/json.ts +153 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderAdapter.js","sourceRoot":"","sources":["../../src/providers/ProviderAdapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ProviderAdapter.js","sourceRoot":"","sources":["../../src/providers/ProviderAdapter.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -10,6 +10,6 @@ export { historyItemToEvent, historyToEvents, eventToHistoryItem, eventsToHistor
|
|
|
10
10
|
export { LoggerLevel, logger } from "./logger.js";
|
|
11
11
|
export { effectiveMessageText, assertUsableCompletion } from "./completion.js";
|
|
12
12
|
export { ConditionEvaluator, createConditionEvaluator, extractAIContextStrings, hasProgrammaticConditions, } from "./condition.js";
|
|
13
|
-
export { parseJSONResponse, tryParseJSONResponse } from "./json.js";
|
|
13
|
+
export { parseJSONResponse, tryParseJSONResponse, extractEmbeddedJSONObject } from "./json.js";
|
|
14
14
|
export { serializeToolResult, isToolResultLike, extractResultDirectives } from "./serialize.js";
|
|
15
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAG/F,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -20,7 +20,7 @@ export { effectiveMessageText, assertUsableCompletion } from "./completion.js";
|
|
|
20
20
|
// Condition utilities
|
|
21
21
|
export { ConditionEvaluator, createConditionEvaluator, extractAIContextStrings, hasProgrammaticConditions, } from "./condition.js";
|
|
22
22
|
// JSON utilities
|
|
23
|
-
export { parseJSONResponse, tryParseJSONResponse } from "./json.js";
|
|
23
|
+
export { parseJSONResponse, tryParseJSONResponse, extractEmbeddedJSONObject } from "./json.js";
|
|
24
24
|
// Serialization utilities
|
|
25
25
|
export { serializeToolResult, isToolResultLike, extractResultDirectives } from "./serialize.js";
|
|
26
26
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gBAAgB;AAChB,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,qBAAqB;AACrB,OAAO,EACL,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,qBAAqB;AACrB,OAAO,EACL,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,oBAAoB;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,kBAAkB;AAClB,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAElD,qBAAqB;AACrB,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AAExB,iBAAiB;AACjB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gBAAgB;AAChB,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,qBAAqB;AACrB,OAAO,EACL,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,qBAAqB;AACrB,OAAO,EACL,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,oBAAoB;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,kBAAkB;AAClB,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAElD,qBAAqB;AACrB,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AAExB,iBAAiB;AACjB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAE/F,0BAA0B;AAC1B,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/utils/json.d.ts
CHANGED
|
@@ -1,16 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* JSON parsing utilities
|
|
3
3
|
*/
|
|
4
|
+
/**
|
|
5
|
+
* Whether text is shaped like a protocol envelope rather than a reply to a
|
|
6
|
+
* person — an opening brace or a code fence. Text that fails to parse AND
|
|
7
|
+
* looks like this is never user-worthy: it is a broken envelope, and showing
|
|
8
|
+
* it is the leak this module exists to prevent.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isJSONShaped(text: string): boolean;
|
|
4
11
|
/**
|
|
5
12
|
* Clean and parse JSON response that might be wrapped in markdown code blocks
|
|
6
13
|
* Handles cases like:
|
|
7
14
|
* - ```json\n{...}\n```
|
|
8
15
|
* - ```\n{...}\n```
|
|
9
16
|
* - Plain JSON: {...}
|
|
17
|
+
* - An object whose string values carry unescaped newlines
|
|
10
18
|
*/
|
|
11
19
|
export declare function parseJSONResponse(text: string): unknown;
|
|
12
20
|
/**
|
|
13
21
|
* Safely parse JSON response, returning undefined on failure
|
|
14
22
|
*/
|
|
15
23
|
export declare function tryParseJSONResponse(text: string): unknown;
|
|
24
|
+
/**
|
|
25
|
+
* Find a complete JSON object embedded in surrounding text.
|
|
26
|
+
*
|
|
27
|
+
* {@link parseJSONResponse} requires the WHOLE string to be the object. A model
|
|
28
|
+
* told to answer in JSON sometimes answers twice instead — the conversational
|
|
29
|
+
* text for the user, and then the protocol envelope repeating it — and such a
|
|
30
|
+
* turn parses as nothing, so the envelope travels on as user-visible content.
|
|
31
|
+
* This scans for the first balanced `{...}` that parses as an object, ignoring
|
|
32
|
+
* braces that sit inside string literals.
|
|
33
|
+
*
|
|
34
|
+
* Returns `undefined` when no complete object is present (prose that merely
|
|
35
|
+
* contains a brace, or an envelope truncated before its closing brace).
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractEmbeddedJSONObject(text: string): Record<string, unknown> | undefined;
|
|
16
38
|
//# sourceMappingURL=json.d.ts.map
|
package/dist/utils/json.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkFH;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAuBvD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAM1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAkB3F"}
|
package/dist/utils/json.js
CHANGED
|
@@ -1,12 +1,104 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* JSON parsing utilities
|
|
3
3
|
*/
|
|
4
|
+
/** JSON's own short escapes for the control characters a model actually types. */
|
|
5
|
+
const CONTROL_ESCAPES = {
|
|
6
|
+
"\n": "\\n",
|
|
7
|
+
"\r": "\\r",
|
|
8
|
+
"\t": "\\t",
|
|
9
|
+
"\b": "\\b",
|
|
10
|
+
"\f": "\\f",
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Escape the raw control characters a model left unescaped inside a string
|
|
14
|
+
* literal.
|
|
15
|
+
*
|
|
16
|
+
* JSON forbids a literal newline between quotes. A model whose decoder is
|
|
17
|
+
* pinned to the schema cannot break that rule, but one merely ASKED for the
|
|
18
|
+
* envelope in its prompt — which is how a schema rides on any call that also
|
|
19
|
+
* carries tools — breaks it constantly, because it pretty-prints the reply it
|
|
20
|
+
* would have sent:
|
|
21
|
+
*
|
|
22
|
+
* {
|
|
23
|
+
* "message": "Boa escolha!
|
|
24
|
+
* À vista: R$ 3.149"
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* `JSON.parse` calls that an unterminated string and gives up, and the whole
|
|
28
|
+
* envelope travels on as the user-visible reply. Re-escaping the control
|
|
29
|
+
* characters makes it parse into exactly what the model meant.
|
|
30
|
+
*
|
|
31
|
+
* A string ends at the next unescaped quote, so a stray quote inside the
|
|
32
|
+
* message shifts the boundary and the result fails to parse. That is the
|
|
33
|
+
* intended outcome: a wrong guess must never become a reply.
|
|
34
|
+
*/
|
|
35
|
+
function escapeControlCharsInStrings(text) {
|
|
36
|
+
let out = "";
|
|
37
|
+
let inString = false;
|
|
38
|
+
let escaped = false;
|
|
39
|
+
for (const ch of text) {
|
|
40
|
+
if (!inString) {
|
|
41
|
+
if (ch === '"')
|
|
42
|
+
inString = true;
|
|
43
|
+
out += ch;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (escaped) {
|
|
47
|
+
escaped = false;
|
|
48
|
+
out += ch;
|
|
49
|
+
}
|
|
50
|
+
else if (ch === "\\") {
|
|
51
|
+
escaped = true;
|
|
52
|
+
out += ch;
|
|
53
|
+
}
|
|
54
|
+
else if (ch === '"') {
|
|
55
|
+
inString = false;
|
|
56
|
+
out += ch;
|
|
57
|
+
}
|
|
58
|
+
else if (ch < " ") {
|
|
59
|
+
out += CONTROL_ESCAPES[ch] ?? `\\u${ch.charCodeAt(0).toString(16).padStart(4, "0")}`;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
out += ch;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Parse strictly, then once more with {@link escapeControlCharsInStrings}.
|
|
69
|
+
* Throws when neither reading is valid JSON.
|
|
70
|
+
*/
|
|
71
|
+
function parseLenient(text) {
|
|
72
|
+
try {
|
|
73
|
+
return JSON.parse(text);
|
|
74
|
+
}
|
|
75
|
+
catch (strictError) {
|
|
76
|
+
try {
|
|
77
|
+
return JSON.parse(escapeControlCharsInStrings(text));
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// The repair is a second reading of the same text, not a different
|
|
81
|
+
// dialect — so the first violation is the one worth reporting.
|
|
82
|
+
throw strictError;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Whether text is shaped like a protocol envelope rather than a reply to a
|
|
88
|
+
* person — an opening brace or a code fence. Text that fails to parse AND
|
|
89
|
+
* looks like this is never user-worthy: it is a broken envelope, and showing
|
|
90
|
+
* it is the leak this module exists to prevent.
|
|
91
|
+
*/
|
|
92
|
+
export function isJSONShaped(text) {
|
|
93
|
+
return /^\s*(```|\{)/.test(text);
|
|
94
|
+
}
|
|
4
95
|
/**
|
|
5
96
|
* Clean and parse JSON response that might be wrapped in markdown code blocks
|
|
6
97
|
* Handles cases like:
|
|
7
98
|
* - ```json\n{...}\n```
|
|
8
99
|
* - ```\n{...}\n```
|
|
9
100
|
* - Plain JSON: {...}
|
|
101
|
+
* - An object whose string values carry unescaped newlines
|
|
10
102
|
*/
|
|
11
103
|
export function parseJSONResponse(text) {
|
|
12
104
|
if (!text || typeof text !== 'string') {
|
|
@@ -23,7 +115,7 @@ export function parseJSONResponse(text) {
|
|
|
23
115
|
}
|
|
24
116
|
// Try to parse the cleaned JSON
|
|
25
117
|
try {
|
|
26
|
-
return
|
|
118
|
+
return parseLenient(cleaned);
|
|
27
119
|
}
|
|
28
120
|
catch (error) {
|
|
29
121
|
throw new Error(`Failed to parse JSON response: ${error instanceof Error ? error.message : String(error)}\nContent: ${cleaned.substring(0, 200)}...`);
|
|
@@ -40,4 +132,65 @@ export function tryParseJSONResponse(text) {
|
|
|
40
132
|
return undefined;
|
|
41
133
|
}
|
|
42
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Find a complete JSON object embedded in surrounding text.
|
|
137
|
+
*
|
|
138
|
+
* {@link parseJSONResponse} requires the WHOLE string to be the object. A model
|
|
139
|
+
* told to answer in JSON sometimes answers twice instead — the conversational
|
|
140
|
+
* text for the user, and then the protocol envelope repeating it — and such a
|
|
141
|
+
* turn parses as nothing, so the envelope travels on as user-visible content.
|
|
142
|
+
* This scans for the first balanced `{...}` that parses as an object, ignoring
|
|
143
|
+
* braces that sit inside string literals.
|
|
144
|
+
*
|
|
145
|
+
* Returns `undefined` when no complete object is present (prose that merely
|
|
146
|
+
* contains a brace, or an envelope truncated before its closing brace).
|
|
147
|
+
*/
|
|
148
|
+
export function extractEmbeddedJSONObject(text) {
|
|
149
|
+
if (!text)
|
|
150
|
+
return undefined;
|
|
151
|
+
for (let start = text.indexOf("{"); start !== -1; start = text.indexOf("{", start + 1)) {
|
|
152
|
+
const end = findObjectEnd(text, start);
|
|
153
|
+
if (end === -1)
|
|
154
|
+
continue;
|
|
155
|
+
try {
|
|
156
|
+
const parsed = parseLenient(text.slice(start, end + 1));
|
|
157
|
+
if (parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
158
|
+
return parsed;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Not an object after all — keep scanning for a later candidate.
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Index of the `}` closing the object that opens at `start`, or -1 when the
|
|
169
|
+
* text ends first. Quotes and their escapes are tracked so a brace inside a
|
|
170
|
+
* string value never opens or closes a level.
|
|
171
|
+
*/
|
|
172
|
+
function findObjectEnd(text, start) {
|
|
173
|
+
let depth = 0;
|
|
174
|
+
let inString = false;
|
|
175
|
+
let escaped = false;
|
|
176
|
+
for (let i = start; i < text.length; i++) {
|
|
177
|
+
const ch = text[i];
|
|
178
|
+
if (inString) {
|
|
179
|
+
if (escaped)
|
|
180
|
+
escaped = false;
|
|
181
|
+
else if (ch === "\\")
|
|
182
|
+
escaped = true;
|
|
183
|
+
else if (ch === '"')
|
|
184
|
+
inString = false;
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
if (ch === '"')
|
|
188
|
+
inString = true;
|
|
189
|
+
else if (ch === "{")
|
|
190
|
+
depth++;
|
|
191
|
+
else if (ch === "}" && --depth === 0)
|
|
192
|
+
return i;
|
|
193
|
+
}
|
|
194
|
+
return -1;
|
|
195
|
+
}
|
|
43
196
|
//# sourceMappingURL=json.js.map
|
package/dist/utils/json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -45,7 +45,7 @@ import { ProviderError, SessionConflictError } from "../types/errors.js";
|
|
|
45
45
|
import { cloneDeep, mergeCollected, logger, historyToEvents, completeCurrentFlow, render, userMessage, assistantMessage } from "../utils/index.js";
|
|
46
46
|
import { createTemplateContext } from "../utils/template.js";
|
|
47
47
|
import { StreamingMessageDecoder } from "../utils/streamingMessage.js";
|
|
48
|
-
import { tryParseJSONResponse } from "../utils/json.js";
|
|
48
|
+
import { extractEmbeddedJSONObject, isJSONShaped, tryParseJSONResponse } from "../utils/json.js";
|
|
49
49
|
import type { ToolManager } from "./ToolManager.js";
|
|
50
50
|
|
|
51
51
|
/**
|
|
@@ -459,31 +459,46 @@ export class ResponseModal<TContext = unknown, TData = unknown> {
|
|
|
459
459
|
}
|
|
460
460
|
|
|
461
461
|
/**
|
|
462
|
-
*
|
|
463
|
-
*
|
|
464
|
-
*
|
|
465
|
-
*
|
|
466
|
-
*
|
|
467
|
-
*
|
|
468
|
-
*
|
|
462
|
+
* Recover a structured payload from a schema-mandated response the provider
|
|
463
|
+
* could not parse. Raw protocol fragments must never surface as the
|
|
464
|
+
* user-visible reply. Three shapes arrive here:
|
|
465
|
+
* - a truncated or fence-wrapped envelope → one repair-parse;
|
|
466
|
+
* - conversational prose FOLLOWED BY the envelope (the model answered
|
|
467
|
+
* twice — the observed WhatsApp leak) → recover the embedded envelope,
|
|
468
|
+
* whose "message" field is the complete intended reply;
|
|
469
|
+
* - plain prose with nothing recoverable → `undefined`; the caller passes
|
|
470
|
+
* it through untouched. (An envelope truncated mid-stream after prose
|
|
471
|
+
* also lands here: the prose is user-worthy and the fragment carries
|
|
472
|
+
* nothing recoverable.)
|
|
473
|
+
* An unrecoverable JSON-SHAPED fragment throws so the turn fails LOUDLY
|
|
474
|
+
* and the caller's rollback/retry path engages instead of leaking
|
|
475
|
+
* `{"message": "…` to an end user.
|
|
469
476
|
*/
|
|
470
477
|
private salvageStructuredOutput(
|
|
471
478
|
raw: string,
|
|
472
479
|
surface: "turn" | "stream"
|
|
473
|
-
): AgentStructuredResponse {
|
|
480
|
+
): AgentStructuredResponse | undefined {
|
|
474
481
|
const salvaged = tryParseJSONResponse(raw) as Partial<AgentStructuredResponse> | undefined;
|
|
475
482
|
if (salvaged && typeof salvaged.message === "string") {
|
|
476
483
|
logger.warn(`[ResponseModal] Salvaged malformed structured output from ${surface} via JSON repair parse.`);
|
|
477
484
|
return { ...salvaged, message: salvaged.message };
|
|
478
485
|
}
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
486
|
+
const embedded = extractEmbeddedJSONObject(raw) as Partial<AgentStructuredResponse> | undefined;
|
|
487
|
+
if (embedded && typeof embedded.message === "string") {
|
|
488
|
+
logger.warn(`[ResponseModal] Salvaged structured output embedded after prose from ${surface}.`);
|
|
489
|
+
return { ...embedded, message: embedded.message };
|
|
490
|
+
}
|
|
491
|
+
if (isJSONShaped(raw)) {
|
|
492
|
+
throw ResponseGenerationError.fromError(
|
|
493
|
+
new Error(
|
|
494
|
+
"Model returned a schema-mandated response that could not be parsed as JSON. " +
|
|
495
|
+
`The ${surface} was failed instead of delivering raw protocol output to the user.`
|
|
496
|
+
),
|
|
497
|
+
'structured_output_malformed',
|
|
498
|
+
{ responseSchemaName: 'response_output' }
|
|
499
|
+
);
|
|
500
|
+
}
|
|
501
|
+
return undefined;
|
|
487
502
|
}
|
|
488
503
|
|
|
489
504
|
/**
|
|
@@ -1073,10 +1088,12 @@ export class ResponseModal<TContext = unknown, TData = unknown> {
|
|
|
1073
1088
|
// rollback/retry path engages instead of leaking `{"message": "…` to
|
|
1074
1089
|
// an end user. Plain prose (not JSON-shaped at all) still passes
|
|
1075
1090
|
// through — it is not a protocol fragment.
|
|
1076
|
-
if (!structuredData && responseSchema && message
|
|
1091
|
+
if (!structuredData && responseSchema && message) {
|
|
1077
1092
|
const salvaged = this.salvageStructuredOutput(message, "turn");
|
|
1078
|
-
|
|
1079
|
-
|
|
1093
|
+
if (salvaged) {
|
|
1094
|
+
structuredData = salvaged;
|
|
1095
|
+
message = salvaged.message;
|
|
1096
|
+
}
|
|
1080
1097
|
}
|
|
1081
1098
|
|
|
1082
1099
|
const effectiveResult = structuredData ? { ...result, structured: structuredData } : result;
|
|
@@ -1097,8 +1114,19 @@ export class ResponseModal<TContext = unknown, TData = unknown> {
|
|
|
1097
1114
|
|
|
1098
1115
|
session = toolResult.session;
|
|
1099
1116
|
toolCalls = toolResult.finalToolCalls;
|
|
1117
|
+
let toolStructured = toolResult.structured;
|
|
1100
1118
|
if (toolResult.finalMessage) {
|
|
1101
|
-
|
|
1119
|
+
// The tool loop's follow-up calls carry the SAME response schema,
|
|
1120
|
+
// and their message replaces the one the guard above already
|
|
1121
|
+
// cleared — so an envelope produced after the tools ran reaches
|
|
1122
|
+
// the user through a path that guard never sees. (Observed
|
|
1123
|
+
// 2026-09-11: a catalog lookup answered, then the closing call
|
|
1124
|
+
// returned `{"message": "…"}` raw to a WhatsApp customer.)
|
|
1125
|
+
const salvaged = responseSchema
|
|
1126
|
+
? this.salvageStructuredOutput(toolResult.finalMessage, "turn")
|
|
1127
|
+
: undefined;
|
|
1128
|
+
message = salvaged?.message ?? toolResult.finalMessage;
|
|
1129
|
+
if (salvaged) toolStructured = salvaged;
|
|
1102
1130
|
}
|
|
1103
1131
|
|
|
1104
1132
|
// Tool-emitted directives (ctx.dispatch / `{directive}` returns):
|
|
@@ -1110,8 +1138,8 @@ export class ResponseModal<TContext = unknown, TData = unknown> {
|
|
|
1110
1138
|
|
|
1111
1139
|
// Collect data from response
|
|
1112
1140
|
// Use follow-up structured data from tool loop when available, fall back to original result
|
|
1113
|
-
const dataSource =
|
|
1114
|
-
? { structured:
|
|
1141
|
+
const dataSource = toolStructured
|
|
1142
|
+
? { structured: toolStructured }
|
|
1115
1143
|
: effectiveResult;
|
|
1116
1144
|
session = await this.collectDataFromResponse({ result: dataSource, selectedFlow, nextStep, session });
|
|
1117
1145
|
|
|
@@ -1467,12 +1495,15 @@ export class ResponseModal<TContext = unknown, TData = unknown> {
|
|
|
1467
1495
|
// requested but no structured payload arrived, and the accumulated
|
|
1468
1496
|
// text is JSON-shaped (a protocol fragment) — repair-parse it or
|
|
1469
1497
|
// fail the turn rather than leaking raw output to the user.
|
|
1470
|
-
if (chunk.done && !finalStructured && responseSchema && finalAccumulated
|
|
1498
|
+
if (chunk.done && !finalStructured && responseSchema && finalAccumulated) {
|
|
1471
1499
|
const salvaged = this.salvageStructuredOutput(finalAccumulated, "stream");
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1500
|
+
if (salvaged) {
|
|
1501
|
+
finalDelta = salvaged.message.startsWith(finalAccumulated)
|
|
1502
|
+
? salvaged.message.slice(finalAccumulated.length)
|
|
1503
|
+
: salvaged.message;
|
|
1504
|
+
finalStructured = salvaged;
|
|
1505
|
+
finalAccumulated = salvaged.message;
|
|
1506
|
+
}
|
|
1476
1507
|
}
|
|
1477
1508
|
|
|
1478
1509
|
// Collect data on the final chunk for any flow step — flow
|
|
@@ -49,6 +49,7 @@ import type {
|
|
|
49
49
|
} from "../types/ai.js";
|
|
50
50
|
import type { HistoryItem } from "../types/history.js";
|
|
51
51
|
import { assertUsableCompletion } from "../utils/completion.js";
|
|
52
|
+
import { isJSONShaped, tryParseJSONResponse } from "../utils/json.js";
|
|
52
53
|
import { logger } from "../utils/logger.js";
|
|
53
54
|
|
|
54
55
|
/** Provider timeout (ms) + retry count, after defaults are applied. */
|
|
@@ -360,16 +361,27 @@ export abstract class ProviderAdapter implements AiProvider {
|
|
|
360
361
|
const toolCalls = toolCallsOf(acc, this.name);
|
|
361
362
|
let structured: TStructured | undefined;
|
|
362
363
|
if (json && acc.text) {
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
364
|
+
// Lenient on purpose. `JSON.parse` alone rejects the envelope a model
|
|
365
|
+
// writes when the schema rode in its PROMPT rather than pinning the
|
|
366
|
+
// decoder — pretty-printed, with raw newlines inside the message string.
|
|
367
|
+
// Every caller reads `structured?.message || message`, so a parse that
|
|
368
|
+
// gives up here hands the raw protocol to the user as their reply.
|
|
369
|
+
structured = tryParseJSONResponse(acc.text) as TStructured | undefined;
|
|
370
|
+
if (!structured) {
|
|
371
|
+
logger.warn(`[${this.name}] Failed to parse JSON response (${acc.text.length} chars).`);
|
|
367
372
|
}
|
|
368
373
|
}
|
|
374
|
+
// An envelope that did not parse is not text, and must not be offered as
|
|
375
|
+
// any part of the turn's reply. Every caller reads
|
|
376
|
+
// `structured?.message || message`, so whichever of those two still holds
|
|
377
|
+
// the raw bytes is what a customer ends up reading. A preamble beside a
|
|
378
|
+
// tool call ("deixa eu ver aqui") is real text and stays.
|
|
379
|
+
const text = json && !structured && isJSONShaped(acc.text) ? "" : acc.text;
|
|
380
|
+
|
|
369
381
|
if (toolCalls.length > 0) {
|
|
370
382
|
structured = {
|
|
371
383
|
...(structured ?? {}),
|
|
372
|
-
message: (structured as AgentStructuredResponse | undefined)?.message ||
|
|
384
|
+
message: (structured as AgentStructuredResponse | undefined)?.message || text,
|
|
373
385
|
toolCalls,
|
|
374
386
|
} as TStructured;
|
|
375
387
|
}
|
|
@@ -377,11 +389,13 @@ export abstract class ProviderAdapter implements AiProvider {
|
|
|
377
389
|
// A parsed-but-blank message with no tool calls is as empty as no text. The
|
|
378
390
|
// stream guard upstream only knows about chunks; this one knows what the
|
|
379
391
|
// turn was FOR, and a turn that produced `{"message":""}` did not do it.
|
|
380
|
-
|
|
392
|
+
// A dropped envelope with no tool calls to fall back on lands here too: the
|
|
393
|
+
// turn fails loudly and the caller's retry/fallback path engages.
|
|
394
|
+
assertUsableCompletion(structured, text, toolCalls.length, this.name);
|
|
381
395
|
|
|
382
396
|
yield {
|
|
383
397
|
delta: "",
|
|
384
|
-
accumulated:
|
|
398
|
+
accumulated: text,
|
|
385
399
|
done: true,
|
|
386
400
|
metadata: {
|
|
387
401
|
model: acc.model,
|
package/src/utils/index.ts
CHANGED
|
@@ -69,7 +69,7 @@ export {
|
|
|
69
69
|
} from "./condition.js";
|
|
70
70
|
|
|
71
71
|
// JSON utilities
|
|
72
|
-
export { parseJSONResponse, tryParseJSONResponse } from "./json.js";
|
|
72
|
+
export { parseJSONResponse, tryParseJSONResponse, extractEmbeddedJSONObject } from "./json.js";
|
|
73
73
|
|
|
74
74
|
// Serialization utilities
|
|
75
75
|
export { serializeToolResult, isToolResultLike, extractResultDirectives } from "./serialize.js";
|