@agent-native/core 0.58.1 → 0.58.3

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 (61) hide show
  1. package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -1
  2. package/dist/agent/engine/translate-ai-sdk.js +1 -0
  3. package/dist/agent/engine/translate-ai-sdk.js.map +1 -1
  4. package/dist/agent/production-agent.d.ts +2 -0
  5. package/dist/agent/production-agent.d.ts.map +1 -1
  6. package/dist/agent/production-agent.js +114 -19
  7. package/dist/agent/production-agent.js.map +1 -1
  8. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  9. package/dist/agent/thread-data-builder.js +10 -2
  10. package/dist/agent/thread-data-builder.js.map +1 -1
  11. package/dist/agent/tool-error-redaction.d.ts +4 -0
  12. package/dist/agent/tool-error-redaction.d.ts.map +1 -0
  13. package/dist/agent/tool-error-redaction.js +43 -0
  14. package/dist/agent/tool-error-redaction.js.map +1 -0
  15. package/dist/agent/types.d.ts +23 -6
  16. package/dist/agent/types.d.ts.map +1 -1
  17. package/dist/agent/types.js.map +1 -1
  18. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  19. package/dist/client/agent-chat-adapter.js +29 -5
  20. package/dist/client/agent-chat-adapter.js.map +1 -1
  21. package/dist/client/chat/attachment-adapters.d.ts.map +1 -1
  22. package/dist/client/chat/attachment-adapters.js +29 -4
  23. package/dist/client/chat/attachment-adapters.js.map +1 -1
  24. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  25. package/dist/client/composer/PromptComposer.js +5 -1
  26. package/dist/client/composer/PromptComposer.js.map +1 -1
  27. package/dist/client/composer/attachment-accept.d.ts +2 -0
  28. package/dist/client/composer/attachment-accept.d.ts.map +1 -1
  29. package/dist/client/composer/attachment-accept.js +30 -1
  30. package/dist/client/composer/attachment-accept.js.map +1 -1
  31. package/dist/data-widgets/index.d.ts +5 -5
  32. package/dist/file-upload/pre-upload-attachments.d.ts +2 -0
  33. package/dist/file-upload/pre-upload-attachments.d.ts.map +1 -1
  34. package/dist/file-upload/pre-upload-attachments.js +66 -9
  35. package/dist/file-upload/pre-upload-attachments.js.map +1 -1
  36. package/dist/scripts/db/tool-schemas.d.ts +3 -0
  37. package/dist/scripts/db/tool-schemas.d.ts.map +1 -0
  38. package/dist/scripts/db/tool-schemas.js +27 -0
  39. package/dist/scripts/db/tool-schemas.js.map +1 -0
  40. package/dist/scripts/dev/index.d.ts.map +1 -1
  41. package/dist/scripts/dev/index.js +2 -22
  42. package/dist/scripts/dev/index.js.map +1 -1
  43. package/dist/scripts/parse-args.js +1 -1
  44. package/dist/scripts/parse-args.js.map +1 -1
  45. package/dist/scripts/runner.js +1 -1
  46. package/dist/scripts/runner.js.map +1 -1
  47. package/dist/server/agent-chat-plugin.d.ts +16 -0
  48. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  49. package/dist/server/agent-chat-plugin.js +69 -27
  50. package/dist/server/agent-chat-plugin.js.map +1 -1
  51. package/dist/server/cli-capture.d.ts.map +1 -1
  52. package/dist/server/cli-capture.js +2 -1
  53. package/dist/server/cli-capture.js.map +1 -1
  54. package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
  55. package/dist/server/prompts/framework-core-compact.js +2 -1
  56. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  57. package/dist/server/prompts/framework-core.d.ts.map +1 -1
  58. package/dist/server/prompts/framework-core.js +1 -0
  59. package/dist/server/prompts/framework-core.js.map +1 -1
  60. package/docs/content/native-chat-ui.md +12 -0
  61. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"thread-data-builder.d.ts","sourceRoot":"","sources":["../../src/agent/thread-data-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-data-builder.d.ts","sourceRoot":"","sources":["../../src/agent/thread-data-builder.ts"],"names":[],"mappings":"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"}
@@ -673,14 +673,16 @@ function buildStoredAttachments(attachments, runId) {
673
673
  // of re-shipping megabytes of base64 on every poll save.
674
674
  const uploadedUrl = att.url;
675
675
  if (uploadedUrl) {
676
+ const referenceOnly = att.referenceOnly === true;
677
+ const storedAsImage = att.type === "image" && !referenceOnly;
676
678
  return {
677
679
  id,
678
- type: att.type === "image" ? "image" : "file",
680
+ type: storedAsImage ? "image" : "file",
679
681
  name: att.name,
680
682
  contentType: att.contentType,
681
683
  status: { type: "complete" },
682
684
  // URL reference shape — content[0] uses the hosted URL.
683
- content: att.type === "image"
685
+ content: storedAsImage
684
686
  ? [{ type: "image", image: uploadedUrl }]
685
687
  : [
686
688
  {
@@ -694,6 +696,12 @@ function buildStoredAttachments(attachments, runId) {
694
696
  metadata: {
695
697
  uploadUrl: uploadedUrl,
696
698
  uploadProvider: att.uploadProvider,
699
+ ...(referenceOnly
700
+ ? {
701
+ referenceOnly: true,
702
+ securityNote: att.securityNote,
703
+ }
704
+ : {}),
697
705
  },
698
706
  };
699
707
  }
@@ -1 +1 @@
1
- {"version":3,"file":"thread-data-builder.js","sourceRoot":"","sources":["../../src/agent/thread-data-builder.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,4BAA4B,GAK7B,MAAM,yCAAyC,CAAC;AA6BjD,MAAM,uBAAuB,GAC3B,iDAAiD,CAAC;AAEpD,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAC3C;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,sBAAsB;AAEvE,SAAS,2BAA2B,CAAC,KAIpC;IACC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,IAAI,KAAK,uBAAuB;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,CACL,KAAK,CAAC,WAAW,KAAK,IAAI;QAC1B,IAAI,KAAK,yBAAyB;QAClC,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,eAAe;QACxB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,cAAc;QACvB,IAAI,KAAK,8BAA8B;QACvC,IAAI,KAAK,kBAAkB;QAC3B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5B,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACvC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CACpB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAkB,EAClB,KAAc,EACd,UAAwC,EAAE;IAW1C,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,QAAQ,GAKD,IAAI,CAAC;IAChB,IAAI,mCAAmC,GAAG,KAAK,CAAC;IAEhD,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACnB,eAAe,GAAG,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,eAAe,IAAI,CAAC,CAAC;YACrB,MAAM,UAAU,GAAG,KAAK;gBACtB,CAAC,CAAC,GAAG,KAAK,OAAO,eAAe,EAAE;gBAClC,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAA2B,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,WAAW;gBACjB,UAAU;gBACV,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;gBACjC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC9B,IAAI;aACL,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxB,IACE,IAAI,CAAC,IAAI,KAAK,WAAW;oBACzB,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI;oBAC5B,IAAI,CAAC,MAAM,KAAK,SAAS,EACzB,CAAC;oBACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;oBACjC,IAAI,KAAK,CAAC,MAAM;wBAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC7C,IAAI,KAAK,CAAC,MAAM;wBAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC7C,MAAM;gBACR,CAAC;YACH,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,wEAAwE;YACxE,wEAAwE;YACxE,IAAI,OAAO,CAAC,4BAA4B,EAAE,CAAC;gBACzC,mCAAmC,GAAG,IAAI,CAAC;YAC7C,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACnC,IAAI,OAAO,CAAC,4BAA4B,EAAE,CAAC;gBACzC,mCAAmC,GAAG,IAAI,CAAC;YAC7C,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,IACE,OAAO,CAAC,4BAA4B;gBACpC,2BAA2B,CAAC,KAAK,CAAC,EAClC,CAAC;gBACD,mCAAmC,GAAG,IAAI,CAAC;gBAC3C,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,KAAK,aAAa,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC3D,SAAS;YACX,CAAC;YACD,QAAQ,GAAG;gBACT,OAAO,EAAE,KAAK,CAAC,KAAK;gBACpB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjE,CAAC;YACF,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACvE,SAAS;QACX,CAAC;QAED,wDAAwD;IAC1D,CAAC;IAED,4EAA4E;IAC5E,mEAAmE;IACnE,4EAA4E;IAC5E,4EAA4E;IAC5E,yEAAyE;IACzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,SAAS,GAAG,mCAAmC,CAAC;IACtD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACnD,IAAI,KAAK;QAAE,MAAM,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,QAAQ,GAAG;YAChB,GAAG,QAAQ;YACX,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5B,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,IAAI,KAAK;QAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;IAE7D,OAAO;QACL,EAAE,EAAE,UAAU,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;QACnC,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,IAAI,EAAE,WAAW;QACjB,OAAO;QACP,MAAM,EAAE,QAAQ;YACd,CAAC,CAAC,EAAE,IAAI,EAAE,YAAqB,EAAE,MAAM,EAAE,OAAgB,EAAE;YAC3D,CAAC,CAAC,EAAE,IAAI,EAAE,UAAmB,EAAE,MAAM,EAAE,MAAe,EAAE;QAC1D,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAU;IAClC,OAAO,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC;AACjC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAU;IACnC,OAAO,OAAO,KAAK,EAAE,QAAQ,KAAK,QAAQ,IAAI,KAAK,EAAE,QAAQ,KAAK,IAAI;QACpE,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAU;IACpC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK;QAC/D,CAAC,CAAC,KAAK,CAAC,SAAS;QACjB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,OAAY;IAC7B,OAAO,OAAO,OAAO,EAAE,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,SAAS,eAAe,CAAC,OAAY;IACnC,MAAM,IAAI,GAAG,OAAO,EAAE,QAAQ,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC;IACxE,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAClD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAgB;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;IACxD,OAAO,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO;SACX,MAAM,CACL,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CACtE;SACA,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SAC7B,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAsB;IACxD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3D,IAAI,CAAC,MAAM,GAAG,uBAAuB,CAAC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAe;IAChD,MAAM,IAAI,GAAI,MAAyC,EAAE,IAAI,CAAC;IAC9D,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,YAAY,CAAC;AACtD,CAAC;AAED,SAAS,2BAA2B,CAAC,WAAoB;IACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9E,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,GAAG,EAAE,IAAI;QACf,IAAI,EAAE,GAAG,EAAE,IAAI;QACf,WAAW,EAAE,GAAG,EAAE,WAAW;KAC9B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,iFAAiF;AACjF,iFAAiF;AACjF,8EAA8E;AAC9E,gFAAgF;AAChF,4BAA4B;AAC5B,SAAS,8BAA8B,CAAC,OAAgB;IACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAC/B,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;QAC3D,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE;QACpC,CAAC,CAAC,IAAI,CACT,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAY;IACvC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAAO,OAAO,EAAE,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;IACrC,0EAA0E;IAC1E,wEAAwE;IACxE,4EAA4E;IAC5E,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;IAExC,oEAAoE;IACpE,mEAAmE;IACnE,wEAAwE;IACxE,yEAAyE;IACzE,oEAAoE;IACpE,yEAAyE;IACzE,sEAAsE;IACtE,iEAAiE;IACjE,uEAAuE;IACvE,gEAAgE;IAChE,4BAA4B;IAC5B,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CACP,eAAe,IAAI,CAAC,SAAS,CAAC;YAC5B,IAAI,EAAE,OAAO,EAAE,IAAI;YACnB,OAAO,EAAE,8BAA8B,CAAC,OAAO,EAAE,OAAO,CAAC;YACzD,WAAW,EAAE,2BAA2B,CAAC,OAAO,EAAE,WAAW,CAAC;SAC/D,CAAC,EAAE,CACL,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;IACzE,CAAC;IACD,IAAI,OAAO,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CACP,oBAAoB,IAAI,CAAC,SAAS,CAAC;gBACjC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,8BAA8B,CAAC,OAAO,CAAC,OAAO,CAAC;gBACxD,WAAW,EAAE,2BAA2B,CAAC,OAAO,CAAC,WAAW,CAAC;aAC9D,CAAC,EAAE,CACL,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,CAAM,EAAE,CAAM;IACnC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,wBAAwB,CAAC,aAAkB,EAAE,aAAkB;IACtE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACjD,sEAAsE;IACtE,6EAA6E;IAC7E,6EAA6E;IAC7E,iBAAiB;IACjB,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,IACE,QAAQ,EAAE,IAAI,KAAK,WAAW;QAC9B,QAAQ,EAAE,IAAI,KAAK,WAAW;QAC9B,YAAY;QACZ,YAAY,KAAK,YAAY,EAC7B,CAAC;QACD,MAAM,cAAc,GAAG,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,cAAc,GAAG,cAAc;YAAE,OAAO,aAAa,CAAC;QAC1D,IAAI,cAAc,GAAG,cAAc;YAAE,OAAO,aAAa,CAAC;QAC1D,OAAO,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC;YAChD,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC5C,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,aAAa,CAAC;IACpB,CAAC;IACD,IACE,QAAQ,EAAE,IAAI,KAAK,WAAW;QAC9B,QAAQ,EAAE,IAAI,KAAK,WAAW;QAC9B,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC3C,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC5C,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAU,EACV,QAAuB;IAEvB,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO,EAAE,iBAAiB;QAC1B,QAAQ;QACR,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAkB,EAAE,IAAiB;IAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,SAAS,GAAG,GAAG,UAAU,WAAW,MAAM,EAAE,CAAC;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,CAAC;QACZ,SAAS,GAAG,GAAG,UAAU,WAAW,MAAM,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAY;IACjD,IAAI,OAAO,EAAE,IAAI,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;QAChD,IACE,IAAI,EAAE,IAAI,KAAK,WAAW;YAC1B,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;YACnC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAC5B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACzB,IAAI,cAAc,KAAK,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QACpD,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAS;IACjD,MAAM,UAAU,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,QAAQ,GAIT,EAAE,CAAC;IACR,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,UAAU,GAAkB,IAAI,CAAC;IAErC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE;YAAE,SAAS;QAElB,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,QAAQ,GACZ,iBAAiB,KAAK,IAAI;YACxB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;gBACnD,CAAC,CAAC,iBAAiB;gBACnB,CAAC,CAAC,UAAU,CAAC;QAEnB,MAAM,eAAe,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe;YAAE,SAAS;QAE/B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,UAAU,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,UAAU,CAAC,MAAM;QACf,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;IAChE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CACxC,UAA+D;IAE/D,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,IAAI,CAAC,UAAU;QAAE,OAAO,QAAQ,CAAC;IACjC,IAAI,IAAS,CAAC;IACd,IAAI,CAAC;QACH,IAAI,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACpD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC;QAClC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;YAAE,SAAS;QAClE,MAAM,IAAI,GACR,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;YAC3B,CAAC,CAAC,CAAC,CAAC,OAAO;YACX,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;gBACxB,CAAC,CAAC,CAAC,CAAC,OAAO;qBACN,MAAM,CACL,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAC7D;qBACA,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBACvB,IAAI,CAAC,IAAI,CAAC;gBACf,CAAC,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAmBD,MAAM,UAAU,sCAAsC,CACpD,MAAiD,EACjD,UAAyD,EAAE;IAE3D,MAAM,UAAU,GAAG,4BAA4B,CAC7C,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAC3C,CAAC;IACF,MAAM,IAAI,GAGN;QACF,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,aAAa,GAQN,IAAI,CAAC;IAEhB,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,aAAa,GAAG,IAAI,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG;YACd,EAAE,EAAE,aAAa,CAAC,EAAE;YACpB,SAAS,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;YAC5C,IAAI,EAAE,WAAoB;YAC1B,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,MAAM,EAAE,EAAE,IAAI,EAAE,UAAmB,EAAE,MAAM,EAAE,MAAe,EAAE;YAC9D,QAAQ,EAAE;gBACR,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,MAAM,EAAE;oBACN,2BAA2B,EAAE,aAAa,CAAC,QAAQ;iBACpD;aACF;SACF,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,cAAc,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;YACpC,MAAM,WAAW,GAAG,gBAAgB,CAAC;gBACnC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC;gBACxD,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC9C,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;aACpC,CAAC,CAAC;YACH,WAAW,CAAC,EAAE,GAAG,aAAa,IAAI,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,cAAc,GAClB,WAAW,CAAC,QAAQ,CAAC,MAAM;gBAC3B,OAAO,WAAW,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ;gBAC7C,CAAC,CAAE,WAAW,CAAC,QAAQ,CAAC,MAAkC;gBAC1D,CAAC,CAAC,EAAE,CAAC;YACT,WAAW,CAAC,QAAQ,GAAG;gBACrB,GAAG,WAAW,CAAC,QAAQ;gBACvB,MAAM,EAAE;oBACN,GAAG,cAAc;oBACjB,cAAc,EAAE,KAAK;oBACrB,2BAA2B,EAAE,IAAI,CAAC,QAAQ;iBAC3C;aACF,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,qCAAqC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACjE,cAAc,EAAE,CAAC;YACjB,aAAa,GAAG;gBACd,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,EAAE,EAAE,kBAAkB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,EAAE;gBACjD,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK;gBAC5B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QACD,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACzC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,cAAc,EAAE,CAAC;IACjB,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAU,EACV,UAA+B;IAE/B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC3C,CAAC;AAgBD,MAAM,UAAU,4BAA4B,CAC1C,YAAiB,EACjB,YAAiB,EACjB,UAAkC,EAAE;IAEpC,MAAM,8BAA8B,GAClC,OAAO,CAAC,8BAA8B,IAAI,IAAI,CAAC;IACjD,MAAM,4BAA4B,GAChC,OAAO,CAAC,4BAA4B,IAAI,IAAI,CAAC;IAC/C,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,MAAM,GACV,kBAAkB,IAAI,OAAO,kBAAkB,KAAK,QAAQ;QAC1D,CAAC,CAAC,EAAE,GAAG,kBAAkB,EAAE;QAC3B,CAAC,CAAC,EAAE,CAAC;IACT,IACE,4BAA4B;QAC5B,kBAAkB;QAClB,OAAO,kBAAkB,KAAK,QAAQ,EACtC,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC9D,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,QAAQ;gBAAE,SAAS;YACrD,IAAI,GAAG,KAAK,gBAAgB,IAAI,CAAC,8BAA8B,EAAE,CAAC;gBAChE,SAAS;YACX,CAAC;YACD,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IACL,8BAA8B;QAC9B,kBAAkB;QAClB,OAAO,kBAAkB,KAAK,QAAQ;QACtC,kBAAkB,CAAC,cAAc,KAAK,SAAS;QAC/C,MAAM,CAAC,cAAc,KAAK,SAAS,EACnC,CAAC;QACD,MAAM,CAAC,cAAc,GAAG,kBAAkB,CAAC,cAAc,CAAC;IAC5D,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC;QAClE,CAAC,CAAC,kBAAkB,CAAC,QAAQ;QAC7B,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrD,CAAC,CAAC,MAAM,CAAC,QAAQ;QACjB,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB;QAAE,OAAO,MAAM,CAAC;IAE1D,MAAM,eAAe,GAAkB,gBAAgB,CAAC,GAAG,CACzD,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1E,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,YAAY,GAAU,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE7C,KAAK,MAAM,aAAa,IAAI,gBAAgB,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,eAAe,CAAC,SAAS,CAC7C,CAAC,IAAiB,EAAE,KAAa,EAAE,EAAE,CACnC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACxE,CAAC;QAEF,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QAED,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAChC,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,wBAAwB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACtD,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3C,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CACxC,CAAC;IACF,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAY;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACtB,qDAAqD,CACtD,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,SAAS,CAAC,MAAM,IAAI,2BAA2B;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,2BAA2B,CAAC;IAC/D,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC,mCAAmC,2BAA2B,CAAC,cAAc,EAAE,gBAAgB,OAAO,CAAC,cAAc,EAAE,mDAAmD,CAAC;AACtO,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAAwB,EACxB,IAAY;IAEZ,MAAM,KAAK,GAAG;QACZ,SAAS,yBAAyB,CAAC,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC,GAAG;QAC/D,GAAG,CAAC,WAAW;YACb,CAAC,CAAC,gBAAgB,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG;YAC/D,CAAC,CAAC,IAAI;QACR,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;KAClE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,eAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,wBAAwB,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC7F,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IACxC,sDAAsD;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,WAAW,IAAI,uBAAuB;QAAE,OAAO,OAAO,CAAC;IAC3D,OAAO,GAAG,MAAM,uBAAuB,WAAW,CAAC,cAAc,EAAE,+BAA+B,CAAC;AACrG,CAAC;AAED,SAAS,sBAAsB,CAC7B,WAA8C,EAC9C,KAAyB;IAEzB,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;SACvB,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAClB,MAAM,EAAE,GAAG,UAAU,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,eAAe,KAAK,EAAE,CAAC;QAC/D,wEAAwE;QACxE,sEAAsE;QACtE,wEAAwE;QACxE,yDAAyD;QACzD,MAAM,WAAW,GAAI,GAAW,CAAC,GAAyB,CAAC;QAC3D,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO;gBACL,EAAE;gBACF,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBAC7C,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAC5B,wDAAwD;gBACxD,OAAO,EACL,GAAG,CAAC,IAAI,KAAK,OAAO;oBAClB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;oBACzC,CAAC,CAAC;wBACE;4BACE,IAAI,EAAE,MAAM;4BACZ,GAAG,EAAE,WAAW;4BAChB,QAAQ,EAAE,GAAG,CAAC,WAAW;4BACzB,QAAQ,EAAE,GAAG,CAAC,IAAI;yBACnB;qBACF;gBACP,6DAA6D;gBAC7D,QAAQ,EAAE;oBACR,SAAS,EAAE,WAAW;oBACtB,cAAc,EAAG,GAAW,CAAC,cAAoC;iBAClE;aACF,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO;gBACL,EAAE;gBACF,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAC5B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAChE,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,OAAO;gBACL,EAAE;gBACF,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAC5B,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;wBAChC,QAAQ,EAAE,GAAG,CAAC,WAAW;wBACzB,QAAQ,EAAE,GAAG,CAAC,IAAI;qBACnB;iBACF;aACF,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO;gBACL,EAAE;gBACF,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAC5B,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;iBAC9D;aACF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAKhC;IAQC,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO;QACL,EAAE,EAAE,eAAe,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;QAC7C,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE;QACvC,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,QAAQ,EAAE;YACR,MAAM,EAAE;gBACN,cAAc,EAAE,IAAI,CAAC,KAAK;aAC3B;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CACrC,KAAqC;IAErC,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI;YACf,KAAK,CAAC,IAAI;YACV,QAAQ,CAAyC;QACnD,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE;QAC1C,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE;YACR,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjE;KACF,CAAC;AACJ,CAAC;AAED,SAAS,qCAAqC,CAC5C,IAAuC,EACvC,OAAsD;IAEtD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,yCAAyC,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,oCAAoC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,yCAAyC,CAChD,IAAkC;IAElC,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,aAAa,IAAI,CAAC,EAAE,EAAE;QAClC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,YAAY;QACjD,QAAQ,EAAE,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAC3D,IAAI,EAAE,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5C,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;YAC3B,CAAC,CAAC,EAAE,MAAM,EAAE,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE;YAChE,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,SAAS,oCAAoC,CAC3C,IAAoC,EACpC,OAAsD;IAEtD,IAAI,OAAO,CAAC,sBAAsB,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GACR,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC;YAClD,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC;QAC3B,OAAO,MAAM;YACX,CAAC,CAAC,aAAa,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACrC,CAAC,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACrE,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,SAAS,8BAA8B,CACrC,MAA+C;IAE/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACtD,MAAM,WAAW,GAA0B,EAAE,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAChD,MAAM,MAAM,GAAG,IAA+B,CAAC;YAC/C,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBAChC,IAAI;gBACJ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,WAAW,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3E,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC;YACT,OAAO,KAAK,KAAK,QAAQ;gBACvB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,CAAC,+BAA+B,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAc;IACrD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5E,CAAC;AAED,SAAS,iBAAiB,CACxB,MAA2C,EAC3C,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa;IAC9C,OAAO,oDAAoD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAS,EAAE,OAAoB;IAC/D,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAEjD,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,OAAO,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QAChE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GACZ,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IAC7B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,0BAA0B,CACjC,WAAgB,EAChB,YAA8B;IAE9B,MAAM,WAAW,GAAG,WAAW,EAAE,OAAO,CAAC;IACzC,IAAI,qBAAqB,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpD,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEpE,MAAM,UAAU,GAAG,WAAW,EAAE,MAAM,CAAC;IACvC,IAAI,UAAU,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtE,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,yBAAyB,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,OAAO,CAAC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAS,EACT,YAA8B;IAE9B,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAEjD,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,EAAE,IAAI,CAAC;IAE/B,IACE,QAAQ,KAAK,WAAW;QACxB,0BAA0B,CAAC,OAAO,EAAE,YAAY,CAAC,EACjD,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QACvE,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GACZ,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,CAAC,SAAS,CACR,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAClE,IAAI,IAAI,CAAC;QACZ,CAAC,CAAC,IAAI,CAAC;IACX,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,OAAY;IAC5B,MAAM,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;IAC5C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,SAAS,cAAc,CAAC,OAAY;IAClC,MAAM,GAAG,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC;IACpD,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QACvB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAChE,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED;2EAC2E;AAC3E,SAAS,sBAAsB,CAAC,OAAgB;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3D,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;iDAEiD;AACjD,SAAS,mBAAmB,CAAC,QAAe,EAAE,QAAe;IAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,IACE,IAAI,EAAE,IAAI,KAAK,MAAM;YACrB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC7B,IAAI,EAAE,IAAI,KAAK,MAAM;YACrB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAC7B,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,6BAA6B,CAAC;QACnC,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC,OAAO,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAS,EACT,YAA8B,EAC9B,OAA4C;IAE5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,MAAM;QAAE,OAAO,sBAAsB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE5C,MAAM,QAAQ,GACZ,OAAO,EAAE,IAAI,KAAK,WAAW;QAC7B,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,MAAM;YAC3B,mEAAmE;YACnE,0BAA0B;YAC1B,CAAC,CAAC,CAAC,KAAK,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;IAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,oEAAoE;QACpE,2EAA2E;QAC3E,yCAAyC;QACzC,OAAO,sBAAsB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;QACzD,CAAC,CAAC,YAAY,CAAC,OAAO;QACtB,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,gBAAgB,GACpB,CAAC,CAAC,KAAK;QACP,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC;IAEzE,2EAA2E;IAC3E,2EAA2E;IAC3E,+EAA+E;IAC/E,MAAM,aAAa,GAAG,gBAAgB;QACpC,CAAC,CAAC,sBAAsB,CAAC,eAAe,CAAC;YACvC,sBAAsB,CAAC,eAAe,CAAC;YACvC,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,eAAe;QACnB,CAAC,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAC7B,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACxD,CAAC;IAEF,MAAM,cAAc,GAClB,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ;QACrE,CAAC,CAAE,OAAO,CAAC,QAAQ,CAAC,MAAkC;QACtD,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,cAAc,GAClB,YAAY,CAAC,QAAQ,EAAE,MAAM;QAC7B,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ;QAC9C,CAAC,CAAE,YAAY,CAAC,QAAQ,CAAC,MAAkC;QAC3D,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,YAAY,GAA4B;QAC5C,GAAG,cAAc;QACjB,GAAG,cAAc;QACjB,MAAM;QACN,YAAY,EAAE,YAAY;KAC3B,CAAC;IACF,wEAAwE;IACxE,IAAI,cAAc,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC,SAAS,CAAC;IAErE,MAAM,aAAa,GAAG;QACpB,GAAG,OAAO;QACV,OAAO,EAAE,6BAA6B,CAAC;YACrC,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,aAAa;SACvB,CAAC,CAAC,OAAO;QACV,oEAAoE;QACpE,8CAA8C;QAC9C,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;QAC7C,QAAQ,EAAE;YACR,GAAG,OAAO,CAAC,QAAQ;YACnB,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK;YACvC,MAAM,EAAE,YAAY;SACrB;KACF,CAAC;IAEF,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IACxE,QAAQ,CAAC,MAAM,GAAG,aAAa,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC;IACtD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAS;IAIzC,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,EAAE,QAAQ,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAC3C,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAE/C,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,6FAA6F;QAC7F,MAAM,GAAG,GAAG,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC;QACpC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAC1C,CAAC,CAAC,GAAG,CAAC,OAAO;iBACR,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBACvB,IAAI,CAAC,GAAG,CAAC;YACd,CAAC,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;gBAC/B,CAAC,CAAC,GAAG,CAAC,OAAO;gBACb,CAAC,CAAC,EAAE,CAAC;QACT,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK;gBAAE,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClD,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,aAAa,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC","sourcesContent":["import type { AgentChatAttachment, RunEvent } from \"./types.js\";\nimport type { EngineMessage } from \"./engine/types.js\";\nimport type { ActionChatUIConfig } from \"../action-ui.js\";\nimport {\n normalizeCodeAgentTranscript,\n type CodeAgentTranscriptEvent as CoreCodeAgentTranscriptEvent,\n type NormalizedCodeAgentStatusEvent,\n type NormalizedCodeAgentToolEvent,\n type NormalizedCodeAgentTranscriptItem,\n} from \"../code-agents/transcript-normalizer.js\";\nimport type { AgentMcpAppPayload } from \"../mcp-client/app-result.js\";\n\ninterface ContentPart {\n type: string;\n text?: string;\n toolCallId?: string;\n toolName?: string;\n argsText?: string;\n args?: Record<string, string>;\n result?: string;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n}\n\ninterface BuildAssistantMessageOptions {\n suppressInternalContinuation?: boolean;\n /**\n * Logical-turn identity. When set it is stamped onto the message metadata so\n * continuation runs of the same turn can be folded onto a single durable\n * assistant message (see foldAssistantTurn) instead of each run dropping or\n * overwriting the others.\n */\n turnId?: string;\n}\n\ntype AssistantMessage = NonNullable<ReturnType<typeof buildAssistantMessage>>;\ntype UserMessage = ReturnType<typeof buildUserMessage>;\n\nconst INTERRUPTED_TOOL_RESULT =\n \"Interrupted before this tool returned a result.\";\n\nconst MAX_STORED_ATTACHMENT_CHARS = 60_000;\n/**\n * When no file-upload provider is configured we fall back to storing base64\n * directly in the SQL thread_data column. Cap the raw base64 per attachment to\n * avoid unbounded row growth. Attachments larger than this get a '[truncated]'\n * marker so the transcript still renders but the column stays sane.\n */\nconst MAX_STORED_BASE64_BYTES = 2 * 1024 * 1024; // 2 MB per attachment\n\nfunction isInternalContinuationError(event: {\n error: string;\n errorCode?: string;\n recoverable?: boolean;\n}): boolean {\n const code = String(event.errorCode ?? \"\").toLowerCase();\n const msg = event.error.toLowerCase();\n if (code === \"builder_gateway_error\") return false;\n return (\n event.recoverable === true ||\n code === \"builder_gateway_timeout\" ||\n code === \"stale_run\" ||\n code === \"timeout\" ||\n code === \"timeout_error\" ||\n code === \"http_408\" ||\n code === \"http_429\" ||\n code === \"http_500\" ||\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"rate_limited\" ||\n code === \"too_many_concurrent_requests\" ||\n code === \"overloaded_error\" ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"stream ended\") ||\n msg.includes(\"stream closed\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\n/**\n * Reconstruct an assistant-ui message from raw agent run events.\n * Mirrors the client-side processEvent logic so the server can persist\n * the assistant's response even if the frontend is disconnected.\n */\nexport function buildAssistantMessage(\n events: RunEvent[],\n runId?: string,\n options: BuildAssistantMessageOptions = {},\n): {\n id: string;\n createdAt: Date;\n role: \"assistant\";\n content: ContentPart[];\n status:\n | { type: \"complete\"; reason: \"stop\" }\n | { type: \"incomplete\"; reason: \"error\" };\n metadata: Record<string, unknown>;\n} | null {\n const content: ContentPart[] = [];\n let toolCallCounter = 0;\n let runError: {\n message: string;\n errorCode?: string;\n details?: string;\n recoverable?: boolean;\n } | null = null;\n let endedAtInternalContinuationBoundary = false;\n\n const appendText = (text: string) => {\n const last = content[content.length - 1];\n if (last && last.type === \"text\") {\n last.text = (last.text ?? \"\") + text;\n } else {\n content.push({ type: \"text\", text });\n }\n };\n\n for (const { event } of events) {\n if (event.type === \"clear\") {\n content.length = 0;\n toolCallCounter = 0;\n continue;\n }\n\n if (event.type === \"text\") {\n appendText(event.text ?? \"\");\n continue;\n }\n\n if (event.type === \"tool_start\") {\n toolCallCounter += 1;\n const toolCallId = runId\n ? `${runId}:tc_${toolCallCounter}`\n : `tc_${toolCallCounter}`;\n const args = (event.input ?? {}) as Record<string, string>;\n content.push({\n type: \"tool-call\",\n toolCallId,\n toolName: event.tool ?? \"unknown\",\n argsText: JSON.stringify(args),\n args,\n });\n continue;\n }\n\n if (event.type === \"tool_done\") {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === event.tool &&\n part.result === undefined\n ) {\n part.result = event.result ?? \"\";\n if (event.mcpApp) part.mcpApp = event.mcpApp;\n if (event.chatUI) part.chatUI = event.chatUI;\n break;\n }\n }\n continue;\n }\n\n if (event.type === \"loop_limit\") {\n // Older servers emitted this as a user-visible terminal event. Treat it\n // as an internal continuation boundary when rebuilding persisted turns.\n if (options.suppressInternalContinuation) {\n endedAtInternalContinuationBoundary = true;\n }\n continue;\n }\n\n if (event.type === \"auto_continue\") {\n if (options.suppressInternalContinuation) {\n endedAtInternalContinuationBoundary = true;\n }\n continue;\n }\n\n if (event.type === \"error\") {\n if (\n options.suppressInternalContinuation &&\n isInternalContinuationError(event)\n ) {\n endedAtInternalContinuationBoundary = true;\n continue;\n }\n if (event.errorCode === \"run_timeout\" && event.recoverable) {\n continue;\n }\n runError = {\n message: event.error,\n ...(event.errorCode ? { errorCode: event.errorCode } : {}),\n ...(event.details ? { details: event.details } : {}),\n ...(event.recoverable ? { recoverable: event.recoverable } : {}),\n };\n appendText(`${content.length > 0 ? \"\\n\\n\" : \"\"}Error: ${event.error}`);\n continue;\n }\n\n // done, missing_api_key — terminal signals, not content\n }\n\n // Only a truly empty turn produces nothing to persist. A turn that ended at\n // an internal continuation boundary (soft-timeout auto_continue, a\n // recoverable gateway error, suppressed loop_limit) DID stream real content\n // — persist it as a partial so the continuation run can fold the next chunk\n // onto it (foldAssistantTurn) instead of the earlier text being dropped.\n if (content.length === 0) return null;\n\n const continued = endedAtInternalContinuationBoundary;\n if (!continued) {\n settleInterruptedToolCalls(content);\n }\n\n const custom: Record<string, unknown> = {};\n if (options.turnId) custom.turnId = options.turnId;\n if (runId) custom.foldedRunIds = [runId];\n if (continued) custom.continued = true;\n if (runError) {\n custom.runError = {\n ...runError,\n ...(runId ? { runId } : {}),\n };\n }\n\n const metadata: Record<string, unknown> = {};\n if (runId) metadata.runId = runId;\n if (Object.keys(custom).length > 0) metadata.custom = custom;\n\n return {\n id: `server-${runId ?? Date.now()}`,\n createdAt: new Date(),\n role: \"assistant\",\n content,\n status: runError\n ? { type: \"incomplete\" as const, reason: \"error\" as const }\n : { type: \"complete\" as const, reason: \"stop\" as const },\n metadata,\n };\n}\n\nfunction getStoredMessage(entry: any): any {\n return entry?.message ?? entry;\n}\n\nfunction getStoredParentId(entry: any): string | null | undefined {\n return typeof entry?.parentId === \"string\" || entry?.parentId === null\n ? entry.parentId\n : undefined;\n}\n\nfunction getStoredRunConfig(entry: any): any {\n return entry && typeof entry === \"object\" && \"runConfig\" in entry\n ? entry.runConfig\n : undefined;\n}\n\nfunction messageId(message: any): string | undefined {\n return typeof message?.id === \"string\" && message.id ? message.id : undefined;\n}\n\nfunction getMessageRunId(message: any): string | undefined {\n const meta = message?.metadata;\n const direct = meta?.runId;\n const custom = meta?.custom?.runId;\n const errorRun = meta?.custom?.runError?.runId ?? meta?.runError?.runId;\n if (typeof direct === \"string\") return direct;\n if (typeof custom === \"string\") return custom;\n if (typeof errorRun === \"string\") return errorRun;\n return undefined;\n}\n\nfunction messageContentIsEmpty(content: unknown): boolean {\n if (Array.isArray(content)) return content.length === 0;\n return content == null || content === \"\";\n}\n\nfunction messageText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content\n .filter(\n (part: any) => part?.type === \"text\" && typeof part.text === \"string\",\n )\n .map((part: any) => part.text)\n .join(\"\");\n}\n\nfunction settleInterruptedToolCalls(content: ContentPart[]): void {\n for (const part of content) {\n if (part.type === \"tool-call\" && part.result === undefined) {\n part.result = INTERRUPTED_TOOL_RESULT;\n }\n }\n}\n\nfunction isTerminalAssistantStatus(status: unknown): boolean {\n const type = (status as { type?: unknown } | undefined)?.type;\n return type === \"complete\" || type === \"incomplete\";\n}\n\nfunction normalizeAttachmentIdentity(attachments: unknown): unknown {\n if (!Array.isArray(attachments) || attachments.length === 0) return undefined;\n return attachments.map((att: any) => ({\n type: att?.type,\n name: att?.name,\n contentType: att?.contentType,\n }));\n}\n\n// Strip the render-only `toolCallId` before fingerprinting. The id is generated\n// differently depending on who built the message — the server now scopes it by\n// run (`${runId}:tc_1`) while the client's live stream uses a bare counter\n// (`tc_1`) — so the client export and the server fold of the SAME tool-call turn\n// would otherwise hash to different fingerprints and fail to dedupe, leaving the\n// turn rendered twice. The id never participates in message identity (history\n// replay regenerates its own ids), so hashing content without it is the correct\n// notion of \"same message\".\nfunction normalizeContentForFingerprint(content: unknown): unknown {\n if (!Array.isArray(content)) return content;\n return content.map((part: any) =>\n part && typeof part === \"object\" && part.type === \"tool-call\"\n ? { ...part, toolCallId: undefined }\n : part,\n );\n}\n\nfunction messageIdentityKeys(message: any): string[] {\n const keys: string[] = [];\n if (typeof message?.id === \"string\" && message.id) {\n keys.push(`id:${message.id}`);\n }\n const runId = getMessageRunId(message);\n if (runId) keys.push(`run:${runId}`);\n // A logical turn is ONE durable assistant message even though it may span\n // several continuation runs, so two messages sharing a turnId (e.g. the\n // client export and the server fold of the same answer) must dedupe to one.\n const turnId = turnIdOf(message);\n if (turnId) keys.push(`turn:${turnId}`);\n\n // Normalize attachments through `normalizeAttachmentIdentity` so an\n // explicit empty `[]` (assistant-ui's default for messages with no\n // attachments) and an omitted/undefined `attachments` field hash to the\n // same fingerprint. Without this, every user message ended up duplicated\n // in `chat_threads`: one copy from `saveThreadData` (runtime export\n // includes `attachments: []`) and one from `persistSubmittedUserMessage`\n // → `buildUserMessage` (omits the field entirely). The merge couldn't\n // dedupe them because their fingerprints differed by exactly one\n // `[]` vs `undefined`. (Repro on slides prod: every user turn produced\n // a `client_user → assistant → server_user` triple instead of a\n // `user → assistant` pair.)\n try {\n keys.push(\n `fingerprint:${JSON.stringify({\n role: message?.role,\n content: normalizeContentForFingerprint(message?.content),\n attachments: normalizeAttachmentIdentity(message?.attachments),\n })}`,\n );\n } catch {\n // Best effort. id/runId usually exist for persisted assistant-ui rows.\n }\n if (message?.role === \"user\") {\n try {\n keys.push(\n `user-fingerprint:${JSON.stringify({\n role: message.role,\n content: normalizeContentForFingerprint(message.content),\n attachments: normalizeAttachmentIdentity(message.attachments),\n })}`,\n );\n } catch {\n // Same best-effort behavior as the full fingerprint.\n }\n }\n return keys;\n}\n\nfunction messagesMatch(a: any, b: any): boolean {\n const bKeys = new Set(messageIdentityKeys(b));\n return messageIdentityKeys(a).some((key) => bKeys.has(key));\n}\n\nfunction chooseMergedMessageEntry(existingEntry: any, incomingEntry: any): any {\n const existing = getStoredMessage(existingEntry);\n const incoming = getStoredMessage(incomingEntry);\n // Same logical turn (client export vs server fold of one accumulating\n // answer): never shrink — keep whichever side accumulated more content, so a\n // stale/lossy export can't overwrite the richer folded turn. Ties prefer the\n // terminal copy.\n const existingTurn = turnIdOf(existing);\n const incomingTurn = turnIdOf(incoming);\n if (\n existing?.role === \"assistant\" &&\n incoming?.role === \"assistant\" &&\n existingTurn &&\n existingTurn === incomingTurn\n ) {\n const existingWeight = assistantContentWeight(existing.content);\n const incomingWeight = assistantContentWeight(incoming.content);\n if (existingWeight > incomingWeight) return existingEntry;\n if (incomingWeight > existingWeight) return incomingEntry;\n return isTerminalAssistantStatus(existing?.status) &&\n !isTerminalAssistantStatus(incoming?.status)\n ? existingEntry\n : incomingEntry;\n }\n if (\n existing?.role === \"assistant\" &&\n incoming?.role === \"assistant\" &&\n isTerminalAssistantStatus(existing?.status) &&\n !isTerminalAssistantStatus(incoming?.status)\n ) {\n return existingEntry;\n }\n return incomingEntry;\n}\n\nfunction normalizeMessageEntry(\n entry: any,\n parentId: string | null,\n): { message: any; parentId: string | null; runConfig?: any } | null {\n const message = getStoredMessage(entry);\n if (!messageId(message)) return null;\n const normalizedMessage = normalizeAssistantToolCallIds(message);\n const runConfig = getStoredRunConfig(entry);\n return {\n message: normalizedMessage,\n parentId,\n ...(runConfig !== undefined ? { runConfig } : {}),\n };\n}\n\nfunction uniqueToolCallId(toolCallId: string, seen: Set<string>): string {\n if (!seen.has(toolCallId)) return toolCallId;\n let suffix = 2;\n let candidate = `${toolCallId}__dedup_${suffix}`;\n while (seen.has(candidate)) {\n suffix += 1;\n candidate = `${toolCallId}__dedup_${suffix}`;\n }\n return candidate;\n}\n\nfunction normalizeAssistantToolCallIds(message: any): any {\n if (message?.role !== \"assistant\" || !Array.isArray(message.content)) {\n return message;\n }\n\n const seen = new Set<string>();\n let changed = false;\n const content = message.content.map((part: any) => {\n if (\n part?.type !== \"tool-call\" ||\n typeof part.toolCallId !== \"string\" ||\n part.toolCallId.length === 0\n ) {\n return part;\n }\n\n const nextToolCallId = uniqueToolCallId(part.toolCallId, seen);\n seen.add(nextToolCallId);\n if (nextToolCallId === part.toolCallId) return part;\n changed = true;\n return { ...part, toolCallId: nextToolCallId };\n });\n\n return changed ? { ...message, content } : message;\n}\n\n/**\n * Convert legacy/partially merged thread data into assistant-ui's exported\n * repository shape and repair parent links so `threadRuntime.import()` cannot\n * fail with \"Parent message not found\".\n */\nexport function normalizeThreadRepository(repo: any): any {\n const normalized = repo && typeof repo === \"object\" ? { ...repo } : {};\n const sourceMessages = Array.isArray(repo?.messages) ? repo.messages : [];\n const messages: Array<{\n message: any;\n parentId: string | null;\n runConfig?: any;\n }> = [];\n const seenIds = new Set<string>();\n let previousId: string | null = null;\n\n for (const entry of sourceMessages) {\n const message = getStoredMessage(entry);\n const id = messageId(message);\n if (!id) continue;\n\n const requestedParentId = getStoredParentId(entry);\n const parentId =\n requestedParentId === null\n ? null\n : requestedParentId && seenIds.has(requestedParentId)\n ? requestedParentId\n : previousId;\n\n const normalizedEntry = normalizeMessageEntry(entry, parentId);\n if (!normalizedEntry) continue;\n\n messages.push(normalizedEntry);\n seenIds.add(id);\n previousId = id;\n }\n\n normalized.messages = messages;\n const headId = typeof repo?.headId === \"string\" ? repo.headId : undefined;\n normalized.headId =\n headId && seenIds.has(headId) ? headId : (previousId ?? null);\n return normalized;\n}\n\n/**\n * Rebuild a flat `EngineMessage[]` from persisted thread_data (the\n * assistant-ui ExportedMessageRepository shape). Text-only — tool calls/results\n * are flattened to their text so a continuation run gets the conversation\n * prefix as plain context (Anthropic's prompt cache makes the resume cheap).\n *\n * Used to resume a background sub-agent in a fresh function invocation (the\n * server-side analog of the browser re-POSTing history for the main chat).\n * Originally inlined in `integrations/webhook-handler.ts`.\n */\nexport function threadDataToEngineMessages(\n threadData: string | Record<string, unknown> | null | undefined,\n): EngineMessage[] {\n const messages: EngineMessage[] = [];\n if (!threadData) return messages;\n let data: any;\n try {\n data = typeof threadData === \"string\" ? JSON.parse(threadData) : threadData;\n } catch {\n return messages;\n }\n if (!Array.isArray(data?.messages)) return messages;\n for (const entry of data.messages) {\n const m = entry?.message ?? entry;\n if (!m || (m.role !== \"user\" && m.role !== \"assistant\")) continue;\n const text =\n typeof m.content === \"string\"\n ? m.content\n : Array.isArray(m.content)\n ? m.content\n .filter(\n (c: any) => c?.type === \"text\" && typeof c.text === \"string\",\n )\n .map((c: any) => c.text)\n .join(\"\\n\")\n : \"\";\n if (!text.trim()) continue;\n messages.push({ role: m.role, content: [{ type: \"text\", text }] });\n }\n return messages;\n}\n\nexport interface CodeAgentThreadTranscriptEvent {\n id: string;\n runId: string;\n kind?: CoreCodeAgentTranscriptEvent[\"kind\"];\n type?: CoreCodeAgentTranscriptEvent[\"kind\"] | \"note\";\n message?: string;\n text?: string;\n createdAt: string;\n metadata?: Record<string, unknown>;\n artifactPath?: string;\n artifactUrl?: string;\n}\n\nexport interface BuildRepositoryFromCodeAgentTranscriptOptions {\n hideCredentialMessages?: boolean;\n}\n\nexport function buildRepositoryFromCodeAgentTranscript(\n events: readonly CodeAgentThreadTranscriptEvent[],\n options: BuildRepositoryFromCodeAgentTranscriptOptions = {},\n): any {\n const normalized = normalizeCodeAgentTranscript(\n events.map(toCoreCodeAgentTranscriptEvent),\n );\n const repo: {\n headId: string | null;\n messages: Array<{ message: any; parentId: string | null }>;\n } = {\n headId: null,\n messages: [],\n };\n\n let headId: string | null = null;\n let assistantTurn: {\n turnIndex: number;\n id: string;\n createdAt: string;\n updatedAt: string;\n runId?: string;\n content: ContentPart[];\n eventIds: string[];\n } | null = null;\n\n const flushAssistant = () => {\n if (!assistantTurn || assistantTurn.content.length === 0) {\n assistantTurn = null;\n return;\n }\n const message = {\n id: assistantTurn.id,\n createdAt: new Date(assistantTurn.createdAt),\n role: \"assistant\" as const,\n content: assistantTurn.content,\n status: { type: \"complete\" as const, reason: \"stop\" as const },\n metadata: {\n ...(assistantTurn.runId ? { runId: assistantTurn.runId } : {}),\n custom: {\n codeAgentTranscriptEventIds: assistantTurn.eventIds,\n },\n },\n };\n repo.messages.push({ message, parentId: headId });\n headId = message.id;\n repo.headId = headId;\n assistantTurn = null;\n };\n\n for (const item of normalized.items) {\n if (item.type === \"user\") {\n flushAssistant();\n const runId = item.events[0]?.runId;\n const userMessage = buildUserMessage({\n text: item.text,\n attachments: codeAgentAttachmentsFromEvents(item.events),\n runId: runId ? `${runId}-${item.id}` : item.id,\n createdAt: new Date(item.createdAt),\n });\n userMessage.id = `code-user-${item.id}`;\n const existingCustom =\n userMessage.metadata.custom &&\n typeof userMessage.metadata.custom === \"object\"\n ? (userMessage.metadata.custom as Record<string, unknown>)\n : {};\n userMessage.metadata = {\n ...userMessage.metadata,\n custom: {\n ...existingCustom,\n submittedRunId: runId,\n codeAgentTranscriptEventIds: item.eventIds,\n },\n };\n repo.messages.push({ message: userMessage, parentId: headId });\n headId = userMessage.id;\n repo.headId = headId;\n continue;\n }\n\n const content = contentPartForCodeAgentTranscriptItem(item, options);\n if (!content) continue;\n\n if (!assistantTurn || assistantTurn.turnIndex !== item.turnIndex) {\n flushAssistant();\n assistantTurn = {\n turnIndex: item.turnIndex,\n id: `code-assistant-${item.turnIndex}-${item.id}`,\n createdAt: item.createdAt,\n updatedAt: item.updatedAt,\n runId: item.events[0]?.runId,\n content: [],\n eventIds: [],\n };\n }\n assistantTurn.updatedAt = item.updatedAt;\n assistantTurn.eventIds.push(...item.eventIds);\n if (content.type === \"text\") {\n const last = assistantTurn.content.at(-1);\n if (last?.type === \"text\") {\n last.text = `${last.text}${last.text ? \"\\n\\n\" : \"\"}${content.text}`;\n } else {\n assistantTurn.content.push(content);\n }\n } else {\n assistantTurn.content.push(content);\n }\n }\n\n flushAssistant();\n return normalizeThreadRepository(repo);\n}\n\nfunction rewriteEntryParentId(\n entry: any,\n idRewrites: Map<string, string>,\n): any {\n const parentId = getStoredParentId(entry);\n if (!parentId) return entry;\n const rewritten = idRewrites.get(parentId);\n if (!rewritten) return entry;\n return { ...entry, parentId: rewritten };\n}\n\n/**\n * Merge an incoming client-side full-thread save over the current SQL copy.\n *\n * The browser exports and PUTs the whole assistant-ui repository. If a server\n * completion save lands first, an older browser export can otherwise replace\n * `thread_data` wholesale and delete the assistant message the server just\n * reconstructed from run events. Preserve server-only messages while still\n * accepting client-only messages and metadata.\n */\nexport interface MergeThreadDataOptions {\n preserveExistingQueuedMessages?: boolean;\n preserveExistingTopLevelKeys?: boolean;\n}\n\nexport function mergeThreadDataForClientSave(\n existingRepo: any,\n incomingRepo: any,\n options: MergeThreadDataOptions = {},\n) {\n const preserveExistingQueuedMessages =\n options.preserveExistingQueuedMessages ?? true;\n const preserveExistingTopLevelKeys =\n options.preserveExistingTopLevelKeys ?? true;\n const existingNormalized = normalizeThreadRepository(existingRepo);\n const incomingNormalized = normalizeThreadRepository(incomingRepo);\n const merged =\n incomingNormalized && typeof incomingNormalized === \"object\"\n ? { ...incomingNormalized }\n : {};\n if (\n preserveExistingTopLevelKeys &&\n existingNormalized &&\n typeof existingNormalized === \"object\"\n ) {\n for (const [key, value] of Object.entries(existingNormalized)) {\n if (key === \"messages\" || key === \"headId\") continue;\n if (key === \"queuedMessages\" && !preserveExistingQueuedMessages) {\n continue;\n }\n if (!(key in merged)) {\n merged[key] = value;\n }\n }\n } else if (\n preserveExistingQueuedMessages &&\n existingNormalized &&\n typeof existingNormalized === \"object\" &&\n existingNormalized.queuedMessages !== undefined &&\n merged.queuedMessages === undefined\n ) {\n merged.queuedMessages = existingNormalized.queuedMessages;\n }\n\n const existingMessages = Array.isArray(existingNormalized?.messages)\n ? existingNormalized.messages\n : null;\n const incomingMessages = Array.isArray(merged.messages)\n ? merged.messages\n : null;\n if (!existingMessages || !incomingMessages) return merged;\n\n const incomingKeySets: Set<string>[] = incomingMessages.map(\n (entry: unknown) => new Set(messageIdentityKeys(getStoredMessage(entry))),\n );\n const usedIncoming = new Set<number>();\n const nextMessages: any[] = [];\n const idRewrites = new Map<string, string>();\n\n for (const existingEntry of existingMessages) {\n const existingKeys = messageIdentityKeys(getStoredMessage(existingEntry));\n const incomingIndex = incomingKeySets.findIndex(\n (keys: Set<string>, index: number) =>\n !usedIncoming.has(index) && existingKeys.some((key) => keys.has(key)),\n );\n\n if (incomingIndex === -1) {\n nextMessages.push(existingEntry);\n continue;\n }\n\n usedIncoming.add(incomingIndex);\n const incomingEntry = incomingMessages[incomingIndex];\n const chosen = chooseMergedMessageEntry(existingEntry, incomingEntry);\n const existingId = messageId(getStoredMessage(existingEntry));\n const chosenId = messageId(getStoredMessage(chosen));\n if (existingId && chosenId && existingId !== chosenId) {\n idRewrites.set(existingId, chosenId);\n }\n nextMessages.push(chosen);\n }\n\n for (let index = 0; index < incomingMessages.length; index++) {\n if (!usedIncoming.has(index)) nextMessages.push(incomingMessages[index]);\n }\n\n merged.messages = nextMessages.map((entry) =>\n rewriteEntryParentId(entry, idRewrites),\n );\n return normalizeThreadRepository(merged);\n}\n\nfunction escapeAttachmentAttribute(value: string): string {\n return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction unwrapTextAttachmentEnvelope(text: string): string {\n const match = text.match(\n /^<attachment\\b[^>]*>\\n?([\\s\\S]*?)\\n?<\\/attachment>$/,\n );\n return match ? match[1] : text;\n}\n\nfunction truncateStoredAttachment(text: string): string {\n const unwrapped = unwrapTextAttachmentEnvelope(text);\n if (unwrapped.length <= MAX_STORED_ATTACHMENT_CHARS) return unwrapped;\n const omitted = unwrapped.length - MAX_STORED_ATTACHMENT_CHARS;\n return `${unwrapped.slice(0, MAX_STORED_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_STORED_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from persisted chat history.]`;\n}\n\nfunction textAttachmentEnvelope(\n att: AgentChatAttachment,\n text: string,\n): string {\n const attrs = [\n `name=\"${escapeAttachmentAttribute(att.name || \"attachment\")}\"`,\n att.contentType\n ? `contentType=\"${escapeAttachmentAttribute(att.contentType)}\"`\n : null,\n att.type ? `type=\"${escapeAttachmentAttribute(att.type)}\"` : null,\n ].filter(Boolean);\n return `<attachment ${attrs.join(\" \")}>\\n${truncateStoredAttachment(text)}\\n</attachment>`;\n}\n\n/**\n * Cap a base64 data-URL string for storage. When the encoded string is over\n * the limit we replace the base64 payload with a truncation marker so the\n * transcript still renders the attachment chip but doesn't bloat SQL.\n */\nfunction capBase64DataUrl(dataUrl: string): string {\n const commaIdx = dataUrl.indexOf(\",\");\n if (commaIdx === -1) return dataUrl;\n const header = dataUrl.slice(0, commaIdx + 1);\n const b64 = dataUrl.slice(commaIdx + 1);\n // Each base64 char encodes 6 bits; 4 chars = 3 bytes.\n const approxBytes = Math.floor((b64.length * 3) / 4);\n if (approxBytes <= MAX_STORED_BASE64_BYTES) return dataUrl;\n return `${header}[base64 truncated — ${approxBytes.toLocaleString()} bytes exceeds storage limit]`;\n}\n\nfunction buildStoredAttachments(\n attachments: AgentChatAttachment[] | undefined,\n runId: string | undefined,\n): any[] {\n return (attachments ?? [])\n .map((att, index) => {\n const id = `server-${runId ?? Date.now()}-attachment-${index}`;\n // When the attachment was successfully pre-uploaded, store only the URL\n // reference. This keeps the SQL thread_data row compact regardless of\n // file size, and lets the transcript render from the hosted URL instead\n // of re-shipping megabytes of base64 on every poll save.\n const uploadedUrl = (att as any).url as string | undefined;\n if (uploadedUrl) {\n return {\n id,\n type: att.type === \"image\" ? \"image\" : \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n // URL reference shape — content[0] uses the hosted URL.\n content:\n att.type === \"image\"\n ? [{ type: \"image\", image: uploadedUrl }]\n : [\n {\n type: \"file\",\n url: uploadedUrl,\n mimeType: att.contentType,\n filename: att.name,\n },\n ],\n // Keep the reference metadata for tooling / read-attachment.\n metadata: {\n uploadUrl: uploadedUrl,\n uploadProvider: (att as any).uploadProvider as string | undefined,\n },\n };\n }\n\n if (att.type === \"image\" && att.data) {\n return {\n id,\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [{ type: \"image\", image: capBase64DataUrl(att.data) }],\n };\n }\n if (att.data) {\n return {\n id,\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [\n {\n type: \"file\",\n data: capBase64DataUrl(att.data),\n mimeType: att.contentType,\n filename: att.name,\n },\n ],\n };\n }\n if (typeof att.text === \"string\" && att.text.length > 0) {\n return {\n id,\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [\n { type: \"text\", text: textAttachmentEnvelope(att, att.text) },\n ],\n };\n }\n return null;\n })\n .filter(Boolean);\n}\n\nexport function buildUserMessage(opts: {\n text: string;\n attachments?: AgentChatAttachment[];\n runId?: string;\n createdAt?: Date;\n}): {\n id: string;\n createdAt: Date;\n role: \"user\";\n content: ContentPart[];\n attachments?: any[];\n metadata: Record<string, unknown>;\n} {\n const attachments = buildStoredAttachments(opts.attachments, opts.runId);\n return {\n id: `server-user-${opts.runId ?? Date.now()}`,\n createdAt: opts.createdAt ?? new Date(),\n role: \"user\",\n content: [{ type: \"text\", text: opts.text }],\n ...(attachments.length > 0 ? { attachments } : {}),\n metadata: {\n custom: {\n submittedRunId: opts.runId,\n },\n },\n };\n}\n\nfunction toCoreCodeAgentTranscriptEvent(\n event: CodeAgentThreadTranscriptEvent,\n): CoreCodeAgentTranscriptEvent {\n return {\n schemaVersion: 1,\n id: event.id,\n runId: event.runId,\n kind: (event.kind ??\n event.type ??\n \"status\") as CoreCodeAgentTranscriptEvent[\"kind\"],\n message: event.message ?? event.text ?? \"\",\n createdAt: event.createdAt,\n metadata: {\n ...(event.metadata ?? {}),\n ...(event.artifactPath ? { artifactPath: event.artifactPath } : {}),\n ...(event.artifactUrl ? { artifactUrl: event.artifactUrl } : {}),\n },\n };\n}\n\nfunction contentPartForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentTranscriptItem,\n options: BuildRepositoryFromCodeAgentTranscriptOptions,\n): ContentPart | null {\n if (item.type === \"assistant\") {\n return item.text.trim() ? { type: \"text\", text: item.text } : null;\n }\n if (item.type === \"tool\") {\n return toolContentPartForCodeAgentTranscriptItem(item);\n }\n if (item.type === \"status\") {\n const text = statusTextForCodeAgentTranscriptItem(item, options);\n return text ? { type: \"text\", text } : null;\n }\n return null;\n}\n\nfunction toolContentPartForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentToolEvent,\n): ContentPart {\n return {\n type: \"tool-call\",\n toolCallId: `code-tool-${item.id}`,\n toolName: item.tool ?? item.label ?? \"code-agent\",\n argsText: previewCodeAgentTranscriptValue(item.input) ?? \"\",\n args: recordArgsForCodeAgentTool(item.input),\n ...(item.result !== undefined\n ? { result: previewCodeAgentTranscriptValue(item.result) ?? \"\" }\n : {}),\n ...(item.structuredMeta ? { structuredMeta: item.structuredMeta } : {}),\n };\n}\n\nfunction statusTextForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentStatusEvent,\n options: BuildRepositoryFromCodeAgentTranscriptOptions,\n): string | null {\n if (options.hideCredentialMessages && isCredentialCodeAgentText(item.text)) {\n return null;\n }\n if (item.statusKind === \"artifact\") {\n const event = item.events[0];\n const path =\n stringRecordValue(event?.metadata, \"artifactPath\") ??\n stringRecordValue(event?.metadata, \"path\");\n const url = stringRecordValue(event?.metadata, \"artifactUrl\");\n const target = url ?? path;\n return target\n ? `Artifact: ${item.text}\\n${target}`\n : `Artifact: ${item.text}`;\n }\n if (item.level === \"info\" && item.statusKind !== \"note\") return null;\n return item.text;\n}\n\nfunction codeAgentAttachmentsFromEvents(\n events: readonly CoreCodeAgentTranscriptEvent[],\n): AgentChatAttachment[] {\n for (const event of events) {\n const raw = event.metadata?.attachments;\n if (!Array.isArray(raw) || raw.length === 0) continue;\n const attachments: AgentChatAttachment[] = [];\n for (const item of raw) {\n if (!item || typeof item !== \"object\") continue;\n const record = item as Record<string, unknown>;\n const name = stringRecordValue(record, \"name\");\n if (!name) continue;\n const contentType = stringRecordValue(record, \"type\");\n const text = stringRecordValue(record, \"text\");\n const dataUrl = stringRecordValue(record, \"dataUrl\");\n attachments.push({\n type: dataUrl ? \"image\" : \"file\",\n name,\n ...(contentType ? { contentType } : {}),\n ...(text ? { text } : {}),\n ...(dataUrl ? { data: dataUrl } : {}),\n });\n }\n if (attachments.length > 0) return attachments;\n }\n return [];\n}\n\nfunction recordArgsForCodeAgentTool(value: unknown): Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n const result: Record<string, string> = {};\n for (const [key, entry] of Object.entries(value)) {\n result[key] =\n typeof entry === \"string\"\n ? entry\n : (previewCodeAgentTranscriptValue(entry) ?? \"\");\n }\n return result;\n}\n\nfunction previewCodeAgentTranscriptValue(value: unknown): string | undefined {\n if (value === undefined || value === null) return undefined;\n const text =\n typeof value === \"string\" ? value : (JSON.stringify(value, null, 2) ?? \"\");\n const trimmed = text.trim();\n if (!trimmed) return undefined;\n return trimmed.length > 4000 ? `${trimmed.slice(0, 4000)}\\n...` : trimmed;\n}\n\nfunction stringRecordValue(\n record: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = record?.[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction isCredentialCodeAgentText(value: string): boolean {\n return /No LLM provider key was found|Missing credentials/i.test(value);\n}\n\nexport function upsertUserMessage(repo: any, userMsg: UserMessage): any {\n const nextRepo = normalizeThreadRepository(repo);\n\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n if (lastMsg?.role === \"user\" && messagesMatch(lastMsg, userMsg)) {\n return nextRepo;\n }\n\n const parentId =\n lastIndex >= 0 ? (messageId(getStoredMessage(lastEntry)) ?? null) : null;\n nextRepo.messages.push({ message: userMsg, parentId });\n nextRepo.headId = userMsg.id;\n return nextRepo;\n}\n\nfunction shouldReplaceLastAssistant(\n lastMessage: any,\n assistantMsg: AssistantMessage,\n): boolean {\n const lastContent = lastMessage?.content;\n if (messageContentIsEmpty(lastContent)) return true;\n\n const lastRunId = getMessageRunId(lastMessage);\n const nextRunId = getMessageRunId(assistantMsg);\n if (lastRunId && nextRunId && lastRunId === nextRunId) return true;\n if (lastRunId && nextRunId && lastRunId !== nextRunId) return false;\n\n const lastStatus = lastMessage?.status;\n if (lastStatus && !isTerminalAssistantStatus(lastStatus)) return true;\n\n try {\n if (JSON.stringify(lastContent) === JSON.stringify(assistantMsg.content)) {\n return true;\n }\n } catch {\n // Fall through to the text-prefix check.\n }\n\n const lastText = messageText(lastContent).trim();\n const nextText = messageText(assistantMsg.content).trim();\n if (isTerminalAssistantStatus(lastStatus)) return false;\n return Boolean(lastText && nextText && nextText.startsWith(lastText));\n}\n\n/**\n * Merge the server-reconstructed assistant message into persisted\n * assistant-ui thread data.\n *\n * The browser periodically saves thread data while a run is still streaming.\n * That can leave the last assistant message non-empty but partial/pending.\n * Completion must replace that same-run partial message instead of treating\n * any assistant content as proof that the frontend already saved the final\n * turn.\n */\nexport function upsertAssistantMessage(\n repo: any,\n assistantMsg: AssistantMessage,\n): any {\n const nextRepo = normalizeThreadRepository(repo);\n\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n const lastRole = lastMsg?.role;\n\n if (\n lastRole === \"assistant\" &&\n shouldReplaceLastAssistant(lastMsg, assistantMsg)\n ) {\n nextRepo.messages[lastIndex] = { ...lastEntry, message: assistantMsg };\n nextRepo.headId = assistantMsg.id;\n return nextRepo;\n }\n\n const parentId =\n nextRepo.messages.length > 0\n ? (messageId(\n getStoredMessage(nextRepo.messages[nextRepo.messages.length - 1]),\n ) ?? null)\n : null;\n nextRepo.messages.push({ message: assistantMsg, parentId });\n nextRepo.headId = assistantMsg.id;\n return nextRepo;\n}\n\nfunction turnIdOf(message: any): string | undefined {\n const t = message?.metadata?.custom?.turnId;\n return typeof t === \"string\" && t ? t : undefined;\n}\n\nfunction foldedRunIdsOf(message: any): string[] {\n const ids = message?.metadata?.custom?.foldedRunIds;\n return Array.isArray(ids)\n ? ids.filter((x: unknown): x is string => typeof x === \"string\")\n : [];\n}\n\n/** Rough size of an assistant message's content, used only to pick the larger\n * of two representations of the same chunk so a fold can never shrink. */\nfunction assistantContentWeight(content: unknown): number {\n if (!Array.isArray(content)) return 0;\n let weight = 0;\n for (const part of content) {\n if (part?.type === \"text\" && typeof part.text === \"string\") {\n weight += part.text.length;\n } else {\n weight += 1;\n }\n }\n return weight;\n}\n\n/** Concatenate continuation content onto the accumulated turn, merging a\n * trailing+leading text run so the resumed answer reads as one flowing\n * message rather than two stacked fragments. */\nfunction appendFoldedContent(existing: any[], incoming: any[]): any[] {\n const merged = existing.map((p) => ({ ...p }));\n for (const part of incoming) {\n const last = merged[merged.length - 1];\n if (\n part?.type === \"text\" &&\n typeof part.text === \"string\" &&\n last?.type === \"text\" &&\n typeof last.text === \"string\"\n ) {\n last.text = `${last.text}${part.text}`;\n } else {\n merged.push({ ...part });\n }\n }\n return normalizeAssistantToolCallIds({\n role: \"assistant\",\n content: merged,\n }).content;\n}\n\n/**\n * Fold a continuation run's assistant message onto the single durable message\n * for its logical turn (identified by `turnId`), so a turn that spans several\n * continuation runs accumulates into ONE message that only ever grows. This is\n * the server-side analog of an append-only rollout: the durable transcript is\n * a monotonic fold over every run in the turn, never a per-run snapshot that\n * drops the earlier chunks.\n *\n * Idempotent and never-shrinking, so it is safe to run alongside the client's\n * full-thread export (which may write the same turn from the other side):\n * - First chunk of a turn → appended as a fresh message.\n * - A run whose content is already represented (already folded, or the client\n * saved it) → kept as-is, choosing whichever copy has more content.\n * - A new chunk → appended onto the accumulated turn.\n * Falls back to per-run upsert when no `turnId` is available (turn == run).\n */\nexport function foldAssistantTurn(\n repo: any,\n assistantMsg: AssistantMessage,\n options: { turnId?: string; runId?: string },\n): any {\n const turnId = options.turnId;\n const runId = options.runId;\n if (!turnId) return upsertAssistantMessage(repo, assistantMsg);\n\n const nextRepo = normalizeThreadRepository(repo);\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n\n const sameTurn =\n lastMsg?.role === \"assistant\" &&\n (turnIdOf(lastMsg) === turnId ||\n // A message the client wrote for one of this turn's runs before it\n // carried a turnId stamp.\n (!!runId && getMessageRunId(lastMsg) === runId));\n\n if (!sameTurn) {\n // First chunk of this turn (or the previous assistant belongs to an\n // earlier turn) — append as a fresh message; buildAssistantMessage already\n // stamped turnId + foldedRunIds onto it.\n return upsertAssistantMessage(repo, assistantMsg);\n }\n\n const existingContent = Array.isArray(lastMsg.content) ? lastMsg.content : [];\n const incomingContent = Array.isArray(assistantMsg.content)\n ? assistantMsg.content\n : [];\n const existingFolded = foldedRunIdsOf(lastMsg);\n const runAlreadyFolded =\n !!runId &&\n (existingFolded.includes(runId) || getMessageRunId(lastMsg) === runId);\n\n // If this run's chunk is already represented in the turn (the client saved\n // it, or we already folded it), do not re-append — keep the larger copy so\n // the turn never shrinks. Otherwise fold this chunk onto the accumulated turn.\n const mergedContent = runAlreadyFolded\n ? assistantContentWeight(incomingContent) >\n assistantContentWeight(existingContent)\n ? incomingContent\n : existingContent\n : appendFoldedContent(existingContent, incomingContent);\n\n const mergedFolded = Array.from(\n new Set([...existingFolded, ...(runId ? [runId] : [])]),\n );\n\n const existingCustom =\n lastMsg.metadata?.custom && typeof lastMsg.metadata.custom === \"object\"\n ? (lastMsg.metadata.custom as Record<string, unknown>)\n : {};\n const incomingCustom =\n assistantMsg.metadata?.custom &&\n typeof assistantMsg.metadata.custom === \"object\"\n ? (assistantMsg.metadata.custom as Record<string, unknown>)\n : {};\n\n const mergedCustom: Record<string, unknown> = {\n ...existingCustom,\n ...incomingCustom,\n turnId,\n foldedRunIds: mergedFolded,\n };\n // Only the freshest chunk decides whether the turn is still continuing.\n if (incomingCustom.continued !== true) delete mergedCustom.continued;\n\n const mergedMessage = {\n ...lastMsg,\n content: normalizeAssistantToolCallIds({\n role: \"assistant\",\n content: mergedContent,\n }).content,\n // The freshest chunk's status wins: a clean done supersedes a prior\n // partial; a real error supersedes a partial.\n status: assistantMsg.status ?? lastMsg.status,\n metadata: {\n ...lastMsg.metadata,\n runId: runId ?? lastMsg.metadata?.runId,\n custom: mergedCustom,\n },\n };\n\n nextRepo.messages[lastIndex] = { ...lastEntry, message: mergedMessage };\n nextRepo.headId = mergedMessage.id ?? nextRepo.headId;\n return nextRepo;\n}\n\nexport function normalizeThreadTitle(value: unknown): string {\n if (typeof value !== \"string\") return \"\";\n return value.replace(/\\s+/g, \" \").trim().slice(0, 160);\n}\n\n/**\n * Extract title and preview from a thread runtime export.\n * Isomorphic — works on both server and client.\n */\nexport function extractThreadMeta(repo: any): {\n title: string;\n preview: string;\n} {\n const titleOverride = normalizeThreadTitle(repo?._titleOverride);\n const msgs = repo?.messages;\n if (!Array.isArray(msgs) || msgs.length === 0)\n return { title: titleOverride, preview: \"\" };\n\n let title = \"\";\n let preview = \"\";\n for (const entry of msgs) {\n // Support both wrapped ({ message: { role, content } }) and flat ({ role, content }) formats\n const msg = entry?.message ?? entry;\n if (msg.role !== \"user\") continue;\n const textParts = Array.isArray(msg.content)\n ? msg.content\n .filter((p: any) => p.type === \"text\")\n .map((p: any) => p.text)\n .join(\" \")\n : typeof msg.content === \"string\"\n ? msg.content\n : \"\";\n if (textParts.trim()) {\n if (!title) title = textParts.trim().slice(0, 80);\n preview = textParts.trim().slice(0, 120);\n }\n }\n return { title: titleOverride || title, preview };\n}\n"]}
1
+ {"version":3,"file":"thread-data-builder.js","sourceRoot":"","sources":["../../src/agent/thread-data-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentChatAttachment, RunEvent } from \"./types.js\";\nimport type { EngineMessage } from \"./engine/types.js\";\nimport type { ActionChatUIConfig } from \"../action-ui.js\";\nimport {\n normalizeCodeAgentTranscript,\n type CodeAgentTranscriptEvent as CoreCodeAgentTranscriptEvent,\n type NormalizedCodeAgentStatusEvent,\n type NormalizedCodeAgentToolEvent,\n type NormalizedCodeAgentTranscriptItem,\n} from \"../code-agents/transcript-normalizer.js\";\nimport type { AgentMcpAppPayload } from \"../mcp-client/app-result.js\";\n\ninterface ContentPart {\n type: string;\n text?: string;\n toolCallId?: string;\n toolName?: string;\n argsText?: string;\n args?: Record<string, string>;\n result?: string;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n}\n\ninterface BuildAssistantMessageOptions {\n suppressInternalContinuation?: boolean;\n /**\n * Logical-turn identity. When set it is stamped onto the message metadata so\n * continuation runs of the same turn can be folded onto a single durable\n * assistant message (see foldAssistantTurn) instead of each run dropping or\n * overwriting the others.\n */\n turnId?: string;\n}\n\ntype AssistantMessage = NonNullable<ReturnType<typeof buildAssistantMessage>>;\ntype UserMessage = ReturnType<typeof buildUserMessage>;\n\nconst INTERRUPTED_TOOL_RESULT =\n \"Interrupted before this tool returned a result.\";\n\nconst MAX_STORED_ATTACHMENT_CHARS = 60_000;\n/**\n * When no file-upload provider is configured we fall back to storing base64\n * directly in the SQL thread_data column. Cap the raw base64 per attachment to\n * avoid unbounded row growth. Attachments larger than this get a '[truncated]'\n * marker so the transcript still renders but the column stays sane.\n */\nconst MAX_STORED_BASE64_BYTES = 2 * 1024 * 1024; // 2 MB per attachment\n\nfunction isInternalContinuationError(event: {\n error: string;\n errorCode?: string;\n recoverable?: boolean;\n}): boolean {\n const code = String(event.errorCode ?? \"\").toLowerCase();\n const msg = event.error.toLowerCase();\n if (code === \"builder_gateway_error\") return false;\n return (\n event.recoverable === true ||\n code === \"builder_gateway_timeout\" ||\n code === \"stale_run\" ||\n code === \"timeout\" ||\n code === \"timeout_error\" ||\n code === \"http_408\" ||\n code === \"http_429\" ||\n code === \"http_500\" ||\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"rate_limited\" ||\n code === \"too_many_concurrent_requests\" ||\n code === \"overloaded_error\" ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"stream ended\") ||\n msg.includes(\"stream closed\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\n/**\n * Reconstruct an assistant-ui message from raw agent run events.\n * Mirrors the client-side processEvent logic so the server can persist\n * the assistant's response even if the frontend is disconnected.\n */\nexport function buildAssistantMessage(\n events: RunEvent[],\n runId?: string,\n options: BuildAssistantMessageOptions = {},\n): {\n id: string;\n createdAt: Date;\n role: \"assistant\";\n content: ContentPart[];\n status:\n | { type: \"complete\"; reason: \"stop\" }\n | { type: \"incomplete\"; reason: \"error\" };\n metadata: Record<string, unknown>;\n} | null {\n const content: ContentPart[] = [];\n let toolCallCounter = 0;\n let runError: {\n message: string;\n errorCode?: string;\n details?: string;\n recoverable?: boolean;\n } | null = null;\n let endedAtInternalContinuationBoundary = false;\n\n const appendText = (text: string) => {\n const last = content[content.length - 1];\n if (last && last.type === \"text\") {\n last.text = (last.text ?? \"\") + text;\n } else {\n content.push({ type: \"text\", text });\n }\n };\n\n for (const { event } of events) {\n if (event.type === \"clear\") {\n content.length = 0;\n toolCallCounter = 0;\n continue;\n }\n\n if (event.type === \"text\") {\n appendText(event.text ?? \"\");\n continue;\n }\n\n if (event.type === \"tool_start\") {\n toolCallCounter += 1;\n const toolCallId = runId\n ? `${runId}:tc_${toolCallCounter}`\n : `tc_${toolCallCounter}`;\n const args = (event.input ?? {}) as Record<string, string>;\n content.push({\n type: \"tool-call\",\n toolCallId,\n toolName: event.tool ?? \"unknown\",\n argsText: JSON.stringify(args),\n args,\n });\n continue;\n }\n\n if (event.type === \"tool_done\") {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === event.tool &&\n part.result === undefined\n ) {\n part.result = event.result ?? \"\";\n if (event.mcpApp) part.mcpApp = event.mcpApp;\n if (event.chatUI) part.chatUI = event.chatUI;\n break;\n }\n }\n continue;\n }\n\n if (event.type === \"loop_limit\") {\n // Older servers emitted this as a user-visible terminal event. Treat it\n // as an internal continuation boundary when rebuilding persisted turns.\n if (options.suppressInternalContinuation) {\n endedAtInternalContinuationBoundary = true;\n }\n continue;\n }\n\n if (event.type === \"auto_continue\") {\n if (options.suppressInternalContinuation) {\n endedAtInternalContinuationBoundary = true;\n }\n continue;\n }\n\n if (event.type === \"error\") {\n if (\n options.suppressInternalContinuation &&\n isInternalContinuationError(event)\n ) {\n endedAtInternalContinuationBoundary = true;\n continue;\n }\n if (event.errorCode === \"run_timeout\" && event.recoverable) {\n continue;\n }\n runError = {\n message: event.error,\n ...(event.errorCode ? { errorCode: event.errorCode } : {}),\n ...(event.details ? { details: event.details } : {}),\n ...(event.recoverable ? { recoverable: event.recoverable } : {}),\n };\n appendText(`${content.length > 0 ? \"\\n\\n\" : \"\"}Error: ${event.error}`);\n continue;\n }\n\n // done, missing_api_key — terminal signals, not content\n }\n\n // Only a truly empty turn produces nothing to persist. A turn that ended at\n // an internal continuation boundary (soft-timeout auto_continue, a\n // recoverable gateway error, suppressed loop_limit) DID stream real content\n // — persist it as a partial so the continuation run can fold the next chunk\n // onto it (foldAssistantTurn) instead of the earlier text being dropped.\n if (content.length === 0) return null;\n\n const continued = endedAtInternalContinuationBoundary;\n if (!continued) {\n settleInterruptedToolCalls(content);\n }\n\n const custom: Record<string, unknown> = {};\n if (options.turnId) custom.turnId = options.turnId;\n if (runId) custom.foldedRunIds = [runId];\n if (continued) custom.continued = true;\n if (runError) {\n custom.runError = {\n ...runError,\n ...(runId ? { runId } : {}),\n };\n }\n\n const metadata: Record<string, unknown> = {};\n if (runId) metadata.runId = runId;\n if (Object.keys(custom).length > 0) metadata.custom = custom;\n\n return {\n id: `server-${runId ?? Date.now()}`,\n createdAt: new Date(),\n role: \"assistant\",\n content,\n status: runError\n ? { type: \"incomplete\" as const, reason: \"error\" as const }\n : { type: \"complete\" as const, reason: \"stop\" as const },\n metadata,\n };\n}\n\nfunction getStoredMessage(entry: any): any {\n return entry?.message ?? entry;\n}\n\nfunction getStoredParentId(entry: any): string | null | undefined {\n return typeof entry?.parentId === \"string\" || entry?.parentId === null\n ? entry.parentId\n : undefined;\n}\n\nfunction getStoredRunConfig(entry: any): any {\n return entry && typeof entry === \"object\" && \"runConfig\" in entry\n ? entry.runConfig\n : undefined;\n}\n\nfunction messageId(message: any): string | undefined {\n return typeof message?.id === \"string\" && message.id ? message.id : undefined;\n}\n\nfunction getMessageRunId(message: any): string | undefined {\n const meta = message?.metadata;\n const direct = meta?.runId;\n const custom = meta?.custom?.runId;\n const errorRun = meta?.custom?.runError?.runId ?? meta?.runError?.runId;\n if (typeof direct === \"string\") return direct;\n if (typeof custom === \"string\") return custom;\n if (typeof errorRun === \"string\") return errorRun;\n return undefined;\n}\n\nfunction messageContentIsEmpty(content: unknown): boolean {\n if (Array.isArray(content)) return content.length === 0;\n return content == null || content === \"\";\n}\n\nfunction messageText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content\n .filter(\n (part: any) => part?.type === \"text\" && typeof part.text === \"string\",\n )\n .map((part: any) => part.text)\n .join(\"\");\n}\n\nfunction settleInterruptedToolCalls(content: ContentPart[]): void {\n for (const part of content) {\n if (part.type === \"tool-call\" && part.result === undefined) {\n part.result = INTERRUPTED_TOOL_RESULT;\n }\n }\n}\n\nfunction isTerminalAssistantStatus(status: unknown): boolean {\n const type = (status as { type?: unknown } | undefined)?.type;\n return type === \"complete\" || type === \"incomplete\";\n}\n\nfunction normalizeAttachmentIdentity(attachments: unknown): unknown {\n if (!Array.isArray(attachments) || attachments.length === 0) return undefined;\n return attachments.map((att: any) => ({\n type: att?.type,\n name: att?.name,\n contentType: att?.contentType,\n }));\n}\n\n// Strip the render-only `toolCallId` before fingerprinting. The id is generated\n// differently depending on who built the message — the server now scopes it by\n// run (`${runId}:tc_1`) while the client's live stream uses a bare counter\n// (`tc_1`) — so the client export and the server fold of the SAME tool-call turn\n// would otherwise hash to different fingerprints and fail to dedupe, leaving the\n// turn rendered twice. The id never participates in message identity (history\n// replay regenerates its own ids), so hashing content without it is the correct\n// notion of \"same message\".\nfunction normalizeContentForFingerprint(content: unknown): unknown {\n if (!Array.isArray(content)) return content;\n return content.map((part: any) =>\n part && typeof part === \"object\" && part.type === \"tool-call\"\n ? { ...part, toolCallId: undefined }\n : part,\n );\n}\n\nfunction messageIdentityKeys(message: any): string[] {\n const keys: string[] = [];\n if (typeof message?.id === \"string\" && message.id) {\n keys.push(`id:${message.id}`);\n }\n const runId = getMessageRunId(message);\n if (runId) keys.push(`run:${runId}`);\n // A logical turn is ONE durable assistant message even though it may span\n // several continuation runs, so two messages sharing a turnId (e.g. the\n // client export and the server fold of the same answer) must dedupe to one.\n const turnId = turnIdOf(message);\n if (turnId) keys.push(`turn:${turnId}`);\n\n // Normalize attachments through `normalizeAttachmentIdentity` so an\n // explicit empty `[]` (assistant-ui's default for messages with no\n // attachments) and an omitted/undefined `attachments` field hash to the\n // same fingerprint. Without this, every user message ended up duplicated\n // in `chat_threads`: one copy from `saveThreadData` (runtime export\n // includes `attachments: []`) and one from `persistSubmittedUserMessage`\n // → `buildUserMessage` (omits the field entirely). The merge couldn't\n // dedupe them because their fingerprints differed by exactly one\n // `[]` vs `undefined`. (Repro on slides prod: every user turn produced\n // a `client_user → assistant → server_user` triple instead of a\n // `user → assistant` pair.)\n try {\n keys.push(\n `fingerprint:${JSON.stringify({\n role: message?.role,\n content: normalizeContentForFingerprint(message?.content),\n attachments: normalizeAttachmentIdentity(message?.attachments),\n })}`,\n );\n } catch {\n // Best effort. id/runId usually exist for persisted assistant-ui rows.\n }\n if (message?.role === \"user\") {\n try {\n keys.push(\n `user-fingerprint:${JSON.stringify({\n role: message.role,\n content: normalizeContentForFingerprint(message.content),\n attachments: normalizeAttachmentIdentity(message.attachments),\n })}`,\n );\n } catch {\n // Same best-effort behavior as the full fingerprint.\n }\n }\n return keys;\n}\n\nfunction messagesMatch(a: any, b: any): boolean {\n const bKeys = new Set(messageIdentityKeys(b));\n return messageIdentityKeys(a).some((key) => bKeys.has(key));\n}\n\nfunction chooseMergedMessageEntry(existingEntry: any, incomingEntry: any): any {\n const existing = getStoredMessage(existingEntry);\n const incoming = getStoredMessage(incomingEntry);\n // Same logical turn (client export vs server fold of one accumulating\n // answer): never shrink — keep whichever side accumulated more content, so a\n // stale/lossy export can't overwrite the richer folded turn. Ties prefer the\n // terminal copy.\n const existingTurn = turnIdOf(existing);\n const incomingTurn = turnIdOf(incoming);\n if (\n existing?.role === \"assistant\" &&\n incoming?.role === \"assistant\" &&\n existingTurn &&\n existingTurn === incomingTurn\n ) {\n const existingWeight = assistantContentWeight(existing.content);\n const incomingWeight = assistantContentWeight(incoming.content);\n if (existingWeight > incomingWeight) return existingEntry;\n if (incomingWeight > existingWeight) return incomingEntry;\n return isTerminalAssistantStatus(existing?.status) &&\n !isTerminalAssistantStatus(incoming?.status)\n ? existingEntry\n : incomingEntry;\n }\n if (\n existing?.role === \"assistant\" &&\n incoming?.role === \"assistant\" &&\n isTerminalAssistantStatus(existing?.status) &&\n !isTerminalAssistantStatus(incoming?.status)\n ) {\n return existingEntry;\n }\n return incomingEntry;\n}\n\nfunction normalizeMessageEntry(\n entry: any,\n parentId: string | null,\n): { message: any; parentId: string | null; runConfig?: any } | null {\n const message = getStoredMessage(entry);\n if (!messageId(message)) return null;\n const normalizedMessage = normalizeAssistantToolCallIds(message);\n const runConfig = getStoredRunConfig(entry);\n return {\n message: normalizedMessage,\n parentId,\n ...(runConfig !== undefined ? { runConfig } : {}),\n };\n}\n\nfunction uniqueToolCallId(toolCallId: string, seen: Set<string>): string {\n if (!seen.has(toolCallId)) return toolCallId;\n let suffix = 2;\n let candidate = `${toolCallId}__dedup_${suffix}`;\n while (seen.has(candidate)) {\n suffix += 1;\n candidate = `${toolCallId}__dedup_${suffix}`;\n }\n return candidate;\n}\n\nfunction normalizeAssistantToolCallIds(message: any): any {\n if (message?.role !== \"assistant\" || !Array.isArray(message.content)) {\n return message;\n }\n\n const seen = new Set<string>();\n let changed = false;\n const content = message.content.map((part: any) => {\n if (\n part?.type !== \"tool-call\" ||\n typeof part.toolCallId !== \"string\" ||\n part.toolCallId.length === 0\n ) {\n return part;\n }\n\n const nextToolCallId = uniqueToolCallId(part.toolCallId, seen);\n seen.add(nextToolCallId);\n if (nextToolCallId === part.toolCallId) return part;\n changed = true;\n return { ...part, toolCallId: nextToolCallId };\n });\n\n return changed ? { ...message, content } : message;\n}\n\n/**\n * Convert legacy/partially merged thread data into assistant-ui's exported\n * repository shape and repair parent links so `threadRuntime.import()` cannot\n * fail with \"Parent message not found\".\n */\nexport function normalizeThreadRepository(repo: any): any {\n const normalized = repo && typeof repo === \"object\" ? { ...repo } : {};\n const sourceMessages = Array.isArray(repo?.messages) ? repo.messages : [];\n const messages: Array<{\n message: any;\n parentId: string | null;\n runConfig?: any;\n }> = [];\n const seenIds = new Set<string>();\n let previousId: string | null = null;\n\n for (const entry of sourceMessages) {\n const message = getStoredMessage(entry);\n const id = messageId(message);\n if (!id) continue;\n\n const requestedParentId = getStoredParentId(entry);\n const parentId =\n requestedParentId === null\n ? null\n : requestedParentId && seenIds.has(requestedParentId)\n ? requestedParentId\n : previousId;\n\n const normalizedEntry = normalizeMessageEntry(entry, parentId);\n if (!normalizedEntry) continue;\n\n messages.push(normalizedEntry);\n seenIds.add(id);\n previousId = id;\n }\n\n normalized.messages = messages;\n const headId = typeof repo?.headId === \"string\" ? repo.headId : undefined;\n normalized.headId =\n headId && seenIds.has(headId) ? headId : (previousId ?? null);\n return normalized;\n}\n\n/**\n * Rebuild a flat `EngineMessage[]` from persisted thread_data (the\n * assistant-ui ExportedMessageRepository shape). Text-only — tool calls/results\n * are flattened to their text so a continuation run gets the conversation\n * prefix as plain context (Anthropic's prompt cache makes the resume cheap).\n *\n * Used to resume a background sub-agent in a fresh function invocation (the\n * server-side analog of the browser re-POSTing history for the main chat).\n * Originally inlined in `integrations/webhook-handler.ts`.\n */\nexport function threadDataToEngineMessages(\n threadData: string | Record<string, unknown> | null | undefined,\n): EngineMessage[] {\n const messages: EngineMessage[] = [];\n if (!threadData) return messages;\n let data: any;\n try {\n data = typeof threadData === \"string\" ? JSON.parse(threadData) : threadData;\n } catch {\n return messages;\n }\n if (!Array.isArray(data?.messages)) return messages;\n for (const entry of data.messages) {\n const m = entry?.message ?? entry;\n if (!m || (m.role !== \"user\" && m.role !== \"assistant\")) continue;\n const text =\n typeof m.content === \"string\"\n ? m.content\n : Array.isArray(m.content)\n ? m.content\n .filter(\n (c: any) => c?.type === \"text\" && typeof c.text === \"string\",\n )\n .map((c: any) => c.text)\n .join(\"\\n\")\n : \"\";\n if (!text.trim()) continue;\n messages.push({ role: m.role, content: [{ type: \"text\", text }] });\n }\n return messages;\n}\n\nexport interface CodeAgentThreadTranscriptEvent {\n id: string;\n runId: string;\n kind?: CoreCodeAgentTranscriptEvent[\"kind\"];\n type?: CoreCodeAgentTranscriptEvent[\"kind\"] | \"note\";\n message?: string;\n text?: string;\n createdAt: string;\n metadata?: Record<string, unknown>;\n artifactPath?: string;\n artifactUrl?: string;\n}\n\nexport interface BuildRepositoryFromCodeAgentTranscriptOptions {\n hideCredentialMessages?: boolean;\n}\n\nexport function buildRepositoryFromCodeAgentTranscript(\n events: readonly CodeAgentThreadTranscriptEvent[],\n options: BuildRepositoryFromCodeAgentTranscriptOptions = {},\n): any {\n const normalized = normalizeCodeAgentTranscript(\n events.map(toCoreCodeAgentTranscriptEvent),\n );\n const repo: {\n headId: string | null;\n messages: Array<{ message: any; parentId: string | null }>;\n } = {\n headId: null,\n messages: [],\n };\n\n let headId: string | null = null;\n let assistantTurn: {\n turnIndex: number;\n id: string;\n createdAt: string;\n updatedAt: string;\n runId?: string;\n content: ContentPart[];\n eventIds: string[];\n } | null = null;\n\n const flushAssistant = () => {\n if (!assistantTurn || assistantTurn.content.length === 0) {\n assistantTurn = null;\n return;\n }\n const message = {\n id: assistantTurn.id,\n createdAt: new Date(assistantTurn.createdAt),\n role: \"assistant\" as const,\n content: assistantTurn.content,\n status: { type: \"complete\" as const, reason: \"stop\" as const },\n metadata: {\n ...(assistantTurn.runId ? { runId: assistantTurn.runId } : {}),\n custom: {\n codeAgentTranscriptEventIds: assistantTurn.eventIds,\n },\n },\n };\n repo.messages.push({ message, parentId: headId });\n headId = message.id;\n repo.headId = headId;\n assistantTurn = null;\n };\n\n for (const item of normalized.items) {\n if (item.type === \"user\") {\n flushAssistant();\n const runId = item.events[0]?.runId;\n const userMessage = buildUserMessage({\n text: item.text,\n attachments: codeAgentAttachmentsFromEvents(item.events),\n runId: runId ? `${runId}-${item.id}` : item.id,\n createdAt: new Date(item.createdAt),\n });\n userMessage.id = `code-user-${item.id}`;\n const existingCustom =\n userMessage.metadata.custom &&\n typeof userMessage.metadata.custom === \"object\"\n ? (userMessage.metadata.custom as Record<string, unknown>)\n : {};\n userMessage.metadata = {\n ...userMessage.metadata,\n custom: {\n ...existingCustom,\n submittedRunId: runId,\n codeAgentTranscriptEventIds: item.eventIds,\n },\n };\n repo.messages.push({ message: userMessage, parentId: headId });\n headId = userMessage.id;\n repo.headId = headId;\n continue;\n }\n\n const content = contentPartForCodeAgentTranscriptItem(item, options);\n if (!content) continue;\n\n if (!assistantTurn || assistantTurn.turnIndex !== item.turnIndex) {\n flushAssistant();\n assistantTurn = {\n turnIndex: item.turnIndex,\n id: `code-assistant-${item.turnIndex}-${item.id}`,\n createdAt: item.createdAt,\n updatedAt: item.updatedAt,\n runId: item.events[0]?.runId,\n content: [],\n eventIds: [],\n };\n }\n assistantTurn.updatedAt = item.updatedAt;\n assistantTurn.eventIds.push(...item.eventIds);\n if (content.type === \"text\") {\n const last = assistantTurn.content.at(-1);\n if (last?.type === \"text\") {\n last.text = `${last.text}${last.text ? \"\\n\\n\" : \"\"}${content.text}`;\n } else {\n assistantTurn.content.push(content);\n }\n } else {\n assistantTurn.content.push(content);\n }\n }\n\n flushAssistant();\n return normalizeThreadRepository(repo);\n}\n\nfunction rewriteEntryParentId(\n entry: any,\n idRewrites: Map<string, string>,\n): any {\n const parentId = getStoredParentId(entry);\n if (!parentId) return entry;\n const rewritten = idRewrites.get(parentId);\n if (!rewritten) return entry;\n return { ...entry, parentId: rewritten };\n}\n\n/**\n * Merge an incoming client-side full-thread save over the current SQL copy.\n *\n * The browser exports and PUTs the whole assistant-ui repository. If a server\n * completion save lands first, an older browser export can otherwise replace\n * `thread_data` wholesale and delete the assistant message the server just\n * reconstructed from run events. Preserve server-only messages while still\n * accepting client-only messages and metadata.\n */\nexport interface MergeThreadDataOptions {\n preserveExistingQueuedMessages?: boolean;\n preserveExistingTopLevelKeys?: boolean;\n}\n\nexport function mergeThreadDataForClientSave(\n existingRepo: any,\n incomingRepo: any,\n options: MergeThreadDataOptions = {},\n) {\n const preserveExistingQueuedMessages =\n options.preserveExistingQueuedMessages ?? true;\n const preserveExistingTopLevelKeys =\n options.preserveExistingTopLevelKeys ?? true;\n const existingNormalized = normalizeThreadRepository(existingRepo);\n const incomingNormalized = normalizeThreadRepository(incomingRepo);\n const merged =\n incomingNormalized && typeof incomingNormalized === \"object\"\n ? { ...incomingNormalized }\n : {};\n if (\n preserveExistingTopLevelKeys &&\n existingNormalized &&\n typeof existingNormalized === \"object\"\n ) {\n for (const [key, value] of Object.entries(existingNormalized)) {\n if (key === \"messages\" || key === \"headId\") continue;\n if (key === \"queuedMessages\" && !preserveExistingQueuedMessages) {\n continue;\n }\n if (!(key in merged)) {\n merged[key] = value;\n }\n }\n } else if (\n preserveExistingQueuedMessages &&\n existingNormalized &&\n typeof existingNormalized === \"object\" &&\n existingNormalized.queuedMessages !== undefined &&\n merged.queuedMessages === undefined\n ) {\n merged.queuedMessages = existingNormalized.queuedMessages;\n }\n\n const existingMessages = Array.isArray(existingNormalized?.messages)\n ? existingNormalized.messages\n : null;\n const incomingMessages = Array.isArray(merged.messages)\n ? merged.messages\n : null;\n if (!existingMessages || !incomingMessages) return merged;\n\n const incomingKeySets: Set<string>[] = incomingMessages.map(\n (entry: unknown) => new Set(messageIdentityKeys(getStoredMessage(entry))),\n );\n const usedIncoming = new Set<number>();\n const nextMessages: any[] = [];\n const idRewrites = new Map<string, string>();\n\n for (const existingEntry of existingMessages) {\n const existingKeys = messageIdentityKeys(getStoredMessage(existingEntry));\n const incomingIndex = incomingKeySets.findIndex(\n (keys: Set<string>, index: number) =>\n !usedIncoming.has(index) && existingKeys.some((key) => keys.has(key)),\n );\n\n if (incomingIndex === -1) {\n nextMessages.push(existingEntry);\n continue;\n }\n\n usedIncoming.add(incomingIndex);\n const incomingEntry = incomingMessages[incomingIndex];\n const chosen = chooseMergedMessageEntry(existingEntry, incomingEntry);\n const existingId = messageId(getStoredMessage(existingEntry));\n const chosenId = messageId(getStoredMessage(chosen));\n if (existingId && chosenId && existingId !== chosenId) {\n idRewrites.set(existingId, chosenId);\n }\n nextMessages.push(chosen);\n }\n\n for (let index = 0; index < incomingMessages.length; index++) {\n if (!usedIncoming.has(index)) nextMessages.push(incomingMessages[index]);\n }\n\n merged.messages = nextMessages.map((entry) =>\n rewriteEntryParentId(entry, idRewrites),\n );\n return normalizeThreadRepository(merged);\n}\n\nfunction escapeAttachmentAttribute(value: string): string {\n return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction unwrapTextAttachmentEnvelope(text: string): string {\n const match = text.match(\n /^<attachment\\b[^>]*>\\n?([\\s\\S]*?)\\n?<\\/attachment>$/,\n );\n return match ? match[1] : text;\n}\n\nfunction truncateStoredAttachment(text: string): string {\n const unwrapped = unwrapTextAttachmentEnvelope(text);\n if (unwrapped.length <= MAX_STORED_ATTACHMENT_CHARS) return unwrapped;\n const omitted = unwrapped.length - MAX_STORED_ATTACHMENT_CHARS;\n return `${unwrapped.slice(0, MAX_STORED_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_STORED_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from persisted chat history.]`;\n}\n\nfunction textAttachmentEnvelope(\n att: AgentChatAttachment,\n text: string,\n): string {\n const attrs = [\n `name=\"${escapeAttachmentAttribute(att.name || \"attachment\")}\"`,\n att.contentType\n ? `contentType=\"${escapeAttachmentAttribute(att.contentType)}\"`\n : null,\n att.type ? `type=\"${escapeAttachmentAttribute(att.type)}\"` : null,\n ].filter(Boolean);\n return `<attachment ${attrs.join(\" \")}>\\n${truncateStoredAttachment(text)}\\n</attachment>`;\n}\n\n/**\n * Cap a base64 data-URL string for storage. When the encoded string is over\n * the limit we replace the base64 payload with a truncation marker so the\n * transcript still renders the attachment chip but doesn't bloat SQL.\n */\nfunction capBase64DataUrl(dataUrl: string): string {\n const commaIdx = dataUrl.indexOf(\",\");\n if (commaIdx === -1) return dataUrl;\n const header = dataUrl.slice(0, commaIdx + 1);\n const b64 = dataUrl.slice(commaIdx + 1);\n // Each base64 char encodes 6 bits; 4 chars = 3 bytes.\n const approxBytes = Math.floor((b64.length * 3) / 4);\n if (approxBytes <= MAX_STORED_BASE64_BYTES) return dataUrl;\n return `${header}[base64 truncated — ${approxBytes.toLocaleString()} bytes exceeds storage limit]`;\n}\n\nfunction buildStoredAttachments(\n attachments: AgentChatAttachment[] | undefined,\n runId: string | undefined,\n): any[] {\n return (attachments ?? [])\n .map((att, index) => {\n const id = `server-${runId ?? Date.now()}-attachment-${index}`;\n // When the attachment was successfully pre-uploaded, store only the URL\n // reference. This keeps the SQL thread_data row compact regardless of\n // file size, and lets the transcript render from the hosted URL instead\n // of re-shipping megabytes of base64 on every poll save.\n const uploadedUrl = (att as any).url as string | undefined;\n if (uploadedUrl) {\n const referenceOnly = (att as any).referenceOnly === true;\n const storedAsImage = att.type === \"image\" && !referenceOnly;\n return {\n id,\n type: storedAsImage ? \"image\" : \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n // URL reference shape — content[0] uses the hosted URL.\n content: storedAsImage\n ? [{ type: \"image\", image: uploadedUrl }]\n : [\n {\n type: \"file\",\n url: uploadedUrl,\n mimeType: att.contentType,\n filename: att.name,\n },\n ],\n // Keep the reference metadata for tooling / read-attachment.\n metadata: {\n uploadUrl: uploadedUrl,\n uploadProvider: (att as any).uploadProvider as string | undefined,\n ...(referenceOnly\n ? {\n referenceOnly: true,\n securityNote: (att as any).securityNote as string | undefined,\n }\n : {}),\n },\n };\n }\n\n if (att.type === \"image\" && att.data) {\n return {\n id,\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [{ type: \"image\", image: capBase64DataUrl(att.data) }],\n };\n }\n if (att.data) {\n return {\n id,\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [\n {\n type: \"file\",\n data: capBase64DataUrl(att.data),\n mimeType: att.contentType,\n filename: att.name,\n },\n ],\n };\n }\n if (typeof att.text === \"string\" && att.text.length > 0) {\n return {\n id,\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [\n { type: \"text\", text: textAttachmentEnvelope(att, att.text) },\n ],\n };\n }\n return null;\n })\n .filter(Boolean);\n}\n\nexport function buildUserMessage(opts: {\n text: string;\n attachments?: AgentChatAttachment[];\n runId?: string;\n createdAt?: Date;\n}): {\n id: string;\n createdAt: Date;\n role: \"user\";\n content: ContentPart[];\n attachments?: any[];\n metadata: Record<string, unknown>;\n} {\n const attachments = buildStoredAttachments(opts.attachments, opts.runId);\n return {\n id: `server-user-${opts.runId ?? Date.now()}`,\n createdAt: opts.createdAt ?? new Date(),\n role: \"user\",\n content: [{ type: \"text\", text: opts.text }],\n ...(attachments.length > 0 ? { attachments } : {}),\n metadata: {\n custom: {\n submittedRunId: opts.runId,\n },\n },\n };\n}\n\nfunction toCoreCodeAgentTranscriptEvent(\n event: CodeAgentThreadTranscriptEvent,\n): CoreCodeAgentTranscriptEvent {\n return {\n schemaVersion: 1,\n id: event.id,\n runId: event.runId,\n kind: (event.kind ??\n event.type ??\n \"status\") as CoreCodeAgentTranscriptEvent[\"kind\"],\n message: event.message ?? event.text ?? \"\",\n createdAt: event.createdAt,\n metadata: {\n ...(event.metadata ?? {}),\n ...(event.artifactPath ? { artifactPath: event.artifactPath } : {}),\n ...(event.artifactUrl ? { artifactUrl: event.artifactUrl } : {}),\n },\n };\n}\n\nfunction contentPartForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentTranscriptItem,\n options: BuildRepositoryFromCodeAgentTranscriptOptions,\n): ContentPart | null {\n if (item.type === \"assistant\") {\n return item.text.trim() ? { type: \"text\", text: item.text } : null;\n }\n if (item.type === \"tool\") {\n return toolContentPartForCodeAgentTranscriptItem(item);\n }\n if (item.type === \"status\") {\n const text = statusTextForCodeAgentTranscriptItem(item, options);\n return text ? { type: \"text\", text } : null;\n }\n return null;\n}\n\nfunction toolContentPartForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentToolEvent,\n): ContentPart {\n return {\n type: \"tool-call\",\n toolCallId: `code-tool-${item.id}`,\n toolName: item.tool ?? item.label ?? \"code-agent\",\n argsText: previewCodeAgentTranscriptValue(item.input) ?? \"\",\n args: recordArgsForCodeAgentTool(item.input),\n ...(item.result !== undefined\n ? { result: previewCodeAgentTranscriptValue(item.result) ?? \"\" }\n : {}),\n ...(item.structuredMeta ? { structuredMeta: item.structuredMeta } : {}),\n };\n}\n\nfunction statusTextForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentStatusEvent,\n options: BuildRepositoryFromCodeAgentTranscriptOptions,\n): string | null {\n if (options.hideCredentialMessages && isCredentialCodeAgentText(item.text)) {\n return null;\n }\n if (item.statusKind === \"artifact\") {\n const event = item.events[0];\n const path =\n stringRecordValue(event?.metadata, \"artifactPath\") ??\n stringRecordValue(event?.metadata, \"path\");\n const url = stringRecordValue(event?.metadata, \"artifactUrl\");\n const target = url ?? path;\n return target\n ? `Artifact: ${item.text}\\n${target}`\n : `Artifact: ${item.text}`;\n }\n if (item.level === \"info\" && item.statusKind !== \"note\") return null;\n return item.text;\n}\n\nfunction codeAgentAttachmentsFromEvents(\n events: readonly CoreCodeAgentTranscriptEvent[],\n): AgentChatAttachment[] {\n for (const event of events) {\n const raw = event.metadata?.attachments;\n if (!Array.isArray(raw) || raw.length === 0) continue;\n const attachments: AgentChatAttachment[] = [];\n for (const item of raw) {\n if (!item || typeof item !== \"object\") continue;\n const record = item as Record<string, unknown>;\n const name = stringRecordValue(record, \"name\");\n if (!name) continue;\n const contentType = stringRecordValue(record, \"type\");\n const text = stringRecordValue(record, \"text\");\n const dataUrl = stringRecordValue(record, \"dataUrl\");\n attachments.push({\n type: dataUrl ? \"image\" : \"file\",\n name,\n ...(contentType ? { contentType } : {}),\n ...(text ? { text } : {}),\n ...(dataUrl ? { data: dataUrl } : {}),\n });\n }\n if (attachments.length > 0) return attachments;\n }\n return [];\n}\n\nfunction recordArgsForCodeAgentTool(value: unknown): Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n const result: Record<string, string> = {};\n for (const [key, entry] of Object.entries(value)) {\n result[key] =\n typeof entry === \"string\"\n ? entry\n : (previewCodeAgentTranscriptValue(entry) ?? \"\");\n }\n return result;\n}\n\nfunction previewCodeAgentTranscriptValue(value: unknown): string | undefined {\n if (value === undefined || value === null) return undefined;\n const text =\n typeof value === \"string\" ? value : (JSON.stringify(value, null, 2) ?? \"\");\n const trimmed = text.trim();\n if (!trimmed) return undefined;\n return trimmed.length > 4000 ? `${trimmed.slice(0, 4000)}\\n...` : trimmed;\n}\n\nfunction stringRecordValue(\n record: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = record?.[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction isCredentialCodeAgentText(value: string): boolean {\n return /No LLM provider key was found|Missing credentials/i.test(value);\n}\n\nexport function upsertUserMessage(repo: any, userMsg: UserMessage): any {\n const nextRepo = normalizeThreadRepository(repo);\n\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n if (lastMsg?.role === \"user\" && messagesMatch(lastMsg, userMsg)) {\n return nextRepo;\n }\n\n const parentId =\n lastIndex >= 0 ? (messageId(getStoredMessage(lastEntry)) ?? null) : null;\n nextRepo.messages.push({ message: userMsg, parentId });\n nextRepo.headId = userMsg.id;\n return nextRepo;\n}\n\nfunction shouldReplaceLastAssistant(\n lastMessage: any,\n assistantMsg: AssistantMessage,\n): boolean {\n const lastContent = lastMessage?.content;\n if (messageContentIsEmpty(lastContent)) return true;\n\n const lastRunId = getMessageRunId(lastMessage);\n const nextRunId = getMessageRunId(assistantMsg);\n if (lastRunId && nextRunId && lastRunId === nextRunId) return true;\n if (lastRunId && nextRunId && lastRunId !== nextRunId) return false;\n\n const lastStatus = lastMessage?.status;\n if (lastStatus && !isTerminalAssistantStatus(lastStatus)) return true;\n\n try {\n if (JSON.stringify(lastContent) === JSON.stringify(assistantMsg.content)) {\n return true;\n }\n } catch {\n // Fall through to the text-prefix check.\n }\n\n const lastText = messageText(lastContent).trim();\n const nextText = messageText(assistantMsg.content).trim();\n if (isTerminalAssistantStatus(lastStatus)) return false;\n return Boolean(lastText && nextText && nextText.startsWith(lastText));\n}\n\n/**\n * Merge the server-reconstructed assistant message into persisted\n * assistant-ui thread data.\n *\n * The browser periodically saves thread data while a run is still streaming.\n * That can leave the last assistant message non-empty but partial/pending.\n * Completion must replace that same-run partial message instead of treating\n * any assistant content as proof that the frontend already saved the final\n * turn.\n */\nexport function upsertAssistantMessage(\n repo: any,\n assistantMsg: AssistantMessage,\n): any {\n const nextRepo = normalizeThreadRepository(repo);\n\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n const lastRole = lastMsg?.role;\n\n if (\n lastRole === \"assistant\" &&\n shouldReplaceLastAssistant(lastMsg, assistantMsg)\n ) {\n nextRepo.messages[lastIndex] = { ...lastEntry, message: assistantMsg };\n nextRepo.headId = assistantMsg.id;\n return nextRepo;\n }\n\n const parentId =\n nextRepo.messages.length > 0\n ? (messageId(\n getStoredMessage(nextRepo.messages[nextRepo.messages.length - 1]),\n ) ?? null)\n : null;\n nextRepo.messages.push({ message: assistantMsg, parentId });\n nextRepo.headId = assistantMsg.id;\n return nextRepo;\n}\n\nfunction turnIdOf(message: any): string | undefined {\n const t = message?.metadata?.custom?.turnId;\n return typeof t === \"string\" && t ? t : undefined;\n}\n\nfunction foldedRunIdsOf(message: any): string[] {\n const ids = message?.metadata?.custom?.foldedRunIds;\n return Array.isArray(ids)\n ? ids.filter((x: unknown): x is string => typeof x === \"string\")\n : [];\n}\n\n/** Rough size of an assistant message's content, used only to pick the larger\n * of two representations of the same chunk so a fold can never shrink. */\nfunction assistantContentWeight(content: unknown): number {\n if (!Array.isArray(content)) return 0;\n let weight = 0;\n for (const part of content) {\n if (part?.type === \"text\" && typeof part.text === \"string\") {\n weight += part.text.length;\n } else {\n weight += 1;\n }\n }\n return weight;\n}\n\n/** Concatenate continuation content onto the accumulated turn, merging a\n * trailing+leading text run so the resumed answer reads as one flowing\n * message rather than two stacked fragments. */\nfunction appendFoldedContent(existing: any[], incoming: any[]): any[] {\n const merged = existing.map((p) => ({ ...p }));\n for (const part of incoming) {\n const last = merged[merged.length - 1];\n if (\n part?.type === \"text\" &&\n typeof part.text === \"string\" &&\n last?.type === \"text\" &&\n typeof last.text === \"string\"\n ) {\n last.text = `${last.text}${part.text}`;\n } else {\n merged.push({ ...part });\n }\n }\n return normalizeAssistantToolCallIds({\n role: \"assistant\",\n content: merged,\n }).content;\n}\n\n/**\n * Fold a continuation run's assistant message onto the single durable message\n * for its logical turn (identified by `turnId`), so a turn that spans several\n * continuation runs accumulates into ONE message that only ever grows. This is\n * the server-side analog of an append-only rollout: the durable transcript is\n * a monotonic fold over every run in the turn, never a per-run snapshot that\n * drops the earlier chunks.\n *\n * Idempotent and never-shrinking, so it is safe to run alongside the client's\n * full-thread export (which may write the same turn from the other side):\n * - First chunk of a turn → appended as a fresh message.\n * - A run whose content is already represented (already folded, or the client\n * saved it) → kept as-is, choosing whichever copy has more content.\n * - A new chunk → appended onto the accumulated turn.\n * Falls back to per-run upsert when no `turnId` is available (turn == run).\n */\nexport function foldAssistantTurn(\n repo: any,\n assistantMsg: AssistantMessage,\n options: { turnId?: string; runId?: string },\n): any {\n const turnId = options.turnId;\n const runId = options.runId;\n if (!turnId) return upsertAssistantMessage(repo, assistantMsg);\n\n const nextRepo = normalizeThreadRepository(repo);\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n\n const sameTurn =\n lastMsg?.role === \"assistant\" &&\n (turnIdOf(lastMsg) === turnId ||\n // A message the client wrote for one of this turn's runs before it\n // carried a turnId stamp.\n (!!runId && getMessageRunId(lastMsg) === runId));\n\n if (!sameTurn) {\n // First chunk of this turn (or the previous assistant belongs to an\n // earlier turn) — append as a fresh message; buildAssistantMessage already\n // stamped turnId + foldedRunIds onto it.\n return upsertAssistantMessage(repo, assistantMsg);\n }\n\n const existingContent = Array.isArray(lastMsg.content) ? lastMsg.content : [];\n const incomingContent = Array.isArray(assistantMsg.content)\n ? assistantMsg.content\n : [];\n const existingFolded = foldedRunIdsOf(lastMsg);\n const runAlreadyFolded =\n !!runId &&\n (existingFolded.includes(runId) || getMessageRunId(lastMsg) === runId);\n\n // If this run's chunk is already represented in the turn (the client saved\n // it, or we already folded it), do not re-append — keep the larger copy so\n // the turn never shrinks. Otherwise fold this chunk onto the accumulated turn.\n const mergedContent = runAlreadyFolded\n ? assistantContentWeight(incomingContent) >\n assistantContentWeight(existingContent)\n ? incomingContent\n : existingContent\n : appendFoldedContent(existingContent, incomingContent);\n\n const mergedFolded = Array.from(\n new Set([...existingFolded, ...(runId ? [runId] : [])]),\n );\n\n const existingCustom =\n lastMsg.metadata?.custom && typeof lastMsg.metadata.custom === \"object\"\n ? (lastMsg.metadata.custom as Record<string, unknown>)\n : {};\n const incomingCustom =\n assistantMsg.metadata?.custom &&\n typeof assistantMsg.metadata.custom === \"object\"\n ? (assistantMsg.metadata.custom as Record<string, unknown>)\n : {};\n\n const mergedCustom: Record<string, unknown> = {\n ...existingCustom,\n ...incomingCustom,\n turnId,\n foldedRunIds: mergedFolded,\n };\n // Only the freshest chunk decides whether the turn is still continuing.\n if (incomingCustom.continued !== true) delete mergedCustom.continued;\n\n const mergedMessage = {\n ...lastMsg,\n content: normalizeAssistantToolCallIds({\n role: \"assistant\",\n content: mergedContent,\n }).content,\n // The freshest chunk's status wins: a clean done supersedes a prior\n // partial; a real error supersedes a partial.\n status: assistantMsg.status ?? lastMsg.status,\n metadata: {\n ...lastMsg.metadata,\n runId: runId ?? lastMsg.metadata?.runId,\n custom: mergedCustom,\n },\n };\n\n nextRepo.messages[lastIndex] = { ...lastEntry, message: mergedMessage };\n nextRepo.headId = mergedMessage.id ?? nextRepo.headId;\n return nextRepo;\n}\n\nexport function normalizeThreadTitle(value: unknown): string {\n if (typeof value !== \"string\") return \"\";\n return value.replace(/\\s+/g, \" \").trim().slice(0, 160);\n}\n\n/**\n * Extract title and preview from a thread runtime export.\n * Isomorphic — works on both server and client.\n */\nexport function extractThreadMeta(repo: any): {\n title: string;\n preview: string;\n} {\n const titleOverride = normalizeThreadTitle(repo?._titleOverride);\n const msgs = repo?.messages;\n if (!Array.isArray(msgs) || msgs.length === 0)\n return { title: titleOverride, preview: \"\" };\n\n let title = \"\";\n let preview = \"\";\n for (const entry of msgs) {\n // Support both wrapped ({ message: { role, content } }) and flat ({ role, content }) formats\n const msg = entry?.message ?? entry;\n if (msg.role !== \"user\") continue;\n const textParts = Array.isArray(msg.content)\n ? msg.content\n .filter((p: any) => p.type === \"text\")\n .map((p: any) => p.text)\n .join(\" \")\n : typeof msg.content === \"string\"\n ? msg.content\n : \"\";\n if (textParts.trim()) {\n if (!title) title = textParts.trim().slice(0, 80);\n preview = textParts.trim().slice(0, 120);\n }\n }\n return { title: titleOverride || title, preview };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export declare function redactSensitiveFields(value: unknown): unknown;
2
+ export declare function sanitizeToolErrorText(value: string): string;
3
+ export declare function sanitizeToolErrorValue(value: unknown): string;
4
+ //# sourceMappingURL=tool-error-redaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error-redaction.d.ts","sourceRoot":"","sources":["../../src/agent/tool-error-redaction.ts"],"names":[],"mappings":"AAQA,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE7D;AAgBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAa3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAU7D"}
@@ -0,0 +1,43 @@
1
+ const REDACTED = "[REDACTED]";
2
+ const SENSITIVE_FIELD_PATTERN = /^(authorization|cookie|api[_-]?key|password|secret|token|access[_-]?token|refresh[_-]?token|bearer)$/i;
3
+ const OPENAI_LIKE_SECRET_PATTERN = /(^|[^A-Za-z0-9_-])(sk-(?:proj-|svcacct-)?[A-Za-z0-9_-]{24,})(?=$|[^A-Za-z0-9_-])/g;
4
+ export function redactSensitiveFields(value) {
5
+ return redactWalk(value, new WeakSet());
6
+ }
7
+ function redactWalk(value, seen) {
8
+ if (value === null || typeof value !== "object")
9
+ return value;
10
+ if (seen.has(value))
11
+ return "[Circular]";
12
+ seen.add(value);
13
+ if (Array.isArray(value))
14
+ return value.map((v) => redactWalk(v, seen));
15
+ const out = {};
16
+ for (const [key, entry] of Object.entries(value)) {
17
+ out[key] = SENSITIVE_FIELD_PATTERN.test(key)
18
+ ? REDACTED
19
+ : redactWalk(entry, seen);
20
+ }
21
+ return out;
22
+ }
23
+ export function sanitizeToolErrorText(value) {
24
+ let out = value;
25
+ out = out.replace(/\bBearer\s+[^,\s;)}\]]+/gi, `Bearer ${REDACTED}`);
26
+ out = out.replace(OPENAI_LIKE_SECRET_PATTERN, `$1${REDACTED}`);
27
+ out = out.replace(/([?&](?:authorization|cookie|api[_-]?key|password|secret|token|access[_-]?token|refresh[_-]?token|bearer)=)[^&#\s]+/gi, `$1${REDACTED}`);
28
+ out = out.replace(/((?:^|[^A-Za-z0-9_-])(?:"|')?(?:authorization|cookie|api[_-]?key|password|secret|token|access[_-]?token|refresh[_-]?token|bearer)(?:"|')?\s*[:=]\s*)(?:"[^"]*"|'[^']*'|[^,\s;)}\]]+)/gi, (_match, prefix) => `${prefix}${REDACTED}`);
29
+ return out;
30
+ }
31
+ export function sanitizeToolErrorValue(value) {
32
+ if (value instanceof Error)
33
+ return sanitizeToolErrorText(value.message);
34
+ if (typeof value === "string")
35
+ return sanitizeToolErrorText(value);
36
+ try {
37
+ return sanitizeToolErrorText(JSON.stringify(redactSensitiveFields(value), null, 2));
38
+ }
39
+ catch {
40
+ return sanitizeToolErrorText(String(value));
41
+ }
42
+ }
43
+ //# sourceMappingURL=tool-error-redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error-redaction.js","sourceRoot":"","sources":["../../src/agent/tool-error-redaction.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,YAAY,CAAC;AAE9B,MAAM,uBAAuB,GAC3B,uGAAuG,CAAC;AAE1G,MAAM,0BAA0B,GAC9B,mFAAmF,CAAC;AAEtF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,OAAO,EAAU,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,IAAqB;IACvD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,IAAI,CAAC,GAAG,CAAC,KAAe,CAAC;QAAE,OAAO,YAAY,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,KAAe,CAAC,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACvE,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,UAAU,QAAQ,EAAE,CAAC,CAAC;IACrE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,0BAA0B,EAAE,KAAK,QAAQ,EAAE,CAAC,CAAC;IAC/D,GAAG,GAAG,GAAG,CAAC,OAAO,CACf,uHAAuH,EACvH,KAAK,QAAQ,EAAE,CAChB,CAAC;IACF,GAAG,GAAG,GAAG,CAAC,OAAO,CACf,wLAAwL,EACxL,CAAC,MAAM,EAAE,MAAc,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,QAAQ,EAAE,CACnD,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,OAAO,qBAAqB,CAC1B,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CACtD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC","sourcesContent":["const REDACTED = \"[REDACTED]\";\n\nconst SENSITIVE_FIELD_PATTERN =\n /^(authorization|cookie|api[_-]?key|password|secret|token|access[_-]?token|refresh[_-]?token|bearer)$/i;\n\nconst OPENAI_LIKE_SECRET_PATTERN =\n /(^|[^A-Za-z0-9_-])(sk-(?:proj-|svcacct-)?[A-Za-z0-9_-]{24,})(?=$|[^A-Za-z0-9_-])/g;\n\nexport function redactSensitiveFields(value: unknown): unknown {\n return redactWalk(value, new WeakSet<object>());\n}\n\nfunction redactWalk(value: unknown, seen: WeakSet<object>): unknown {\n if (value === null || typeof value !== \"object\") return value;\n if (seen.has(value as object)) return \"[Circular]\";\n seen.add(value as object);\n if (Array.isArray(value)) return value.map((v) => redactWalk(v, seen));\n const out: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n out[key] = SENSITIVE_FIELD_PATTERN.test(key)\n ? REDACTED\n : redactWalk(entry, seen);\n }\n return out;\n}\n\nexport function sanitizeToolErrorText(value: string): string {\n let out = value;\n out = out.replace(/\\bBearer\\s+[^,\\s;)}\\]]+/gi, `Bearer ${REDACTED}`);\n out = out.replace(OPENAI_LIKE_SECRET_PATTERN, `$1${REDACTED}`);\n out = out.replace(\n /([?&](?:authorization|cookie|api[_-]?key|password|secret|token|access[_-]?token|refresh[_-]?token|bearer)=)[^&#\\s]+/gi,\n `$1${REDACTED}`,\n );\n out = out.replace(\n /((?:^|[^A-Za-z0-9_-])(?:\"|')?(?:authorization|cookie|api[_-]?key|password|secret|token|access[_-]?token|refresh[_-]?token|bearer)(?:\"|')?\\s*[:=]\\s*)(?:\"[^\"]*\"|'[^']*'|[^,\\s;)}\\]]+)/gi,\n (_match, prefix: string) => `${prefix}${REDACTED}`,\n );\n return out;\n}\n\nexport function sanitizeToolErrorValue(value: unknown): string {\n if (value instanceof Error) return sanitizeToolErrorText(value.message);\n if (typeof value === \"string\") return sanitizeToolErrorText(value);\n try {\n return sanitizeToolErrorText(\n JSON.stringify(redactSensitiveFields(value), null, 2),\n );\n } catch {\n return sanitizeToolErrorText(String(value));\n }\n}\n"]}
@@ -1,15 +1,32 @@
1
1
  import type { ReasoningEffort } from "../shared/reasoning-effort.js";
2
2
  import type { AgentMcpAppPayload } from "../mcp-client/app-result.js";
3
3
  import type { ActionChatUIConfig } from "../action-ui.js";
4
+ export interface AgentNativeJsonSchema {
5
+ type?: string | string[];
6
+ description?: string;
7
+ enum?: unknown[];
8
+ const?: unknown;
9
+ properties?: Record<string, AgentNativeJsonSchema>;
10
+ required?: string[];
11
+ additionalProperties?: boolean | AgentNativeJsonSchema;
12
+ items?: AgentNativeJsonSchema;
13
+ oneOf?: AgentNativeJsonSchema[];
14
+ anyOf?: AgentNativeJsonSchema[];
15
+ allOf?: AgentNativeJsonSchema[];
16
+ not?: AgentNativeJsonSchema;
17
+ minLength?: number;
18
+ maxLength?: number;
19
+ pattern?: string;
20
+ minimum?: number;
21
+ maximum?: number;
22
+ minItems?: number;
23
+ maxItems?: number;
24
+ }
4
25
  export interface ActionTool {
5
26
  description: string;
6
- parameters?: {
27
+ parameters?: AgentNativeJsonSchema & {
7
28
  type: "object";
8
- properties: Record<string, {
9
- type: string;
10
- description?: string;
11
- enum?: string[];
12
- }>;
29
+ properties: Record<string, AgentNativeJsonSchema>;
13
30
  required?: string[];
14
31
  };
15
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"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"}