agent-inspect 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +26 -6
  3. package/docs/ADAPTERS.md +6 -0
  4. package/docs/API.md +9 -1
  5. package/docs/CLI.md +64 -0
  6. package/docs/DIFF.md +8 -0
  7. package/docs/EXPORTS.md +13 -0
  8. package/docs/GETTING-STARTED.md +19 -1
  9. package/docs/LIMITATIONS.md +3 -1
  10. package/docs/LOGS.md +22 -0
  11. package/docs/SCHEMA.md +3 -1
  12. package/docs/SCREENSHOTS.md +190 -9
  13. package/package.json +51 -1
  14. package/packages/cli/dist/index.cjs +2880 -2037
  15. package/packages/cli/dist/index.cjs.map +1 -1
  16. package/packages/cli/dist/index.mjs +2880 -2037
  17. package/packages/cli/dist/index.mjs.map +1 -1
  18. package/packages/core/dist/advanced.cjs +1437 -0
  19. package/packages/core/dist/advanced.cjs.map +1 -0
  20. package/packages/core/dist/advanced.d.cts +159 -0
  21. package/packages/core/dist/advanced.d.ts +159 -0
  22. package/packages/core/dist/advanced.mjs +8 -0
  23. package/packages/core/dist/advanced.mjs.map +1 -0
  24. package/packages/core/dist/chunk-5EMIZZXD.mjs +907 -0
  25. package/packages/core/dist/chunk-5EMIZZXD.mjs.map +1 -0
  26. package/packages/core/dist/chunk-7TGZLWEE.mjs +35 -0
  27. package/packages/core/dist/chunk-7TGZLWEE.mjs.map +1 -0
  28. package/packages/core/dist/chunk-BT7CATSD.mjs +497 -0
  29. package/packages/core/dist/chunk-BT7CATSD.mjs.map +1 -0
  30. package/packages/core/dist/chunk-E5F2LQCX.mjs +83 -0
  31. package/packages/core/dist/chunk-E5F2LQCX.mjs.map +1 -0
  32. package/packages/core/dist/chunk-EDTQHZPM.mjs +88 -0
  33. package/packages/core/dist/chunk-EDTQHZPM.mjs.map +1 -0
  34. package/packages/core/dist/chunk-HY7H3CQM.mjs +127 -0
  35. package/packages/core/dist/chunk-HY7H3CQM.mjs.map +1 -0
  36. package/packages/core/dist/chunk-Q6EPNB3V.mjs +539 -0
  37. package/packages/core/dist/chunk-Q6EPNB3V.mjs.map +1 -0
  38. package/packages/core/dist/chunk-QPAU2TPA.mjs +785 -0
  39. package/packages/core/dist/chunk-QPAU2TPA.mjs.map +1 -0
  40. package/packages/core/dist/chunk-QX3ZMPUF.mjs +451 -0
  41. package/packages/core/dist/chunk-QX3ZMPUF.mjs.map +1 -0
  42. package/packages/core/dist/chunk-VU6O5QAH.mjs +99 -0
  43. package/packages/core/dist/chunk-VU6O5QAH.mjs.map +1 -0
  44. package/packages/core/dist/chunk-XDBND27A.mjs +975 -0
  45. package/packages/core/dist/chunk-XDBND27A.mjs.map +1 -0
  46. package/packages/core/dist/chunk-YWAOOXLR.mjs +475 -0
  47. package/packages/core/dist/chunk-YWAOOXLR.mjs.map +1 -0
  48. package/packages/core/dist/diff.cjs +993 -0
  49. package/packages/core/dist/diff.cjs.map +1 -0
  50. package/packages/core/dist/diff.d.cts +81 -0
  51. package/packages/core/dist/diff.d.ts +81 -0
  52. package/packages/core/dist/diff.mjs +5 -0
  53. package/packages/core/dist/diff.mjs.map +1 -0
  54. package/packages/core/dist/exporters.cjs +1228 -0
  55. package/packages/core/dist/exporters.cjs.map +1 -0
  56. package/packages/core/dist/exporters.d.cts +113 -0
  57. package/packages/core/dist/exporters.d.ts +113 -0
  58. package/packages/core/dist/exporters.mjs +6 -0
  59. package/packages/core/dist/exporters.mjs.map +1 -0
  60. package/packages/core/dist/index.cjs +2844 -2266
  61. package/packages/core/dist/index.cjs.map +1 -1
  62. package/packages/core/dist/index.d.cts +92 -908
  63. package/packages/core/dist/index.d.ts +92 -908
  64. package/packages/core/dist/index.mjs +997 -5405
  65. package/packages/core/dist/index.mjs.map +1 -1
  66. package/packages/core/dist/log-config-BzGmDYum.d.cts +71 -0
  67. package/packages/core/dist/log-config-BzGmDYum.d.ts +71 -0
  68. package/packages/core/dist/logs.cjs +1007 -0
  69. package/packages/core/dist/logs.cjs.map +1 -0
  70. package/packages/core/dist/logs.d.cts +137 -0
  71. package/packages/core/dist/logs.d.ts +137 -0
  72. package/packages/core/dist/logs.mjs +6 -0
  73. package/packages/core/dist/logs.mjs.map +1 -0
  74. package/packages/core/dist/persisted.cjs +1057 -0
  75. package/packages/core/dist/persisted.cjs.map +1 -0
  76. package/packages/core/dist/persisted.d.cts +160 -0
  77. package/packages/core/dist/persisted.d.ts +160 -0
  78. package/packages/core/dist/persisted.mjs +5 -0
  79. package/packages/core/dist/persisted.mjs.map +1 -0
  80. package/packages/core/dist/types-Bkt7LS01.d.ts +226 -0
  81. package/packages/core/dist/types-CNbheSdk.d.cts +226 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/persisted-inspect-event.ts","../src/persisted/to-trace-event.ts","../src/correlation-metadata.ts"],"names":["isNonEmptyString"],"mappings":";AA4DA,IAAM,aAAA,GAAwC;AAAA,EAC5C,KAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,uBAAA,GAA4D;AAAA,EAChE,UAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,4BAAA,GAAoE;AAAA,EACxE,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,wBAAA,GAA4D;AAAA,EAChE,SAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,SAAS,KAAA,EAAiC;AACjD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA;AAC1B;AAEA,SAAS,iBAAiB,KAAA,EAAiC;AACzD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA;AACrD;AAEA,SAAS,iBAAiB,KAAA,EAAyB;AACjD,EAAA,OAAO,KAAA,KAAU,MAAA,IAAa,QAAA,CAAS,KAAK,CAAA;AAC9C;AAEA,SAAS,oBAAoB,KAAA,EAAiC;AAC5D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,KAAK,KAAA,IAAS,CAAA;AACzE;AAEA,SAAS,4BAA4B,KAAA,EAAyB;AAC5D,EAAA,OAAO,KAAA,KAAU,MAAA,IAAa,mBAAA,CAAoB,KAAK,CAAA;AACzD;AAEA,SAAS,cAAc,KAAA,EAAsC;AAC3D,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IAChB,aAAA,CAAoC,SAAS,KAAK,CAAA;AAEvD;AAEA,SAAS,wBAAwB,KAAA,EAAgD;AAC/E,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IAChB,uBAAA,CAA8C,SAAS,KAAK,CAAA;AAEjE;AAEA,SAAS,2BACP,KAAA,EACmC;AACnC,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IAChB,4BAAA,CAAmD,SAAS,KAAK,CAAA;AAEtE;AAEA,SAAS,uBAAuB,KAAA,EAA+C;AAC7E,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IAChB,wBAAA,CAA+C,SAAS,KAAK,CAAA;AAElE;AAEA,SAAS,uBAAuB,KAAA,EAA+C;AAC7E,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,IAAI,CAAC,0BAAA,CAA2B,KAAA,CAAM,IAAI,GAAG,OAAO,KAAA;AACpD,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,IAAI,GAAG,OAAO,KAAA;AAC1C,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,OAAO,GAAG,OAAO,KAAA;AAC7C,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,wBAAwB,KAAA,EAAgD;AAC/E,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,OAAO,GAAG,OAAO,KAAA;AAC7C,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,IAAI,GAAG,OAAO,KAAA;AAC1C,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,IAAI,GAAG,OAAO,KAAA;AAC1C,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,sBAAsB,KAAA,EAA8C;AAC3E,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,IAAI,CAAC,2BAAA,CAA4B,KAAA,CAAM,KAAK,GAAG,OAAO,KAAA;AACtD,EAAA,IAAI,CAAC,2BAAA,CAA4B,KAAA,CAAM,MAAM,GAAG,OAAO,KAAA;AACvD,EAAA,IAAI,CAAC,2BAAA,CAA4B,KAAA,CAAM,KAAK,GAAG,OAAO,KAAA;AACtD,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,wBAAwB,KAAA,EAAgD;AAC/E,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,OAAO,GAAG,OAAO,KAAA;AAC7C,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,MAAM,GAAG,OAAO,KAAA;AAC5C,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,YAAY,GAAG,OAAO,KAAA;AAClD,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,wBACd,KAAA,EACgC;AAChC,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,aAAA,KAAkB,KAAA,EAAO,OAAO,KAAA;AAE1C,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,OAAO,GAAG,OAAO,KAAA;AAC7C,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,KAAK,GAAG,OAAO,KAAA;AAC3C,EAAA,IAAI,CAAC,aAAA,CAAc,KAAA,CAAM,IAAI,GAAG,OAAO,KAAA;AACvC,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,IAAI,GAAG,OAAO,KAAA;AAE1C,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,SAAS,GAAG,OAAO,KAAA;AAC/C,EAAA,IAAI,CAAC,uBAAA,CAAwB,KAAA,CAAM,UAAU,GAAG,OAAO,KAAA;AACvD,EAAA,IAAI,CAAC,sBAAA,CAAuB,KAAA,CAAM,MAAM,GAAG,OAAO,KAAA;AAElD,EAAA,IAAI,MAAM,QAAA,KAAa,MAAA,IAAa,CAAC,gBAAA,CAAiB,KAAA,CAAM,QAAQ,CAAA,EAAG;AACrE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,MAAA,KAAW,MAAA,IAAa,CAAC,sBAAA,CAAuB,KAAA,CAAM,MAAM,CAAA,EAAG;AACvE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,SAAS,GAAG,OAAO,KAAA;AAC/C,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,OAAO,GAAG,OAAO,KAAA;AAC7C,EAAA,IAAI,MAAM,UAAA,KAAe,MAAA,IAAa,CAAC,mBAAA,CAAoB,KAAA,CAAM,UAAU,CAAA,EAAG;AAC5E,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,UAAA,KAAe,MAAA,IAAa,CAAC,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAAG;AACjE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,KAAA,KAAU,MAAA,IAAa,CAAC,uBAAA,CAAwB,KAAA,CAAM,KAAK,CAAA,EAAG;AACtE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,UAAA,KAAe,MAAA,IAAa,CAAC,qBAAA,CAAsB,KAAA,CAAM,UAAU,CAAA,EAAG;AAC9E,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,KAAA,KAAU,MAAA,IAAa,CAAC,uBAAA,CAAwB,KAAA,CAAM,KAAK,CAAA,EAAG;AACtE,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;;;AC9MA,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,CAAA;AAC5C;AAEA,SAAS,yBAAyB,IAAA,EAA6B;AAC7D,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,KAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT;AACE,MAAA,OAAO,OAAA;AAAA;AAEb;AAEA,SAAS,+BACP,MAAA,EACwB;AACxB,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,IAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEA,SAAS,8BACP,MAAA,EACuB;AACvB,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,IAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEA,SAAS,kBAAkB,KAAA,EAA8D;AACvF,EAAA,IAAI,CAAC,KAAA,EAAO,OAAA,EAAS,OAAO,MAAA;AAC5B,EAAA,MAAM,GAAA,GAAiB,EAAE,OAAA,EAAS,KAAA,CAAM,OAAA,EAAQ;AAChD,EAAA,MAAM,KAAA,GACJ,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,MAAM,IAAA,CAAK,MAAA,GAAS,CAAA,GAClD,KAAA,CAAM,IAAA,GACN,MAAA;AACN,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,GAAA,CAAI,KAAA,GAAQ,KAAA;AAAA,EACd;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,uBAAA,CACP,YACA,UAAA,EAC0B;AAC1B,EAAA,MAAM,WAAyB,EAAC;AAChC,EAAA,IAAI,UAAA,EAAY,QAAA,IAAY,OAAO,UAAA,CAAW,aAAa,QAAA,EAAU;AACnE,IAAA,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,UAAA,CAAW,QAAmC,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,QAAA,CAAS,MAAA,GAAS;AAAA,MAChB,GAAI,WAAW,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,UAAA,CAAW,KAAA,EAAM,GAAI,EAAC;AAAA,MACpE,GAAI,WAAW,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAO,GAAI;AAAC,KACzE;AAAA,EACF;AACA,EAAA,OAAO,OAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,GAAS,IAAI,QAAA,GAAW,MAAA;AACvD;AAEA,SAAS,gBACP,UAAA,EACqC;AACrC,EAAA,IAAI,CAAC,YAAY,OAAO,MAAA;AACxB,EAAA,MAAM,QAAA,GACJ,UAAA,CAAW,QAAA,IAAY,OAAO,UAAA,CAAW,QAAA,KAAa,QAAA,GAClD,EAAE,GAAI,UAAA,CAAW,QAAA,EAAqC,GACtD,EAAC;AACP,EAAA,KAAA,MAAW,GAAA,IAAO;AAAA,IAChB,eAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,EAAY;AACV,IAAA,MAAM,KAAA,GAAQ,WAAW,GAAG,CAAA;AAC5B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACpD,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,KAAA;AAAA,IAClB;AAAA,EACF;AACA,EAAA,OAAO,OAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,GAAS,IAAI,QAAA,GAAW,MAAA;AACvD;AAEA,SAAS,cAAc,KAAA,EAAsC;AAC3D,EAAA,MAAM,QAAQ,KAAA,CAAM,UAAA;AACpB,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,CAAM,MAAA,KAAW,YAAY,KAAA,CAAM,MAAA,CAAO,IAAA,EAAK,KAAM,EAAA,EAAI;AAC3E,IAAA,OAAO,KAAA,CAAM,MAAA;AAAA,EACf;AACA,EAAA,OAAO,KAAA,CAAM,OAAA;AACf;AAEA,SAAS,gBAAgB,KAAA,EAAwC;AAC/D,EAAA,MAAM,QAAQ,KAAA,CAAM,UAAA;AACpB,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,CAAM,QAAA,KAAa,QAAA,EAAU;AAC/C,IAAA,MAAM,IAAI,KAAA,CAAM,QAAA;AAChB,IAAA,IACE,CAAA,KAAM,KAAA,IACN,CAAA,KAAM,KAAA,IACN,CAAA,KAAM,MAAA,IACN,CAAA,KAAM,UAAA,IACN,CAAA,KAAM,OAAA,IACN,CAAA,KAAM,OAAA,IACN,MAAM,QAAA,EACN;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,wBAAA,CAAyB,MAAM,IAAI,CAAA;AAC5C;AAEA,SAAS,aAAa,KAAA,EAIpB;AACA,EAAA,MAAM,SAAA,GAAY,YAAA,CAAa,KAAA,CAAM,SAAS,CAAA;AAC9C,EAAA,MAAM,YACJ,KAAA,CAAM,SAAA,KAAc,SAAY,YAAA,CAAa,KAAA,CAAM,SAAS,CAAA,GAAI,SAAA;AAClE,EAAA,IAAI,UACF,KAAA,CAAM,OAAA,KAAY,SAAY,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA,GAAI,SAAA;AAC9D,EAAA,IACE,KAAA,CAAM,UAAA,KAAe,MAAA,IACrB,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,IAChC,KAAA,CAAM,UAAA,IAAc,CAAA,IACpB,KAAA,CAAM,YAAY,MAAA,EAClB;AACA,IAAA,OAAA,GAAU,YAAY,KAAA,CAAM,UAAA;AAAA,EAC9B;AACA,EAAA,OAAO,EAAE,SAAA,EAAW,SAAA,EAAW,OAAA,EAAQ;AACzC;AAEA,SAAS,qBAAqB,KAAA,EAA0C;AACtE,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAU,GAAI,aAAa,KAAK,CAAA;AACnD,EAAA,MAAM,GAAA,GAAqD;AAAA,IACzD,aAAA,EAAe,KAAA;AAAA,IACf,KAAA,EAAO,aAAA;AAAA,IACP,SAAA;AAAA,IACA,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ;AAAA,GACF;AACA,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAA;AACjD,EAAA,IAAI,QAAA,MAAc,QAAA,GAAW,QAAA;AAC7B,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,uBAAuB,KAAA,EAA0C;AACxE,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,aAAa,KAAK,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,6BAAA,CAA8B,KAAA,CAAM,MAAM,CAAA,IAAK,SAAA;AAC9D,EAAA,MAAM,GAAA,GAAuD;AAAA,IAC3D,aAAA,EAAe,KAAA;AAAA,IACf,KAAA,EAAO,eAAA;AAAA,IACP,SAAA;AAAA,IACA,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAA,EAAQ,MAAA,KAAW,SAAA,GAAY,SAAA,GAAY,MAAA;AAAA,IAC3C,OAAA;AAAA,IACA,YAAY,KAAA,CAAM,UAAA,IAAc,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,SAAS;AAAA,GACjE;AACA,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,KAAA,CAAM,KAAK,CAAA;AAC3C,EAAA,IAAI,KAAA,MAAW,KAAA,GAAQ,KAAA;AACvB,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,sBAAsB,KAAA,EAA0C;AACvE,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAU,GAAI,aAAa,KAAK,CAAA;AACnD,EAAA,MAAM,GAAA,GAAsD;AAAA,IAC1D,aAAA,EAAe,KAAA;AAAA,IACf,KAAA,EAAO,cAAA;AAAA,IACP,SAAA;AAAA,IACA,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAA,EAAQ,cAAc,KAAK,CAAA;AAAA,IAC3B,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,IAAA,EAAM,gBAAgB,KAAK,CAAA;AAAA,IAC3B;AAAA,GACF;AACA,EAAA,IAAI,KAAA,CAAM,QAAA,KAAa,MAAA,EAAW,GAAA,CAAI,WAAW,KAAA,CAAM,QAAA;AACvD,EAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,KAAA,CAAM,UAAA,EAAY,MAAM,UAAU,CAAA;AAC3E,EAAA,IAAI,QAAA,MAAc,QAAA,GAAW,QAAA;AAC7B,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,wBAAwB,KAAA,EAA0C;AACzE,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,aAAa,KAAK,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,8BAAA,CAA+B,KAAA,CAAM,MAAM,CAAA,IAAK,SAAA;AAC/D,EAAA,MAAM,GAAA,GAAwD;AAAA,IAC5D,aAAA,EAAe,KAAA;AAAA,IACf,KAAA,EAAO,gBAAA;AAAA,IACP,SAAA;AAAA,IACA,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAA,EAAQ,cAAc,KAAK,CAAA;AAAA,IAC3B,MAAA,EAAQ,MAAA,KAAW,SAAA,GAAY,SAAA,GAAY,MAAA;AAAA,IAC3C,OAAA;AAAA,IACA,YAAY,KAAA,CAAM,UAAA,IAAc,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,SAAS;AAAA,GACjE;AACA,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,KAAA,CAAM,KAAK,CAAA;AAC3C,EAAA,IAAI,KAAA,MAAW,KAAA,GAAQ,KAAA;AACvB,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAA4C;AACjE,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAW,OAAA,EAAQ,GAAI,aAAa,KAAK,CAAA;AAC5D,EAAA,MAAM,SAAA,GAAY,6BAAA,CAA8B,KAAA,CAAM,MAAM,CAAA;AAC5D,EAAA,MAAM,MAAoB,EAAC;AAE3B,EAAA,IAAI,SAAA,KAAc,SAAA,IAAa,KAAA,CAAM,SAAA,KAAc,MAAA,EAAW;AAC5D,IAAA,MAAM,OAAA,GAAyD;AAAA,MAC7D,aAAA,EAAe,KAAA;AAAA,MACf,KAAA,EAAO,aAAA;AAAA,MACP,SAAA;AAAA,MACA,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ;AAAA,KACF;AACA,IAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAA;AACjD,IAAA,IAAI,QAAA,UAAkB,QAAA,GAAW,QAAA;AACjC,IAAA,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,EAClB;AAEA,EAAA,IAAI,cAAc,SAAA,IAAa,SAAA,KAAc,OAAA,IAAW,KAAA,CAAM,YAAY,MAAA,EAAW;AACnF,IAAA,MAAM,SAAA,GAA6D;AAAA,MACjE,aAAA,EAAe,KAAA;AAAA,MACf,KAAA,EAAO,eAAA;AAAA,MACP,SAAA;AAAA,MACA,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,MAAA,EAAQ,SAAA,KAAc,OAAA,GAAU,OAAA,GAAU,SAAA;AAAA,MAC1C,OAAA;AAAA,MACA,YAAY,KAAA,CAAM,UAAA,IAAc,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,SAAS;AAAA,KACjE;AACA,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,KAAA,CAAM,KAAK,CAAA;AAC3C,IAAA,IAAI,KAAA,YAAiB,KAAA,GAAQ,KAAA;AAC7B,IAAA,GAAA,CAAI,KAAK,SAAS,CAAA;AAAA,EACpB;AAEA,EAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,IAAA,GAAA,CAAI,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAC,CAAA;AAAA,EACtC;AAEA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,eAAe,KAAA,EAA4C;AAClE,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAW,OAAA,EAAQ,GAAI,aAAa,KAAK,CAAA;AAC5D,EAAA,MAAM,UAAA,GAAa,8BAAA,CAA+B,KAAA,CAAM,MAAM,CAAA;AAC9D,EAAA,MAAM,MAAA,GAAS,cAAc,KAAK,CAAA;AAClC,EAAA,MAAM,MAAoB,EAAC;AAE3B,EAAA,MAAM,iBAAA,GACJ,eAAe,SAAA,IACf,KAAA,CAAM,cAAc,MAAA,IACpB,UAAA,KAAe,aACf,UAAA,KAAe,OAAA;AAEjB,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,MAAM,OAAA,GAA0D;AAAA,MAC9D,aAAA,EAAe,KAAA;AAAA,MACf,KAAA,EAAO,cAAA;AAAA,MACP,SAAA;AAAA,MACA,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,MAAA;AAAA,MACA,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,IAAA,EAAM,gBAAgB,KAAK,CAAA;AAAA,MAC3B;AAAA,KACF;AACA,IAAA,IAAI,KAAA,CAAM,QAAA,KAAa,MAAA,EAAW,OAAA,CAAQ,WAAW,KAAA,CAAM,QAAA;AAC3D,IAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,KAAA,CAAM,UAAA,EAAY,MAAM,UAAU,CAAA;AAC3E,IAAA,IAAI,QAAA,UAAkB,QAAA,GAAW,QAAA;AACjC,IAAA,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,EAClB;AAEA,EAAA,IACE,UAAA,KAAe,aACf,UAAA,KAAe,OAAA,IACf,MAAM,OAAA,KAAY,MAAA,IAClB,KAAA,CAAM,UAAA,KAAe,MAAA,EACrB;AACA,IAAA,MAAM,SAAA,GAA8D;AAAA,MAClE,aAAA,EAAe,KAAA;AAAA,MACf,KAAA,EAAO,gBAAA;AAAA,MACP,SAAA;AAAA,MACA,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,MAAA;AAAA,MACA,MAAA,EAAQ,UAAA,KAAe,OAAA,GAAU,OAAA,GAAU,SAAA;AAAA,MAC3C,OAAA;AAAA,MACA,YAAY,KAAA,CAAM,UAAA,IAAc,KAAK,GAAA,CAAI,CAAA,EAAG,UAAU,SAAS;AAAA,KACjE;AACA,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,KAAA,CAAM,KAAK,CAAA;AAC3C,IAAA,IAAI,KAAA,YAAiB,KAAA,GAAQ,KAAA;AAC7B,IAAA,GAAA,CAAI,KAAK,SAAS,CAAA;AAAA,EACpB;AAEA,EAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,IAAA,GAAA,CAAI,IAAA,CAAK,qBAAA,CAAsB,KAAK,CAAC,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,mCACd,KAAA,EACc;AACd,EAAA,IAAI,CAAC,uBAAA,CAAwB,KAAK,CAAA,EAAG;AACnC,IAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,EACjF;AAEA,EAAA,MAAM,WAAA,GAAc,MAAM,UAAA,EAAY,WAAA;AACtC,EAAA,IAAI,gBAAgB,aAAA,EAAe,OAAO,CAAC,oBAAA,CAAqB,KAAK,CAAC,CAAA;AACtE,EAAA,IAAI,gBAAgB,eAAA,EAAiB,OAAO,CAAC,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAC1E,EAAA,IAAI,gBAAgB,cAAA,EAAgB,OAAO,CAAC,qBAAA,CAAsB,KAAK,CAAC,CAAA;AACxE,EAAA,IAAI,gBAAgB,gBAAA,EAAkB,OAAO,CAAC,uBAAA,CAAwB,KAAK,CAAC,CAAA;AAE5E,EAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,IAAA,OAAO,cAAc,KAAK,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,eAAe,KAAK,CAAA;AAC7B;AAKO,SAAS,mCAAA,CACd,QACA,OAAA,EACc;AACd,EAAA,MAAM,MAAoB,EAAC;AAC3B,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AAC/B,IAAA,MAAM,IAAA,GAAO,mCAAmC,KAAK,CAAA;AACrD,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,OAAA,EAAS,eAAe,MAAA,EAAW;AAC1D,MAAA,KAAK,OAAA,CAAQ,UAAA;AACR,IACP;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,EAClB,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT;;;AC1XO,IAAM,sBAAA,GAAyB;AAAA,EACpC,eAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEA,SAASA,kBAAiB,KAAA,EAAiC;AACzD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA;AACrD;AAGO,SAAS,2BACd,MAAA,EACsC;AACtC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAgC,EAAC;AACvC,EAAA,IAAI,KAAA,GAAQ,KAAA;AAEZ,EAAA,KAAA,MAAW,OAAO,sBAAA,EAAwB;AACxC,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAIA,iBAAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AACX,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV;AAAA,EACF;AAEA,EAAA,OAAO,QAAQ,GAAA,GAAM,MAAA;AACvB;AAMO,SAAS,wBACd,OAAA,EAQqC;AACrC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GACJ,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAE,GAAG,OAAA,CAAQ,QAAA,EAAS,GAAI,EAAC;AAE9D,EAAA,IAAIA,iBAAAA,CAAiB,OAAA,CAAQ,aAAa,CAAA,EAAG;AAC3C,IAAA,MAAA,CAAO,gBAAgB,OAAA,CAAQ,aAAA;AAAA,EACjC;AACA,EAAA,IAAIA,iBAAAA,CAAiB,OAAA,CAAQ,SAAS,CAAA,EAAG;AACvC,IAAA,MAAA,CAAO,YAAY,OAAA,CAAQ,SAAA;AAAA,EAC7B;AACA,EAAA,IAAIA,iBAAAA,CAAiB,OAAA,CAAQ,UAAU,CAAA,EAAG;AACxC,IAAA,MAAA,CAAO,aAAa,OAAA,CAAQ,UAAA;AAAA,EAC9B;AACA,EAAA,IAAIA,iBAAAA,CAAiB,OAAA,CAAQ,OAAO,CAAA,EAAG;AACrC,IAAA,MAAA,CAAO,UAAU,OAAA,CAAQ,OAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,OAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,IAAI,MAAA,GAAS,MAAA;AACnD","file":"chunk-QX3ZMPUF.mjs","sourcesContent":["import type { AttributionConfidence, InspectKind } from \"./inspect-event.js\";\n\nexport type PersistedSchemaVersion = \"0.2\";\n\nexport type PersistedEventSourceType =\n | \"manual\"\n | \"json-log\"\n | \"log4js\"\n | \"adapter\"\n | \"ai-sdk\"\n | \"otel\";\n\nexport interface PersistedEventSource {\n type: PersistedEventSourceType;\n name?: string;\n version?: string;\n}\n\nexport type PersistedEventStatus = \"running\" | \"ok\" | \"error\" | \"unknown\";\n\nexport interface PersistedInspectError {\n name?: string;\n message: string;\n code?: string;\n}\n\nexport interface PersistedTokenUsage {\n input?: number;\n output?: number;\n total?: number;\n}\n\nexport interface PersistedTraceContext {\n traceId?: string;\n spanId?: string;\n parentSpanId?: string;\n}\n\nexport interface PersistedInspectEvent {\n schemaVersion: PersistedSchemaVersion;\n eventId: string;\n runId: string;\n parentId?: string;\n kind: InspectKind;\n name: string;\n status?: PersistedEventStatus;\n timestamp: string;\n startedAt?: string;\n endedAt?: string;\n durationMs?: number;\n confidence: AttributionConfidence;\n source: PersistedEventSource;\n attributes?: Record<string, unknown>;\n inputSummary?: unknown;\n outputSummary?: unknown;\n error?: PersistedInspectError;\n tokenUsage?: PersistedTokenUsage;\n trace?: PersistedTraceContext;\n}\n\nconst INSPECT_KINDS: readonly InspectKind[] = [\n \"RUN\",\n \"AGENT\",\n \"LLM\",\n \"TOOL\",\n \"CHAIN\",\n \"RETRIEVER\",\n \"DECISION\",\n \"RESULT\",\n \"ERROR\",\n \"LOGIC\",\n \"LOG\",\n];\n\nconst ATTRIBUTION_CONFIDENCES: readonly AttributionConfidence[] = [\n \"explicit\",\n \"correlated\",\n \"heuristic\",\n \"unknown\",\n];\n\nconst PERSISTED_EVENT_SOURCE_TYPES: readonly PersistedEventSourceType[] = [\n \"manual\",\n \"json-log\",\n \"log4js\",\n \"adapter\",\n \"ai-sdk\",\n \"otel\",\n];\n\nconst PERSISTED_EVENT_STATUSES: readonly PersistedEventStatus[] = [\n \"running\",\n \"ok\",\n \"error\",\n \"unknown\",\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isOptionalString(value: unknown): boolean {\n return value === undefined || isString(value);\n}\n\nfunction isNonNegativeNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction isOptionalNonNegativeNumber(value: unknown): boolean {\n return value === undefined || isNonNegativeNumber(value);\n}\n\nfunction isInspectKind(value: unknown): value is InspectKind {\n return (\n typeof value === \"string\" &&\n (INSPECT_KINDS as readonly string[]).includes(value)\n );\n}\n\nfunction isAttributionConfidence(value: unknown): value is AttributionConfidence {\n return (\n typeof value === \"string\" &&\n (ATTRIBUTION_CONFIDENCES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventSourceType(\n value: unknown,\n): value is PersistedEventSourceType {\n return (\n typeof value === \"string\" &&\n (PERSISTED_EVENT_SOURCE_TYPES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventStatus(value: unknown): value is PersistedEventStatus {\n return (\n typeof value === \"string\" &&\n (PERSISTED_EVENT_STATUSES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventSource(value: unknown): value is PersistedEventSource {\n if (!isRecord(value)) return false;\n if (!isPersistedEventSourceType(value.type)) return false;\n if (!isOptionalString(value.name)) return false;\n if (!isOptionalString(value.version)) return false;\n return true;\n}\n\nfunction isPersistedInspectError(value: unknown): value is PersistedInspectError {\n if (!isRecord(value)) return false;\n if (!isNonEmptyString(value.message)) return false;\n if (!isOptionalString(value.name)) return false;\n if (!isOptionalString(value.code)) return false;\n return true;\n}\n\nfunction isPersistedTokenUsage(value: unknown): value is PersistedTokenUsage {\n if (!isRecord(value)) return false;\n if (!isOptionalNonNegativeNumber(value.input)) return false;\n if (!isOptionalNonNegativeNumber(value.output)) return false;\n if (!isOptionalNonNegativeNumber(value.total)) return false;\n return true;\n}\n\nfunction isPersistedTraceContext(value: unknown): value is PersistedTraceContext {\n if (!isRecord(value)) return false;\n if (!isOptionalString(value.traceId)) return false;\n if (!isOptionalString(value.spanId)) return false;\n if (!isOptionalString(value.parentSpanId)) return false;\n return true;\n}\n\n/**\n * Runtime guard for a v0.2 {@link PersistedInspectEvent} JSON object.\n *\n * Timestamp fields (`timestamp`, `startedAt`, `endedAt`) are validated as\n * non-empty strings only — stricter ISO-8601 parsing may be added later.\n */\nexport function isPersistedInspectEvent(\n value: unknown,\n): value is PersistedInspectEvent {\n if (!isRecord(value)) return false;\n if (value.schemaVersion !== \"0.2\") return false;\n\n if (!isNonEmptyString(value.eventId)) return false;\n if (!isNonEmptyString(value.runId)) return false;\n if (!isInspectKind(value.kind)) return false;\n if (!isNonEmptyString(value.name)) return false;\n // Non-empty string required; ISO format not validated in this PR.\n if (!isNonEmptyString(value.timestamp)) return false;\n if (!isAttributionConfidence(value.confidence)) return false;\n if (!isPersistedEventSource(value.source)) return false;\n\n if (value.parentId !== undefined && !isNonEmptyString(value.parentId)) {\n return false;\n }\n if (value.status !== undefined && !isPersistedEventStatus(value.status)) {\n return false;\n }\n if (!isOptionalString(value.startedAt)) return false;\n if (!isOptionalString(value.endedAt)) return false;\n if (value.durationMs !== undefined && !isNonNegativeNumber(value.durationMs)) {\n return false;\n }\n if (value.attributes !== undefined && !isRecord(value.attributes)) {\n return false;\n }\n if (value.error !== undefined && !isPersistedInspectError(value.error)) {\n return false;\n }\n if (value.tokenUsage !== undefined && !isPersistedTokenUsage(value.tokenUsage)) {\n return false;\n }\n if (value.trace !== undefined && !isPersistedTraceContext(value.trace)) {\n return false;\n }\n\n return true;\n}\n","import type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n ErrorInfo,\n RunStatus,\n StepMetadata,\n StepStatus,\n StepType,\n TraceEvent,\n} from \"../types.js\";\nimport {\n isPersistedInspectEvent,\n type PersistedInspectEvent,\n type PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToTraceEventOptions {\n /**\n * Stable index within the source event list.\n * Used for deterministic timestamps when only one instant is known.\n */\n eventIndex?: number;\n}\n\nfunction parseIsoToMs(iso: string): number {\n const parsed = Date.parse(iso);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction mapInspectKindToStepType(kind: InspectKind): StepType {\n switch (kind) {\n case \"LLM\":\n return \"llm\";\n case \"TOOL\":\n return \"tool\";\n case \"DECISION\":\n return \"decision\";\n case \"RUN\":\n return \"run\";\n default:\n return \"logic\";\n }\n}\n\nfunction mapPersistedStatusToStepStatus(\n status: PersistedInspectEvent[\"status\"],\n): StepStatus | undefined {\n switch (status) {\n case \"ok\":\n return \"success\";\n case \"error\":\n return \"error\";\n case \"running\":\n return \"running\";\n default:\n return undefined;\n }\n}\n\nfunction mapPersistedStatusToRunStatus(\n status: PersistedInspectEvent[\"status\"],\n): RunStatus | undefined {\n switch (status) {\n case \"ok\":\n return \"success\";\n case \"error\":\n return \"error\";\n case \"running\":\n return \"running\";\n default:\n return undefined;\n }\n}\n\nfunction mapPersistedError(error: PersistedInspectEvent[\"error\"]): ErrorInfo | undefined {\n if (!error?.message) return undefined;\n const out: ErrorInfo = { message: error.message };\n const stack =\n typeof error.name === \"string\" && error.name.length > 0\n ? error.name\n : undefined;\n if (stack) {\n out.stack = stack;\n }\n return out;\n}\n\nfunction mapTokenUsageToMetadata(\n tokenUsage: PersistedTokenUsage | undefined,\n attributes: Record<string, unknown> | undefined,\n): StepMetadata | undefined {\n const metadata: StepMetadata = {};\n if (attributes?.metadata && typeof attributes.metadata === \"object\") {\n Object.assign(metadata, attributes.metadata as Record<string, unknown>);\n }\n if (tokenUsage) {\n metadata.tokens = {\n ...(tokenUsage.input !== undefined ? { input: tokenUsage.input } : {}),\n ...(tokenUsage.output !== undefined ? { output: tokenUsage.output } : {}),\n };\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction pickRunMetadata(\n attributes: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (!attributes) return undefined;\n const metadata =\n attributes.metadata && typeof attributes.metadata === \"object\"\n ? { ...(attributes.metadata as Record<string, unknown>) }\n : {};\n for (const key of [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n ] as const) {\n const value = attributes[key];\n if (typeof value === \"string\" && value.trim() !== \"\") {\n metadata[key] = value;\n }\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction resolveStepId(event: PersistedInspectEvent): string {\n const attrs = event.attributes;\n if (attrs && typeof attrs.stepId === \"string\" && attrs.stepId.trim() !== \"\") {\n return attrs.stepId;\n }\n return event.eventId;\n}\n\nfunction resolveStepType(event: PersistedInspectEvent): StepType {\n const attrs = event.attributes;\n if (attrs && typeof attrs.stepType === \"string\") {\n const t = attrs.stepType;\n if (\n t === \"run\" ||\n t === \"llm\" ||\n t === \"tool\" ||\n t === \"decision\" ||\n t === \"logic\" ||\n t === \"state\" ||\n t === \"custom\"\n ) {\n return t;\n }\n }\n return mapInspectKindToStepType(event.kind);\n}\n\nfunction resolveTimes(event: PersistedInspectEvent): {\n timestamp: number;\n startTime: number;\n endTime: number;\n} {\n const timestamp = parseIsoToMs(event.timestamp);\n const startTime =\n event.startedAt !== undefined ? parseIsoToMs(event.startedAt) : timestamp;\n let endTime =\n event.endedAt !== undefined ? parseIsoToMs(event.endedAt) : timestamp;\n if (\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs) &&\n event.durationMs >= 0 &&\n event.endedAt === undefined\n ) {\n endTime = startTime + event.durationMs;\n }\n return { timestamp, startTime, endTime };\n}\n\nfunction fromLegacyRunStarted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, startTime } = resolveTimes(event);\n const out: Extract<TraceEvent, { event: \"run_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp,\n runId: event.runId,\n name: event.name,\n startTime,\n };\n const metadata = pickRunMetadata(event.attributes);\n if (metadata) out.metadata = metadata;\n return out;\n}\n\nfunction fromLegacyRunCompleted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, endTime } = resolveTimes(event);\n const status = mapPersistedStatusToRunStatus(event.status) ?? \"success\";\n const out: Extract<TraceEvent, { event: \"run_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp,\n runId: event.runId,\n status: status === \"running\" ? \"success\" : status,\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n };\n const error = mapPersistedError(event.error);\n if (error) out.error = error;\n return out;\n}\n\nfunction fromLegacyStepStarted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, startTime } = resolveTimes(event);\n const out: Extract<TraceEvent, { event: \"step_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp,\n runId: event.runId,\n stepId: resolveStepId(event),\n name: event.name,\n type: resolveStepType(event),\n startTime,\n };\n if (event.parentId !== undefined) out.parentId = event.parentId;\n const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n if (metadata) out.metadata = metadata;\n return out;\n}\n\nfunction fromLegacyStepCompleted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, endTime } = resolveTimes(event);\n const status = mapPersistedStatusToStepStatus(event.status) ?? \"success\";\n const out: Extract<TraceEvent, { event: \"step_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp,\n runId: event.runId,\n stepId: resolveStepId(event),\n status: status === \"running\" ? \"success\" : status,\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n };\n const error = mapPersistedError(event.error);\n if (error) out.error = error;\n return out;\n}\n\nfunction fromNativeRun(event: PersistedInspectEvent): TraceEvent[] {\n const { timestamp, startTime, endTime } = resolveTimes(event);\n const runStatus = mapPersistedStatusToRunStatus(event.status);\n const out: TraceEvent[] = [];\n\n if (runStatus === \"running\" || event.startedAt !== undefined) {\n const started: Extract<TraceEvent, { event: \"run_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp,\n runId: event.runId,\n name: event.name,\n startTime,\n };\n const metadata = pickRunMetadata(event.attributes);\n if (metadata) started.metadata = metadata;\n out.push(started);\n }\n\n if (runStatus === \"success\" || runStatus === \"error\" || event.endedAt !== undefined) {\n const completed: Extract<TraceEvent, { event: \"run_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp,\n runId: event.runId,\n status: runStatus === \"error\" ? \"error\" : \"success\",\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n };\n const error = mapPersistedError(event.error);\n if (error) completed.error = error;\n out.push(completed);\n }\n\n if (out.length === 0) {\n out.push(fromLegacyRunStarted(event));\n }\n\n return out;\n}\n\nfunction fromNativeStep(event: PersistedInspectEvent): TraceEvent[] {\n const { timestamp, startTime, endTime } = resolveTimes(event);\n const stepStatus = mapPersistedStatusToStepStatus(event.status);\n const stepId = resolveStepId(event);\n const out: TraceEvent[] = [];\n\n const shouldEmitStarted =\n stepStatus === \"running\" ||\n event.startedAt !== undefined ||\n stepStatus === \"success\" ||\n stepStatus === \"error\";\n\n if (shouldEmitStarted) {\n const started: Extract<TraceEvent, { event: \"step_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp,\n runId: event.runId,\n stepId,\n name: event.name,\n type: resolveStepType(event),\n startTime,\n };\n if (event.parentId !== undefined) started.parentId = event.parentId;\n const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n if (metadata) started.metadata = metadata;\n out.push(started);\n }\n\n if (\n stepStatus === \"success\" ||\n stepStatus === \"error\" ||\n event.endedAt !== undefined ||\n event.durationMs !== undefined\n ) {\n const completed: Extract<TraceEvent, { event: \"step_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp,\n runId: event.runId,\n stepId,\n status: stepStatus === \"error\" ? \"error\" : \"success\",\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n };\n const error = mapPersistedError(event.error);\n if (error) completed.error = error;\n out.push(completed);\n }\n\n if (out.length === 0) {\n out.push(fromLegacyStepStarted(event));\n }\n\n return out;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to zero or more v0.1 {@link TraceEvent} rows\n * for inspection commands. Does not mutate `event`.\n */\nexport function persistedInspectEventToTraceEvents(\n event: PersistedInspectEvent,\n): TraceEvent[] {\n if (!isPersistedInspectEvent(event)) {\n throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n }\n\n const legacyEvent = event.attributes?.legacyEvent;\n if (legacyEvent === \"run_started\") return [fromLegacyRunStarted(event)];\n if (legacyEvent === \"run_completed\") return [fromLegacyRunCompleted(event)];\n if (legacyEvent === \"step_started\") return [fromLegacyStepStarted(event)];\n if (legacyEvent === \"step_completed\") return [fromLegacyStepCompleted(event)];\n\n if (event.kind === \"RUN\") {\n return fromNativeRun(event);\n }\n\n return fromNativeStep(event);\n}\n\n/**\n * Maps persisted v0.2 events to v0.1 trace events for inspection.\n */\nexport function persistedInspectEventsToTraceEvents(\n events: readonly PersistedInspectEvent[],\n options?: PersistedToTraceEventOptions,\n): TraceEvent[] {\n const out: TraceEvent[] = [];\n events.forEach((event, index) => {\n const rows = persistedInspectEventToTraceEvents(event);\n if (rows.length === 0 && options?.eventIndex !== undefined) {\n void options.eventIndex;\n void index;\n }\n out.push(...rows);\n });\n return out;\n}\n","import type { InspectRunOptions, TraceCorrelationMetadata } from \"./types.js\";\n\nexport const TRACE_CORRELATION_KEYS = [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n] as const satisfies readonly (keyof TraceCorrelationMetadata)[];\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\n/** Extracts known correlation keys from a metadata record. */\nexport function extractCorrelationMetadata(\n record: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n if (!record) {\n return undefined;\n }\n\n const out: TraceCorrelationMetadata = {};\n let found = false;\n\n for (const key of TRACE_CORRELATION_KEYS) {\n const value = record[key];\n if (isNonEmptyString(value)) {\n out[key] = value;\n found = true;\n }\n }\n\n return found ? out : undefined;\n}\n\n/**\n * Builds `run_started` metadata from optional run metadata and top-level correlation fields.\n * Top-level correlation options override the same keys in `options.metadata`.\n */\nexport function buildRunStartedMetadata(\n options?: Pick<\n InspectRunOptions,\n | \"metadata\"\n | \"correlationId\"\n | \"requestId\"\n | \"decisionId\"\n | \"groupId\"\n >,\n): Record<string, unknown> | undefined {\n if (!options) {\n return undefined;\n }\n\n const merged: Record<string, unknown> =\n options.metadata !== undefined ? { ...options.metadata } : {};\n\n if (isNonEmptyString(options.correlationId)) {\n merged.correlationId = options.correlationId;\n }\n if (isNonEmptyString(options.requestId)) {\n merged.requestId = options.requestId;\n }\n if (isNonEmptyString(options.decisionId)) {\n merged.decisionId = options.decisionId;\n }\n if (isNonEmptyString(options.groupId)) {\n merged.groupId = options.groupId;\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n"]}
@@ -0,0 +1,99 @@
1
+ import crypto from 'crypto';
2
+
3
+ // packages/core/src/logs/redactor.ts
4
+ var DEFAULT_REDACT_KEYS = [
5
+ "authorization",
6
+ "cookie",
7
+ "token",
8
+ "apiKey",
9
+ "password",
10
+ "secret",
11
+ "email"
12
+ ];
13
+ function isRecord(v) {
14
+ return typeof v === "object" && v !== null && !Array.isArray(v);
15
+ }
16
+ function toKey(s) {
17
+ return s.toLowerCase();
18
+ }
19
+ function stableHash(value) {
20
+ const h = crypto.createHash("sha256").update(value, "utf8").digest("hex");
21
+ return h.slice(0, 8);
22
+ }
23
+ function compileRules(rules, extraKeys) {
24
+ const out = /* @__PURE__ */ new Map();
25
+ const set = (r) => {
26
+ const k = toKey(r.key);
27
+ out.set(k, { ...r, key: k });
28
+ };
29
+ for (const k of DEFAULT_REDACT_KEYS) {
30
+ set({ key: k, strategy: "full" });
31
+ }
32
+ for (const k of extraKeys ?? []) {
33
+ if (typeof k === "string" && k.length > 0) {
34
+ set({ key: k, strategy: "full" });
35
+ }
36
+ }
37
+ for (const r of rules ?? []) {
38
+ if (typeof r === "string") {
39
+ set({ key: r, strategy: "full" });
40
+ continue;
41
+ }
42
+ const key = r.key;
43
+ if (r.strategy === "full") set({ key, strategy: "full" });
44
+ if (r.strategy === "hash") set({ key, strategy: "hash" });
45
+ if (r.strategy === "prefix") {
46
+ set({ key, strategy: "prefix", keep: typeof r.keep === "number" ? r.keep : 8 });
47
+ }
48
+ }
49
+ return [...out.values()];
50
+ }
51
+ var Redactor = class {
52
+ #rules;
53
+ constructor(options) {
54
+ this.#rules = compileRules(options?.rules, options?.extraKeys);
55
+ }
56
+ redactValue(key, value) {
57
+ const k = toKey(key);
58
+ const rule = this.#rules.find((r) => r.key === k);
59
+ if (!rule) {
60
+ return this.#redactNested(value);
61
+ }
62
+ if (rule.strategy === "full") return "[REDACTED]";
63
+ const asString = typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" ? String(value) : void 0;
64
+ if (rule.strategy === "prefix") {
65
+ if (asString === void 0) return "[REDACTED]";
66
+ const keep = Math.max(0, Math.floor(rule.keep));
67
+ return asString.length <= keep ? `${asString}\u2026` : `${asString.slice(0, keep)}\u2026`;
68
+ }
69
+ if (rule.strategy === "hash") {
70
+ if (asString === void 0) return "[HASH:unknown]";
71
+ return `[HASH:${stableHash(asString)}]`;
72
+ }
73
+ return this.#redactNested(value);
74
+ }
75
+ redactRecord(record) {
76
+ const out = {};
77
+ for (const [k, v] of Object.entries(record)) {
78
+ out[k] = this.redactValue(k, v);
79
+ }
80
+ return out;
81
+ }
82
+ #redactNested(value) {
83
+ if (Array.isArray(value)) {
84
+ return value.map((v) => this.#redactNested(v));
85
+ }
86
+ if (isRecord(value)) {
87
+ const out = {};
88
+ for (const [k, v] of Object.entries(value)) {
89
+ out[k] = this.redactValue(k, v);
90
+ }
91
+ return out;
92
+ }
93
+ return value;
94
+ }
95
+ };
96
+
97
+ export { DEFAULT_REDACT_KEYS, Redactor };
98
+ //# sourceMappingURL=chunk-VU6O5QAH.mjs.map
99
+ //# sourceMappingURL=chunk-VU6O5QAH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/logs/redactor.ts"],"names":[],"mappings":"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","file":"chunk-VU6O5QAH.mjs","sourcesContent":["import crypto from \"node:crypto\";\n\nimport type { RedactionRule } from \"../types/log-config.js\";\n\nexport const DEFAULT_REDACT_KEYS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apiKey\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nexport interface RedactorOptions {\n rules?: RedactionRule[];\n /** Additional exact keys (case-insensitive) to redact in addition to defaults. */\n extraKeys?: readonly string[];\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction toKey(s: string): string {\n return s.toLowerCase();\n}\n\nfunction stableHash(value: string): string {\n const h = crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n return h.slice(0, 8);\n}\n\ntype CompiledRule =\n | { key: string; strategy: \"full\" }\n | { key: string; strategy: \"prefix\"; keep: number }\n | { key: string; strategy: \"hash\" };\n\nfunction compileRules(\n rules?: RedactionRule[],\n extraKeys?: readonly string[],\n): CompiledRule[] {\n const out = new Map<string, CompiledRule>();\n\n const set = (r: CompiledRule) => {\n const k = toKey(r.key);\n out.set(k, { ...r, key: k } as CompiledRule);\n };\n\n for (const k of DEFAULT_REDACT_KEYS) {\n set({ key: k, strategy: \"full\" });\n }\n\n for (const k of extraKeys ?? []) {\n if (typeof k === \"string\" && k.length > 0) {\n set({ key: k, strategy: \"full\" });\n }\n }\n\n for (const r of rules ?? []) {\n if (typeof r === \"string\") {\n set({ key: r, strategy: \"full\" });\n continue;\n }\n const key = r.key;\n if (r.strategy === \"full\") set({ key, strategy: \"full\" });\n if (r.strategy === \"hash\") set({ key, strategy: \"hash\" });\n if (r.strategy === \"prefix\") {\n set({ key, strategy: \"prefix\", keep: typeof r.keep === \"number\" ? r.keep : 8 });\n }\n }\n\n return [...out.values()];\n}\n\nexport class Redactor {\n readonly #rules: CompiledRule[];\n\n constructor(options?: RedactorOptions) {\n this.#rules = compileRules(options?.rules, options?.extraKeys);\n }\n\n redactValue(key: string, value: unknown): unknown {\n const k = toKey(key);\n const rule = this.#rules.find((r) => r.key === k);\n if (!rule) {\n return this.#redactNested(value);\n }\n\n if (rule.strategy === \"full\") return \"[REDACTED]\";\n const asString =\n typeof value === \"string\"\n ? value\n : typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\"\n ? String(value)\n : undefined;\n\n if (rule.strategy === \"prefix\") {\n if (asString === undefined) return \"[REDACTED]\";\n const keep = Math.max(0, Math.floor(rule.keep));\n return asString.length <= keep ? `${asString}…` : `${asString.slice(0, keep)}…`;\n }\n\n if (rule.strategy === \"hash\") {\n if (asString === undefined) return \"[HASH:unknown]\";\n return `[HASH:${stableHash(asString)}]`;\n }\n\n return this.#redactNested(value);\n }\n\n redactRecord(record: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(record)) {\n out[k] = this.redactValue(k, v);\n }\n return out;\n }\n\n #redactNested(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((v) => this.#redactNested(v));\n }\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n out[k] = this.redactValue(k, v);\n }\n return out;\n }\n return value;\n }\n}\n\n"]}