@anvia/studio 0.8.1 → 1.0.0-rc.10

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 (99) hide show
  1. package/README.md +69 -19
  2. package/dist/index.d.ts +179 -116
  3. package/dist/index.js +1683 -1487
  4. package/dist/index.js.map +1 -1
  5. package/dist/ui/assets/ArrowClockwise.es-CSEY3Qr6.js +2 -0
  6. package/dist/ui/assets/{ArrowClockwise.es-CSN-gjxO.js.map → ArrowClockwise.es-CSEY3Qr6.js.map} +1 -1
  7. package/dist/ui/assets/CaretDown.es-BHAPbv1R.js +2 -0
  8. package/dist/ui/assets/CaretDown.es-BHAPbv1R.js.map +1 -0
  9. package/dist/ui/assets/Check.es-BLChmggz.js +2 -0
  10. package/dist/ui/assets/Check.es-BLChmggz.js.map +1 -0
  11. package/dist/ui/assets/Wrench.es-BL6BmNv7.js +4 -0
  12. package/dist/ui/assets/Wrench.es-BL6BmNv7.js.map +1 -0
  13. package/dist/ui/assets/agents-page-DQqt45If.js +2 -0
  14. package/dist/ui/assets/agents-page-DQqt45If.js.map +1 -0
  15. package/dist/ui/assets/{badge-RJJoRC4P.js → badge-CcajoiAt.js} +1 -1
  16. package/dist/ui/assets/{badge-RJJoRC4P.js.map → badge-CcajoiAt.js.map} +1 -1
  17. package/dist/ui/assets/button-07gzSO47.js +2 -0
  18. package/dist/ui/assets/button-07gzSO47.js.map +1 -0
  19. package/dist/ui/assets/chunk-QGX73TSQ-D9QAGlAY.js +65 -0
  20. package/dist/ui/assets/chunk-QGX73TSQ-D9QAGlAY.js.map +1 -0
  21. package/dist/ui/assets/dialog-CNNQ3hoF.js +2 -0
  22. package/dist/ui/assets/dialog-CNNQ3hoF.js.map +1 -0
  23. package/dist/ui/assets/dist-CqMdRzwk.js +2 -0
  24. package/dist/ui/assets/dist-CqMdRzwk.js.map +1 -0
  25. package/dist/ui/assets/dist-DWqJwN1i.js +2 -0
  26. package/dist/ui/assets/dist-DWqJwN1i.js.map +1 -0
  27. package/dist/ui/assets/es2015-DsZq7PFO.js +42 -0
  28. package/dist/ui/assets/es2015-DsZq7PFO.js.map +1 -0
  29. package/dist/ui/assets/icon-CqkMSRbt.js +2 -0
  30. package/dist/ui/assets/icon-CqkMSRbt.js.map +1 -0
  31. package/dist/ui/assets/index-BdhE3teo.js +12 -0
  32. package/dist/ui/assets/index-BdhE3teo.js.map +1 -0
  33. package/dist/ui/assets/index-CFbK-pX6.css +2 -0
  34. package/dist/ui/assets/{input-BOUv3rgO.js → input-BiI6gsxA.js} +1 -1
  35. package/dist/ui/assets/{input-BOUv3rgO.js.map → input-BiI6gsxA.js.map} +1 -1
  36. package/dist/ui/assets/knowledge-model-S51n2rKh.js +2 -0
  37. package/dist/ui/assets/knowledge-model-S51n2rKh.js.map +1 -0
  38. package/dist/ui/assets/knowledge-page-DZeLh92t.js +2 -0
  39. package/dist/ui/assets/{knowledge-page-Cot_uYcE.js.map → knowledge-page-DZeLh92t.js.map} +1 -1
  40. package/dist/ui/assets/mcps-page-CDPMO2x9.js +2 -0
  41. package/dist/ui/assets/{mcps-page-BSO6ork4.js.map → mcps-page-CDPMO2x9.js.map} +1 -1
  42. package/dist/ui/assets/memory-page-D3UhjpTb.js +4 -0
  43. package/dist/ui/assets/memory-page-D3UhjpTb.js.map +1 -0
  44. package/dist/ui/assets/pipelines-page-BP8R6NI7.js +8 -0
  45. package/dist/ui/assets/pipelines-page-BP8R6NI7.js.map +1 -0
  46. package/dist/ui/assets/{renderers-B8gvjR2u.js → renderers-DHMEAblV.js} +3 -3
  47. package/dist/ui/assets/{renderers-B8gvjR2u.js.map → renderers-DHMEAblV.js.map} +1 -1
  48. package/dist/ui/assets/request-7oUPS8zY.js +4 -0
  49. package/dist/ui/assets/request-7oUPS8zY.js.map +1 -0
  50. package/dist/ui/assets/rfb-DiW3PDuT.js +6 -0
  51. package/dist/ui/assets/rfb-DiW3PDuT.js.map +1 -0
  52. package/dist/ui/assets/sandboxes-page-C6kokYwc.js +2 -0
  53. package/dist/ui/assets/sandboxes-page-C6kokYwc.js.map +1 -0
  54. package/dist/ui/assets/select-BOYfrfck.js +2 -0
  55. package/dist/ui/assets/select-BOYfrfck.js.map +1 -0
  56. package/dist/ui/assets/sessions-page-ClXzRM9K.js +2 -0
  57. package/dist/ui/assets/{sessions-page-CSN2vSKZ.js.map → sessions-page-ClXzRM9K.js.map} +1 -1
  58. package/dist/ui/assets/status-page-eA8uRLZQ.js +2 -0
  59. package/dist/ui/assets/{status-page-CgRNt0wi.js.map → status-page-eA8uRLZQ.js.map} +1 -1
  60. package/dist/ui/assets/studio-CeTsQ4gf.js +2 -0
  61. package/dist/ui/assets/studio-CeTsQ4gf.js.map +1 -0
  62. package/dist/ui/assets/textarea-DESKg_ZK.js +2 -0
  63. package/dist/ui/assets/textarea-DESKg_ZK.js.map +1 -0
  64. package/dist/ui/assets/tool-runner-D3-SlGqQ.js +2 -0
  65. package/dist/ui/assets/{tool-runner-BZN-PZJU.js.map → tool-runner-D3-SlGqQ.js.map} +1 -1
  66. package/dist/ui/assets/tools-page-D3gnQf1_.js +2 -0
  67. package/dist/ui/assets/{tools-page-DRv7aklU.js.map → tools-page-D3gnQf1_.js.map} +1 -1
  68. package/dist/ui/assets/trace-browser-D93H7Xxs.js +10 -0
  69. package/dist/ui/assets/trace-browser-D93H7Xxs.js.map +1 -0
  70. package/dist/ui/assets/transcript-item-BmjdZLbS.js +3 -0
  71. package/dist/ui/assets/transcript-item-BmjdZLbS.js.map +1 -0
  72. package/dist/ui/assets/with-selector-CRZWaZzC.js +2 -0
  73. package/dist/ui/assets/with-selector-CRZWaZzC.js.map +1 -0
  74. package/dist/ui/index.html +19 -3
  75. package/package.json +16 -11
  76. package/dist/ui/assets/ArrowClockwise.es-CSN-gjxO.js +0 -2
  77. package/dist/ui/assets/agents-page-CkNSbqAj.js +0 -2
  78. package/dist/ui/assets/agents-page-CkNSbqAj.js.map +0 -1
  79. package/dist/ui/assets/chunk-ADH7NNCS-DM6fsnDI.js +0 -2
  80. package/dist/ui/assets/chunk-ADH7NNCS-DM6fsnDI.js.map +0 -1
  81. package/dist/ui/assets/index-Bh7RLPBw.js +0 -56
  82. package/dist/ui/assets/index-Bh7RLPBw.js.map +0 -1
  83. package/dist/ui/assets/index-D-CbFx6c.css +0 -1
  84. package/dist/ui/assets/knowledge-page-Cot_uYcE.js +0 -2
  85. package/dist/ui/assets/mcps-page-BSO6ork4.js +0 -2
  86. package/dist/ui/assets/memory-page-CG84G--r.js +0 -4
  87. package/dist/ui/assets/memory-page-CG84G--r.js.map +0 -1
  88. package/dist/ui/assets/pipelines-page-Hbf5ffUH.js +0 -8
  89. package/dist/ui/assets/pipelines-page-Hbf5ffUH.js.map +0 -1
  90. package/dist/ui/assets/sandboxes-page-D910dyFO.js +0 -2
  91. package/dist/ui/assets/sandboxes-page-D910dyFO.js.map +0 -1
  92. package/dist/ui/assets/sessions-page-CSN2vSKZ.js +0 -2
  93. package/dist/ui/assets/status-page-CgRNt0wi.js +0 -2
  94. package/dist/ui/assets/tool-runner-BZN-PZJU.js +0 -2
  95. package/dist/ui/assets/tools-page-DRv7aklU.js +0 -2
  96. package/dist/ui/assets/trace-browser-B07coNNE.js +0 -10
  97. package/dist/ui/assets/trace-browser-B07coNNE.js.map +0 -1
  98. package/dist/ui/assets/transcript-item-ZNkQEaCw.js +0 -3
  99. package/dist/ui/assets/transcript-item-ZNkQEaCw.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-item-BmjdZLbS.js","names":["e","e","a","e","e","m","n","a","m","t","e","r","r","m"],"sources":["../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/ChartBar.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/Copy.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/Lightning.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/Path.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/ChartBar.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/Copy.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/Lightning.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/Path.es.js","../../../src/ui/app/modules/playground/working-duration.tsx","../../../src/ui/app/modules/playground/transcript-item.tsx"],"sourcesContent":["import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,196h-4V40a12,12,0,0,0-12-12H152a12,12,0,0,0-12,12V76H96A12,12,0,0,0,84,88v36H48a12,12,0,0,0-12,12v60H32a12,12,0,0,0,0,24H224a12,12,0,0,0,0-24ZM164,52h32V196H164Zm-56,48h32v96H108ZM60,148H84v48H60Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M208,40V208H152V40Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1,0-16h8V136a8,8,0,0,1,8-8H72a8,8,0,0,1,8,8v64H96V88a8,8,0,0,1,8-8h32a8,8,0,0,1,8,8V200h16V40a8,8,0,0,1,8-8h40a8,8,0,0,1,8,8V200h8A8,8,0,0,1,232,208Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,202H214V40a6,6,0,0,0-6-6H152a6,6,0,0,0-6,6V82H96a6,6,0,0,0-6,6v42H48a6,6,0,0,0-6,6v66H32a6,6,0,0,0,0,12H224a6,6,0,0,0,0-12ZM158,46h44V202H158ZM102,94h44V202H102ZM54,142H90v60H54Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,204H212V40a4,4,0,0,0-4-4H152a4,4,0,0,0-4,4V84H96a4,4,0,0,0-4,4v44H48a4,4,0,0,0-4,4v68H32a4,4,0,0,0,0,8H224a4,4,0,0,0,0-8ZM156,44h48V204H156ZM100,92h48V204H100ZM52,140H92v64H52Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,40V168H168V88H88V40Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32Zm-8,128H176V88a8,8,0,0,0-8-8H96V48H208Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,34H88a6,6,0,0,0-6,6V82H40a6,6,0,0,0-6,6V216a6,6,0,0,0,6,6H168a6,6,0,0,0,6-6V174h42a6,6,0,0,0,6-6V40A6,6,0,0,0,216,34ZM162,210H46V94H162Zm48-48H174V88a6,6,0,0,0-6-6H94V46H210Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,36H88a4,4,0,0,0-4,4V84H40a4,4,0,0,0-4,4V216a4,4,0,0,0,4,4H168a4,4,0,0,0,4-4V172h44a4,4,0,0,0,4-4V40A4,4,0,0,0,216,36ZM164,212H44V92H164Zm48-48H172V88a4,4,0,0,0-4-4H92V44H212Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as l from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M219.71,117.38a12,12,0,0,0-7.25-8.52L161.28,88.39l10.59-70.61a12,12,0,0,0-20.64-10l-112,120a12,12,0,0,0,4.31,19.33l51.18,20.47L84.13,238.22a12,12,0,0,0,20.64,10l112-120A12,12,0,0,0,219.71,117.38ZM113.6,203.55l6.27-41.77a12,12,0,0,0-7.41-12.92L68.74,131.37,142.4,52.45l-6.27,41.77a12,12,0,0,0,7.41,12.92l43.72,17.49Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M96,240l16-80L48,136,160,16,144,96l64,24Z\", opacity: \"0.2\" }), /* @__PURE__ */ l.createElement(\"path\", { d: \"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M213.85,125.46l-112,120a8,8,0,0,1-13.69-7l14.66-73.33L45.19,143.49a8,8,0,0,1-3-13l112-120a8,8,0,0,1,13.69,7L153.18,90.9l57.63,21.61a8,8,0,0,1,3,12.95Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M213.84,118.63a6,6,0,0,0-3.73-4.25L150.88,92.17l15-75a6,6,0,0,0-10.27-5.27l-112,120a6,6,0,0,0,2.28,9.71l59.23,22.21-15,75a6,6,0,0,0,3.14,6.52A6.07,6.07,0,0,0,96,246a6,6,0,0,0,4.39-1.91l112-120A6,6,0,0,0,213.84,118.63ZM106,220.46l11.85-59.28a6,6,0,0,0-3.77-6.8l-55.6-20.85,91.46-98L138.12,94.82a6,6,0,0,0,3.77,6.8l55.6,20.85Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M211.89,119.09a4,4,0,0,0-2.49-2.84l-60.81-22.8,15.33-76.67a4,4,0,0,0-6.84-3.51l-112,120a4,4,0,0,0-1,3.64,4,4,0,0,0,2.49,2.84l60.81,22.8L92.08,239.22a4,4,0,0,0,6.84,3.51l112-120A4,4,0,0,0,211.89,119.09ZM102.68,227l13.24-66.2a4,4,0,0,0-2.52-4.53L55,134.36,153.32,29l-13.24,66.2a4,4,0,0,0,2.52,4.53L201,121.64Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,164a36.07,36.07,0,0,0-33.94,24H72a28,28,0,0,1,0-56h96a44,44,0,0,0,0-88H72a12,12,0,0,0,0,24h96a20,20,0,0,1,0,40H72a52,52,0,0,0,0,104h94.06A36,36,0,1,0,200,164Zm0,48a12,12,0,1,1,12-12A12,12,0,0,1,200,212Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200a24,24,0,1,1-24-24A24,24,0,0,1,224,200Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M228,200a28,28,0,0,1-54.83,8H72a48,48,0,0,1,0-96h96a24,24,0,0,0,0-48H72a8,8,0,0,1,0-16h96a40,40,0,0,1,0,80H72a32,32,0,0,0,0,64H173.17A28,28,0,0,1,228,200Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,170a30.05,30.05,0,0,0-29.4,24H72a34,34,0,0,1,0-68h96a38,38,0,0,0,0-76H72a6,6,0,0,0,0,12h96a26,26,0,0,1,0,52H72a46,46,0,0,0,0,92h98.6A30,30,0,1,0,200,170Zm0,48a18,18,0,1,1,18-18A18,18,0,0,1,200,218Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,172a28,28,0,0,0-27.71,24H72a36,36,0,0,1,0-72h96a36,36,0,0,0,0-72H72a4,4,0,0,0,0,8h96a28,28,0,0,1,0,56H72a44,44,0,0,0,0,88H172.29A28,28,0,1,0,200,172Zm0,48a20,20,0,1,1,20-20A20,20,0,0,1,200,220Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as r from \"react\";\nimport e from \"../lib/IconBase.es.js\";\nimport m from \"../defs/ChartBar.es.js\";\nconst a = r.forwardRef((o, t) => /* @__PURE__ */ r.createElement(e, { ref: t, ...o, weights: m }));\na.displayName = \"ChartBarIcon\";\nconst n = a;\nexport {\n n as ChartBar,\n a as ChartBarIcon\n};\n","import * as o from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport m from \"../defs/Copy.es.js\";\nconst e = o.forwardRef((r, t) => /* @__PURE__ */ o.createElement(a, { ref: t, ...r, weights: m }));\ne.displayName = \"CopyIcon\";\nconst s = e;\nexport {\n s as Copy,\n e as CopyIcon\n};\n","import * as o from \"react\";\nimport e from \"../lib/IconBase.es.js\";\nimport r from \"../defs/Lightning.es.js\";\nconst t = o.forwardRef((n, i) => /* @__PURE__ */ o.createElement(e, { ref: i, ...n, weights: r }));\nt.displayName = \"LightningIcon\";\nconst c = t;\nexport {\n c as Lightning,\n t as LightningIcon\n};\n","import * as o from \"react\";\nimport r from \"../lib/IconBase.es.js\";\nimport m from \"../defs/Path.es.js\";\nconst t = o.forwardRef((a, e) => /* @__PURE__ */ o.createElement(r, { ref: e, ...a, weights: m }));\nt.displayName = \"PathIcon\";\nconst n = t;\nexport {\n n as Path,\n t as PathIcon\n};\n","import { cn } from \"../../lib/utils\";\n\nexport function WorkingDuration(props: {\n className?: string | undefined;\n durationMs?: number | undefined;\n}) {\n if (props.durationMs === undefined) {\n return null;\n }\n\n return (\n <span\n aria-live=\"off\"\n className={cn(\n \"inline-flex items-center gap-1.5 text-xs font-medium tabular-nums text-muted-foreground\",\n props.className,\n )}\n >\n {formatWorkingDuration(props.durationMs)}\n </span>\n );\n}\n\nexport function formatWorkingDuration(durationMs: number): string {\n const normalizedDurationMs = Number.isFinite(durationMs) ? Math.max(0, durationMs) : 0;\n const totalSeconds = Math.floor(normalizedDurationMs / 1_000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const duration = minutes === 0 ? `${seconds}s` : `${minutes}m ${seconds}s`;\n return `Finished - ${duration}`;\n}\n","import { CaretDown, ChartBar, Check, Copy, Lightning, Path } from \"@phosphor-icons/react\";\nimport { memo, useState } from \"react\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport { Textarea } from \"../../components/ui/textarea\";\nimport { cn } from \"../../lib/utils\";\nimport { approvalLabel } from \"../shared/format\";\nimport { MarkdownText, ToolPayload } from \"../shared/renderers\";\nimport type { ToolApproval, ToolMessage, ToolQuestion, TranscriptEntry } from \"../shared/types\";\nimport type { AssistantResponseMetrics, ResponseUsageMetrics } from \"./response-metrics\";\nimport { WorkingDuration } from \"./working-duration\";\n\nexport const TranscriptItem = memo(function TranscriptItem(props: {\n entry: TranscriptEntry;\n displayText?: string | undefined;\n live?: boolean | undefined;\n metrics?: AssistantResponseMetrics | undefined;\n decidingApprovals: Set<string>;\n answeringQuestions: Set<string>;\n onApprovalDecision: (approvalId: string, approved: boolean) => void;\n onQuestionAnswer: (\n questionId: string,\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n onOpenTrace: (traceId: string) => void;\n}) {\n const displayText = props.displayText ?? (\"text\" in props.entry ? props.entry.text : \"\");\n if (props.entry.kind === \"reasoning\") {\n return (\n <article\n className=\"max-w-205 justify-self-start text-muted-foreground\"\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"reasoning\"\n >\n <div className=\"mb-1 text-xs font-semibold uppercase text-muted-foreground\">Reasoning</div>\n <MarkdownText live={props.live} size=\"base\" text={displayText} />\n </article>\n );\n }\n\n if (props.entry.kind === \"tool\") {\n return (\n <ToolEntry\n entry={props.entry}\n live={props.live}\n decidingApprovals={props.decidingApprovals}\n answeringQuestions={props.answeringQuestions}\n onApprovalDecision={props.onApprovalDecision}\n onQuestionAnswer={props.onQuestionAnswer}\n />\n );\n }\n\n const traceId = props.entry.role === \"assistant\" ? props.entry.traceId : undefined;\n const hasTable = props.entry.role === \"assistant\" && hasMarkdownTable(displayText);\n const isError =\n props.entry.role === \"assistant\" && \"tone\" in props.entry && props.entry.tone === \"error\";\n const isPending =\n props.entry.role === \"assistant\" && \"tone\" in props.entry && props.entry.tone === \"pending\";\n const showAssistantActions =\n props.entry.role === \"assistant\" && !isPending && props.entry.text.trim().length > 0;\n const persistedDurationMs = props.entry.durationMs ?? props.metrics?.durationMs;\n const showAssistantFooter = showAssistantActions || persistedDurationMs !== undefined;\n\n if (props.entry.role === \"user\") {\n return (\n <article\n className=\"grid w-fit max-w-[min(64ch,82%)] justify-items-end justify-self-end self-start text-foreground\"\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"message\"\n >\n {props.entry.text.trim().length === 0 ? null : (\n <div className=\"rounded-2xl bg-muted px-4 py-2.5\">\n <MarkdownText size=\"base\" text={props.entry.text} />\n </div>\n )}\n {props.entry.attachments !== undefined ? (\n <MessageAttachments attachments={props.entry.attachments} />\n ) : null}\n </article>\n );\n }\n\n return (\n <article\n className={cn(\n \"self-start\",\n hasTable ? \"w-full max-w-full\" : \"max-w-[min(82ch,100%)]\",\n props.entry.role === \"assistant\" &&\n cn(\"justify-self-start text-foreground\", isError && \"text-destructive\"),\n )}\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"message\"\n >\n {isPending ? <AssistantLoadingIndicator /> : null}\n {displayText.trim().length === 0 ? null : (\n <MarkdownText live={props.live} size=\"base\" text={displayText} />\n )}\n {showAssistantFooter ? (\n <AssistantResponseFooter\n metrics={props.metrics}\n showActions={showAssistantActions}\n text={props.entry.text}\n traceId={traceId}\n durationMs={persistedDurationMs}\n onOpenTrace={props.onOpenTrace}\n />\n ) : null}\n </article>\n );\n});\n\nfunction AssistantResponseFooter(props: {\n durationMs?: number | undefined;\n metrics?: AssistantResponseMetrics | undefined;\n showActions: boolean;\n text: string;\n traceId?: string | undefined;\n onOpenTrace: (traceId: string) => void;\n}) {\n const [copied, setCopied] = useState(false);\n const traceId = props.traceId;\n\n async function copyResponse() {\n if (typeof navigator === \"undefined\" || navigator.clipboard === undefined) {\n return;\n }\n try {\n await navigator.clipboard.writeText(props.text);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1200);\n } catch {\n setCopied(false);\n }\n }\n\n return (\n <div className=\"mt-3 flex min-w-0 items-center gap-1.5\">\n {props.showActions ? (\n <Button\n aria-label={copied ? \"Response copied\" : \"Copy response\"}\n className=\"h-8 min-h-8 w-8 rounded-lg border border-border/70 bg-muted/30 p-0 text-muted-foreground shadow-none hover:border-border hover:bg-muted/55 hover:text-foreground\"\n title={copied ? \"Copied\" : \"Copy response\"}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => void copyResponse()}\n >\n <StudioIcon icon={copied ? Check : Copy} aria-hidden=\"true\" />\n </Button>\n ) : null}\n {props.showActions ? (\n <div className=\"group relative\">\n <Button\n aria-label=\"Response metrics\"\n className=\"h-8 min-h-8 w-8 rounded-lg border border-border/70 bg-muted/30 p-0 text-muted-foreground shadow-none hover:border-border hover:bg-muted/55 hover:text-foreground\"\n title={metricsTitle(props.metrics)}\n type=\"button\"\n variant=\"ghost\"\n >\n <StudioIcon icon={ChartBar} aria-hidden=\"true\" />\n </Button>\n <div\n className=\"pointer-events-none absolute left-0 top-full z-30 mt-2 hidden w-64 rounded-lg border border-border/90 bg-popover p-3 text-popover-foreground shadow-xl shadow-black/25 group-focus-within:grid group-hover:grid\"\n role=\"tooltip\"\n >\n <ResponseMetricsTooltip metrics={props.metrics} />\n </div>\n </div>\n ) : null}\n {!props.showActions || traceId === undefined ? null : (\n <Button\n aria-label={`Open trace ${traceId}`}\n className=\"h-8 min-h-8 w-8 rounded-lg border border-border/70 bg-muted/30 p-0 text-muted-foreground shadow-none hover:border-border hover:bg-muted/55 hover:text-foreground\"\n title={`Open trace ${traceId}`}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onOpenTrace(traceId)}\n >\n <StudioIcon icon={Path} aria-hidden=\"true\" />\n </Button>\n )}\n <WorkingDuration\n className={props.showActions ? \"ml-1.5\" : undefined}\n durationMs={props.durationMs}\n />\n </div>\n );\n}\n\nfunction ResponseMetricsTooltip(props: { metrics?: AssistantResponseMetrics | undefined }) {\n const rows = responseMetricRows(props.metrics);\n return (\n <div className=\"grid min-w-0 gap-2 text-xs leading-5\">\n <div className=\"font-semibold text-foreground\">Response metrics</div>\n <div className=\"grid min-w-0 gap-1\">\n <MetricRow label=\"Cost\" value=\"Unavailable\" />\n {rows.length === 0 ? (\n <div className=\"text-muted-foreground\">No usage metrics yet</div>\n ) : (\n rows.map((row) => <MetricRow label={row.label} value={row.value} key={row.label} />)\n )}\n </div>\n </div>\n );\n}\n\nfunction MetricRow(props: { label: string; value: string }) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">{props.label}</span>\n <span className=\"shrink-0 font-medium tabular-nums text-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction responseMetricRows(metrics: AssistantResponseMetrics | undefined): Array<{\n label: string;\n value: string;\n}> {\n const rows: Array<{ label: string; value: string }> = [];\n const usage = metrics?.usage;\n if (usage?.totalTokens !== undefined) {\n rows.push({ label: \"Total\", value: `${formatMetricNumber(usage.totalTokens)} tokens` });\n }\n if (usage?.inputTokens !== undefined) {\n rows.push({ label: \"Input\", value: formatMetricNumber(usage.inputTokens) });\n }\n if (usage?.outputTokens !== undefined) {\n rows.push({ label: \"Output\", value: formatMetricNumber(usage.outputTokens) });\n }\n pushOptionalUsageRow(rows, \"Cached\", usage, \"cachedInputTokens\");\n pushOptionalUsageRow(rows, \"Cache create\", usage, \"cacheCreationInputTokens\");\n if (metrics?.durationMs !== undefined) {\n rows.push({ label: \"Duration\", value: formatResponseDuration(metrics.durationMs) });\n }\n return rows;\n}\n\nfunction pushOptionalUsageRow(\n rows: Array<{ label: string; value: string }>,\n label: string,\n usage: ResponseUsageMetrics | undefined,\n key: keyof ResponseUsageMetrics,\n) {\n const value = usage?.[key];\n if (value !== undefined && value > 0) {\n rows.push({ label, value: formatMetricNumber(value) });\n }\n}\n\nfunction metricsTitle(metrics: AssistantResponseMetrics | undefined): string {\n const rows = responseMetricRows(metrics);\n if (rows.length === 0) {\n return \"Cost unavailable. No usage metrics yet.\";\n }\n return [\"Cost unavailable\", ...rows.map((row) => `${row.label}: ${row.value}`)].join(\". \");\n}\n\nfunction formatMetricNumber(value: number): string {\n return value.toLocaleString();\n}\n\nfunction formatResponseDuration(value: number): string {\n if (value < 1000) {\n return `${value}ms`;\n }\n return `${(value / 1000).toFixed(1)}s`;\n}\n\nfunction AssistantLoadingIndicator() {\n return (\n <div\n aria-label=\"Assistant is thinking\"\n aria-live=\"polite\"\n className=\"inline-flex min-h-8 items-center gap-2 py-1 text-muted-foreground\"\n role=\"status\"\n >\n <span className=\"text-base font-medium\">Thinking</span>\n <span className=\"flex items-center gap-1\" aria-hidden=\"true\">\n <span className=\"size-1 animate-pulse rounded-full bg-current motion-reduce:animate-none\" />\n <span className=\"size-1 animate-pulse rounded-full bg-current [animation-delay:150ms] motion-reduce:animate-none\" />\n <span className=\"size-1 animate-pulse rounded-full bg-current [animation-delay:300ms] motion-reduce:animate-none\" />\n </span>\n </div>\n );\n}\n\nfunction MessageAttachments(props: {\n attachments: NonNullable<Extract<TranscriptEntry, { kind: \"message\" }>[\"attachments\"]>;\n}) {\n return (\n <div className=\"mt-2 flex max-w-full flex-wrap gap-2\">\n {props.attachments.map((attachment, index) => {\n const key = `${attachment.kind}-${attachment.name ?? attachment.mediaType ?? index}-${index}`;\n if (attachment.kind === \"image\") {\n const src =\n attachment.url ??\n (attachment.data === undefined\n ? undefined\n : `data:${attachment.mediaType ?? \"image/png\"};base64,${attachment.data}`);\n return (\n <div\n className=\"overflow-hidden rounded-lg border border-border/80 bg-card/80\"\n key={key}\n >\n {src === undefined ? (\n <div className=\"grid h-20 w-24 place-items-center px-2 text-center text-xs text-muted-foreground\">\n Image\n </div>\n ) : (\n <img\n alt={attachment.name ?? \"Attached image\"}\n className=\"h-20 w-24 object-cover\"\n src={src}\n />\n )}\n </div>\n );\n }\n return (\n <span\n className=\"inline-flex max-w-full items-center gap-1.5 rounded-lg border border-border/80 bg-card/80 px-2 py-1 text-xs font-medium text-muted-foreground\"\n key={key}\n >\n <span className=\"min-w-0 truncate\">\n {attachment.name ?? attachment.mediaType ?? \"Document\"}\n </span>\n </span>\n );\n })}\n </div>\n );\n}\n\nfunction hasMarkdownTable(text: string): boolean {\n const lines = text.split(\"\\n\");\n return lines.some((line, index) => {\n const next = lines[index + 1];\n return (\n line.includes(\"|\") &&\n next !== undefined &&\n /^\\s*\\|?\\s*:?-{3,}:?\\s*(\\|\\s*:?-{3,}:?\\s*)+\\|?\\s*$/.test(next)\n );\n });\n}\n\nfunction ToolEntry(props: {\n entry: ToolMessage;\n live?: boolean | undefined;\n decidingApprovals: Set<string>;\n answeringQuestions: Set<string>;\n onApprovalDecision: (approvalId: string, approved: boolean) => void;\n onQuestionAnswer: (\n questionId: string,\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n}) {\n const [collapsed, setCollapsed] = useState(\n props.entry.approval?.status !== \"pending\" && props.entry.question?.status !== \"pending\",\n );\n const approval = props.entry.approval;\n const question = props.entry.question;\n const childEvents = props.entry.childEvents ?? [];\n const hasPayload =\n props.entry.args !== undefined ||\n props.entry.result !== undefined ||\n childEvents.length > 0 ||\n approval !== undefined ||\n question !== undefined;\n const pendingApproval = approval?.status === \"pending\";\n const pendingQuestion = question?.status === \"pending\";\n const cancelledInteraction = approval?.status === \"cancelled\" || question?.status === \"cancelled\";\n const rejectedApproval = approval?.status === \"rejected\";\n const timedOutApproval = approval?.status === \"timed_out\";\n const deciding = approval !== undefined && props.decidingApprovals.has(approval.id);\n const answering = question !== undefined && props.answeringQuestions.has(question.id);\n const status = pendingApproval\n ? \"Approval required\"\n : pendingQuestion\n ? \"Input required\"\n : cancelledInteraction\n ? \"Cancelled\"\n : rejectedApproval\n ? \"Rejected\"\n : timedOutApproval\n ? \"Timed out\"\n : props.live === true && props.entry.result === undefined\n ? \"Running\"\n : undefined;\n\n return (\n <article\n className=\"w-full justify-self-start text-foreground\"\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"tool\"\n >\n <div className=\"flex min-w-0 items-center gap-2 py-0.5\">\n <Button\n aria-expanded={hasPayload ? !collapsed : undefined}\n aria-label={`${collapsed ? \"Expand\" : \"Collapse\"} ${props.entry.toolName} tool call`}\n className=\"h-auto min-h-9 min-w-0 flex-1 justify-start gap-2.5 rounded-lg border-0 bg-transparent px-1 py-0.5 text-left text-inherit shadow-none hover:bg-muted/35 hover:text-inherit\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setCollapsed((current) => !current)}\n >\n <span\n className=\"grid size-6 shrink-0 place-items-center rounded-md border border-border/80 bg-muted/35 text-muted-foreground\"\n data-tool-icon=\"action\"\n >\n <StudioIcon icon={Lightning} className=\"size-2.5\" weight=\"fill\" aria-hidden=\"true\" />\n </span>\n <strong className=\"min-w-0 truncate font-mono text-sm font-medium text-foreground\">\n {props.entry.toolName}\n </strong>\n {status === undefined ? null : (\n <span className=\"ml-auto inline-flex shrink-0 items-center gap-1.5 text-sm font-normal text-muted-foreground\">\n <span\n className={cn(\n \"size-1.5 rounded-full bg-muted-foreground/60\",\n status === \"Running\" && \"animate-pulse bg-foreground motion-reduce:animate-none\",\n (cancelledInteraction || rejectedApproval || timedOutApproval) &&\n \"bg-destructive\",\n )}\n aria-hidden=\"true\"\n />\n {status}\n </span>\n )}\n {hasPayload ? (\n <span className=\"grid size-6 shrink-0 place-items-center text-muted-foreground\">\n <StudioIcon\n icon={CaretDown}\n className={cn(\"size-4 transition-transform\", collapsed && \"-rotate-90\")}\n aria-hidden=\"true\"\n />\n </span>\n ) : null}\n </Button>\n {pendingApproval && approval !== undefined ? (\n <ToolApprovalActions\n disabled={deciding}\n onDecision={(approved) => props.onApprovalDecision(approval.id, approved)}\n />\n ) : null}\n </div>\n {collapsed || !hasPayload ? null : (\n <div className=\"ml-8 grid gap-3 py-2\">\n {approval === undefined ? null : <ToolApprovalPanel approval={approval} />}\n {question === undefined ? null : (\n <ToolQuestionPanel\n disabled={answering}\n question={question}\n onAnswer={(answers) => props.onQuestionAnswer(question.id, answers)}\n />\n )}\n {question !== undefined || props.entry.args === undefined ? null : (\n <ToolPayload title=\"Input\" value={props.entry.args} />\n )}\n {childEvents.length === 0 ? null : <ChildAgentActivity events={childEvents} />}\n {question !== undefined || props.entry.result === undefined ? null : (\n <ToolPayload title=\"Output\" value={props.entry.result} />\n )}\n </div>\n )}\n </article>\n );\n}\n\nfunction ChildAgentActivity(props: { events: NonNullable<ToolMessage[\"childEvents\"]> }) {\n return (\n <div className=\"overflow-hidden rounded-xl border border-border/80 bg-background/65\">\n <div className=\"bg-muted/20 px-3 py-2 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n Subagent activity\n </div>\n <div className=\"grid gap-3 p-3\">\n {props.events.map((event) => {\n const agentLabel = event.agentName ?? event.agentId;\n if (event.kind === \"message\" || event.kind === \"reasoning\") {\n return (\n <div\n className=\"grid gap-1 rounded-xl border border-border/80 bg-card/90 p-3\"\n key={`${event.kind}-${event.agentId}-${event.text}`}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge className=\"border-border bg-muted px-1.5 py-0.5 text-xs uppercase text-muted-foreground\">\n {event.kind === \"reasoning\" ? \"Reasoning\" : \"Response\"}\n </Badge>\n <span className=\"min-w-0 truncate text-xs font-semibold text-muted-foreground\">\n {agentLabel}\n </span>\n </div>\n <MarkdownText size=\"base\" text={event.text} />\n </div>\n );\n }\n return (\n <div\n className=\"grid gap-2 rounded-xl border border-border/80 bg-card/90 p-3\"\n key={`${event.kind}-${event.agentId}-${event.toolName}-${event.callId ?? event.args ?? event.result ?? \"\"}`}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge className=\"border-border/70 bg-muted/45 px-1.5 py-0.5 text-xs uppercase text-foreground\">\n Tool\n </Badge>\n <span className=\"min-w-0 truncate text-xs font-semibold text-muted-foreground\">\n {agentLabel} / {event.toolName}\n </span>\n </div>\n {event.args === undefined ? null : <ToolPayload title=\"Input\" value={event.args} />}\n {event.result === undefined ? null : (\n <ToolPayload title=\"Output\" value={event.result} />\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction ToolQuestionPanel(props: {\n question: ToolQuestion;\n disabled: boolean;\n onAnswer: (\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n}) {\n const [values, setValues] = useState<Record<string, QuestionDraft>>({});\n const [activeQuestionIndex, setActiveQuestionIndex] = useState(0);\n const pending = props.question.status === \"pending\";\n const total = props.question.questions.length;\n\n const answers = props.question.questions.map((question) => {\n const draft = values[question.id];\n const customAnswer = draft?.customValue?.trim() ?? \"\";\n const answer = customAnswer.length > 0 ? customAnswer : draft?.answer;\n const normalized: { questionId: string; answer: string; choice?: string; custom?: boolean } = {\n questionId: question.id,\n answer: answer?.trim() ?? \"\",\n };\n if (draft?.choice !== undefined) normalized.choice = draft.choice;\n if (customAnswer.length > 0) normalized.custom = true;\n return normalized;\n });\n const activeIndex = total === 0 ? 0 : Math.min(activeQuestionIndex, total - 1);\n const activeQuestion = props.question.questions[activeIndex];\n const activeAnswer = answers[activeIndex]?.answer ?? \"\";\n const answeredCount = answers.filter((answer) => answer.answer.length > 0).length;\n const canAdvance = activeAnswer.length > 0;\n const canSubmit = pending && answers.every((answer) => answer.answer.length > 0);\n const firstQuestion = activeIndex === 0;\n const lastQuestion = activeIndex >= total - 1;\n\n if (activeQuestion === undefined) {\n return (\n <div className=\"rounded-xl border border-border bg-background p-4 text-sm font-medium text-muted-foreground\">\n No questions\n </div>\n );\n }\n\n const goPrevious = () => setActiveQuestionIndex((current) => Math.max(0, current - 1));\n const goNext = () =>\n setActiveQuestionIndex((current) => Math.min(props.question.questions.length - 1, current + 1));\n const updateDraft = (questionId: string, value: QuestionDraft) =>\n setValues((current) => ({\n ...current,\n [questionId]: value,\n }));\n\n return (\n <div className=\"grid gap-3\">\n {props.question.status === \"cancelled\" ? (\n <div className=\"rounded-xl border border-border/70 bg-muted/25 px-3 py-2.5 text-sm font-medium text-muted-foreground\">\n Question cancelled\n </div>\n ) : null}\n <QuestionPromptControl\n key={activeQuestion.id}\n disabled={props.disabled || !pending}\n index={activeIndex}\n total={total}\n question={activeQuestion}\n value={values[activeQuestion.id]}\n answer={props.question.answers?.find((answer) => answer.questionId === activeQuestion.id)}\n onChange={(value) => updateDraft(activeQuestion.id, value)}\n onAdvance={lastQuestion ? undefined : goNext}\n />\n {pending ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3 rounded-xl bg-muted/20 px-3 py-2\">\n <div className=\"min-w-0 text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n {answeredCount}/{total} answered\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {firstQuestion ? null : (\n <Button type=\"button\" variant=\"secondary\" onClick={goPrevious}>\n Back\n </Button>\n )}\n {lastQuestion ? (\n <Button\n className=\"h-9 min-h-9 px-4\"\n disabled={props.disabled || !canSubmit}\n type=\"button\"\n onClick={() => props.onAnswer(answers)}\n >\n Submit answers\n </Button>\n ) : (\n <Button\n className=\"h-9 min-h-9 px-4\"\n disabled={props.disabled || !canAdvance}\n type=\"button\"\n onClick={goNext}\n >\n Next question\n </Button>\n )}\n </div>\n </div>\n ) : total > 1 ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3 rounded-xl bg-muted/20 px-3 py-2\">\n <div className=\"min-w-0 text-xs font-semibold uppercase tracking-[0.2em] text-foreground\">\n Answered\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button disabled={firstQuestion} type=\"button\" variant=\"secondary\" onClick={goPrevious}>\n Back\n </Button>\n <Button disabled={lastQuestion} type=\"button\" variant=\"secondary\" onClick={goNext}>\n Next\n </Button>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\ntype QuestionDraft = {\n answer?: string;\n choice?: string;\n customValue?: string;\n};\n\nfunction QuestionPromptControl(props: {\n question: ToolQuestion[\"questions\"][number];\n value: QuestionDraft | undefined;\n answer: NonNullable<ToolQuestion[\"answers\"]>[number] | undefined;\n disabled: boolean;\n index: number;\n total: number;\n onChange: (value: QuestionDraft) => void;\n onAdvance: (() => void) | undefined;\n}) {\n const submittedAnswer = props.answer?.answer;\n const draftAnswer = questionDraftAnswer(props.value);\n const state =\n submittedAnswer !== undefined ? \"Answered\" : draftAnswer.length > 0 ? \"Ready\" : \"Waiting\";\n\n return (\n <section className=\"grid gap-4 rounded-xl border border-border/80 bg-background/70 p-4\">\n <div className=\"flex min-w-0 items-start justify-between gap-4\">\n <div className=\"grid min-w-0 gap-2\">\n <div className=\" text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n Question {props.index + 1} of {props.total}\n </div>\n <h3 className=\"m-0 text-base font-semibold leading-7 text-foreground [overflow-wrap:anywhere]\">\n {props.question.question}\n </h3>\n </div>\n <span\n className={cn(\n \"shrink-0 text-xs font-semibold uppercase tracking-[0.18em]\",\n state === \"Answered\" && \"text-foreground\",\n state === \"Ready\" && \"text-foreground\",\n state === \"Waiting\" && \"text-muted-foreground\",\n )}\n >\n {state}\n </span>\n </div>\n {submittedAnswer === undefined ? null : (\n <div className=\"rounded-lg border border-border/70 bg-muted/45 px-3 py-2 text-sm font-medium text-foreground\">\n {submittedAnswer}\n </div>\n )}\n {submittedAnswer !== undefined ? null : props.question.choices.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {props.question.choices.map((choice) => {\n const active = props.value?.choice === choice.value;\n return (\n <Button\n key={choice.value}\n className={cn(\"h-8 min-h-8 px-3 text-xs\", active && \"border-foreground/45\")}\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant={active ? \"default\" : \"secondary\"}\n onClick={() => {\n props.onChange({\n answer: choice.value,\n choice: choice.value,\n customValue: props.value?.customValue ?? \"\",\n });\n props.onAdvance?.();\n }}\n >\n {choice.label}\n </Button>\n );\n })}\n </div>\n ) : null}\n {submittedAnswer !== undefined ||\n (props.question.choices.length > 0 && !props.question.allowCustom) ? null : (\n <Textarea\n className=\"min-h-24 text-sm\"\n disabled={props.disabled}\n placeholder=\"Type a custom answer\"\n rows={3}\n value={props.value?.customValue ?? \"\"}\n onChange={(event) =>\n props.onChange({\n ...props.value,\n customValue: event.currentTarget.value,\n })\n }\n />\n )}\n </section>\n );\n}\n\nfunction questionDraftAnswer(value: QuestionDraft | undefined): string {\n const customAnswer = value?.customValue?.trim() ?? \"\";\n return customAnswer.length > 0 ? customAnswer : (value?.answer?.trim() ?? \"\");\n}\n\nfunction ToolApprovalPanel(props: { approval: ToolApproval }) {\n return (\n <div className=\"grid gap-2 rounded-xl border border-border/70 bg-muted/25 px-3 py-2.5\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge\n className={cn(\n \"border-border/70 bg-background/60 px-1.5 py-0.5 text-xs uppercase text-muted-foreground\",\n props.approval.status === \"approved\" && \"text-foreground\",\n props.approval.status === \"rejected\" && \"text-destructive\",\n )}\n >\n Approval\n </Badge>\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium text-foreground\">{approvalLabel(props.approval)}</div>\n </div>\n </div>\n {props.approval.reason === undefined ? null : (\n <div className=\"text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]\">\n {props.approval.reason}\n </div>\n )}\n </div>\n );\n}\n\nfunction ToolApprovalActions(props: {\n disabled: boolean;\n onDecision: (approved: boolean) => void;\n}) {\n return (\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button\n className=\"h-8 min-h-8 border-0 bg-transparent px-3 text-sm text-muted-foreground shadow-none hover:bg-destructive/10 hover:text-destructive\"\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onDecision(false)}\n >\n Reject\n </Button>\n <Button\n className=\"h-8 min-h-8 px-3 text-sm\"\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n onClick={() => props.onDecision(true)}\n >\n Approve\n </Button>\n </div>\n );\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{a as e,i as t}from"./utils-C9GMruoG.js";var n=e((e=>{var n=t();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useState,o=n.useEffect,s=n.useLayoutEffect,c=n.useDebugValue;function l(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return s(function(){i.value=n,i.getSnapshot=t,u(i)&&l({inst:i})},[e,n,t]),o(function(){return u(i)&&l({inst:i}),e(function(){u(i)&&l({inst:i})})},[e]),c(n),n}function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!i(e,n)}catch{return!0}}function d(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?d:l;e.useSyncExternalStore=n.useSyncExternalStore===void 0?f:n.useSyncExternalStore})),r=e(((e,t)=>{t.exports=n()})),i=e((e=>{var n=t(),i=r();function a(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var o=typeof Object.is==`function`?Object.is:a,s=i.useSyncExternalStore,c=n.useRef,l=n.useEffect,u=n.useMemo,d=n.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var a=c(null);if(a.current===null){var f={hasValue:!1,value:null};a.current=f}else f=a.current;a=u(function(){function e(e){if(!a){if(a=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,o(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var a=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=s(e,a[0],a[1]);return l(function(){f.hasValue=!0,f.value=p},[p]),d(p),p}})),a=e(((e,t)=>{t.exports=i()}));export{a as t};
2
+ //# sourceMappingURL=with-selector-CRZWaZzC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-selector-CRZWaZzC.js","names":[],"sources":["../../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/shim/index.js","../../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/shim/with-selector.js"],"sourcesContent":["/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
@@ -21,10 +21,26 @@
21
21
  })();
22
22
  </script>
23
23
  <link rel="icon" type="image/svg+xml" href="/ui/assets/favicon.svg" />
24
- <script type="module" crossorigin src="/ui/assets/index-Bh7RLPBw.js"></script>
24
+ <script type="module" crossorigin src="/ui/assets/index-BdhE3teo.js"></script>
25
25
  <link rel="modulepreload" crossorigin href="/ui/assets/utils-C9GMruoG.js">
26
- <link rel="modulepreload" crossorigin href="/ui/assets/chunk-ADH7NNCS-DM6fsnDI.js">
27
- <link rel="stylesheet" crossorigin href="/ui/assets/index-D-CbFx6c.css">
26
+ <link rel="modulepreload" crossorigin href="/ui/assets/icon-CqkMSRbt.js">
27
+ <link rel="modulepreload" crossorigin href="/ui/assets/CaretDown.es-BHAPbv1R.js">
28
+ <link rel="modulepreload" crossorigin href="/ui/assets/Check.es-BLChmggz.js">
29
+ <link rel="modulepreload" crossorigin href="/ui/assets/dist-CqMdRzwk.js">
30
+ <link rel="modulepreload" crossorigin href="/ui/assets/button-07gzSO47.js">
31
+ <link rel="modulepreload" crossorigin href="/ui/assets/dist-DWqJwN1i.js">
32
+ <link rel="modulepreload" crossorigin href="/ui/assets/es2015-DsZq7PFO.js">
33
+ <link rel="modulepreload" crossorigin href="/ui/assets/select-BOYfrfck.js">
34
+ <link rel="modulepreload" crossorigin href="/ui/assets/ArrowClockwise.es-CSEY3Qr6.js">
35
+ <link rel="modulepreload" crossorigin href="/ui/assets/Wrench.es-BL6BmNv7.js">
36
+ <link rel="modulepreload" crossorigin href="/ui/assets/dialog-CNNQ3hoF.js">
37
+ <link rel="modulepreload" crossorigin href="/ui/assets/with-selector-CRZWaZzC.js">
38
+ <link rel="modulepreload" crossorigin href="/ui/assets/chunk-QGX73TSQ-D9QAGlAY.js">
39
+ <link rel="modulepreload" crossorigin href="/ui/assets/request-7oUPS8zY.js">
40
+ <link rel="modulepreload" crossorigin href="/ui/assets/studio-CeTsQ4gf.js">
41
+ <link rel="modulepreload" crossorigin href="/ui/assets/textarea-DESKg_ZK.js">
42
+ <link rel="modulepreload" crossorigin href="/ui/assets/knowledge-model-S51n2rKh.js">
43
+ <link rel="stylesheet" crossorigin href="/ui/assets/index-CFbK-pX6.css">
28
44
  </head>
29
45
  <body>
30
46
  <div id="anvia-ui" data-ui-path="/ui">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/studio",
3
- "version": "0.8.1",
3
+ "version": "1.0.0-rc.10",
4
4
  "description": "Studio UI and HTTP runtime for Anvia agents.",
5
5
  "author": "anvia",
6
6
  "maintainer": "Indra Zulfi",
@@ -28,7 +28,8 @@
28
28
  "dependencies": {
29
29
  "@fontsource-variable/geist": "^5.3.0",
30
30
  "@fontsource-variable/geist-mono": "^5.3.0",
31
- "@hono/node-server": "^2.1.0",
31
+ "@hono/node-server": "^2.1.1",
32
+ "@novnc/novnc": "1.7.0",
32
33
  "@phosphor-icons/react": "^2.1.10",
33
34
  "@radix-ui/react-alert-dialog": "^1.1.23",
34
35
  "@radix-ui/react-dialog": "^1.1.23",
@@ -36,24 +37,28 @@
36
37
  "@radix-ui/react-select": "^2.3.7",
37
38
  "@radix-ui/react-separator": "^1.1.15",
38
39
  "@radix-ui/react-slot": "^1.3.3",
39
- "@tanstack/react-router": "1.170.23",
40
- "@xyflow/react": "^12.11.2",
40
+ "@tanstack/react-router": "1.170.29",
41
+ "@xyflow/react": "^12.11.3",
41
42
  "class-variance-authority": "^0.7.1",
42
43
  "clsx": "^2.1.1",
43
- "hono": "^4.13.1",
44
+ "hono": "^4.13.2",
44
45
  "react": "^19.2.8",
45
46
  "react-dom": "^19.2.8",
46
47
  "tailwind-merge": "^3.6.0",
47
- "@anvia/react": "0.11.6",
48
- "@anvia/react-ui": "0.7.1",
49
- "@anvia/server": "0.7.6"
48
+ "ws": "^8.21.0",
49
+ "@anvia/client": "1.0.0-rc.10",
50
+ "@anvia/react": "1.0.0-rc.10",
51
+ "@anvia/react-ui": "1.0.0-rc.10",
52
+ "@anvia/server": "1.0.0-rc.10"
50
53
  },
51
54
  "devDependencies": {
52
55
  "@tailwindcss/typography": "^0.5.19",
53
56
  "@tailwindcss/vite": "^4.2.4",
54
57
  "@types/node": "^24.9.1",
58
+ "@types/novnc__novnc": "1.6.0",
55
59
  "@types/react": "^19.2.14",
56
60
  "@types/react-dom": "^19.2.3",
61
+ "@types/ws": "^8.18.1",
57
62
  "@vitejs/plugin-react": "^6.0.1",
58
63
  "tailwindcss": "^4.2.4",
59
64
  "tsup": "^8.5.0",
@@ -61,14 +66,14 @@
61
66
  "vite": "^8.0.10",
62
67
  "vitest": "^4.0.8",
63
68
  "zod": "^4.4.3",
64
- "@anvia/core": "0.26.0"
69
+ "@anvia/core": "1.0.0-rc.10"
65
70
  },
66
71
  "peerDependencies": {
67
- "@anvia/core": ">=0.25.0 <1.0.0"
72
+ "@anvia/core": "1.0.0-rc.10"
68
73
  },
69
74
  "scripts": {
70
75
  "build": "pnpm run build:deps && tsup && vite build --config vite.config.ts",
71
- "build:deps": "(test -f ../core/dist/index.d.ts || pnpm --filter @anvia/core build) && pnpm --filter @anvia/server --filter @anvia/react --filter @anvia/react-ui build",
76
+ "build:deps": "(test -f ../core/dist/index.d.ts || pnpm --filter @anvia/core build) && pnpm --filter @anvia/client build && pnpm --filter @anvia/server --filter @anvia/react --filter @anvia/react-ui build",
72
77
  "coverage": "pnpm run build:deps && vitest run --coverage",
73
78
  "test": "pnpm run build:deps && vitest run",
74
79
  "typecheck": "pnpm run build:deps && tsc --noEmit"
@@ -1,2 +0,0 @@
1
- import{i as e,s as t}from"./utils-C9GMruoG.js";import{W as n}from"./index-Bh7RLPBw.js";var r=t(e(),1),i=new Map([[`bold`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M244,56v48a12,12,0,0,1-12,12H184a12,12,0,1,1,0-24H201.1l-19-17.38c-.13-.12-.26-.24-.38-.37A76,76,0,1,0,127,204h1a75.53,75.53,0,0,0,52.15-20.72,12,12,0,0,1,16.49,17.45A99.45,99.45,0,0,1,128,228h-1.37A100,100,0,1,1,198.51,57.06L220,76.72V56a12,12,0,0,1,24,0Z`}))],[`duotone`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z`,opacity:`0.2`}),r.createElement(`path`,{d:`M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z`}))],[`fill`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1-5.66-13.66l17-17-10.55-9.65-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,1,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60l10.93,10L226.34,50.3A8,8,0,0,1,240,56Z`}))],[`light`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M238,56v48a6,6,0,0,1-6,6H184a6,6,0,0,1,0-12h32.55l-30.38-27.8c-.06-.06-.12-.13-.19-.19a82,82,0,1,0-1.7,117.65,6,6,0,0,1,8.24,8.73A93.46,93.46,0,0,1,128,222h-1.28A94,94,0,1,1,194.37,61.4L226,90.35V56a6,6,0,1,1,12,0Z`}))],[`regular`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16H211.4L184.81,71.64l-.25-.24a80,80,0,1,0-1.67,114.78,8,8,0,0,1,11,11.63A95.44,95.44,0,0,1,128,224h-1.32A96,96,0,1,1,195.75,60L224,85.8V56a8,8,0,1,1,16,0Z`}))],[`thin`,r.createElement(r.Fragment,null,r.createElement(`path`,{d:`M236,56v48a4,4,0,0,1-4,4H184a4,4,0,0,1,0-8h37.7L187.53,68.69l-.13-.12a84,84,0,1,0-1.75,120.51,4,4,0,0,1,5.5,5.82A91.43,91.43,0,0,1,128,220h-1.26A92,92,0,1,1,193,62.84l35,32.05V56a4,4,0,1,1,8,0Z`}))]]),a=r.forwardRef((e,t)=>r.createElement(n,{ref:t,...e,weights:i}));a.displayName=`ArrowClockwiseIcon`;var o=a;export{o as t};
2
- //# sourceMappingURL=ArrowClockwise.es-CSN-gjxO.js.map
@@ -1,2 +0,0 @@
1
- import{i as e,r as t,s as n,t as r}from"./utils-C9GMruoG.js";import{a as i,i as a,n as o,o as s,r as c}from"./index-Bh7RLPBw.js";import{t as l}from"./badge-RJJoRC4P.js";var u=n(e(),1),d=t();function f(e){let[t,n]=(0,u.useState)({});(0,u.useEffect)(()=>{let t=!1;async function r(){let r=await Promise.all(e.agents.map(async e=>{try{let t=await fetch(`/agents/${encodeURIComponent(e.id)}/runtime`);return t.ok?[e.id,await t.json()]:[e.id,void 0]}catch{return[e.id,void 0]}}));t||n(Object.fromEntries(r))}return r(),()=>{t=!0}},[e.agents]);let r=C(e.agents,t);return(0,d.jsxs)(s,{className:`grid-rows-[auto_minmax(0,1fr)]`,"aria-label":`Agents`,children:[(0,d.jsx)(i,{title:`Studio`,description:`Registered agents and the runtime capabilities exposed to Studio.`,action:(0,d.jsxs)(`div`,{className:`flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start`,children:[(0,d.jsx)(c,{label:`agents`,value:e.agents.length}),(0,d.jsx)(c,{label:`tools`,value:r.tools}),(0,d.jsx)(c,{label:`context`,value:r.context}),(0,d.jsx)(c,{label:`prompts`,value:r.prompts})]})}),(0,d.jsx)(a,{className:`overflow-auto`,children:e.agents.length===0?(0,d.jsx)(o,{title:`No agents`,text:`Studio has no registered agents to inspect.`}):(0,d.jsx)(p,{agents:e.agents,runtimeByAgentId:t,selectedAgentId:e.selectedAgentId})})]})}function p(e){return(0,d.jsx)(`div`,{className:`min-w-[980px]`,children:(0,d.jsxs)(`table`,{className:`w-full border-separate border-spacing-0 text-left`,children:[(0,d.jsx)(`thead`,{className:`sticky top-0 z-10 bg-background/95 backdrop-blur`,children:(0,d.jsxs)(`tr`,{children:[(0,d.jsx)(h,{children:`Agent`}),(0,d.jsx)(h,{children:`Model`}),(0,d.jsx)(h,{children:`Runtime`}),(0,d.jsx)(h,{children:`Capabilities`})]})}),(0,d.jsx)(`tbody`,{children:e.agents.map(t=>(0,d.jsx)(m,{agent:t,active:t.id===e.selectedAgentId,runtime:e.runtimeByAgentId[t.id]},t.id))})]})})}function m(e){let t=e.runtime,n=t===void 0?`Runtime unavailable`:t.model===void 0?`No model reported`:w(t.model);return(0,d.jsxs)(`tr`,{children:[(0,d.jsx)(g,{children:(0,d.jsxs)(`div`,{className:`grid min-w-0 gap-1.5`,children:[(0,d.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,d.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:e.agent.name??e.agent.id}),e.active?(0,d.jsx)(l,{className:y,children:`selected`}):null]}),(0,d.jsx)(`span`,{className:`min-w-0 break-all text-xs font-medium leading-5 text-muted-foreground`,children:e.agent.id}),(0,d.jsx)(`p`,{className:`m-0 max-w-[64ch] truncate text-sm leading-6 text-muted-foreground`,children:e.agent.description??`No description`})]})}),(0,d.jsx)(g,{children:(0,d.jsx)(`span`,{className:r(`block max-w-[260px] truncate text-sm leading-6`,t===void 0?`text-muted-foreground`:`text-foreground`),title:n,children:n})}),(0,d.jsx)(g,{children:t===void 0?(0,d.jsx)(`span`,{className:`text-sm leading-6 text-muted-foreground`,children:`Waiting for summary`}):(0,d.jsxs)(`div`,{className:`flex min-w-0 flex-wrap gap-2`,children:[(0,d.jsx)(_,{label:`tools`,value:t.toolCount}),(0,d.jsx)(_,{label:`mcp`,value:t.mcpToolCount}),(0,d.jsx)(_,{label:`context`,value:t.staticContextCount+t.dynamicContextCount}),(0,d.jsx)(_,{label:`observers`,value:t.observerCount}),(0,d.jsx)(_,{label:`prompts`,value:e.agent.quickPrompts.length})]})}),(0,d.jsx)(g,{children:t===void 0?(0,d.jsx)(`span`,{className:`text-sm leading-6 text-muted-foreground`,children:`Not loaded`}):(0,d.jsxs)(`div`,{className:`flex min-w-0 flex-wrap gap-2`,children:[(0,d.jsx)(v,{enabled:t.hasMemory,children:`memory`}),(0,d.jsx)(v,{enabled:t.hasHook,children:`hook`}),(0,d.jsx)(v,{enabled:t.hasOutputSchema,children:`schema`}),t.defaultMaxTurns===void 0?null:(0,d.jsxs)(l,{className:S,children:[t.defaultMaxTurns,` turns`]})]})})]})}function h(e){return(0,d.jsx)(`th`,{className:`border-b border-border/80 py-2.5 pr-5 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground first:pl-0`,children:e.children})}function g(e){return(0,d.jsx)(`td`,{className:`border-b border-border/70 py-3.5 pr-5 align-top first:pl-0`,children:e.children})}function _(e){return(0,d.jsxs)(`span`,{className:`inline-flex min-h-7 items-center gap-1.5 rounded-md bg-muted/25 px-2.5 text-xs font-medium text-muted-foreground`,children:[(0,d.jsx)(`span`,{className:`font-semibold tabular-nums text-foreground`,children:e.value}),e.label]})}function v(e){return(0,d.jsx)(l,{className:e.enabled?b:x,children:e.children})}var y=`border-border/80 bg-muted/45 text-foreground`,b=`border-border/80 bg-muted/35 text-foreground`,x=`border-transparent bg-transparent text-muted-foreground/60`,S=`border-border/80 bg-muted/35 text-muted-foreground`;function C(e,t){return e.reduce((e,n)=>{let r=t[n.id];return e.prompts+=n.quickPrompts.length,r!==void 0&&(e.tools+=r.toolCount+r.mcpToolCount,e.context+=r.staticContextCount+r.dynamicContextCount),e},{context:0,prompts:0,tools:0})}function w(e){if(e===null)return`null`;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return String(e);if(Array.isArray(e))return`[${e.length}]`;if(typeof e==`object`){let t=T(e,`model`)??T(e,`defaultModel`),n=T(e,`provider`),r=T(e,`id`)??T(e,`name`),i=t??r;return n!==void 0&&i!==void 0&&n!==i?`${n} / ${i}`:i??n??`Custom model`}return``}function T(e,t){let n=e;return typeof n[t]==`string`?n[t]:void 0}export{f as AgentsPage};
2
- //# sourceMappingURL=agents-page-CkNSbqAj.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agents-page-CkNSbqAj.js","names":[],"sources":["../../../src/ui/app/modules/agents/agents-page.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useState } from \"react\";\nimport type { StudioAgentRuntimeSummary, StudioConfig } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport {\n StudioEmptyState,\n StudioHeaderMetric,\n StudioPageContent,\n StudioPageHeader,\n StudioPageShell,\n} from \"../../components/ui/studio\";\nimport { cn } from \"../../lib/utils\";\n\nexport function AgentsPage(props: { agents: StudioConfig[\"agents\"]; selectedAgentId: string }) {\n const [runtimeByAgentId, setRuntimeByAgentId] = useState<\n Record<string, StudioAgentRuntimeSummary | undefined>\n >({});\n\n useEffect(() => {\n let cancelled = false;\n async function loadRuntimeSummaries() {\n const entries = await Promise.all(\n props.agents.map(async (agent) => {\n try {\n const response = await fetch(`/agents/${encodeURIComponent(agent.id)}/runtime`);\n if (!response.ok) {\n return [agent.id, undefined] as const;\n }\n return [agent.id, (await response.json()) as StudioAgentRuntimeSummary] as const;\n } catch {\n return [agent.id, undefined] as const;\n }\n }),\n );\n if (!cancelled) {\n setRuntimeByAgentId(Object.fromEntries(entries));\n }\n }\n void loadRuntimeSummaries();\n return () => {\n cancelled = true;\n };\n }, [props.agents]);\n\n const totals = registryTotals(props.agents, runtimeByAgentId);\n\n return (\n <StudioPageShell className=\"grid-rows-[auto_minmax(0,1fr)]\" aria-label=\"Agents\">\n <StudioPageHeader\n title=\"Studio\"\n description=\"Registered agents and the runtime capabilities exposed to Studio.\"\n action={\n <div className=\"flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start\">\n <StudioHeaderMetric label=\"agents\" value={props.agents.length} />\n <StudioHeaderMetric label=\"tools\" value={totals.tools} />\n <StudioHeaderMetric label=\"context\" value={totals.context} />\n <StudioHeaderMetric label=\"prompts\" value={totals.prompts} />\n </div>\n }\n />\n\n <StudioPageContent className=\"overflow-auto\">\n {props.agents.length === 0 ? (\n <StudioEmptyState title=\"No agents\" text=\"Studio has no registered agents to inspect.\" />\n ) : (\n <AgentRegistryTable\n agents={props.agents}\n runtimeByAgentId={runtimeByAgentId}\n selectedAgentId={props.selectedAgentId}\n />\n )}\n </StudioPageContent>\n </StudioPageShell>\n );\n}\n\ntype RuntimeByAgentId = Record<string, StudioAgentRuntimeSummary | undefined>;\n\nfunction AgentRegistryTable(props: {\n agents: StudioConfig[\"agents\"];\n runtimeByAgentId: RuntimeByAgentId;\n selectedAgentId: string;\n}) {\n return (\n <div className=\"min-w-[980px]\">\n <table className=\"w-full border-separate border-spacing-0 text-left\">\n <thead className=\"sticky top-0 z-10 bg-background/95 backdrop-blur\">\n <tr>\n <TableHead>Agent</TableHead>\n <TableHead>Model</TableHead>\n <TableHead>Runtime</TableHead>\n <TableHead>Capabilities</TableHead>\n </tr>\n </thead>\n <tbody>\n {props.agents.map((agent) => (\n <AgentRegistryRow\n agent={agent}\n active={agent.id === props.selectedAgentId}\n key={agent.id}\n runtime={props.runtimeByAgentId[agent.id]}\n />\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction AgentRegistryRow(props: {\n agent: StudioConfig[\"agents\"][number];\n runtime: StudioAgentRuntimeSummary | undefined;\n active: boolean;\n}) {\n const runtime = props.runtime;\n const modelLabel =\n runtime === undefined\n ? \"Runtime unavailable\"\n : runtime.model === undefined\n ? \"No model reported\"\n : formatModelValue(runtime.model);\n\n return (\n <tr>\n <TableCell>\n <div className=\"grid min-w-0 gap-1.5\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.agent.name ?? props.agent.id}\n </span>\n {props.active ? <Badge className={selectedBadge}>selected</Badge> : null}\n </div>\n <span className=\"min-w-0 break-all text-xs font-medium leading-5 text-muted-foreground\">\n {props.agent.id}\n </span>\n <p className=\"m-0 max-w-[64ch] truncate text-sm leading-6 text-muted-foreground\">\n {props.agent.description ?? \"No description\"}\n </p>\n </div>\n </TableCell>\n <TableCell>\n <span\n className={cn(\n \"block max-w-[260px] truncate text-sm leading-6\",\n runtime === undefined ? \"text-muted-foreground\" : \"text-foreground\",\n )}\n title={modelLabel}\n >\n {modelLabel}\n </span>\n </TableCell>\n <TableCell>\n {runtime === undefined ? (\n <span className=\"text-sm leading-6 text-muted-foreground\">Waiting for summary</span>\n ) : (\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <MetricPill label=\"tools\" value={runtime.toolCount} />\n <MetricPill label=\"mcp\" value={runtime.mcpToolCount} />\n <MetricPill\n label=\"context\"\n value={runtime.staticContextCount + runtime.dynamicContextCount}\n />\n <MetricPill label=\"observers\" value={runtime.observerCount} />\n <MetricPill label=\"prompts\" value={props.agent.quickPrompts.length} />\n </div>\n )}\n </TableCell>\n <TableCell>\n {runtime === undefined ? (\n <span className=\"text-sm leading-6 text-muted-foreground\">Not loaded</span>\n ) : (\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <CapabilityBadge enabled={runtime.hasMemory}>memory</CapabilityBadge>\n <CapabilityBadge enabled={runtime.hasHook}>hook</CapabilityBadge>\n <CapabilityBadge enabled={runtime.hasOutputSchema}>schema</CapabilityBadge>\n {runtime.defaultMaxTurns === undefined ? null : (\n <Badge className={neutralBadge}>{runtime.defaultMaxTurns} turns</Badge>\n )}\n </div>\n )}\n </TableCell>\n </tr>\n );\n}\n\nfunction TableHead(props: { children: string }) {\n return (\n <th className=\"border-b border-border/80 py-2.5 pr-5 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground first:pl-0\">\n {props.children}\n </th>\n );\n}\n\nfunction TableCell(props: { children: ReactNode }) {\n return (\n <td className=\"border-b border-border/70 py-3.5 pr-5 align-top first:pl-0\">{props.children}</td>\n );\n}\n\nfunction MetricPill(props: { label: string; value: number }) {\n return (\n <span className=\"inline-flex min-h-7 items-center gap-1.5 rounded-md bg-muted/25 px-2.5 text-xs font-medium text-muted-foreground\">\n <span className=\"font-semibold tabular-nums text-foreground\">{props.value}</span>\n {props.label}\n </span>\n );\n}\n\nfunction CapabilityBadge(props: { enabled: boolean; children: string }) {\n return <Badge className={props.enabled ? enabledBadge : disabledBadge}>{props.children}</Badge>;\n}\n\nconst selectedBadge = \"border-border/80 bg-muted/45 text-foreground\";\nconst enabledBadge = \"border-border/80 bg-muted/35 text-foreground\";\nconst disabledBadge = \"border-transparent bg-transparent text-muted-foreground/60\";\nconst neutralBadge = \"border-border/80 bg-muted/35 text-muted-foreground\";\n\nfunction registryTotals(agents: StudioConfig[\"agents\"], runtimeByAgentId: RuntimeByAgentId) {\n return agents.reduce(\n (totals, agent) => {\n const runtime = runtimeByAgentId[agent.id];\n totals.prompts += agent.quickPrompts.length;\n if (runtime !== undefined) {\n totals.tools += runtime.toolCount + runtime.mcpToolCount;\n totals.context += runtime.staticContextCount + runtime.dynamicContextCount;\n }\n return totals;\n },\n { context: 0, prompts: 0, tools: 0 },\n );\n}\n\nfunction formatModelValue(value: unknown): string {\n if (value === null) {\n return \"null\";\n }\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (Array.isArray(value)) {\n return `[${value.length}]`;\n }\n if (typeof value === \"object\") {\n const model = objectString(value, \"model\") ?? objectString(value, \"defaultModel\");\n const provider = objectString(value, \"provider\");\n const id = objectString(value, \"id\") ?? objectString(value, \"name\");\n const modelName = model ?? id;\n\n if (provider !== undefined && modelName !== undefined && provider !== modelName) {\n return `${provider} / ${modelName}`;\n }\n return modelName ?? provider ?? \"Custom model\";\n }\n return \"\";\n}\n\nfunction objectString(value: object, key: string): string | undefined {\n const record = value as Record<string, unknown>;\n return typeof record[key] === \"string\" ? record[key] : undefined;\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- function e(e){return t(e,new WeakSet)}function t(e,r){if(e===null||typeof e==`string`||typeof e==`boolean`)return!0;if(typeof e==`number`)return Number.isFinite(e);if(typeof e!=`object`||r.has(e))return!1;r.add(e);try{if(Array.isArray(e)){if(!n(e))return!1;for(let n=0;n<e.length;n+=1)if(!t(e[n],r))return!1;return!0}let i=Object.getPrototypeOf(e);if(i!==Object.prototype&&i!==null)return!1;for(let n of Reflect.ownKeys(e)){if(typeof n!=`string`)return!1;let i=Object.getOwnPropertyDescriptor(e,n);if(i===void 0||!i.enumerable||!(`value`in i)||!t(i.value,r))return!1}return!0}catch{return!1}finally{r.delete(e)}}function n(e){let t=Reflect.ownKeys(e);if(t.length!==e.length+1||t.at(-1)!==`length`)return!1;for(let n=0;n<e.length;n+=1){let r=String(n);if(t[n]!==r)return!1;let i=Object.getOwnPropertyDescriptor(e,r);if(i===void 0||!i.enumerable||!(`value`in i))return!1}return!0}var r={text(e){return{type:`text`,text:e}},imageUrl(e,t={}){let n={type:`image`,source:{type:`url`,url:e}};return t.detail!==void 0&&(n.detail=t.detail),n},imageBase64(e,t,n={}){let r={type:`image`,source:{type:`base64`,data:e,mediaType:t}};return n.detail!==void 0&&(r.detail=n.detail),r},documentUrl(e,t,n={}){return{type:`document`,source:n.filename===void 0?{type:`url`,url:e,mediaType:t}:{type:`url`,url:e,mediaType:t,filename:n.filename}}},documentBase64(e,t,n={}){return{type:`document`,source:n.filename===void 0?{type:`base64`,data:e,mediaType:t}:{type:`base64`,data:e,mediaType:t,filename:n.filename}}},documentText(e){return{type:`text`,text:e}}},i={toolResult(e,t,n,r){let i=typeof t==`string`?[{type:`text`,text:t}]:t,o=a(n,r),s={type:`tool_result`,id:e,content:i};return o.callId!==void 0&&(s.callId=o.callId),o.toolName!==void 0&&(s.toolName=o.toolName),s}};function a(e,t){return e===void 0?t===void 0?{}:{toolName:t}:typeof e==`string`?t===void 0?{callId:e}:{callId:e,toolName:t}:t===void 0?e:{...e,toolName:t}}function o(e){if(typeof e==`string`)return e;try{let t=JSON.stringify(e);return t===void 0?String(e):t}catch{return String(e)}}function s(e){return Array.isArray(e)&&e.length>0&&e.every(e=>typeof e!=`object`||!e||!(`type`in e)?!1:e.type===`text`?`text`in e&&typeof e.text==`string`:e.type===`image`?`data`in e&&typeof e.data==`string`&&(!(`mediaType`in e)||e.mediaType===void 0||typeof e.mediaType==`string`):!1)}var c={text(e){return{type:`text`,text:e}},imageUrl(e,t={}){let n={type:`image`,source:{type:`url`,url:e}};return t.detail!==void 0&&(n.detail=t.detail),n},imageBase64(e,t,n={}){let r={type:`image`,source:{type:`base64`,data:e,mediaType:t}};return n.detail!==void 0&&(r.detail=n.detail),r},reasoning(e,t){return t===void 0?{type:`reasoning`,text:e}:{type:`reasoning`,text:e,id:t}},reasoningFromContent(e,t){let n={type:`reasoning`,text:l(e),content:e};return t===void 0?n:{...n,id:t}},reasoningSummary(e,t){return c.reasoningFromContent([{type:`summary`,text:e}],t)},reasoningEncrypted(e,t){return c.reasoningFromContent([{type:`encrypted`,data:e}],t)},reasoningRedacted(e,t){return c.reasoningFromContent([{type:`redacted`,data:e}],t)},toolCall(e,t,n,r){let i={type:`tool_call`,id:e,function:{name:t,arguments:n}};return r===void 0?i:{...i,callId:r}}};function l(e){let t=Array.isArray(e)?e:e.content;return t===void 0?Array.isArray(e)?``:e.text:t.flatMap(e=>e.type===`text`||e.type===`summary`?[e.text]:[]).join(``)}var u={system(e,t={}){return{role:`system`,content:e,...d(t)}},user(e,t={}){return{role:`user`,content:typeof e==`string`?[r.text(e)]:e,...d(t)}},assistant(e,t){let n=typeof e==`string`?[c.text(e)]:e,r=typeof t==`string`?{id:t}:t??{},i=d(r).metadata,a=r.id===void 0?{role:`assistant`,content:n}:{role:`assistant`,id:r.id,content:n};return i!==void 0&&(a.metadata=i),a},tool(e,t={}){return{role:`tool`,content:Array.isArray(e)?e:[e],...d(t)}},toolResult(e,t,n={}){let r=s(t)?t:o(t);return u.tool(i.toolResult(e,r,{callId:n.callId,toolName:n.toolName}),{metadata:n.metadata})}};function d(t){if(t.metadata===void 0)return{};if(!e(t.metadata))throw TypeError(`Message metadata must be a strict JSON value.`);return{metadata:t.metadata}}function f(e){if(e.role!==`assistant`||!p(e.metadata))return;let t=e.metadata.anvia;if(!p(t))return;let n=t.generation;if(!p(n)||typeof n.provider!=`string`||typeof n.model!=`string`||!y(n.usage))return;let r={provider:n.provider,model:n.model,usage:{...n.usage,...n.usage.details===void 0?{}:{details:{...n.usage.details}}}};return m(n.contextUsage)&&(r.contextUsage={...n.contextUsage,model:{...n.contextUsage.model,context:{...n.contextUsage.model.context}}}),S(n.sources)&&(r.sources=n.sources.map(e=>({...e}))),C(n.providerToolCalls)&&(r.providerToolCalls=n.providerToolCalls.map(e=>({...e,...e.details===void 0?{}:{details:{...e.details}}}))),r}function p(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function m(e){if(!p(e)||!p(e.model))return!1;let t=e.model.context;if(typeof e.model.id==`string`&&p(t)&&g(t.contextWindow)&&_(t.maxInputTokens)&&_(t.maxOutputTokens)&&b(e.usedTokens)&&b(e.remainingTokens)&&v(e.usedPercent)&&v(e.remainingPercent)){let n=t.contextWindow,r=Math.max(0,n-e.usedTokens),i=Math.min(100,e.usedTokens/n*100),a=r/n*100;return e.remainingTokens===r&&h(e.usedPercent,i)&&h(e.remainingPercent,a)}return!1}function h(e,t){let n=Math.max(1,Math.abs(e),Math.abs(t));return Math.abs(e-t)<=2**-52*n*8}function g(e){return b(e)&&e>0}function _(e){return e===void 0||g(e)}function v(e){return b(e)&&e<=100}function y(e){return p(e)?b(e.inputTokens)&&b(e.outputTokens)&&b(e.totalTokens)&&b(e.cachedInputTokens)&&b(e.cacheCreationInputTokens)&&x(e.details):!1}function b(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0}function x(e){if(e===void 0)return!0;if(!p(e))return!1;let t,n=0;for(let[r,i]of Object.entries(e)){if(i===void 0||!b(i))return!1;r===`total`?t=i:n+=i}return t!==void 0&&t===n}function S(e){return Array.isArray(e)&&e.every(e=>p(e)&&e.type===`url`&&typeof e.url==`string`&&(e.title===void 0||typeof e.title==`string`)&&(e.id===void 0||typeof e.id==`string`)&&(e.startIndex===void 0||typeof e.startIndex==`number`)&&(e.endIndex===void 0||typeof e.endIndex==`number`))}function C(e){return Array.isArray(e)&&e.every(e=>p(e)&&typeof e.id==`string`&&typeof e.name==`string`&&(e.status===void 0||typeof e.status==`string`)&&(e.details===void 0||p(e.details)))}export{f as a,o as c,r as i,u as n,e as o,i as r,l as s,c as t};
2
- //# sourceMappingURL=chunk-ADH7NNCS-DM6fsnDI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk-ADH7NNCS-DM6fsnDI.js","names":[],"sources":["../../../../core/dist/chunk-ADH7NNCS.js"],"sourcesContent":["// src/completion/json.ts\nfunction isJsonValue(value) {\n return isJsonValueWithAncestors(value, /* @__PURE__ */ new WeakSet());\n}\nfunction isJsonValueWithAncestors(value, ancestors) {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n return true;\n }\n if (typeof value === \"number\") {\n return Number.isFinite(value);\n }\n if (typeof value !== \"object\" || ancestors.has(value)) {\n return false;\n }\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n if (!hasOnlyDenseArrayProperties(value)) {\n return false;\n }\n for (let index = 0; index < value.length; index += 1) {\n if (!isJsonValueWithAncestors(value[index], ancestors)) {\n return false;\n }\n }\n return true;\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n return false;\n }\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\") {\n return false;\n }\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor === void 0 || !descriptor.enumerable || !(\"value\" in descriptor) || !isJsonValueWithAncestors(descriptor.value, ancestors)) {\n return false;\n }\n }\n return true;\n } catch {\n return false;\n } finally {\n ancestors.delete(value);\n }\n}\nfunction hasOnlyDenseArrayProperties(value) {\n const keys = Reflect.ownKeys(value);\n if (keys.length !== value.length + 1 || keys.at(-1) !== \"length\") {\n return false;\n }\n for (let index = 0; index < value.length; index += 1) {\n const key = String(index);\n if (keys[index] !== key) {\n return false;\n }\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor === void 0 || !descriptor.enumerable || !(\"value\" in descriptor)) {\n return false;\n }\n }\n return true;\n}\n\n// src/completion/types.ts\nvar UserContent = {\n text(text) {\n return { type: \"text\", text };\n },\n imageUrl(url, options = {}) {\n const image = { type: \"image\", source: { type: \"url\", url } };\n if (options.detail !== void 0) {\n image.detail = options.detail;\n }\n return image;\n },\n imageBase64(data, mediaType, options = {}) {\n const image = {\n type: \"image\",\n source: { type: \"base64\", data, mediaType }\n };\n if (options.detail !== void 0) {\n image.detail = options.detail;\n }\n return image;\n },\n documentUrl(url, mediaType, options = {}) {\n return {\n type: \"document\",\n source: options.filename === void 0 ? { type: \"url\", url, mediaType } : { type: \"url\", url, mediaType, filename: options.filename }\n };\n },\n documentBase64(data, mediaType, options = {}) {\n return {\n type: \"document\",\n source: options.filename === void 0 ? { type: \"base64\", data, mediaType } : { type: \"base64\", data, mediaType, filename: options.filename }\n };\n },\n documentText(text) {\n return { type: \"text\", text };\n }\n};\nvar ToolContent = {\n toolResult(id, content, callIdOrOptions, toolName) {\n const normalized = typeof content === \"string\" ? [{ type: \"text\", text: content }] : content;\n const options = normalizeToolResultOptions(callIdOrOptions, toolName);\n const result = { type: \"tool_result\", id, content: normalized };\n if (options.callId !== void 0) {\n result.callId = options.callId;\n }\n if (options.toolName !== void 0) {\n result.toolName = options.toolName;\n }\n return result;\n }\n};\nfunction normalizeToolResultOptions(callIdOrOptions, toolName) {\n if (callIdOrOptions === void 0) {\n return toolName === void 0 ? {} : { toolName };\n }\n if (typeof callIdOrOptions === \"string\") {\n return toolName === void 0 ? { callId: callIdOrOptions } : { callId: callIdOrOptions, toolName };\n }\n return toolName === void 0 ? callIdOrOptions : { ...callIdOrOptions, toolName };\n}\nfunction serializeToolResultOutput(output) {\n if (typeof output === \"string\") {\n return output;\n }\n try {\n const serialized = JSON.stringify(output);\n return serialized === void 0 ? String(output) : serialized;\n } catch {\n return String(output);\n }\n}\nfunction isToolResultContentArray(value) {\n return Array.isArray(value) && value.length > 0 && value.every((item) => {\n if (typeof item !== \"object\" || item === null || !(\"type\" in item)) {\n return false;\n }\n if (item.type === \"text\") {\n return \"text\" in item && typeof item.text === \"string\";\n }\n if (item.type === \"image\") {\n return \"data\" in item && typeof item.data === \"string\" && (!(\"mediaType\" in item) || item.mediaType === void 0 || typeof item.mediaType === \"string\");\n }\n return false;\n });\n}\nvar AssistantContent = {\n text(text) {\n return { type: \"text\", text };\n },\n imageUrl(url, options = {}) {\n const image = { type: \"image\", source: { type: \"url\", url } };\n if (options.detail !== void 0) {\n image.detail = options.detail;\n }\n return image;\n },\n imageBase64(data, mediaType, options = {}) {\n const image = {\n type: \"image\",\n source: { type: \"base64\", data, mediaType }\n };\n if (options.detail !== void 0) {\n image.detail = options.detail;\n }\n return image;\n },\n reasoning(text, id) {\n return id === void 0 ? { type: \"reasoning\", text } : { type: \"reasoning\", text, id };\n },\n reasoningFromContent(content, id) {\n const text = reasoningDisplayText(content);\n const reasoning = { type: \"reasoning\", text, content };\n return id === void 0 ? reasoning : { ...reasoning, id };\n },\n reasoningSummary(text, id) {\n return AssistantContent.reasoningFromContent([{ type: \"summary\", text }], id);\n },\n reasoningEncrypted(data, id) {\n return AssistantContent.reasoningFromContent([{ type: \"encrypted\", data }], id);\n },\n reasoningRedacted(data, id) {\n return AssistantContent.reasoningFromContent([{ type: \"redacted\", data }], id);\n },\n toolCall(id, name, args, callId) {\n const base = {\n type: \"tool_call\",\n id,\n function: {\n name,\n arguments: args\n }\n };\n return callId === void 0 ? base : { ...base, callId };\n }\n};\nfunction reasoningDisplayText(reasoning) {\n const content = Array.isArray(reasoning) ? reasoning : reasoning.content;\n if (content === void 0) {\n return Array.isArray(reasoning) ? \"\" : reasoning.text;\n }\n return content.flatMap((item) => {\n if (item.type === \"text\" || item.type === \"summary\") {\n return [item.text];\n }\n return [];\n }).join(\"\");\n}\nvar Message = {\n system(content, options = {}) {\n return { role: \"system\", content, ...messageMetadata(options) };\n },\n user(content, options = {}) {\n return {\n role: \"user\",\n content: typeof content === \"string\" ? [UserContent.text(content)] : content,\n ...messageMetadata(options)\n };\n },\n assistant(content, idOrOptions) {\n const normalized = typeof content === \"string\" ? [AssistantContent.text(content)] : content;\n const options = typeof idOrOptions === \"string\" ? { id: idOrOptions } : idOrOptions ?? {};\n const metadata = messageMetadata(options).metadata;\n const message = options.id === void 0 ? { role: \"assistant\", content: normalized } : { role: \"assistant\", id: options.id, content: normalized };\n if (metadata !== void 0) {\n message.metadata = metadata;\n }\n return message;\n },\n tool(content, options = {}) {\n return {\n role: \"tool\",\n content: Array.isArray(content) ? content : [content],\n ...messageMetadata(options)\n };\n },\n toolResult(id, output, options = {}) {\n const content = isToolResultContentArray(output) ? output : serializeToolResultOutput(output);\n return Message.tool(\n ToolContent.toolResult(id, content, {\n callId: options.callId,\n toolName: options.toolName\n }),\n { metadata: options.metadata }\n );\n }\n};\nfunction messageMetadata(options) {\n if (options.metadata === void 0) {\n return {};\n }\n if (!isJsonValue(options.metadata)) {\n throw new TypeError(\"Message metadata must be a strict JSON value.\");\n }\n return { metadata: options.metadata };\n}\nfunction isProviderTool(value) {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const candidate = value;\n return candidate.kind === \"provider\" && typeof candidate.provider === \"string\" && candidate.provider.trim().length > 0 && typeof candidate.name === \"string\" && candidate.name.trim().length > 0 && (candidate.configuration === void 0 || typeof candidate.configuration === \"object\" && candidate.configuration !== null && !Array.isArray(candidate.configuration) && isJsonValue(candidate.configuration));\n}\nfunction calculateContextUsage(usage, model) {\n if (model === void 0 || !Number.isFinite(usage.inputTokens) || usage.inputTokens <= 0 || !Number.isFinite(model.context.contextWindow) || model.context.contextWindow <= 0) {\n return void 0;\n }\n const usedTokens = Math.max(0, usage.inputTokens);\n const remainingTokens = Math.max(0, model.context.contextWindow - usedTokens);\n const usedPercent = Math.min(100, usedTokens / model.context.contextWindow * 100);\n return {\n model,\n usedTokens,\n remainingTokens,\n usedPercent,\n remainingPercent: 100 - usedPercent\n };\n}\nfunction withContextUsage(response, model) {\n const contextUsage = calculateContextUsage(response.usage, model);\n return contextUsage === void 0 ? response : { ...response, contextUsage };\n}\nfunction resolveCompletionModelInfo(model, catalog, overrides) {\n const context = overrides?.[model] ?? catalog[model];\n return context === void 0 ? void 0 : { id: model, context };\n}\nvar Usage = {\n empty() {\n return {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n cacheCreationInputTokens: 0\n };\n },\n add(left, right) {\n const result = {\n inputTokens: left.inputTokens + right.inputTokens,\n outputTokens: left.outputTokens + right.outputTokens,\n totalTokens: left.totalTokens + right.totalTokens,\n cachedInputTokens: left.cachedInputTokens + right.cachedInputTokens,\n cacheCreationInputTokens: left.cacheCreationInputTokens + right.cacheCreationInputTokens\n };\n const details = addUsageDetails(left, right);\n if (details !== void 0) {\n result.details = details;\n }\n return result;\n }\n};\nfunction addUsageDetails(left, right) {\n if (isEmptyUsage(left) && left.details === void 0) {\n return right.details === void 0 ? void 0 : { ...right.details };\n }\n if (isEmptyUsage(right) && right.details === void 0) {\n return left.details === void 0 ? void 0 : { ...left.details };\n }\n if (left.details === void 0 || right.details === void 0) {\n return void 0;\n }\n const details = { ...left.details };\n for (const [key, value] of Object.entries(right.details)) {\n details[key] = (details[key] ?? 0) + value;\n }\n return details;\n}\nfunction isEmptyUsage(usage) {\n return usage.inputTokens === 0 && usage.outputTokens === 0 && usage.totalTokens === 0 && usage.cachedInputTokens === 0 && usage.cacheCreationInputTokens === 0;\n}\nfunction getAssistantGenerationMetadata(message) {\n if (message.role !== \"assistant\" || !isJsonObjectValue(message.metadata)) {\n return void 0;\n }\n const frameworkMetadata = message.metadata.anvia;\n if (!isJsonObjectValue(frameworkMetadata)) {\n return void 0;\n }\n const generation = frameworkMetadata.generation;\n if (!isJsonObjectValue(generation) || typeof generation.provider !== \"string\" || typeof generation.model !== \"string\" || !isUsageValue(generation.usage)) {\n return void 0;\n }\n const metadata = {\n provider: generation.provider,\n model: generation.model,\n usage: {\n ...generation.usage,\n ...generation.usage.details === void 0 ? {} : { details: { ...generation.usage.details } }\n }\n };\n if (isContextUsageValue(generation.contextUsage)) {\n metadata.contextUsage = {\n ...generation.contextUsage,\n model: {\n ...generation.contextUsage.model,\n context: { ...generation.contextUsage.model.context }\n }\n };\n }\n if (isCompletionSourceArray(generation.sources)) {\n metadata.sources = generation.sources.map((source) => ({ ...source }));\n }\n if (isProviderToolCallArray(generation.providerToolCalls)) {\n metadata.providerToolCalls = generation.providerToolCalls.map((toolCall) => ({\n ...toolCall,\n ...toolCall.details === void 0 ? {} : { details: { ...toolCall.details } }\n }));\n }\n return metadata;\n}\nfunction isJsonObjectValue(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction isContextUsageValue(value) {\n if (!isJsonObjectValue(value) || !isJsonObjectValue(value.model)) {\n return false;\n }\n const context = value.model.context;\n if (typeof value.model.id === \"string\" && isJsonObjectValue(context) && isPositiveFiniteNumber(context.contextWindow) && isOptionalPositiveFiniteNumber(context.maxInputTokens) && isOptionalPositiveFiniteNumber(context.maxOutputTokens) && isNonnegativeFiniteNumber(value.usedTokens) && isNonnegativeFiniteNumber(value.remainingTokens) && isPercentage(value.usedPercent) && isPercentage(value.remainingPercent)) {\n const contextWindow = context.contextWindow;\n const remainingTokens = Math.max(0, contextWindow - value.usedTokens);\n const usedPercent = Math.min(100, value.usedTokens / contextWindow * 100);\n const remainingPercent = remainingTokens / contextWindow * 100;\n return value.remainingTokens === remainingTokens && approximatelyEqual(value.usedPercent, usedPercent) && approximatelyEqual(value.remainingPercent, remainingPercent);\n }\n return false;\n}\nfunction approximatelyEqual(left, right) {\n const scale = Math.max(1, Math.abs(left), Math.abs(right));\n return Math.abs(left - right) <= Number.EPSILON * scale * 8;\n}\nfunction isPositiveFiniteNumber(value) {\n return isNonnegativeFiniteNumber(value) && value > 0;\n}\nfunction isOptionalPositiveFiniteNumber(value) {\n return value === void 0 || isPositiveFiniteNumber(value);\n}\nfunction isPercentage(value) {\n return isNonnegativeFiniteNumber(value) && value <= 100;\n}\nfunction isUsageValue(value) {\n if (!isJsonObjectValue(value)) {\n return false;\n }\n return isNonnegativeFiniteNumber(value.inputTokens) && isNonnegativeFiniteNumber(value.outputTokens) && isNonnegativeFiniteNumber(value.totalTokens) && isNonnegativeFiniteNumber(value.cachedInputTokens) && isNonnegativeFiniteNumber(value.cacheCreationInputTokens) && isUsageDetailsValue(value.details);\n}\nfunction isNonnegativeFiniteNumber(value) {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\nfunction isUsageDetailsValue(value) {\n if (value === void 0) {\n return true;\n }\n if (!isJsonObjectValue(value)) {\n return false;\n }\n let total;\n let bucketSum = 0;\n for (const [key, detail] of Object.entries(value)) {\n if (detail === void 0 || !isNonnegativeFiniteNumber(detail)) {\n return false;\n }\n if (key === \"total\") {\n total = detail;\n } else {\n bucketSum += detail;\n }\n }\n return total !== void 0 && total === bucketSum;\n}\nfunction isCompletionSourceArray(value) {\n return Array.isArray(value) && value.every(\n (source) => isJsonObjectValue(source) && source.type === \"url\" && typeof source.url === \"string\" && (source.title === void 0 || typeof source.title === \"string\") && (source.id === void 0 || typeof source.id === \"string\") && (source.startIndex === void 0 || typeof source.startIndex === \"number\") && (source.endIndex === void 0 || typeof source.endIndex === \"number\")\n );\n}\nfunction isProviderToolCallArray(value) {\n return Array.isArray(value) && value.every(\n (toolCall) => isJsonObjectValue(toolCall) && typeof toolCall.id === \"string\" && typeof toolCall.name === \"string\" && (toolCall.status === void 0 || typeof toolCall.status === \"string\") && (toolCall.details === void 0 || isJsonObjectValue(toolCall.details))\n );\n}\nvar CompletionCapabilityError = class extends Error {\n constructor(message) {\n super(message);\n this.name = \"CompletionCapabilityError\";\n }\n};\nfunction assertCompletionRequestSupported(model, request, options = {}) {\n const modelLabel = `${model.provider}:${request.model ?? model.defaultModel}`;\n const capabilities = model.capabilities;\n if (options.streaming === true && !capabilities.streaming) {\n throw new CompletionCapabilityError(`${modelLabel} does not support streaming completions.`);\n }\n if (request.tools.length > 0 && !capabilities.tools) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool definitions.`);\n }\n if ((request.providerTools?.length ?? 0) > 0 && capabilities.providerTools !== true) {\n throw new CompletionCapabilityError(`${modelLabel} does not support provider-executed tools.`);\n }\n if (request.toolChoice !== void 0 && !capabilities.toolChoice) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool choice.`);\n }\n if (request.outputSchema !== void 0 && !capabilities.outputSchema) {\n throw new CompletionCapabilityError(`${modelLabel} does not support output schemas.`);\n }\n if (!capabilities.imageInput && requestHasImageInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support image input.`);\n }\n if (!capabilities.documentInput && requestHasFileDocumentInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support document file input.`);\n }\n}\nfunction textFromAssistantContent(content) {\n return content.flatMap((item) => item.type === \"text\" ? [item.text] : []).join(\"\\n\");\n}\nfunction requestHasImageInput(request) {\n return request.chatHistory.some(\n (message) => message.role === \"system\" ? false : message.content.some((content) => content.type === \"image\")\n );\n}\nfunction requestHasFileDocumentInput(request) {\n return request.chatHistory.some(\n (message) => message.role === \"user\" ? message.content.some(\n (content) => content.type === \"document\" && content.source.type !== \"text\"\n ) : false\n );\n}\n\nexport {\n isJsonValue,\n UserContent,\n ToolContent,\n serializeToolResultOutput,\n isToolResultContentArray,\n AssistantContent,\n reasoningDisplayText,\n Message,\n isProviderTool,\n calculateContextUsage,\n withContextUsage,\n resolveCompletionModelInfo,\n Usage,\n getAssistantGenerationMetadata,\n CompletionCapabilityError,\n assertCompletionRequestSupported,\n textFromAssistantContent\n};\n//# sourceMappingURL=chunk-ADH7NNCS.js.map"],"mappings":"AACA,SAAS,EAAY,EAAO,CAC1B,OAAO,EAAyB,EAAuB,IAAI,QAAU,CAEvE,SAAS,EAAyB,EAAO,EAAW,CAClD,GAAI,IAAU,MAAQ,OAAO,GAAU,UAAY,OAAO,GAAU,UAClE,MAAO,GAET,GAAI,OAAO,GAAU,SACnB,OAAO,OAAO,SAAS,EAAM,CAE/B,GAAI,OAAO,GAAU,UAAY,EAAU,IAAI,EAAM,CACnD,MAAO,GAET,EAAU,IAAI,EAAM,CACpB,GAAI,CACF,GAAI,MAAM,QAAQ,EAAM,CAAE,CACxB,GAAI,CAAC,EAA4B,EAAM,CACrC,MAAO,GAET,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAM,OAAQ,GAAS,EACjD,GAAI,CAAC,EAAyB,EAAM,GAAQ,EAAU,CACpD,MAAO,GAGX,MAAO,GAET,IAAM,EAAY,OAAO,eAAe,EAAM,CAC9C,GAAI,IAAc,OAAO,WAAa,IAAc,KAClD,MAAO,GAET,IAAK,IAAM,KAAO,QAAQ,QAAQ,EAAM,CAAE,CACxC,GAAI,OAAO,GAAQ,SACjB,MAAO,GAET,IAAM,EAAa,OAAO,yBAAyB,EAAO,EAAI,CAC9D,GAAI,IAAe,IAAK,IAAK,CAAC,EAAW,YAAc,EAAE,UAAW,IAAe,CAAC,EAAyB,EAAW,MAAO,EAAU,CACvI,MAAO,GAGX,MAAO,QACD,CACN,MAAO,UACC,CACR,EAAU,OAAO,EAAM,EAG3B,SAAS,EAA4B,EAAO,CAC1C,IAAM,EAAO,QAAQ,QAAQ,EAAM,CACnC,GAAI,EAAK,SAAW,EAAM,OAAS,GAAK,EAAK,GAAG,GAAG,GAAK,SACtD,MAAO,GAET,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAM,OAAQ,GAAS,EAAG,CACpD,IAAM,EAAM,OAAO,EAAM,CACzB,GAAI,EAAK,KAAW,EAClB,MAAO,GAET,IAAM,EAAa,OAAO,yBAAyB,EAAO,EAAI,CAC9D,GAAI,IAAe,IAAK,IAAK,CAAC,EAAW,YAAc,EAAE,UAAW,GAClE,MAAO,GAGX,MAAO,GAIT,IAAI,EAAc,CAChB,KAAK,EAAM,CACT,MAAO,CAAE,KAAM,OAAQ,OAAM,EAE/B,SAAS,EAAK,EAAU,EAAE,CAAE,CAC1B,IAAM,EAAQ,CAAE,KAAM,QAAS,OAAQ,CAAE,KAAM,MAAO,MAAK,CAAE,CAI7D,OAHI,EAAQ,SAAW,IAAK,KAC1B,EAAM,OAAS,EAAQ,QAElB,GAET,YAAY,EAAM,EAAW,EAAU,EAAE,CAAE,CACzC,IAAM,EAAQ,CACZ,KAAM,QACN,OAAQ,CAAE,KAAM,SAAU,OAAM,YAAW,CAC5C,CAID,OAHI,EAAQ,SAAW,IAAK,KAC1B,EAAM,OAAS,EAAQ,QAElB,GAET,YAAY,EAAK,EAAW,EAAU,EAAE,CAAE,CACxC,MAAO,CACL,KAAM,WACN,OAAQ,EAAQ,WAAa,IAAK,GAAI,CAAE,KAAM,MAAO,MAAK,YAAW,CAAG,CAAE,KAAM,MAAO,MAAK,YAAW,SAAU,EAAQ,SAAU,CACpI,EAEH,eAAe,EAAM,EAAW,EAAU,EAAE,CAAE,CAC5C,MAAO,CACL,KAAM,WACN,OAAQ,EAAQ,WAAa,IAAK,GAAI,CAAE,KAAM,SAAU,OAAM,YAAW,CAAG,CAAE,KAAM,SAAU,OAAM,YAAW,SAAU,EAAQ,SAAU,CAC5I,EAEH,aAAa,EAAM,CACjB,MAAO,CAAE,KAAM,OAAQ,OAAM,EAEhC,CACG,EAAc,CAChB,WAAW,EAAI,EAAS,EAAiB,EAAU,CACjD,IAAM,EAAa,OAAO,GAAY,SAAW,CAAC,CAAE,KAAM,OAAQ,KAAM,EAAS,CAAC,CAAG,EAC/E,EAAU,EAA2B,EAAiB,EAAS,CAC/D,EAAS,CAAE,KAAM,cAAe,KAAI,QAAS,EAAY,CAO/D,OANI,EAAQ,SAAW,IAAK,KAC1B,EAAO,OAAS,EAAQ,QAEtB,EAAQ,WAAa,IAAK,KAC5B,EAAO,SAAW,EAAQ,UAErB,GAEV,CACD,SAAS,EAA2B,EAAiB,EAAU,CAO7D,OANI,IAAoB,IAAK,GACpB,IAAa,IAAK,GAAI,EAAE,CAAG,CAAE,WAAU,CAE5C,OAAO,GAAoB,SACtB,IAAa,IAAK,GAAI,CAAE,OAAQ,EAAiB,CAAG,CAAE,OAAQ,EAAiB,WAAU,CAE3F,IAAa,IAAK,GAAI,EAAkB,CAAE,GAAG,EAAiB,WAAU,CAEjF,SAAS,EAA0B,EAAQ,CACzC,GAAI,OAAO,GAAW,SACpB,OAAO,EAET,GAAI,CACF,IAAM,EAAa,KAAK,UAAU,EAAO,CACzC,OAAO,IAAe,IAAK,GAAI,OAAO,EAAO,CAAG,OAC1C,CACN,OAAO,OAAO,EAAO,EAGzB,SAAS,EAAyB,EAAO,CACvC,OAAO,MAAM,QAAQ,EAAM,EAAI,EAAM,OAAS,GAAK,EAAM,MAAO,GAC1D,OAAO,GAAS,WAAY,GAAiB,EAAE,SAAU,GACpD,GAEL,EAAK,OAAS,OACT,SAAU,GAAQ,OAAO,EAAK,MAAS,SAE5C,EAAK,OAAS,QACT,SAAU,GAAQ,OAAO,EAAK,MAAS,WAAa,EAAE,cAAe,IAAS,EAAK,YAAc,IAAK,IAAK,OAAO,EAAK,WAAc,UAEvI,GACP,CAEJ,IAAI,EAAmB,CACrB,KAAK,EAAM,CACT,MAAO,CAAE,KAAM,OAAQ,OAAM,EAE/B,SAAS,EAAK,EAAU,EAAE,CAAE,CAC1B,IAAM,EAAQ,CAAE,KAAM,QAAS,OAAQ,CAAE,KAAM,MAAO,MAAK,CAAE,CAI7D,OAHI,EAAQ,SAAW,IAAK,KAC1B,EAAM,OAAS,EAAQ,QAElB,GAET,YAAY,EAAM,EAAW,EAAU,EAAE,CAAE,CACzC,IAAM,EAAQ,CACZ,KAAM,QACN,OAAQ,CAAE,KAAM,SAAU,OAAM,YAAW,CAC5C,CAID,OAHI,EAAQ,SAAW,IAAK,KAC1B,EAAM,OAAS,EAAQ,QAElB,GAET,UAAU,EAAM,EAAI,CAClB,OAAO,IAAO,IAAK,GAAI,CAAE,KAAM,YAAa,OAAM,CAAG,CAAE,KAAM,YAAa,OAAM,KAAI,EAEtF,qBAAqB,EAAS,EAAI,CAEhC,IAAM,EAAY,CAAE,KAAM,YAAa,KAD1B,EAAqB,EACK,CAAM,UAAS,CACtD,OAAO,IAAO,IAAK,GAAI,EAAY,CAAE,GAAG,EAAW,KAAI,EAEzD,iBAAiB,EAAM,EAAI,CACzB,OAAO,EAAiB,qBAAqB,CAAC,CAAE,KAAM,UAAW,OAAM,CAAC,CAAE,EAAG,EAE/E,mBAAmB,EAAM,EAAI,CAC3B,OAAO,EAAiB,qBAAqB,CAAC,CAAE,KAAM,YAAa,OAAM,CAAC,CAAE,EAAG,EAEjF,kBAAkB,EAAM,EAAI,CAC1B,OAAO,EAAiB,qBAAqB,CAAC,CAAE,KAAM,WAAY,OAAM,CAAC,CAAE,EAAG,EAEhF,SAAS,EAAI,EAAM,EAAM,EAAQ,CAC/B,IAAM,EAAO,CACX,KAAM,YACN,KACA,SAAU,CACR,OACA,UAAW,EACZ,CACF,CACD,OAAO,IAAW,IAAK,GAAI,EAAO,CAAE,GAAG,EAAM,SAAQ,EAExD,CACD,SAAS,EAAqB,EAAW,CACvC,IAAM,EAAU,MAAM,QAAQ,EAAU,CAAG,EAAY,EAAU,QAIjE,OAHI,IAAY,IAAK,GACZ,MAAM,QAAQ,EAAU,CAAG,GAAK,EAAU,KAE5C,EAAQ,QAAS,GAClB,EAAK,OAAS,QAAU,EAAK,OAAS,UACjC,CAAC,EAAK,KAAK,CAEb,EAAE,CACT,CAAC,KAAK,GAAG,CAEb,IAAI,EAAU,CACZ,OAAO,EAAS,EAAU,EAAE,CAAE,CAC5B,MAAO,CAAE,KAAM,SAAU,UAAS,GAAG,EAAgB,EAAQ,CAAE,EAEjE,KAAK,EAAS,EAAU,EAAE,CAAE,CAC1B,MAAO,CACL,KAAM,OACN,QAAS,OAAO,GAAY,SAAW,CAAC,EAAY,KAAK,EAAQ,CAAC,CAAG,EACrE,GAAG,EAAgB,EAAQ,CAC5B,EAEH,UAAU,EAAS,EAAa,CAC9B,IAAM,EAAa,OAAO,GAAY,SAAW,CAAC,EAAiB,KAAK,EAAQ,CAAC,CAAG,EAC9E,EAAU,OAAO,GAAgB,SAAW,CAAE,GAAI,EAAa,CAAG,GAAe,EAAE,CACnF,EAAW,EAAgB,EAAQ,CAAC,SACpC,EAAU,EAAQ,KAAO,IAAK,GAAI,CAAE,KAAM,YAAa,QAAS,EAAY,CAAG,CAAE,KAAM,YAAa,GAAI,EAAQ,GAAI,QAAS,EAAY,CAI/I,OAHI,IAAa,IAAK,KACpB,EAAQ,SAAW,GAEd,GAET,KAAK,EAAS,EAAU,EAAE,CAAE,CAC1B,MAAO,CACL,KAAM,OACN,QAAS,MAAM,QAAQ,EAAQ,CAAG,EAAU,CAAC,EAAQ,CACrD,GAAG,EAAgB,EAAQ,CAC5B,EAEH,WAAW,EAAI,EAAQ,EAAU,EAAE,CAAE,CACnC,IAAM,EAAU,EAAyB,EAAO,CAAG,EAAS,EAA0B,EAAO,CAC7F,OAAO,EAAQ,KACb,EAAY,WAAW,EAAI,EAAS,CAClC,OAAQ,EAAQ,OAChB,SAAU,EAAQ,SACnB,CAAC,CACF,CAAE,SAAU,EAAQ,SAAU,CAC/B,EAEJ,CACD,SAAS,EAAgB,EAAS,CAChC,GAAI,EAAQ,WAAa,IAAK,GAC5B,MAAO,EAAE,CAEX,GAAI,CAAC,EAAY,EAAQ,SAAS,CAChC,MAAU,UAAU,gDAAgD,CAEtE,MAAO,CAAE,SAAU,EAAQ,SAAU,CA4EvC,SAAS,EAA+B,EAAS,CAC/C,GAAI,EAAQ,OAAS,aAAe,CAAC,EAAkB,EAAQ,SAAS,CACtE,OAEF,IAAM,EAAoB,EAAQ,SAAS,MAC3C,GAAI,CAAC,EAAkB,EAAkB,CACvC,OAEF,IAAM,EAAa,EAAkB,WACrC,GAAI,CAAC,EAAkB,EAAW,EAAI,OAAO,EAAW,UAAa,UAAY,OAAO,EAAW,OAAU,UAAY,CAAC,EAAa,EAAW,MAAM,CACtJ,OAEF,IAAM,EAAW,CACf,SAAU,EAAW,SACrB,MAAO,EAAW,MAClB,MAAO,CACL,GAAG,EAAW,MACd,GAAG,EAAW,MAAM,UAAY,IAAK,GAAI,EAAE,CAAG,CAAE,QAAS,CAAE,GAAG,EAAW,MAAM,QAAS,CAAE,CAC3F,CACF,CAmBD,OAlBI,EAAoB,EAAW,aAAa,GAC9C,EAAS,aAAe,CACtB,GAAG,EAAW,aACd,MAAO,CACL,GAAG,EAAW,aAAa,MAC3B,QAAS,CAAE,GAAG,EAAW,aAAa,MAAM,QAAS,CACtD,CACF,EAEC,EAAwB,EAAW,QAAQ,GAC7C,EAAS,QAAU,EAAW,QAAQ,IAAK,IAAY,CAAE,GAAG,EAAQ,EAAE,EAEpE,EAAwB,EAAW,kBAAkB,GACvD,EAAS,kBAAoB,EAAW,kBAAkB,IAAK,IAAc,CAC3E,GAAG,EACH,GAAG,EAAS,UAAY,IAAK,GAAI,EAAE,CAAG,CAAE,QAAS,CAAE,GAAG,EAAS,QAAS,CAAE,CAC3E,EAAE,EAEE,EAET,SAAS,EAAkB,EAAO,CAChC,OAAO,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,EAAM,CAE7E,SAAS,EAAoB,EAAO,CAClC,GAAI,CAAC,EAAkB,EAAM,EAAI,CAAC,EAAkB,EAAM,MAAM,CAC9D,MAAO,GAET,IAAM,EAAU,EAAM,MAAM,QAC5B,GAAI,OAAO,EAAM,MAAM,IAAO,UAAY,EAAkB,EAAQ,EAAI,EAAuB,EAAQ,cAAc,EAAI,EAA+B,EAAQ,eAAe,EAAI,EAA+B,EAAQ,gBAAgB,EAAI,EAA0B,EAAM,WAAW,EAAI,EAA0B,EAAM,gBAAgB,EAAI,EAAa,EAAM,YAAY,EAAI,EAAa,EAAM,iBAAiB,CAAE,CACxZ,IAAM,EAAgB,EAAQ,cACxB,EAAkB,KAAK,IAAI,EAAG,EAAgB,EAAM,WAAW,CAC/D,EAAc,KAAK,IAAI,IAAK,EAAM,WAAa,EAAgB,IAAI,CACnE,EAAmB,EAAkB,EAAgB,IAC3D,OAAO,EAAM,kBAAoB,GAAmB,EAAmB,EAAM,YAAa,EAAY,EAAI,EAAmB,EAAM,iBAAkB,EAAiB,CAExK,MAAO,GAET,SAAS,EAAmB,EAAM,EAAO,CACvC,IAAM,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAK,CAAE,KAAK,IAAI,EAAM,CAAC,CAC1D,OAAO,KAAK,IAAI,EAAO,EAAM,SAAqB,EAAQ,EAE5D,SAAS,EAAuB,EAAO,CACrC,OAAO,EAA0B,EAAM,EAAI,EAAQ,EAErD,SAAS,EAA+B,EAAO,CAC7C,OAAO,IAAU,IAAK,IAAK,EAAuB,EAAM,CAE1D,SAAS,EAAa,EAAO,CAC3B,OAAO,EAA0B,EAAM,EAAI,GAAS,IAEtD,SAAS,EAAa,EAAO,CAI3B,OAHK,EAAkB,EAAM,CAGtB,EAA0B,EAAM,YAAY,EAAI,EAA0B,EAAM,aAAa,EAAI,EAA0B,EAAM,YAAY,EAAI,EAA0B,EAAM,kBAAkB,EAAI,EAA0B,EAAM,yBAAyB,EAAI,EAAoB,EAAM,QAAQ,CAFpS,GAIX,SAAS,EAA0B,EAAO,CACxC,OAAO,OAAO,GAAU,UAAY,OAAO,SAAS,EAAM,EAAI,GAAS,EAEzE,SAAS,EAAoB,EAAO,CAClC,GAAI,IAAU,IAAK,GACjB,MAAO,GAET,GAAI,CAAC,EAAkB,EAAM,CAC3B,MAAO,GAET,IAAI,EACA,EAAY,EAChB,IAAK,GAAM,CAAC,EAAK,KAAW,OAAO,QAAQ,EAAM,CAAE,CACjD,GAAI,IAAW,IAAK,IAAK,CAAC,EAA0B,EAAO,CACzD,MAAO,GAEL,IAAQ,QACV,EAAQ,EAER,GAAa,EAGjB,OAAO,IAAU,IAAK,IAAK,IAAU,EAEvC,SAAS,EAAwB,EAAO,CACtC,OAAO,MAAM,QAAQ,EAAM,EAAI,EAAM,MAClC,GAAW,EAAkB,EAAO,EAAI,EAAO,OAAS,OAAS,OAAO,EAAO,KAAQ,WAAa,EAAO,QAAU,IAAK,IAAK,OAAO,EAAO,OAAU,YAAc,EAAO,KAAO,IAAK,IAAK,OAAO,EAAO,IAAO,YAAc,EAAO,aAAe,IAAK,IAAK,OAAO,EAAO,YAAe,YAAc,EAAO,WAAa,IAAK,IAAK,OAAO,EAAO,UAAa,UACtW,CAEH,SAAS,EAAwB,EAAO,CACtC,OAAO,MAAM,QAAQ,EAAM,EAAI,EAAM,MAClC,GAAa,EAAkB,EAAS,EAAI,OAAO,EAAS,IAAO,UAAY,OAAO,EAAS,MAAS,WAAa,EAAS,SAAW,IAAK,IAAK,OAAO,EAAS,QAAW,YAAc,EAAS,UAAY,IAAK,IAAK,EAAkB,EAAS,QAAQ,EAChQ"}