@datalayer/agent-runtimes 1.5.65 → 1.5.70

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 (296) hide show
  1. package/dist-embed/chunks/{AgentDetails-RIFH8RAg.js → AgentDetails-BriiIXid.js} +1 -1
  2. package/dist-embed/chunks/{AgentDetailsDialog-CK7jVPSc.js → AgentDetailsDialog-Bh3yhb7O.js} +1 -1
  3. package/dist-embed/chunks/{AgentInspector-DwZk4yjT.js → AgentInspector-Dd-G3TvL.js} +1 -1
  4. package/dist-embed/chunks/{AgentInspectorDialog-Ct12Hqc-.js → AgentInspectorDialog-CQEiBqOl.js} +1 -1
  5. package/dist-embed/chunks/{CellSidebarExtension-CbVVhhaO.js → CellSidebarExtension-DbbW8AJP.js} +1 -1
  6. package/dist-embed/chunks/ChatView-LzqHHAEe.js +32 -0
  7. package/dist-embed/chunks/{ContextPie-DLR5REbp.js → ContextPie-I90j658q.js} +1 -1
  8. package/dist-embed/chunks/{DeckComponent-C_ZaO_iF.js → DeckComponent-DAnUabRV.js} +2 -2
  9. package/dist-embed/chunks/{DocumentView-DP-dxfpu.js → DocumentView-BKFitqiB.js} +1 -1
  10. package/dist-embed/chunks/{EphemeralDocument-D3rfKBME.js → EphemeralDocument-BRzYMd8Z.js} +1 -1
  11. package/dist-embed/chunks/{EphemeralNotebook-Dn3ku5jr.js → EphemeralNotebook-COnqhW7Q.js} +1 -1
  12. package/dist-embed/chunks/{ExcalidrawComponent-B7I0SoHM.js → ExcalidrawComponent-VnKcai35.js} +1 -1
  13. package/dist-embed/chunks/{ExcalidrawModal-B2VIt9DT.js → ExcalidrawModal-DrntFjbe.js} +1 -1
  14. package/dist-embed/chunks/{JupyterLexicalExtension-LpJ6Rj9h.js → JupyterLexicalExtension-BBivQZvX.js} +9 -9
  15. package/dist-embed/chunks/{KernelVariables-ZFnygJ4R.js → KernelVariables-CNEfUsyt.js} +1 -1
  16. package/dist-embed/chunks/{LexicalToolRegistry-BRMKFkxC.js → LexicalToolRegistry-B8ccPURu.js} +4 -4
  17. package/dist-embed/chunks/{NotebookToolSurfaces-Dz_cxy8L.js → NotebookToolSurfaces-B8Rmjy_m.js} +1 -1
  18. package/dist-embed/chunks/{NotebookView-DG-pAyOq.js → NotebookView-BDChKuA9.js} +1 -1
  19. package/dist-embed/chunks/{Output-Cnq5i-bK.js → Output-CEoYDjwn.js} +1 -1
  20. package/dist-embed/chunks/{SandboxDetailsDialog-BzGdQmTQ.js → SandboxDetailsDialog-DuavSJSL.js} +1 -1
  21. package/dist-embed/chunks/SchemaForm-C6wDxDrg.js +1 -0
  22. package/dist-embed/chunks/{WidgetVariableView-kRHeKnmD.js → WidgetVariableView-Tm5SSEKf.js} +1 -1
  23. package/dist-embed/chunks/{YouTubePlugin-ChwsOfjj.js → YouTubePlugin-C209681s.js} +1 -1
  24. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-sr3TJAkV.js → abnfDiagram-VCTEODGH-CsKFU4Ej.js} +1 -1
  25. package/dist-embed/chunks/{abnfDiagram-VCTEODGH-Byz1QYm8.js → abnfDiagram-VCTEODGH-m7LJLYga.js} +1 -1
  26. package/dist-embed/chunks/{ar-SA-G6X2FPQ2-D1OmbW2u.js → ar-SA-G6X2FPQ2-Dypu3IcK.js} +1 -1
  27. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-B7rDWQh9.js → architectureDiagram-5GKGNRK7-C22xzf-o.js} +1 -1
  28. package/dist-embed/chunks/{architectureDiagram-5GKGNRK7-DOxpBf54.js → architectureDiagram-5GKGNRK7-iDgRBR0a.js} +1 -1
  29. package/dist-embed/chunks/{az-AZ-76LH7QW2-CmSoFd5x.js → az-AZ-76LH7QW2-D8CzfKb1.js} +1 -1
  30. package/dist-embed/chunks/{bg-BG-XCXSNQG7-D7b2U9I0.js → bg-BG-XCXSNQG7-_NVFEM1_.js} +1 -1
  31. package/dist-embed/chunks/{blockDiagram-868be97b-CKmWpImQ.js → blockDiagram-868be97b-D3BurtSN.js} +1 -1
  32. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-_fDDlpCe.js → blockDiagram-I7D4REHJ-CHicgYkf.js} +1 -1
  33. package/dist-embed/chunks/{blockDiagram-I7D4REHJ-bzZkd0c3.js → blockDiagram-I7D4REHJ-oDRNhSU2.js} +1 -1
  34. package/dist-embed/chunks/{bn-BD-2XOGV67Q-CG3iRJ8B.js → bn-BD-2XOGV67Q-DMgdNi-k.js} +1 -1
  35. package/dist-embed/chunks/{c4Diagram-3f4bdde3-zvlk6Xm2.js → c4Diagram-3f4bdde3-Dmbl9p6m.js} +1 -1
  36. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-NpmtOeoK.js → c4Diagram-7LVT6UL2-CR3iQQ6O.js} +1 -1
  37. package/dist-embed/chunks/{c4Diagram-7LVT6UL2-vHp7kFMG.js → c4Diagram-7LVT6UL2-auJZQjpw.js} +1 -1
  38. package/dist-embed/chunks/{ca-ES-6MX7JW3Y-BW4zf4cd.js → ca-ES-6MX7JW3Y-DpOQhzr4.js} +1 -1
  39. package/dist-embed/chunks/{celltoolbartracker-DDVXLR_l.js → celltoolbartracker-DCR86wxV.js} +1 -1
  40. package/dist-embed/chunks/{chunk-2Q5K7J3B-Blqxrfai.js → chunk-2Q5K7J3B-DpFWUcsT.js} +1 -1
  41. package/dist-embed/chunks/{chunk-2Q5K7J3B-D26LTlFj.js → chunk-2Q5K7J3B-H_DA_jTG.js} +1 -1
  42. package/dist-embed/chunks/{chunk-5VM5RSS4-CdbSD_M8.js → chunk-5VM5RSS4-BhWUyelG.js} +1 -1
  43. package/dist-embed/chunks/{chunk-5VM5RSS4-BcO1XpWr.js → chunk-5VM5RSS4-CaowF8Al.js} +1 -1
  44. package/dist-embed/chunks/{chunk-F27PBJKO-BQ-ZIw-1.js → chunk-F27PBJKO-B9wgW70d.js} +1 -1
  45. package/dist-embed/chunks/{chunk-F27PBJKO-BRe2RwsD.js → chunk-F27PBJKO-D7PuEggc.js} +1 -1
  46. package/dist-embed/chunks/{chunk-IMKFNOWR-D-RO-dCd.js → chunk-IMKFNOWR-DhXkXQPV.js} +1 -1
  47. package/dist-embed/chunks/{chunk-IMKFNOWR-CLFrksv5.js → chunk-IMKFNOWR-jZNuNkCa.js} +1 -1
  48. package/dist-embed/chunks/{chunk-JWPE2WC7-wyMu098x.js → chunk-JWPE2WC7-BIShIUcJ.js} +1 -1
  49. package/dist-embed/chunks/{chunk-JWPE2WC7-DbtWvNSt.js → chunk-JWPE2WC7-DaBG37yC.js} +1 -1
  50. package/dist-embed/chunks/{chunk-POPQ4Y6H-OgpU0qcq.js → chunk-POPQ4Y6H-DG5Q2OKT.js} +1 -1
  51. package/dist-embed/chunks/{chunk-POPQ4Y6H-lwXXWwpD.js → chunk-POPQ4Y6H-WjTzJISs.js} +1 -1
  52. package/dist-embed/chunks/{chunk-SVP7TREG-CtOO_gz8.js → chunk-SVP7TREG-ERRaAh-x.js} +1 -1
  53. package/dist-embed/chunks/{chunk-SVP7TREG-C1pZJEUL.js → chunk-SVP7TREG-bq0J6tH_.js} +1 -1
  54. package/dist-embed/chunks/{chunk-TICWLB2K-BUeW_P5i.js → chunk-TICWLB2K-B91fA6Jd.js} +1 -1
  55. package/dist-embed/chunks/{chunk-TICWLB2K-B2id4fS-.js → chunk-TICWLB2K-BV_9f6ak.js} +1 -1
  56. package/dist-embed/chunks/{chunk-XXDRQBXY-6emV99Se.js → chunk-XXDRQBXY-BAy0lBJk.js} +1 -1
  57. package/dist-embed/chunks/{chunk-XXDRQBXY-DASCZDLb.js → chunk-XXDRQBXY-fV8doVJJ.js} +1 -1
  58. package/dist-embed/chunks/{classDiagram-ZZMXUADV-BUcYJSYu.js → classDiagram-ZZMXUADV-B0pbDswj.js} +1 -1
  59. package/dist-embed/chunks/{classDiagram-ZZMXUADV-DXK_VS6x.js → classDiagram-ZZMXUADV-CGdcKCOI.js} +1 -1
  60. package/dist-embed/chunks/{classDiagram-f62afe4f-D_XtspOB.js → classDiagram-f62afe4f-tD890DEl.js} +1 -1
  61. package/dist-embed/chunks/{classDiagram-v2-604399ef-DmVGURP4.js → classDiagram-v2-604399ef-DReIuoeI.js} +1 -1
  62. package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-BUcYJSYu.js → classDiagram-v2-VYDZK3BY-B0pbDswj.js} +1 -1
  63. package/dist-embed/chunks/{classDiagram-v2-VYDZK3BY-DXK_VS6x.js → classDiagram-v2-VYDZK3BY-CGdcKCOI.js} +1 -1
  64. package/dist-embed/chunks/{code-block-IT6T5CEO-CLFy43wi.js → code-block-IT6T5CEO-DD7hwbHA.js} +1 -1
  65. package/dist-embed/chunks/{component-BABP_IeE.js → component-BWDcVpKW.js} +1 -1
  66. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-DkllT3uc.js → cose-bilkent-JH36ORCC-BS_pJML-.js} +1 -1
  67. package/dist-embed/chunks/{cose-bilkent-JH36ORCC-zloY56Dd.js → cose-bilkent-JH36ORCC-BsK2pWDL.js} +1 -1
  68. package/dist-embed/chunks/{createText-aed3d8b3-B_AmUgWn.js → createText-aed3d8b3-1eVJ8jxH.js} +2 -2
  69. package/dist-embed/chunks/{cs-CZ-2BRQDIVT-DzWWfN4P.js → cs-CZ-2BRQDIVT-Fr-SpqHD.js} +1 -1
  70. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-CT11o-tV.js → cynefinDiagram-5FMLGOSQ-AxJwZ7KT.js} +1 -1
  71. package/dist-embed/chunks/{cynefinDiagram-5FMLGOSQ-Benlx8nr.js → cynefinDiagram-5FMLGOSQ-vmheD_S2.js} +1 -1
  72. package/dist-embed/chunks/{da-DK-5WZEPLOC-CaeirLFF.js → da-DK-5WZEPLOC-DO_sAXvt.js} +1 -1
  73. package/dist-embed/chunks/{dagre-GXQ25YYZ-B2PPWFKB.js → dagre-GXQ25YYZ-B8Ip03td.js} +1 -1
  74. package/dist-embed/chunks/{dagre-GXQ25YYZ-qys4evHY.js → dagre-GXQ25YYZ-BgrGEY09.js} +1 -1
  75. package/dist-embed/chunks/{de-DE-XR44H4JA-DBkebtzo.js → de-DE-XR44H4JA-4JnXB_iM.js} +1 -1
  76. package/dist-embed/chunks/{diagram-S7CK7UJ4-C1EHbNes.js → diagram-S7CK7UJ4-BxRBCYVP.js} +1 -1
  77. package/dist-embed/chunks/{diagram-S7CK7UJ4-CBkf-BrM.js → diagram-S7CK7UJ4-hQvZziAN.js} +1 -1
  78. package/dist-embed/chunks/{diagram-UQ7AKVKN-CKsxaZCe.js → diagram-UQ7AKVKN-BFkOO3Wu.js} +1 -1
  79. package/dist-embed/chunks/{diagram-UQ7AKVKN-C9zuKZ5Y.js → diagram-UQ7AKVKN-BvgP6_rf.js} +1 -1
  80. package/dist-embed/chunks/{diagram-VSXAHHWV-Cd8pBAf-.js → diagram-VSXAHHWV-Cy8iWh4H.js} +1 -1
  81. package/dist-embed/chunks/{diagram-VSXAHHWV-Dd_PlC0S.js → diagram-VSXAHHWV-WVuzjdxU.js} +1 -1
  82. package/dist-embed/chunks/{diagram-VX7I27RA-DZTLEsKe.js → diagram-VX7I27RA-CCx8R8FK.js} +1 -1
  83. package/dist-embed/chunks/{diagram-VX7I27RA-D5qf5Kw-.js → diagram-VX7I27RA-_LUOsaBb.js} +1 -1
  84. package/dist-embed/chunks/{diagram-Z3DM3KII-DlsBShb0.js → diagram-Z3DM3KII-CY856Sry.js} +1 -1
  85. package/dist-embed/chunks/{diagram-Z3DM3KII-B2zosfsY.js → diagram-Z3DM3KII-Dqcrl8-1.js} +1 -1
  86. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-VhBXkHc8.js → ebnfDiagram-PWID7BFC-DC-Zam6d.js} +1 -1
  87. package/dist-embed/chunks/{ebnfDiagram-PWID7BFC-sUXnKXhD.js → ebnfDiagram-PWID7BFC-kqD9RLAA.js} +1 -1
  88. package/dist-embed/chunks/{edges-b2856ca0-cYsFYCgh.js → edges-b2856ca0-B3ybuHDU.js} +1 -1
  89. package/dist-embed/chunks/{el-GR-BZB4AONW-DkmsSwGL.js → el-GR-BZB4AONW-MydAlwHl.js} +1 -1
  90. package/dist-embed/chunks/{erDiagram-5d81789a-DHzqp69u.js → erDiagram-5d81789a-HZ-VLc2f.js} +1 -1
  91. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-DPzcAUZq.js → erDiagram-RLTQ6QDP-CNO4pVhU.js} +1 -1
  92. package/dist-embed/chunks/{erDiagram-RLTQ6QDP-BRf7HEXF.js → erDiagram-RLTQ6QDP-zwXEFcAp.js} +1 -1
  93. package/dist-embed/chunks/{es-ES-U4NZUMDT-Dvnvh6dW.js → es-ES-U4NZUMDT-rQmnr_uu.js} +1 -1
  94. package/dist-embed/chunks/{eu-ES-A7QVB2H4-DYX6hpyz.js → eu-ES-A7QVB2H4-j5Hf8ngk.js} +1 -1
  95. package/dist-embed/chunks/{fa-IR-HGAKTJCU-Dmlm1ZjK.js → fa-IR-HGAKTJCU-DMJRRSBp.js} +1 -1
  96. package/dist-embed/chunks/{fi-FI-Z5N7JZ37-2ov9-9H3.js → fi-FI-Z5N7JZ37-BFLC0BFd.js} +1 -1
  97. package/dist-embed/chunks/{flowDb-185abca5-vnPYmNxZ.js → flowDb-185abca5-7Nn2obHG.js} +1 -1
  98. package/dist-embed/chunks/{flowDiagram-1629c991-D_P7IhnT.js → flowDiagram-1629c991-CnvM_psw.js} +1 -1
  99. package/dist-embed/chunks/{flowDiagram-HODETNUW-BUuZtbKx.js → flowDiagram-HODETNUW-BrbR1EkW.js} +1 -1
  100. package/dist-embed/chunks/{flowDiagram-HODETNUW-Dqms2kHK.js → flowDiagram-HODETNUW-Bsl5oOFb.js} +1 -1
  101. package/dist-embed/chunks/{flowDiagram-v2-1d953310-jyYNkbVD.js → flowDiagram-v2-1d953310-TkF25UVC.js} +1 -1
  102. package/dist-embed/chunks/{flowchart-elk-definition-6df44142-CkUTQpED.js → flowchart-elk-definition-6df44142-CwiGfEuJ.js} +1 -1
  103. package/dist-embed/chunks/{fr-FR-RHASNOE6-BUlHGdL2.js → fr-FR-RHASNOE6-CxjhSJC1.js} +1 -1
  104. package/dist-embed/chunks/{ganttDiagram-3b0b3873-CDk8PUcC.js → ganttDiagram-3b0b3873-DeouFDZE.js} +1 -1
  105. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-D4fzILsk.js → ganttDiagram-EL5Y4UJY-BeK3rGHM.js} +1 -1
  106. package/dist-embed/chunks/{ganttDiagram-EL5Y4UJY-Tsk8dNyJ.js → ganttDiagram-EL5Y4UJY-DfJDZVnm.js} +1 -1
  107. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-DSJR8KGU.js → gitGraphDiagram-WWUBYQGX-BujqTwbf.js} +1 -1
  108. package/dist-embed/chunks/{gitGraphDiagram-WWUBYQGX-XOpfU7hY.js → gitGraphDiagram-WWUBYQGX-DkYi8eWr.js} +1 -1
  109. package/dist-embed/chunks/{gitGraphDiagram-f01e8bc2-C7QWh6IZ.js → gitGraphDiagram-f01e8bc2-mCCRVzIs.js} +1 -1
  110. package/dist-embed/chunks/{gl-ES-HMX3MZ6V-T3hKsmlm.js → gl-ES-HMX3MZ6V-BuuMpTaX.js} +1 -1
  111. package/dist-embed/chunks/{he-IL-6SHJWFNN-DoePgaFj.js → he-IL-6SHJWFNN-Cv3Nrcgu.js} +1 -1
  112. package/dist-embed/chunks/{hi-IN-IWLTKZ5I-B_E7TPlk.js → hi-IN-IWLTKZ5I-Sddst60F.js} +1 -1
  113. package/dist-embed/chunks/{hu-HU-A5ZG7DT2-Bu8X3BrR.js → hu-HU-A5ZG7DT2-ehrXVpD0.js} +1 -1
  114. package/dist-embed/chunks/{id-ID-SAP4L64H-jOs7pgj2.js → id-ID-SAP4L64H-Gfb1UYxZ.js} +1 -1
  115. package/dist-embed/chunks/{index-JF61_zqs.js → index-5NOGMVjz.js} +1 -1
  116. package/dist-embed/chunks/{index-BzgczmKp.js → index-6zxVHKca.js} +10 -10
  117. package/dist-embed/chunks/{index-9bae90f3-BywpAnlj.js → index-9bae90f3-CzUk5Hhq.js} +1 -1
  118. package/dist-embed/chunks/{index-DvHqo_Qj.js → index-AHAhJxOc.js} +1 -1
  119. package/dist-embed/chunks/{index-7hNcqUR-.js → index-B9Ya6z2n.js} +1 -1
  120. package/dist-embed/chunks/{index-BwyZ8O-M.js → index-BOEhatkt.js} +1 -1
  121. package/dist-embed/chunks/{index-BYo3uv0g.js → index-BOGJMsUN.js} +2 -2
  122. package/dist-embed/chunks/{index-Bmo-OFNb.js → index-BaBNw6X5.js} +4 -4
  123. package/dist-embed/chunks/{index-BR58wzgU.js → index-BfvZMC2B.js} +1 -1
  124. package/dist-embed/chunks/{index-DnqWNX5L.js → index-BiuABva5.js} +1 -1
  125. package/dist-embed/chunks/{index-0m4vhMAR.js → index-BjfpYq_l.js} +1 -1
  126. package/dist-embed/chunks/{index-BI_0cBab.js → index-BuXVVl_h.js} +7 -7
  127. package/dist-embed/chunks/{index-fBSCurWE.js → index-By5Ku2wm.js} +4 -4
  128. package/dist-embed/chunks/{index-Bw1BRX9C.js → index-CNpJ8Y2y.js} +1 -1
  129. package/dist-embed/chunks/{index-zrM_sbHt.js → index-Cw1r0WFc.js} +1 -1
  130. package/dist-embed/chunks/{index-CS3mm6qN.js → index-D8x0MQWQ.js} +1 -1
  131. package/dist-embed/chunks/{index-BqpOM6Mx.js → index-DDnf06e_.js} +1 -1
  132. package/dist-embed/chunks/{index-B3fpdUTu.js → index-DGefzKhT.js} +1 -1
  133. package/dist-embed/chunks/{index-CgCcVxV_.js → index-DN6Cori6.js} +1 -1
  134. package/dist-embed/chunks/{index-_z7rhr9l.js → index-DQ-v6JVz.js} +4 -4
  135. package/dist-embed/chunks/{index-C2JsK59r.js → index-DTYZzbES.js} +1 -1
  136. package/dist-embed/chunks/{index-MfJ2dN-o.js → index-DWkIO3YS.js} +1 -1
  137. package/dist-embed/chunks/{index-CL2J1VY_.js → index-DZwyICkp.js} +1 -1
  138. package/dist-embed/chunks/{index-CoVJiT-h.js → index-D_vehxcD.js} +1 -1
  139. package/dist-embed/chunks/{index-wqOJuJys.js → index-DiTcTB7Y.js} +1 -1
  140. package/dist-embed/chunks/{index-COPak822.js → index-DmpLE1d4.js} +1 -1
  141. package/dist-embed/chunks/{index-Ca5wn1F-.js → index-Do4nOAaR.js} +1 -1
  142. package/dist-embed/chunks/{index-DBRbrQr1.js → index-DobaF_Ee.js} +1 -1
  143. package/dist-embed/chunks/{index-BfuxhQsr.js → index-DvwQdrde.js} +1 -1
  144. package/dist-embed/chunks/{index-KC9furSU.js → index-DzMYyq8T.js} +1 -1
  145. package/dist-embed/chunks/{index-Cz0vwY93.js → index-QHmZQlKN.js} +6 -6
  146. package/dist-embed/chunks/{index-C00mEIpi.js → index-hxIHgkzg.js} +1 -1
  147. package/dist-embed/chunks/{index-B27olYsx.js → index-nMwnYxTd.js} +1 -1
  148. package/dist-embed/chunks/{index-NvC9D0Mh.js → index-umwkqggg.js} +1 -1
  149. package/dist-embed/chunks/{index-3JfFVSno.js → index-yMppJWrQ.js} +1 -1
  150. package/dist-embed/chunks/{index.esm-BbIi4n-Y.js → index.esm-CC457Cyg.js} +1 -1
  151. package/dist-embed/chunks/{index.esm-ePira_es.js → index.esm-DFDbLGof.js} +1 -1
  152. package/dist-embed/chunks/{infoDiagram-27XIBGKW-CvSw0Uqm.js → infoDiagram-27XIBGKW-C18Zz25F.js} +1 -1
  153. package/dist-embed/chunks/{infoDiagram-27XIBGKW-BagqSEKB.js → infoDiagram-27XIBGKW-DiC5_yjB.js} +1 -1
  154. package/dist-embed/chunks/{infoDiagram-a29d40f1-CY6P-RB2.js → infoDiagram-a29d40f1-DRVyx4Bf.js} +1 -1
  155. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-CJjl4-N0.js → ishikawaDiagram-5VMMS53U-3WGbru46.js} +1 -1
  156. package/dist-embed/chunks/{ishikawaDiagram-5VMMS53U-DQfqd5pn.js → ishikawaDiagram-5VMMS53U-DrEzfSK9.js} +1 -1
  157. package/dist-embed/chunks/{it-IT-JPQ66NNP-CrGtxCjf.js → it-IT-JPQ66NNP-BehLHkar.js} +1 -1
  158. package/dist-embed/chunks/{ja-JP-DBVTYXUO-MhHoMhnM.js → ja-JP-DBVTYXUO-BZvqIigI.js} +1 -1
  159. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-B186toLf.js → journeyDiagram-3NMN7TZE-BZWmkUfk.js} +1 -1
  160. package/dist-embed/chunks/{journeyDiagram-3NMN7TZE-fMuL5yIV.js → journeyDiagram-3NMN7TZE-DpWKIFIN.js} +1 -1
  161. package/dist-embed/chunks/{journeyDiagram-95396277-Bt2VFr_f.js → journeyDiagram-95396277-D_QLiVq4.js} +1 -1
  162. package/dist-embed/chunks/{kaa-6HZHGXH3-otexWzw0.js → kaa-6HZHGXH3-DgAIF6rN.js} +1 -1
  163. package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-Bk_pPM_n.js → kab-KAB-ZGHBKWFO-DW4thPSJ.js} +1 -1
  164. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-tkyZOsyz.js → kanban-definition-UXKFOSKX-B84ZaZEy.js} +1 -1
  165. package/dist-embed/chunks/{kanban-definition-UXKFOSKX-DyX3lLGq.js → kanban-definition-UXKFOSKX-DxbTprYr.js} +1 -1
  166. package/dist-embed/chunks/{kk-KZ-P5N5QNE5-DuPx0Ivn.js → kk-KZ-P5N5QNE5-CCy_nSJ7.js} +1 -1
  167. package/dist-embed/chunks/{km-KH-HSX4SM5Z-DfW3Tv6Q.js → km-KH-HSX4SM5Z-kpXyoxjS.js} +1 -1
  168. package/dist-embed/chunks/{ko-KR-MTYHY66A-CWeM03UD.js → ko-KR-MTYHY66A-CFm6WtQG.js} +1 -1
  169. package/dist-embed/chunks/{ku-TR-6OUDTVRD-BpZVGVBG.js → ku-TR-6OUDTVRD-CKF85mOv.js} +1 -1
  170. package/dist-embed/chunks/{layout-i1FLEqsi.js → layout-DYytgC9r.js} +1 -1
  171. package/dist-embed/chunks/{layout-P_H-0ax9.js → layout-Dx5Hzkor.js} +1 -1
  172. package/dist-embed/chunks/{lexicalHooks-BjTCfdUi.js → lexicalHooks-DbTGOMyq.js} +1 -1
  173. package/dist-embed/chunks/{lt-LT-XHIRWOB4-LavcVuZR.js → lt-LT-XHIRWOB4-CO9Bo5qJ.js} +1 -1
  174. package/dist-embed/chunks/{lv-LV-5QDEKY6T-DWoheFP4.js → lv-LV-5QDEKY6T-CvZszc5p.js} +1 -1
  175. package/dist-embed/chunks/{mermaid.core-Cltl6__q.js → mermaid.core-D0955PCw.js} +5 -5
  176. package/dist-embed/chunks/{mermaid.core-Bd5egiDP.js → mermaid.core-D98kc0OO.js} +3 -3
  177. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-BmuUH3a3.js → mindmap-definition-YA3MSWOX-D86IPkt3.js} +1 -1
  178. package/dist-embed/chunks/{mindmap-definition-YA3MSWOX-Di0Xac42.js → mindmap-definition-YA3MSWOX-_1SBIPav.js} +1 -1
  179. package/dist-embed/chunks/{mindmap-definition-e4c1d938-D0Ep5LxZ.js → mindmap-definition-e4c1d938-UbbfpF-a.js} +1 -1
  180. package/dist-embed/chunks/{mr-IN-CRQNXWMA-G-1tBL4-.js → mr-IN-CRQNXWMA-Cio_dB9M.js} +1 -1
  181. package/dist-embed/chunks/{my-MM-5M5IBNSE-DpmzmQ2W.js → my-MM-5M5IBNSE-Z0RQ5Vbz.js} +1 -1
  182. package/dist-embed/chunks/{nb-NO-T6EIAALU-DFU_SPCx.js → nb-NO-T6EIAALU-BEQ0YP9J.js} +1 -1
  183. package/dist-embed/chunks/{nl-NL-IS3SIHDZ-Dlz_okxD.js → nl-NL-IS3SIHDZ-YtkJnS_J.js} +1 -1
  184. package/dist-embed/chunks/{nn-NO-6E72VCQL-D9E-BpHw.js → nn-NO-6E72VCQL-C1j2s3qO.js} +1 -1
  185. package/dist-embed/chunks/{oc-FR-POXYY2M6-CVonm6mx.js → oc-FR-POXYY2M6-CinnjccW.js} +1 -1
  186. package/dist-embed/chunks/{pa-IN-N4M65BXN-a5ExTB9v.js → pa-IN-N4M65BXN-c_6OtC6L.js} +1 -1
  187. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-BYznG-ZK.js → pegDiagram-XKGWAZYB-BBVcHZ8T.js} +1 -1
  188. package/dist-embed/chunks/{pegDiagram-XKGWAZYB-Cptotyez.js → pegDiagram-XKGWAZYB-BJAdJVqh.js} +1 -1
  189. package/dist-embed/chunks/{percentages-BXMCSKIN-C2-svgs_.js → percentages-BXMCSKIN-VqMxh8LK.js} +5 -5
  190. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-BYEkkWvq.js → pieDiagram-E7YTZNPT-C55wHgO0.js} +1 -1
  191. package/dist-embed/chunks/{pieDiagram-E7YTZNPT-D51avc4V.js → pieDiagram-E7YTZNPT-EvMxJb2S.js} +1 -1
  192. package/dist-embed/chunks/{pieDiagram-c941bede-Bcau8_Gm.js → pieDiagram-c941bede-DTmViAsB.js} +1 -1
  193. package/dist-embed/chunks/{pl-PL-T2D74RX3-BaHKKcOg.js → pl-PL-T2D74RX3-Cn_9xZgM.js} +1 -1
  194. package/dist-embed/chunks/{pt-BR-5N22H2LF-DZEHszX8.js → pt-BR-5N22H2LF-Da6r-Pp1.js} +1 -1
  195. package/dist-embed/chunks/{pt-PT-UZXXM6DQ-BbJKz8vE.js → pt-PT-UZXXM6DQ-D6lhcuX9.js} +1 -1
  196. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-BfWK8wgJ.js → quadrantDiagram-AXDQQJYC-BCeMrGXB.js} +1 -1
  197. package/dist-embed/chunks/{quadrantDiagram-AXDQQJYC-CcMIo23m.js → quadrantDiagram-AXDQQJYC-rFaTvNlk.js} +1 -1
  198. package/dist-embed/chunks/{quadrantDiagram-cf8b8fe0-Db1y7cGB.js → quadrantDiagram-cf8b8fe0-BZAbhmbg.js} +1 -1
  199. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-BzqhRF47.js → railroadDiagram-O6MQD6OU-BAXhb26s.js} +1 -1
  200. package/dist-embed/chunks/{railroadDiagram-O6MQD6OU-DCRFdpxj.js → railroadDiagram-O6MQD6OU-bR7xXZGS.js} +1 -1
  201. package/dist-embed/chunks/{renderer-CM-Z_1Uj.js → renderer-DfML3j-s.js} +1 -1
  202. package/dist-embed/chunks/{requirementDiagram-53bda41b-Dj564NwS.js → requirementDiagram-53bda41b-DNqx3JRF.js} +1 -1
  203. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-dma0a-bN.js → requirementDiagram-BXWQKSXE-B0SL6Gqb.js} +1 -1
  204. package/dist-embed/chunks/{requirementDiagram-BXWQKSXE-CIFZt_cP.js → requirementDiagram-BXWQKSXE-DHLQ_9Lw.js} +1 -1
  205. package/dist-embed/chunks/{ro-RO-JPDTUUEW-szdAFgjr.js → ro-RO-JPDTUUEW-BFss9e8X.js} +1 -1
  206. package/dist-embed/chunks/{ru-RU-B4JR7IUQ-CbdtKkxy.js → ru-RU-B4JR7IUQ-DIruW2gS.js} +1 -1
  207. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-8ur8k-HP.js → sankeyDiagram-P5KCCOFB-CktuQIU1.js} +1 -1
  208. package/dist-embed/chunks/{sankeyDiagram-P5KCCOFB-DRxZFl9I.js → sankeyDiagram-P5KCCOFB-Nk71fRsK.js} +1 -1
  209. package/dist-embed/chunks/{sankeyDiagram-c3ef121a-Da81kIDr.js → sankeyDiagram-c3ef121a-4-5C_fXA.js} +1 -1
  210. package/dist-embed/chunks/{sequenceDiagram-82a5b84f-DM8BTW5K.js → sequenceDiagram-82a5b84f-DedJ5qnD.js} +1 -1
  211. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-BH0Y4uG3.js → sequenceDiagram-WJ2MYXX4-BBGHED3s.js} +1 -1
  212. package/dist-embed/chunks/{sequenceDiagram-WJ2MYXX4-CNwXBdZi.js → sequenceDiagram-WJ2MYXX4-Dm3QM01Z.js} +1 -1
  213. package/dist-embed/chunks/{sessions-DlvFLGbP.js → sessions-lT1zQJEG.js} +2 -2
  214. package/dist-embed/chunks/{si-LK-N5RQ5JYF-DfCWfEQf.js → si-LK-N5RQ5JYF-Dom-aTTE.js} +1 -1
  215. package/dist-embed/chunks/{sizeCapture-INFHLROL-D-nX-7Hv.js → sizeCapture-INFHLROL-BNuVN7vX.js} +1 -1
  216. package/dist-embed/chunks/{sizeCapture-INFHLROL-Tw2tvJ1W.js → sizeCapture-INFHLROL-BW7unDBA.js} +1 -1
  217. package/dist-embed/chunks/{sk-SK-C5VTKIMK-CTeAwA1b.js → sk-SK-C5VTKIMK-CLRU9TNq.js} +1 -1
  218. package/dist-embed/chunks/{sl-SI-NN7IZMDC-eFw2lQcd.js → sl-SI-NN7IZMDC-BKLCNVXA.js} +1 -1
  219. package/dist-embed/chunks/{stateDiagram-43e79a5f-H8oVn7EH.js → stateDiagram-43e79a5f-C-TVhCrM.js} +1 -1
  220. package/dist-embed/chunks/{stateDiagram-D77RDMKH-DS-byRyy.js → stateDiagram-D77RDMKH-mLSMGpPQ.js} +1 -1
  221. package/dist-embed/chunks/{stateDiagram-D77RDMKH-CGEuq_3Z.js → stateDiagram-D77RDMKH-tqnmMQUf.js} +1 -1
  222. package/dist-embed/chunks/{stateDiagram-v2-2041ed4f-D7zd-PeH.js → stateDiagram-v2-2041ed4f-TVcKzajK.js} +1 -1
  223. package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-Bbn7CxXx.js → stateDiagram-v2-MP3YSRHH-C3MNIg5B.js} +1 -1
  224. package/dist-embed/chunks/{stateDiagram-v2-MP3YSRHH-CllCmLuo.js → stateDiagram-v2-MP3YSRHH-C6TftAzE.js} +1 -1
  225. package/dist-embed/chunks/{styles-455b33cd-CYP0pxwM.js → styles-455b33cd-CIILXOoF.js} +1 -1
  226. package/dist-embed/chunks/{styles-f932cba9-dXHjU5Mc.js → styles-f932cba9-CVBMDsh6.js} +1 -1
  227. package/dist-embed/chunks/{styles-fcc2142b-CrgFTq7b.js → styles-fcc2142b-CTOmFTKK.js} +1 -1
  228. package/dist-embed/chunks/{subset-shared.chunk-BCNcfBdp.js → subset-shared.chunk-zIH7OLsP.js} +1 -1
  229. package/dist-embed/chunks/{subset-worker.chunk-nY71AE9b.js → subset-worker.chunk-b9j7PKPe.js} +1 -1
  230. package/dist-embed/chunks/{sv-SE-XGPEYMSR-B3BAd7ic.js → sv-SE-XGPEYMSR-D0UV0HV7.js} +1 -1
  231. package/dist-embed/chunks/{svgDrawCommon-148a3cd9-DY-6e2w2.js → svgDrawCommon-148a3cd9-BCgvh5nL.js} +1 -1
  232. package/dist-embed/chunks/{swimlanes-42K2YHIH-CpFqKR23.js → swimlanes-42K2YHIH-BQTDK2Ta.js} +1 -1
  233. package/dist-embed/chunks/{swimlanes-42K2YHIH-BoshoQYI.js → swimlanes-42K2YHIH-DHcV40DB.js} +1 -1
  234. package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-BNalU-se.js → swimlanesDiagram-VR7AAH4N-BV8Vb5g2.js} +1 -1
  235. package/dist-embed/chunks/{swimlanesDiagram-VR7AAH4N-CUEoZUeR.js → swimlanesDiagram-VR7AAH4N-CQ7d-sbG.js} +1 -1
  236. package/dist-embed/chunks/{ta-IN-2NMHFXQM-Ch7Coorh.js → ta-IN-2NMHFXQM-C-EJ3jDE.js} +1 -1
  237. package/dist-embed/chunks/{th-TH-HPSO5L25-gmc7tguq.js → th-TH-HPSO5L25-CfQh62Qa.js} +1 -1
  238. package/dist-embed/chunks/{timeline-definition-24CTP7MA-BD_Hd7OM.js → timeline-definition-24CTP7MA-CKtubk73.js} +1 -1
  239. package/dist-embed/chunks/{timeline-definition-24CTP7MA-CLQC5Soj.js → timeline-definition-24CTP7MA-DJcFE1jT.js} +1 -1
  240. package/dist-embed/chunks/{timeline-definition-7545f45a-CBNPBc2S.js → timeline-definition-7545f45a-CLycxRtq.js} +1 -1
  241. package/dist-embed/chunks/{tr-TR-DEFEU3FU-DoKmjhCn.js → tr-TR-DEFEU3FU-Lz7Ka2Zr.js} +1 -1
  242. package/dist-embed/chunks/{uk-UA-QMV73CPH-uzMCDuv6.js → uk-UA-QMV73CPH-DU0hsGUJ.js} +1 -1
  243. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-Clhmiu8L.js → vennDiagram-4TSXK5OY-BMmQ-DIV.js} +1 -1
  244. package/dist-embed/chunks/{vennDiagram-4TSXK5OY-BxbIHKUM.js → vennDiagram-4TSXK5OY-Bq0xMhnH.js} +1 -1
  245. package/dist-embed/chunks/{vi-VN-M7AON7JQ-UC9RyOt8.js → vi-VN-M7AON7JQ-CDvS0SiL.js} +1 -1
  246. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-HuiHAtr-.js → wardleyDiagram-VM6X3IG4-C1VKw6YX.js} +1 -1
  247. package/dist-embed/chunks/{wardleyDiagram-VM6X3IG4-un-PuqHe.js → wardleyDiagram-VM6X3IG4-DL5LgQWr.js} +1 -1
  248. package/dist-embed/chunks/{xychartDiagram-3f383b91-3k3NdPbU.js → xychartDiagram-3f383b91-B-BTwetN.js} +1 -1
  249. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-CIDOTVoZ.js → xychartDiagram-S5SC5T6Z-BQHFHk-x.js} +1 -1
  250. package/dist-embed/chunks/{xychartDiagram-S5SC5T6Z-CvZAV0KM.js → xychartDiagram-S5SC5T6Z-BXkM4beH.js} +1 -1
  251. package/dist-embed/chunks/{zh-CN-LNUGB5OW-DFA0PCzk.js → zh-CN-LNUGB5OW-CWE-bF0d.js} +1 -1
  252. package/dist-embed/chunks/{zh-HK-E62DVLB3-WzEwoBkd.js → zh-HK-E62DVLB3-pEfL2bds.js} +1 -1
  253. package/dist-embed/chunks/{zh-TW-RAJ6MFWO-B7w1h39x.js → zh-TW-RAJ6MFWO-Cp6UFUuD.js} +1 -1
  254. package/dist-embed/datalayer-app-main.js +107 -106
  255. package/lib/apps/apps/records.d.ts +21 -4
  256. package/lib/apps/apps/records.js +8 -6
  257. package/lib/apps/apps/threads.d.ts +11 -1
  258. package/lib/apps/apps/threads.js +17 -0
  259. package/lib/apps/core/index.d.ts +71 -0
  260. package/lib/apps/core/index.js +22 -0
  261. package/lib/apps/plugins/app-activity/AppActivity.js +10 -4
  262. package/lib/apps/plugins/chat/ChatView.js +123 -6
  263. package/lib/apps/plugins/chat/SessionActionsMenu.d.ts +40 -0
  264. package/lib/apps/plugins/chat/SessionActionsMenu.js +73 -0
  265. package/lib/apps/plugins/chat/SessionChooseDialog.d.ts +22 -0
  266. package/lib/apps/plugins/chat/SessionChooseDialog.js +39 -0
  267. package/lib/apps/plugins/chat/index.js +8 -1
  268. package/lib/apps/plugins/chat/sessionActions.d.ts +65 -0
  269. package/lib/apps/plugins/chat/sessionActions.js +184 -0
  270. package/lib/chat/Chat.d.ts +42 -2
  271. package/lib/chat/Chat.js +148 -2
  272. package/lib/chat/base/ChatBase.js +33 -6
  273. package/lib/chat/index.d.ts +1 -1
  274. package/lib/chat/messages/ChatMessageList.d.ts +3 -1
  275. package/lib/chat/messages/ChatMessageList.js +21 -2
  276. package/lib/portable/activity.d.ts +91 -2
  277. package/lib/portable/activity.js +143 -4
  278. package/lib/portable/fixtures.d.ts +1 -1
  279. package/lib/portable/fixtures.js +17 -7
  280. package/lib/portable/index.d.ts +1 -1
  281. package/lib/portable/index.js +3 -2
  282. package/lib/portable/sessions.d.ts +25 -1
  283. package/lib/portable/sessions.js +62 -4
  284. package/lib/specs/harnesses.js +96 -0
  285. package/lib/specs/index.d.ts +1 -0
  286. package/lib/specs/index.js +1 -0
  287. package/lib/specs/sessionFiles.d.ts +123 -0
  288. package/lib/specs/sessionFiles.js +578 -0
  289. package/lib/types/agentspecs.d.ts +26 -0
  290. package/lib/types/chat.d.ts +38 -0
  291. package/package.json +1 -1
  292. package/scripts/codegen/generate_agents.py +1 -0
  293. package/scripts/codegen/generate_harnesses.py +70 -0
  294. package/scripts/codegen/generate_session_files.py +296 -0
  295. package/dist-embed/chunks/ChatView-B_EEvtKi.js +0 -32
  296. package/dist-embed/chunks/SchemaForm-Dg9uk6m3.js +0 -1
@@ -65,7 +65,7 @@ export { ToolCallDisplay, type ToolCallDisplayProps } from './tools';
65
65
  export { ICON_PACKAGES, SpecMark, hasMark, marksOfFrontendTool, marksOfMcpServer, marksOfRuntimeTool, marksOfSkill, marksOfToolCall, parseIconRef, useMarkIcon, type IconPackage, type IconRef, type MarkIcon, type MarkedMcpServer, type Marks, type SpecMarkProps, type ToolKind, type ToolMarks, } from './marks';
66
66
  export { ToolApprovalDialog, useToolApprovalDialog, type ToolApprovalDialogProps, } from './tools/ToolApprovalDialog';
67
67
  export { ToolApprovalBanner, type ToolApprovalBannerProps, type PendingApproval, } from './tools/ToolApprovalBanner';
68
- export { Chat, type ChatProps } from './Chat';
68
+ export { Chat, type ChatProps, type ChatSessionActions } from './Chat';
69
69
  export { ChatFloating, type ChatFloatingProps } from './ChatFloating';
70
70
  export { ChatInline, type ChatInlineProps, type ChatInlineProtocolConfig, } from './ChatInline';
71
71
  export { AgentRuntimeChat, type AgentRuntimeChatProps, } from '../agents/AgentRuntimeChat';
@@ -76,7 +76,9 @@ export interface ChatMessageListProps {
76
76
  * that this list has no opinion on. Not called for tool calls or for a
77
77
  * `note`, which has no footer of its own.
78
78
  */
79
- renderMessageFooter?: (message: ChatMessage) => ReactNode;
79
+ renderMessageFooter?: (message: ChatMessage, at: {
80
+ turn: number;
81
+ }) => ReactNode;
80
82
  /**
81
83
  * The answer a sentence is being said from (VO-65): its row is
82
84
  * marked `aria-current` and `data-voice-saying`, with a bar beside it —
@@ -443,6 +443,22 @@ export function ChatMessageList({ displayItems, actOn, upload, isLoading, isStre
443
443
  const running = isLoading || isStreaming;
444
444
  return (_jsx(TurnFooter, { usage: agentUsage, live: isLastTurn && running, latest: isLastTurn && !running, padding: padding, onCopy: () => copyTurn(start, index), onRemove: () => onRemoveItems?.(displayItems.slice(start, index + 1).map(entry => entry.id)) }));
445
445
  };
446
+ /**
447
+ * The person's turn an item belongs to: how many of their messages come
448
+ * up to and including it. A footer's action on a turn names it by this.
449
+ */
450
+ const turnOfItem = (item) => {
451
+ let turn = 0;
452
+ for (const each of displayItems) {
453
+ if (!isToolCallMessage(each) && each.role === 'user') {
454
+ turn += 1;
455
+ }
456
+ if (each.id === item.id) {
457
+ break;
458
+ }
459
+ }
460
+ return turn;
461
+ };
446
462
  const renderItem = (item, index) => {
447
463
  // ---- Tool call item ----
448
464
  if (isToolCallMessage(item)) {
@@ -539,8 +555,11 @@ export function ChatMessageList({ displayItems, actOn, upload, isLoading, isStre
539
555
  }
540
556
  }
541
557
  }
542
- // The host's footer, asked once: a row only when it draws something.
543
- const messageFooter = renderMessageFooter?.(message);
558
+ // The host's footer, asked once: a row only when it draws something —
559
+ // told the person's turn the message belongs to.
560
+ const messageFooter = renderMessageFooter?.(message, {
561
+ turn: turnOfItem(message),
562
+ });
544
563
  // The answer being said (VO-65): marked by a bar and for assistive tech.
545
564
  const said = saidMessageId !== undefined && message.id === saidMessageId;
546
565
  return (_jsx(Box, { "data-chat-message": message.role, "data-voice-saying": said ? '' : undefined, "aria-current": said ? 'true' : undefined, sx: said
@@ -41,6 +41,95 @@ export type ScheduledRun = {
41
41
  /** When it runs next; empty when the scheduler does not say. */
42
42
  nextAt: string;
43
43
  };
44
+ /** The states of a session: open (held by a runtime), paused, ended. */
45
+ export declare const SESSION_STATES: readonly ["open", "paused", "ended"];
46
+ export type SessionState = (typeof SESSION_STATES)[number];
47
+ /** The phase of an open session's turn, as the runtime that holds it says it. */
48
+ export declare const SESSION_TURNS: readonly ["idle", "running", "waiting"];
49
+ export type SessionTurn = (typeof SESSION_TURNS)[number];
50
+ /** Where an open session runs: a runtime, or a seat of a team run; nothing while paused or ended. */
51
+ export type SessionRunsOn = {
52
+ kind: 'runtime';
53
+ uid: string;
54
+ } | {
55
+ kind: 'team_run';
56
+ executionId: string;
57
+ seat: string;
58
+ } | null;
59
+ /** Where a session comes from: cloned from another at a turn, or imported from a file. */
60
+ export type SessionLineage = {
61
+ forkedFrom: {
62
+ uid: string;
63
+ atTurn: number;
64
+ } | null;
65
+ importedFrom: {
66
+ digest: string;
67
+ exportedAt: string;
68
+ /** The exporter's uid. */
69
+ exportedBy: string;
70
+ } | null;
71
+ };
72
+ /**
73
+ * One session, as `GET /api/ai-agents/v1/apps/sessions` lists it and as a
74
+ * runtime describes one it holds (`GET /api/v1/apps/sessions/{uid}`): the
75
+ * same shape on the Studio, the chat and the phone. `turn` and `held` are
76
+ * the runtime's and empty from the record.
77
+ */
78
+ export type SessionRow = {
79
+ uid: string;
80
+ appUid: string;
81
+ deploymentUid: string;
82
+ version: number;
83
+ /** `test` for a session its tests ran; empty for real use. */
84
+ purpose: string;
85
+ launchUid: string;
86
+ ownerUid: string;
87
+ openedBy: string;
88
+ wokenBy: string;
89
+ state: SessionState;
90
+ /** The runtime's turn phase of an open session; `''` from the record. */
91
+ turn: SessionTurn | '';
92
+ /** Whether the runtime asked holds it; `null` from the record. */
93
+ held: boolean | null;
94
+ /** The agentspec bound to it now. */
95
+ agent: string;
96
+ /** The harness that agent runs on; empty for a model agent. */
97
+ harness: string;
98
+ title: string;
99
+ archived: boolean;
100
+ runsOn: SessionRunsOn;
101
+ lineage: SessionLineage;
102
+ /** The person's turns so far. */
103
+ turns: number;
104
+ startedAt: string;
105
+ keptUntil: string;
106
+ };
107
+ /**
108
+ * A session row as the record or a runtime answers it. A row without a uid,
109
+ * or whose state is not one of the three, is refused in a sentence: the
110
+ * reader never guesses a state (an older opening is re-indexed, not read).
111
+ */
112
+ export declare function sessionRowOf(raw: Record<string, unknown>): SessionRow;
113
+ /** A page of sessions, as the record lists them: `{sessions, has_more}`. */
114
+ export declare function sessionPageOf(body: Record<string, unknown>): {
115
+ sessions: SessionRow[];
116
+ hasMore: boolean;
117
+ };
118
+ /** The state words, on every client. */
119
+ export declare const SESSION_STATE_WORDS: Record<SessionState, string>;
120
+ /** The turn phase, beside an open session's state. */
121
+ export declare const SESSION_TURN_WORDS: Record<SessionTurn, string>;
122
+ /** A session's state in words: *Open · answering*, *Paused*, *Ended*. */
123
+ export declare function sessionStateSaid(session: Pick<SessionRow, 'state' | 'turn'>): string;
124
+ /** The words of a session's lineage. */
125
+ export declare const SESSION_LINEAGE_WORDS: {
126
+ readonly cloned: (uid: string, atTurn: number) => string;
127
+ readonly imported: (exportedAt: string) => string;
128
+ };
129
+ /** Where a session comes from, in a sentence; `''` for one opened here. */
130
+ export declare function sessionLineageSaid(session: Pick<SessionRow, 'lineage'>): string;
131
+ /** The agent a session is bound to, with its harness when it runs on one: *shield-mvp-codex (codex)*. */
132
+ export declare function sessionAgentSaid(session: Pick<SessionRow, 'agent' | 'harness'>): string;
44
133
  /** What an application, or all of a person's, is doing (R-15): real use only, its tests read apart. */
45
134
  export type AppActivity = {
46
135
  /** Sessions whose latest run has not answered yet, newest first: their run's start. */
@@ -49,8 +138,8 @@ export type AppActivity = {
49
138
  scheduled: ScheduledRun[];
50
139
  /** Why its schedules could not be read; empty when they were. */
51
140
  scheduledProblem: string;
52
- /** Its other sessions, newest first: their opening entries. */
53
- completed: RecordEntry[];
141
+ /** Its other sessions, newest first, each as the record lists it. */
142
+ completed: SessionRow[];
54
143
  /** The offset of the next page of completed sessions; `null` after the last. */
55
144
  nextOffset: number | null;
56
145
  };
@@ -4,8 +4,10 @@
4
4
  */
5
5
  /**
6
6
  * What an application is doing (R-15), as ai-agents answers
7
- * `/api/ai-agents/v1/apps/activity`, and its record's entries
8
- * (`/apps/sessions`, `/apps/records`): read and said the same by the Studio
7
+ * `/api/ai-agents/v1/apps/activity`, its record's entries (`/apps/records`)
8
+ * and its sessions as the record lists them (`/apps/sessions`: state,
9
+ * agent, title, lineage, where each runs — the row a runtime describes a
10
+ * held session with too): read and said the same by the Studio, the chat
9
11
  * and Datalayer Mobile (M-015b). Pure: each client fetches with its own
10
12
  * authentication and hands the body here.
11
13
  *
@@ -63,6 +65,143 @@ export function sessionSentence(entries) {
63
65
  }
64
66
  return `${parts.join(', ')}.`;
65
67
  }
68
+ // --- a session, as the record lists it ------------------------------------
69
+ /** The states of a session: open (held by a runtime), paused, ended. */
70
+ export const SESSION_STATES = ['open', 'paused', 'ended'];
71
+ /** The phase of an open session's turn, as the runtime that holds it says it. */
72
+ export const SESSION_TURNS = ['idle', 'running', 'waiting'];
73
+ const runsOnOf = (raw) => {
74
+ if (!isRecord(raw)) {
75
+ return null;
76
+ }
77
+ if (raw.kind === 'runtime') {
78
+ return { kind: 'runtime', uid: said(raw.uid) };
79
+ }
80
+ if (raw.kind === 'team_run') {
81
+ return {
82
+ kind: 'team_run',
83
+ executionId: said(raw.execution_id),
84
+ seat: said(raw.seat),
85
+ };
86
+ }
87
+ throw new Error(`A session runs on a runtime or a team run, not on ${JSON.stringify(raw.kind)}.`);
88
+ };
89
+ const lineageOf = (raw) => {
90
+ const lineage = isRecord(raw) ? raw : {};
91
+ const forked = isRecord(lineage.forked_from) ? lineage.forked_from : null;
92
+ const imported = isRecord(lineage.imported_from)
93
+ ? lineage.imported_from
94
+ : null;
95
+ return {
96
+ forkedFrom: forked
97
+ ? { uid: said(forked.uid), atTurn: Number(forked.at_turn) || 0 }
98
+ : null,
99
+ importedFrom: imported
100
+ ? {
101
+ digest: said(imported.digest),
102
+ exportedAt: said(imported.exported_at),
103
+ exportedBy: said(imported.exported_by),
104
+ }
105
+ : null,
106
+ };
107
+ };
108
+ /**
109
+ * A session row as the record or a runtime answers it. A row without a uid,
110
+ * or whose state is not one of the three, is refused in a sentence: the
111
+ * reader never guesses a state (an older opening is re-indexed, not read).
112
+ */
113
+ export function sessionRowOf(raw) {
114
+ const uid = said(raw.uid);
115
+ if (!uid) {
116
+ throw new Error('A session row names its uid; this one does not.');
117
+ }
118
+ const state = said(raw.state);
119
+ if (!SESSION_STATES.includes(state)) {
120
+ throw new Error(`There is no session state ${JSON.stringify(state)} (session ${uid}): one of ${SESSION_STATES.join(', ')}.`);
121
+ }
122
+ const turn = said(raw.turn);
123
+ if (turn && !SESSION_TURNS.includes(turn)) {
124
+ throw new Error(`There is no turn phase ${JSON.stringify(turn)} (session ${uid}): one of ${SESSION_TURNS.join(', ')}.`);
125
+ }
126
+ return {
127
+ uid,
128
+ appUid: said(raw.app_uid),
129
+ deploymentUid: said(raw.deployment_uid),
130
+ version: Number(raw.version) || 0,
131
+ purpose: said(raw.purpose),
132
+ launchUid: said(raw.launch_uid),
133
+ ownerUid: said(raw.owner_uid),
134
+ openedBy: said(raw.opened_by),
135
+ wokenBy: said(raw.woken_by),
136
+ state: state,
137
+ turn: turn,
138
+ held: typeof raw.held === 'boolean' ? raw.held : null,
139
+ agent: said(raw.agent),
140
+ harness: said(raw.harness),
141
+ title: said(raw.title),
142
+ archived: raw.archived === true,
143
+ runsOn: runsOnOf(raw.runs_on),
144
+ lineage: lineageOf(raw.lineage),
145
+ turns: Number(raw.turns) || 0,
146
+ startedAt: said(raw.started_at),
147
+ keptUntil: said(raw.kept_until),
148
+ };
149
+ }
150
+ /** A page of sessions, as the record lists them: `{sessions, has_more}`. */
151
+ export function sessionPageOf(body) {
152
+ return {
153
+ sessions: records(body.sessions).map(sessionRowOf),
154
+ hasMore: body.has_more === true,
155
+ };
156
+ }
157
+ /** The state words, on every client. */
158
+ export const SESSION_STATE_WORDS = {
159
+ open: 'Open',
160
+ paused: 'Paused',
161
+ ended: 'Ended',
162
+ };
163
+ /** The turn phase, beside an open session's state. */
164
+ export const SESSION_TURN_WORDS = {
165
+ idle: '',
166
+ running: 'answering',
167
+ waiting: 'waiting for you',
168
+ };
169
+ /** A session's state in words: *Open · answering*, *Paused*, *Ended*. */
170
+ export function sessionStateSaid(session) {
171
+ const phase = session.state === 'open' && session.turn
172
+ ? SESSION_TURN_WORDS[session.turn]
173
+ : '';
174
+ return phase
175
+ ? `${SESSION_STATE_WORDS[session.state]} · ${phase}`
176
+ : SESSION_STATE_WORDS[session.state];
177
+ }
178
+ /** The words of a session's lineage. */
179
+ export const SESSION_LINEAGE_WORDS = {
180
+ cloned: (uid, atTurn) => `Cloned from ${uid} at turn ${atTurn}`,
181
+ imported: (exportedAt) => exportedAt
182
+ ? `Imported from a file exported ${exportedAt}`
183
+ : 'Imported from a file',
184
+ };
185
+ /** Where a session comes from, in a sentence; `''` for one opened here. */
186
+ export function sessionLineageSaid(session) {
187
+ const { forkedFrom, importedFrom } = session.lineage;
188
+ if (forkedFrom) {
189
+ return SESSION_LINEAGE_WORDS.cloned(forkedFrom.uid, forkedFrom.atTurn);
190
+ }
191
+ if (importedFrom) {
192
+ return SESSION_LINEAGE_WORDS.imported(importedFrom.exportedAt);
193
+ }
194
+ return '';
195
+ }
196
+ /** The agent a session is bound to, with its harness when it runs on one: *shield-mvp-codex (codex)*. */
197
+ export function sessionAgentSaid(session) {
198
+ if (!session.agent) {
199
+ return '';
200
+ }
201
+ return session.harness && session.harness !== session.agent
202
+ ? `${session.agent} (${session.harness})`
203
+ : session.agent;
204
+ }
66
205
  /** `/apps/activity`'s answer, read. */
67
206
  export function activityOf(body) {
68
207
  return {
@@ -77,7 +216,7 @@ export function activityOf(body) {
77
216
  nextAt: said(raw.next_at),
78
217
  })),
79
218
  scheduledProblem: said(body.scheduled_problem),
80
- completed: records(body.completed).map(entryOf),
219
+ completed: records(body.completed).map(sessionRowOf),
81
220
  nextOffset: typeof body.next_offset === 'number' ? body.next_offset : null,
82
221
  };
83
222
  }
@@ -97,7 +236,7 @@ export function mergeActivityPages(pages) {
97
236
  const completed = pages
98
237
  .flatMap(page => page.completed)
99
238
  .filter(entry => {
100
- const key = entry.uid || entry.sessionUid;
239
+ const key = entry.uid;
101
240
  if (seen.has(key)) {
102
241
  return false;
103
242
  }
@@ -20,7 +20,7 @@ export declare function shieldDisplayFixtures(): {
20
20
  export declare function conversationFixture(): ConversationState;
21
21
  /**
22
22
  * `GET /api/ai-agents/v1/apps/activity`'s answer for one application: a
23
- * session in progress, a scheduled run, a completed one ended by Stop, and a
23
+ * session in progress, a scheduled run, a completed one (ended), and a
24
24
  * next page — what the Studio's Activity and the phone's read alike (M-015b).
25
25
  */
26
26
  export declare function activityFixture(): Record<string, unknown>;
@@ -120,7 +120,7 @@ export function conversationFixture() {
120
120
  }
121
121
  /**
122
122
  * `GET /api/ai-agents/v1/apps/activity`'s answer for one application: a
123
- * session in progress, a scheduled run, a completed one ended by Stop, and a
123
+ * session in progress, a scheduled run, a completed one (ended), and a
124
124
  * next page — what the Studio's Activity and the phone's read alike (M-015b).
125
125
  */
126
126
  export function activityFixture() {
@@ -153,15 +153,25 @@ export function activityFixture() {
153
153
  scheduled_problem: '',
154
154
  completed: [
155
155
  {
156
- uid: 'e-out',
156
+ uid: 's-1',
157
157
  app_uid: 'app-1',
158
- session_uid: 's-1',
159
158
  deployment_uid: 'd-1',
160
159
  version: 3,
161
- kind: 'output',
162
- summary: '',
163
- payload: { status: 'stopped' },
164
- created_at: '2026-10-15T08:00:00Z',
160
+ purpose: '',
161
+ launch_uid: '',
162
+ owner_uid: 'o-1',
163
+ opened_by: 'o-1',
164
+ woken_by: '',
165
+ state: 'ended',
166
+ agent: 'inbox-triage',
167
+ harness: '',
168
+ title: 'The inbox, Thursday',
169
+ archived: false,
170
+ runs_on: null,
171
+ lineage: { forked_from: null, imported_from: null },
172
+ turns: 2,
173
+ started_at: '2026-10-15T08:00:00Z',
174
+ kept_until: '2026-11-14T08:00:00Z',
165
175
  },
166
176
  ],
167
177
  next_offset: 20,
@@ -26,7 +26,7 @@ export { DIRECT_MAX, DIRECT_WORDS, directAnswerOf, directAuthor, directClient, o
26
26
  export { SIGN_IN_POLL_MS, SIGN_IN_STATUS_PATH, signInStandsOf, signInStatusClient, type SignInStands, } from './signInStatus';
27
27
  export { emptyFields, fieldProblems, MAX_VALUE_LENGTH, PROTECTED_INPUT_WORDS, protectedInputClient, protectedRequestOf, ProtectedRequestGone, sentWords, submitBody, submitWords, ticketComplete, ticketOfPage, type ProtectedField, type ProtectedRequest, } from './protectedInput';
28
28
  export { failureOf, otlpMetricsOf, RunMeter, type RunMeasure, type StreamFailure, } from './runMeasures';
29
- export { ACTIVITY_WORDS, activityOf, entryOf, entrySaid, mergeActivityPages, runEndOf, scheduledSays, sessionSentence, wakesOn, type AppActivity, type RecordEntry, type RecordKind, type ScheduledRun, } from './activity';
29
+ export { ACTIVITY_WORDS, activityOf, entryOf, entrySaid, mergeActivityPages, runEndOf, scheduledSays, SESSION_LINEAGE_WORDS, SESSION_STATE_WORDS, SESSION_STATES, SESSION_TURN_WORDS, SESSION_TURNS, sessionAgentSaid, sessionLineageSaid, sessionPageOf, sessionRowOf, sessionSentence, sessionStateSaid, wakesOn, type AppActivity, type RecordEntry, type RecordKind, type ScheduledRun, type SessionLineage, type SessionRow, type SessionRunsOn, type SessionState, type SessionTurn, } from './activity';
30
30
  export { deploymentEventLine, deploymentEventOf, notDeletedOf, resetBody, resetCountsOf, resetLines, stateChangeBody, stoppedWorkLine, stoppedWorkOf, type DeploymentEvent, type DeploymentEventKind, type DeploymentState, type ResetCounts, type StoppedWork, } from './lifecycle';
31
31
  export { agentRuntimesOf, agentSummaryOfRuntime, CREATING_STATUSES, isAgentRuntime, isCreatingAgent, runtimeOf, type AgentRuntime, type AgentSummaryData, } from './runtimes';
32
32
  export { agentRunClient, agentRuntimesUrlOf, appSessionsClient, RuntimeRefusal, type AgentRunClient, type AgentTurn, type AppSessionsClient, type RuntimeClientOptions, type SessionStart, type StreamOptions, } from './sessions';
@@ -45,8 +45,9 @@ export { SIGN_IN_POLL_MS, SIGN_IN_STATUS_PATH, signInStandsOf, signInStatusClien
45
45
  export { emptyFields, fieldProblems, MAX_VALUE_LENGTH, PROTECTED_INPUT_WORDS, protectedInputClient, protectedRequestOf, ProtectedRequestGone, sentWords, submitBody, submitWords, ticketComplete, ticketOfPage, } from './protectedInput';
46
46
  // How a streamed turn went, measured without its words (M-036).
47
47
  export { failureOf, otlpMetricsOf, RunMeter, } from './runMeasures';
48
- // What an application is doing, and its record's entries (R-15, M-015b).
49
- export { ACTIVITY_WORDS, activityOf, entryOf, entrySaid, mergeActivityPages, runEndOf, scheduledSays, sessionSentence, wakesOn, } from './activity';
48
+ // What an application is doing, its record's entries, and its sessions as
49
+ // the record lists them (R-15, M-015b).
50
+ export { ACTIVITY_WORDS, activityOf, entryOf, entrySaid, mergeActivityPages, runEndOf, scheduledSays, SESSION_LINEAGE_WORDS, SESSION_STATE_WORDS, SESSION_STATES, SESSION_TURN_WORDS, SESSION_TURNS, sessionAgentSaid, sessionLineageSaid, sessionPageOf, sessionRowOf, sessionSentence, sessionStateSaid, wakesOn, } from './activity';
50
51
  // A deployment's pause, resume and reset, and its recorded events (R-17, M-041b).
51
52
  export { deploymentEventLine, deploymentEventOf, notDeletedOf, resetBody, resetCountsOf, resetLines, stateChangeBody, stoppedWorkLine, stoppedWorkOf, } from './lifecycle';
52
53
  // A person's agent runtimes, and an agent's summary (M-014b).
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import type { ChatMessage } from '../types/messages';
14
14
  import { type AgUiEvent } from './agui';
15
+ import { type SessionRow } from './activity';
15
16
  /** Where a runtime is, and as whom it is asked. */
16
17
  export type RuntimeClientOptions = {
17
18
  /** The runtime's agent-runtimes address (`…/agent-runtimes/<runtime>`). */
@@ -59,8 +60,31 @@ export declare function appSessionsClient(options: RuntimeClientOptions): {
59
60
  stop: (uid: string) => Promise<Record<string, unknown>>;
60
61
  /** End the conversation for good; its record stays. */
61
62
  end: (uid: string) => Promise<Record<string, unknown>>;
62
- /** What the session is: its state (`open`, `running`, `waiting`, `stopped`) and what it asks. */
63
+ /** What the session is: its state (`open`, `paused`, `ended`), its turn phase, what it asks. */
63
64
  describe: (uid: string) => Promise<Record<string, unknown>>;
65
+ /** The session as a row (`sessionRowOf`): its state refused when it is none of the three. */
66
+ described: (uid: string) => Promise<SessionRow>;
67
+ /** The caller's sessions, held and recorded, paged and filtered (`?app=`, `?agent=`, `?state=`, `?q=`, `?archived=true` includes the archived, `?after=`, `?limit=`). */
68
+ list: (params?: Record<string, string | number | boolean>) => Promise<Record<string, unknown>>;
69
+ /** Swap the session's agent in place: the new agent is told in a sentence, said back. */
70
+ swap: (uid: string, agent: string) => Promise<Record<string, unknown>>;
71
+ /** Clone from a turn: a new session, paused, the same or another agent. */
72
+ clone: (uid: string, options?: {
73
+ upToTurn?: number;
74
+ agent?: string;
75
+ title?: string;
76
+ }) => Promise<Record<string, unknown>>;
77
+ /** The session as a `datalayer-session/1` file (JSONL text). */
78
+ exportFile: (uid: string, format?: string) => Promise<string>;
79
+ /** Import a session file: a new session, paused, the importer its author. */
80
+ importFile: (text: string, options?: {
81
+ agent?: string;
82
+ format?: string;
83
+ }) => Promise<Record<string, unknown>>;
84
+ /** Rename the session (at most 200 characters). */
85
+ rename: (uid: string, title: string) => Promise<Record<string, unknown>>;
86
+ /** Archive it (hidden from the list unless asked for), or bring it back. */
87
+ archive: (uid: string, archived: boolean) => Promise<Record<string, unknown>>;
64
88
  /** Its conversation as a person reads it (`messagesOfThread`). */
65
89
  messages: (uid: string) => Promise<ChatMessage[]>;
66
90
  };
@@ -5,6 +5,7 @@
5
5
  import { readRunStream } from './agui';
6
6
  import { agUiRefusal, refusalBody } from './agUiRefusal';
7
7
  import { messagesOfThread } from './thread';
8
+ import { sessionRowOf } from './activity';
8
9
  /** A route that refused: its status and the runtime's sentence. */
9
10
  export class RuntimeRefusal extends Error {
10
11
  status;
@@ -26,10 +27,14 @@ function clientOf({ baseUrl, getAccessToken, fetch: fetcher, }) {
26
27
  const refused = async (response) => {
27
28
  throw new RuntimeRefusal(response.status, agUiRefusal(response.status, response.statusText, await refusalBody(response)));
28
29
  };
29
- const json = async (path, method = 'GET') => {
30
+ const json = async (path, method = 'GET', body) => {
30
31
  const response = await fetcher(`${root}${path}`, {
31
32
  method,
32
- headers: headers({ Accept: 'application/json' }),
33
+ headers: headers({
34
+ Accept: 'application/json',
35
+ ...(body === undefined ? {} : { 'Content-Type': 'application/json' }),
36
+ }),
37
+ ...(body === undefined ? {} : { body: JSON.stringify(body) }),
33
38
  });
34
39
  if (!response.ok) {
35
40
  return refused(response);
@@ -59,7 +64,7 @@ const at = (uid) => `/api/v1/apps/sessions/${encodeURIComponent(uid)}`;
59
64
  * settings, resume (streamed), and stop, end, read (JSON).
60
65
  */
61
66
  export function appSessionsClient(options) {
62
- const { json, stream } = clientOf(options);
67
+ const { json, stream, fetcher, headers, refused, root } = clientOf(options);
63
68
  return {
64
69
  /** Start a session with its first message. */
65
70
  start: (start, streaming) => stream('/api/v1/apps/sessions', {
@@ -82,8 +87,61 @@ export function appSessionsClient(options) {
82
87
  stop: (uid) => json(`${at(uid)}/stop`, 'POST'),
83
88
  /** End the conversation for good; its record stays. */
84
89
  end: (uid) => json(`${at(uid)}/end`, 'POST'),
85
- /** What the session is: its state (`open`, `running`, `waiting`, `stopped`) and what it asks. */
90
+ /** What the session is: its state (`open`, `paused`, `ended`), its turn phase, what it asks. */
86
91
  describe: (uid) => json(at(uid)),
92
+ /** The session as a row (`sessionRowOf`): its state refused when it is none of the three. */
93
+ described: async (uid) => sessionRowOf(await json(at(uid))),
94
+ /** The caller's sessions, held and recorded, paged and filtered (`?app=`, `?agent=`, `?state=`, `?q=`, `?archived=true` includes the archived, `?after=`, `?limit=`). */
95
+ list: (params = {}) => {
96
+ const query = new URLSearchParams();
97
+ for (const [key, value] of Object.entries(params)) {
98
+ if (value !== '' && value !== undefined && value !== false) {
99
+ query.set(key, String(value));
100
+ }
101
+ }
102
+ const search = query.toString();
103
+ return json(`/api/v1/apps/sessions${search ? `?${search}` : ''}`);
104
+ },
105
+ /** Swap the session's agent in place: the new agent is told in a sentence, said back. */
106
+ swap: (uid, agent) => json(`${at(uid)}/agent`, 'POST', { agent }),
107
+ /** Clone from a turn: a new session, paused, the same or another agent. */
108
+ clone: (uid, options = {}) => json(`${at(uid)}/clone`, 'POST', {
109
+ up_to_turn: options.upToTurn ?? null,
110
+ agent: options.agent ?? null,
111
+ title: options.title ?? '',
112
+ }),
113
+ /** The session as a `datalayer-session/1` file (JSONL text). */
114
+ exportFile: async (uid, format = '') => {
115
+ const response = await fetcher(`${root}${at(uid)}/export${format ? `?format=${encodeURIComponent(format)}` : ''}`, { method: 'GET', headers: headers() });
116
+ if (!response.ok) {
117
+ return refused(response);
118
+ }
119
+ return response.text();
120
+ },
121
+ /** Import a session file: a new session, paused, the importer its author. */
122
+ importFile: async (text, options = {}) => {
123
+ const query = new URLSearchParams();
124
+ if (options.agent) {
125
+ query.set('agent', options.agent);
126
+ }
127
+ if (options.format) {
128
+ query.set('format', options.format);
129
+ }
130
+ const search = query.toString();
131
+ const response = await fetcher(`${root}/api/v1/apps/sessions/import${search ? `?${search}` : ''}`, {
132
+ method: 'POST',
133
+ headers: headers({ 'Content-Type': 'application/x-ndjson' }),
134
+ body: text,
135
+ });
136
+ if (!response.ok) {
137
+ return refused(response);
138
+ }
139
+ return (await response.json());
140
+ },
141
+ /** Rename the session (at most 200 characters). */
142
+ rename: (uid, title) => json(`${at(uid)}/title`, 'PUT', { title }),
143
+ /** Archive it (hidden from the list unless asked for), or bring it back. */
144
+ archive: (uid, archived) => json(`${at(uid)}/archived`, 'PUT', { archived }),
87
145
  /** Its conversation as a person reads it (`messagesOfThread`). */
88
146
  messages: async (uid) => messagesOfThread((await json(`${at(uid)}/messages`)).messages),
89
147
  };