@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.
Files changed (35) hide show
  1. package/dist/cjs/core/ResponseModal.d.ts +14 -7
  2. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  3. package/dist/cjs/core/ResponseModal.js +52 -20
  4. package/dist/cjs/core/ResponseModal.js.map +1 -1
  5. package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -1
  6. package/dist/cjs/providers/ProviderAdapter.js +20 -8
  7. package/dist/cjs/providers/ProviderAdapter.js.map +1 -1
  8. package/dist/cjs/utils/index.d.ts +1 -1
  9. package/dist/cjs/utils/index.d.ts.map +1 -1
  10. package/dist/cjs/utils/index.js +2 -1
  11. package/dist/cjs/utils/index.js.map +1 -1
  12. package/dist/cjs/utils/json.d.ts +22 -0
  13. package/dist/cjs/utils/json.d.ts.map +1 -1
  14. package/dist/cjs/utils/json.js +156 -1
  15. package/dist/cjs/utils/json.js.map +1 -1
  16. package/dist/core/ResponseModal.d.ts +14 -7
  17. package/dist/core/ResponseModal.d.ts.map +1 -1
  18. package/dist/core/ResponseModal.js +53 -21
  19. package/dist/core/ResponseModal.js.map +1 -1
  20. package/dist/providers/ProviderAdapter.d.ts.map +1 -1
  21. package/dist/providers/ProviderAdapter.js +20 -8
  22. package/dist/providers/ProviderAdapter.js.map +1 -1
  23. package/dist/utils/index.d.ts +1 -1
  24. package/dist/utils/index.d.ts.map +1 -1
  25. package/dist/utils/index.js +1 -1
  26. package/dist/utils/index.js.map +1 -1
  27. package/dist/utils/json.d.ts +22 -0
  28. package/dist/utils/json.d.ts.map +1 -1
  29. package/dist/utils/json.js +154 -1
  30. package/dist/utils/json.js.map +1 -1
  31. package/package.json +1 -1
  32. package/src/core/ResponseModal.ts +59 -28
  33. package/src/providers/ProviderAdapter.ts +21 -7
  34. package/src/utils/index.ts +1 -1
  35. package/src/utils/json.ts +153 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderAdapter.js","sourceRoot":"","sources":["../../src/providers/ProviderAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,eAAe,GAUhB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAkB5C,MAAM,oBAAoB,GAAgB,EAAE,OAAO,EAAE,KAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAA8C;IAC/E,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,oBAAoB,CAAC,OAAO;QACvD,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,oBAAoB,CAAC,OAAO;KACxD,CAAC;AACJ,CAAC;AAyCD;;;;;;;;GAQG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,OAAO,CAAC;AACpD,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,UAAU,CAAC,OAAsB,EAAE,MAAc;IAC/D,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ;gBACX,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpD,MAAM;YACR,KAAK,MAAM;gBACT,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClD,MAAM;YACR,KAAK,WAAW;gBACd,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;oBAC3B,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM;wBACzB,CAAC,CAAC;4BACE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gCACxC,EAAE,EAAE,IAAI,CAAC,EAAE;gCACX,IAAI,EAAE,IAAI,CAAC,IAAI;gCACf,+DAA+D;gCAC/D,6DAA6D;gCAC7D,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;6BAC1C,CAAC,CAAC;yBACJ;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,MAAM;gBACT,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,MAAM;oBACZ,UAAU,EAAE,IAAI,CAAC,YAAY;oBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;iBACxF,CAAC,CAAC;gBACH,MAAM;QACV,CAAC;IACH,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CAAC,KAA6C;IAC5D,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE;QAC1B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;QACnC,WAAW,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAqB;KACzE,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAAoC;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;IAC5C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,IAAI,mBAAmB;QACzD,MAAM,EAAE,MAA0B;KACnC,CAAC;AACJ,CAAC;AAaD,SAAS,IAAI,CAAC,GAAgB,EAAE,KAAoB;IAClD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;QAC3C,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;QAChD,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACxD,CAAC;IACD,IAAI,KAAK,CAAC,YAAY;QAAE,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAC9D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QACvE,IAAI,IAAI,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,SAAS;YAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;QACtD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAC9B,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC;IAC1B,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAID,SAAS,WAAW,CAAC,GAAgB,EAAE,KAAa;IAClD,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,SAAS;QAC1B,IAAI,IAAI,GAA4B,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,SAAS;gBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAA4B,CAAC;QACrF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,wCAAwC,EAAE,KAAK,CAAC,CAAC;QACxE,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAgB,eAAe;IAUnC,YAAsB,IAAyB;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,kBAAkB,CAAC,IAAmB;QAC1C,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvC,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;SAChB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAqC;QAErC,IAAI,IAAyD,CAAC;QAC9D,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,qBAAqB,CAAwB,KAAK,CAAC,EAAE,CAAC;YACnF,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;QACD,yEAAyE;QACzE,uDAAuD;QACvD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC;QACvF,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IAC7F,CAAC;IAED,KAAK,CAAC,CAAC,qBAAqB,CAC1B,KAAqC;QAErC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,GAAG,GAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAElF,MAAM,IAAI,GAAkB;YAC1B,GAAG,IAAI,CAAC,QAAQ;YAChB,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,eAAe,KAAK,SAAS;gBACjD,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE;gBACjD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1B,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE,CAChC,eAAe,CACb,CAAC,MAAM,EAAE,EAAE;YACT,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;YAClB,MAAM,KAAK,GAAG,WAAW,CAAC;gBACxB,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;gBAChC,MAAM;aACP,CAAC,CAAC;YACH,OAAO,cAAc,CACnB,IAAI,CAAC,IAAI,EACT,WAAW,CACT,KAAK,EACL,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE;gBAC1C,GAAG,IAAI;gBACP,KAAK;gBACL,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CACH,CACF,CAAC;QACJ,CAAC,EACD;YACE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC;YACzC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CACjC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,YAAY,CAAC,oBAAoB,EAAE,KAAK,CAAC;SAC/E,CACF,CAAC;QAEJ,MAAM,MAAM,GAAG,sBAAsB,CAAgB,OAAO,EAAE;YAC5D,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;YACjD,aAAa,EAAE,eAAe;YAC9B,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CACzC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,qBAAqB,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC;SAChF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/B,IAAI,KAAK;gBAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACjE,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,UAAmC,CAAC;QACxC,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAgB,CAAC;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,UAAU,GAAG;gBACX,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;gBACrB,OAAO,EAAG,UAAkD,EAAE,OAAO,IAAI,GAAG,CAAC,IAAI;gBACjF,SAAS;aACK,CAAC;QACnB,CAAC;QAED,4EAA4E;QAC5E,yEAAyE;QACzE,yEAAyE;QACzE,sBAAsB,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1E,MAAM;YACJ,KAAK,EAAE,EAAE;YACT,WAAW,EAAE,GAAG,CAAC,IAAI;YACrB,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE;gBACR,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS;oBAChC,CAAC,CAAC;wBACE,UAAU,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,CAAC;wBAC1D,YAAY,EAAE,GAAG,CAAC,YAAY;wBAC9B,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;wBACtC,+DAA+D;wBAC/D,uDAAuD;wBACvD,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;qBACzC;oBACH,CAAC,CAAC,EAAE,CAAC;aACR;YACD,UAAU;SACX,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"ProviderAdapter.js","sourceRoot":"","sources":["../../src/providers/ProviderAdapter.ts"],"names":[],"mappings":"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"}
@@ -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;AAGpE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,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"}
@@ -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
@@ -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;AAEpE,0BAA0B;AAC1B,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAuBvD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAM1D"}
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"}
@@ -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 JSON.parse(cleaned);
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
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE1B,qCAAqC;IACrC,iDAAiD;IACjD,MAAM,cAAc,GAAG,sCAAsC,CAAC;IAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAE5C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACxJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC;QACH,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,kFAAkF;AAClF,MAAM,eAAe,GAA2B;IAC9C,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;CACZ,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAS,2BAA2B,CAAC,IAAY;IAC/C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,EAAE,KAAK,GAAG;gBAAE,QAAQ,GAAG,IAAI,CAAC;YAChC,GAAG,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,KAAK,CAAC;YAChB,GAAG,IAAI,EAAE,CAAC;QACZ,CAAC;aAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC;YACf,GAAG,IAAI,EAAE,CAAC;QACZ,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACtB,QAAQ,GAAG,KAAK,CAAC;YACjB,GAAG,IAAI,EAAE,CAAC;QACZ,CAAC;aAAM,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC;YACpB,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACvF,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,WAAW,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;YACnE,+DAA+D;YAC/D,MAAM,WAAW,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE1B,qCAAqC;IACrC,iDAAiD;IACjD,MAAM,cAAc,GAAG,sCAAsC,CAAC;IAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAE5C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACxJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC;QACH,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,SAAS;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5E,OAAO,MAAiC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa;IAChD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,OAAO;gBAAE,OAAO,GAAG,KAAK,CAAC;iBACxB,IAAI,EAAE,KAAK,IAAI;gBAAE,OAAO,GAAG,IAAI,CAAC;iBAChC,IAAI,EAAE,KAAK,GAAG;gBAAE,QAAQ,GAAG,KAAK,CAAC;YACtC,SAAS;QACX,CAAC;QAED,IAAI,EAAE,KAAK,GAAG;YAAE,QAAQ,GAAG,IAAI,CAAC;aAC3B,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aACxB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@falai/agent",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "Conversational state engine for TypeScript where the AI understands, but the code is in control",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -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
- * Repair-parse a JSON-shaped protocol fragment (truncated output,
463
- * fence-wrapped JSON) into a structured payload. Raw protocol fragments
464
- * must never surface as the user-visible reply: if the repair parse fails,
465
- * fail the turn LOUDLY so the caller's rollback/retry path engages instead
466
- * of leaking `{"message": "…` to an end user. Plain prose (not JSON-shaped
467
- * at all) never reaches this helper the call sites gate on the fragment
468
- * shape and pass it through untouched.
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
- throw ResponseGenerationError.fromError(
480
- new Error(
481
- "Model returned a schema-mandated response that could not be parsed as JSON. " +
482
- `The ${surface} was failed instead of delivering raw protocol output to the user.`
483
- ),
484
- 'structured_output_malformed',
485
- { responseSchemaName: 'response_output' }
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 && /^\s*(```|{)/.test(message)) {
1091
+ if (!structuredData && responseSchema && message) {
1077
1092
  const salvaged = this.salvageStructuredOutput(message, "turn");
1078
- structuredData = salvaged;
1079
- message = salvaged.message;
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
- message = toolResult.finalMessage;
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 = toolResult.structured
1114
- ? { structured: toolResult.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 && /^\s*(```|{)/.test(finalAccumulated)) {
1498
+ if (chunk.done && !finalStructured && responseSchema && finalAccumulated) {
1471
1499
  const salvaged = this.salvageStructuredOutput(finalAccumulated, "stream");
1472
- finalStructured = salvaged;
1473
- finalDelta = salvaged.message.startsWith(finalAccumulated)
1474
- ? salvaged.message.slice(finalAccumulated.length)
1475
- : salvaged.message;
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
- try {
364
- structured = JSON.parse(acc.text) as TStructured;
365
- } catch (error) {
366
- logger.warn(`[${this.name}] Failed to parse JSON response:`, error);
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 || acc.text,
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
- assertUsableCompletion(structured, acc.text, toolCalls.length, this.name);
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: acc.text,
398
+ accumulated: text,
385
399
  done: true,
386
400
  metadata: {
387
401
  model: acc.model,
@@ -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";