openpond 0.2.57 → 0.2.59

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 (291) hide show
  1. package/dist/app-server.d.ts +2 -1
  2. package/dist/app-server.js +1 -1
  3. package/dist/chunks/{actions-command-QU4H53OG.js → actions-command-JJ3CU7J6.js} +1 -1
  4. package/dist/chunks/{app-layer-NSTE5HIT.js → app-layer-KAUZAHGE.js} +1 -1
  5. package/dist/chunks/{app-server-connected-apps-JHGWLBXT.js → app-server-connected-apps-SXGZOUJJ.js} +1 -1
  6. package/dist/chunks/{app-server-evaluations-GJPFWIDA.js → app-server-evaluations-N4OMTPCI.js} +1 -1
  7. package/dist/chunks/{app-server-harness-services-IH4G6POY.js → app-server-harness-services-DDFUMNYC.js} +1 -1
  8. package/dist/chunks/app-server-runtime-SVB6L26M.js +2 -0
  9. package/dist/chunks/{apps-BKTOR4F7.js → apps-EZB56RHV.js} +1 -1
  10. package/dist/chunks/{chunk-SDXFLO7J.js → chunk-22VMH6JV.js} +1 -1
  11. package/dist/chunks/{chunk-FTEOCCPB.js → chunk-25JDHAZ5.js} +1 -1
  12. package/dist/chunks/{chunk-PPAPVGJP.js → chunk-2G4BEISF.js} +1 -1
  13. package/dist/chunks/{chunk-O72BSKSO.js → chunk-2L5XWJJ5.js} +1 -1
  14. package/dist/chunks/{chunk-QOTVNQDI.js → chunk-2RNQQNB7.js} +2 -2
  15. package/dist/chunks/{chunk-O6ULLQJ6.js → chunk-2WKUBGIF.js} +1 -1
  16. package/dist/chunks/{chunk-F4KOGISR.js → chunk-37MWETFU.js} +1 -1
  17. package/dist/chunks/{chunk-D74JEERO.js → chunk-3CDEBKSU.js} +1 -1
  18. package/dist/chunks/{chunk-L6K7ERG5.js → chunk-4EDIRCD3.js} +1 -1
  19. package/dist/chunks/{chunk-JYKRR7E5.js → chunk-4GPXTISD.js} +1 -1
  20. package/dist/chunks/chunk-57TRXBLT.js +3 -0
  21. package/dist/chunks/{chunk-LQQNBVEB.js → chunk-76M2MEHV.js} +1 -1
  22. package/dist/chunks/{chunk-HCYX6RHP.js → chunk-776WNDV2.js} +1 -1
  23. package/dist/chunks/{chunk-HDL5YSAA.js → chunk-7AVNZF36.js} +1 -1
  24. package/dist/chunks/{chunk-3K4VVB7S.js → chunk-7K7O3CKY.js} +1 -1
  25. package/dist/chunks/chunk-7UH4YDA7.js +3 -0
  26. package/dist/chunks/{chunk-KUERKVEU.js → chunk-ABZ2ZOLU.js} +1 -1
  27. package/dist/chunks/{chunk-ZRDGQDZL.js → chunk-ANFDRKUU.js} +1 -1
  28. package/dist/chunks/{chunk-GWCHDF2C.js → chunk-AQD7K4Z5.js} +1 -1
  29. package/dist/chunks/{chunk-4D7HWVWD.js → chunk-ARLOVWQ3.js} +1 -1
  30. package/dist/chunks/{chunk-2QUCCP6Z.js → chunk-ATAOHSFR.js} +1 -1
  31. package/dist/chunks/{chunk-3RCRSMWZ.js → chunk-BE6SS65L.js} +2 -2
  32. package/dist/chunks/{chunk-Z54O534A.js → chunk-BGJYITVI.js} +1 -1
  33. package/dist/chunks/{chunk-BLXEAZCQ.js → chunk-BL3YH2QU.js} +1 -1
  34. package/dist/chunks/{chunk-2D4Y3HNW.js → chunk-BO5JZYWG.js} +1 -1
  35. package/dist/chunks/{chunk-ZGTOK7ZK.js → chunk-BQS7Z4AP.js} +1 -1
  36. package/dist/chunks/{chunk-7HPDGZOR.js → chunk-BRORSFJX.js} +3 -3
  37. package/dist/chunks/{chunk-XXYGGNVM.js → chunk-BVQWVIGK.js} +1 -1
  38. package/dist/chunks/{chunk-SWUEFLOH.js → chunk-C37PUHA6.js} +1 -1
  39. package/dist/chunks/{chunk-3VUATFZD.js → chunk-CGWA54LE.js} +1 -1
  40. package/dist/chunks/{chunk-EQFGBL3O.js → chunk-CKMSBAI2.js} +1 -1
  41. package/dist/chunks/{chunk-YOBN7KTF.js → chunk-COHMDT7A.js} +7 -7
  42. package/dist/chunks/{chunk-JDEEWOD7.js → chunk-DPHAN6N3.js} +1 -1
  43. package/dist/chunks/{chunk-YOQRYNLP.js → chunk-DZUN5YWB.js} +1 -1
  44. package/dist/chunks/{chunk-6FDWRG55.js → chunk-E72UU4VX.js} +1 -1
  45. package/dist/chunks/{chunk-ABD5M2D2.js → chunk-EOBHQ3JT.js} +1 -1
  46. package/dist/chunks/chunk-EQOV34UH.js +2 -0
  47. package/dist/chunks/chunk-EUMXMT3S.js +2 -0
  48. package/dist/chunks/{chunk-773TH7FN.js → chunk-EWOSLZDX.js} +1 -1
  49. package/dist/chunks/{chunk-HIOKCIL7.js → chunk-FAYASU7Z.js} +1 -1
  50. package/dist/chunks/{chunk-EIRYMSEG.js → chunk-FKJHEZCW.js} +1 -1
  51. package/dist/chunks/{chunk-Q2QL6UWN.js → chunk-GL3NX3F3.js} +1 -1
  52. package/dist/chunks/{chunk-UKMA4R6X.js → chunk-GOPFFQZU.js} +1 -1
  53. package/dist/chunks/{chunk-RAXOSUSW.js → chunk-GUOLMLZN.js} +1 -1
  54. package/dist/chunks/{chunk-GZ7M5XBP.js → chunk-GVZLGS2U.js} +1 -1
  55. package/dist/chunks/chunk-GYJQKCEO.js +5 -0
  56. package/dist/chunks/{chunk-XDQMGUWL.js → chunk-H7ATCPPB.js} +1 -1
  57. package/dist/chunks/{chunk-J2TWKFML.js → chunk-IFDALGZE.js} +4 -4
  58. package/dist/chunks/{chunk-S5ESN275.js → chunk-IRV6GWGG.js} +3 -3
  59. package/dist/chunks/chunk-JFXINDOQ.js +3 -0
  60. package/dist/chunks/{chunk-PRGBLQVH.js → chunk-JMBQYBPI.js} +1 -1
  61. package/dist/chunks/{chunk-DBK66CJP.js → chunk-JQKSXCAJ.js} +1 -1
  62. package/dist/chunks/{chunk-DARVPBZ4.js → chunk-JUQMSHNR.js} +1 -1
  63. package/dist/chunks/{chunk-3Z47M3YY.js → chunk-K44RHALX.js} +1 -1
  64. package/dist/chunks/{chunk-4EPSHPZL.js → chunk-KO3HNMLJ.js} +1 -1
  65. package/dist/chunks/{chunk-4NESNOK5.js → chunk-LNCHFVHT.js} +1 -1
  66. package/dist/chunks/{chunk-7E6T7GP5.js → chunk-LPWBIGKW.js} +1 -1
  67. package/dist/chunks/{chunk-OIUTWU6K.js → chunk-MFMYWZK2.js} +1 -1
  68. package/dist/chunks/{chunk-A6USMRWK.js → chunk-MMQRHR3V.js} +1 -1
  69. package/dist/chunks/{chunk-I7AQMAQI.js → chunk-MNC4YUDI.js} +6 -6
  70. package/dist/chunks/{chunk-ZFSHBFG5.js → chunk-N6ENLEMY.js} +2 -2
  71. package/dist/chunks/{chunk-SH5CBAFC.js → chunk-NTB2O4RP.js} +1 -1
  72. package/dist/chunks/{chunk-OQKJGTTO.js → chunk-O3RF72BT.js} +1 -1
  73. package/dist/chunks/{chunk-QEFHOJFE.js → chunk-O4VIXU7A.js} +1 -1
  74. package/dist/chunks/{chunk-5MCNZCVQ.js → chunk-OLDK2LKJ.js} +1 -1
  75. package/dist/chunks/{chunk-WMKYHXVM.js → chunk-OX3XZKGK.js} +2 -2
  76. package/dist/chunks/{chunk-SDAUS5PY.js → chunk-P2RSBSCT.js} +1 -1
  77. package/dist/chunks/{chunk-EKM2D7JU.js → chunk-PFSMXKTI.js} +1 -1
  78. package/dist/chunks/{chunk-FUOEIDMA.js → chunk-PH6IORGZ.js} +1 -1
  79. package/dist/chunks/{chunk-PUZQU66L.js → chunk-PQJTYOR2.js} +1 -1
  80. package/dist/chunks/{chunk-OLLLZVHF.js → chunk-PY6K2JRH.js} +1 -1
  81. package/dist/chunks/{chunk-EYPCBBMS.js → chunk-RBZH6A6M.js} +1 -1
  82. package/dist/chunks/{chunk-6QSSIT62.js → chunk-RZUEVS64.js} +1 -1
  83. package/dist/chunks/{chunk-Q5LEXXJG.js → chunk-SF5HJ7PL.js} +4 -4
  84. package/dist/chunks/{chunk-NHQ36THU.js → chunk-TG7P7BSV.js} +1 -1
  85. package/dist/chunks/{chunk-G3RXYI2L.js → chunk-TIHXUKFD.js} +1 -1
  86. package/dist/chunks/{chunk-QOGJAQDO.js → chunk-TKLBP3MM.js} +1 -1
  87. package/dist/chunks/{chunk-M4JWQSV7.js → chunk-U2MAPON2.js} +1 -1
  88. package/dist/chunks/chunk-U5FKRYJO.js +86 -0
  89. package/dist/chunks/{chunk-QNG27G3T.js → chunk-V34H7Y2T.js} +2 -2
  90. package/dist/chunks/chunk-VGRMAGOK.js +9 -0
  91. package/dist/chunks/chunk-VRODAXFS.js +145 -0
  92. package/dist/chunks/{chunk-EIEZHFIW.js → chunk-WC42WOLG.js} +1 -1
  93. package/dist/chunks/{chunk-OS3LO5J3.js → chunk-WRI4XKSK.js} +1 -1
  94. package/dist/chunks/{chunk-XTFPDQMH.js → chunk-XJZSIXEO.js} +2 -2
  95. package/dist/chunks/{chunk-25MBPJVY.js → chunk-XMKCCLGB.js} +1 -1
  96. package/dist/chunks/{chunk-HZEIRHEB.js → chunk-XMWXH7TS.js} +1 -1
  97. package/dist/chunks/chunk-YCQSVHCD.js +9 -0
  98. package/dist/chunks/{chunk-B7RFL4N2.js → chunk-YHHF4Q7Y.js} +1 -1
  99. package/dist/chunks/{chunk-DMVD2RFZ.js → chunk-ZAN4DYLH.js} +1 -1
  100. package/dist/chunks/chunk-ZH3K7LKQ.js +2 -0
  101. package/dist/chunks/cli-5DFVQL5Y.js +2 -0
  102. package/dist/chunks/{configuration-command-6C5UO7GE.js → configuration-command-JS6U3RMC.js} +1 -1
  103. package/dist/chunks/connected-app-executor-UBMGMV76.js +2 -0
  104. package/dist/chunks/{connected-evidence-GH2ATNEX.js → connected-evidence-NLAIEVQ3.js} +1 -1
  105. package/dist/chunks/connection-NZSD3U5O.js +2 -0
  106. package/dist/chunks/{continual-6CQAMTTR.js → continual-WFPIDWPH.js} +1 -1
  107. package/dist/chunks/core-commands-U4IBRRY5.js +2 -0
  108. package/dist/chunks/{datasets-7BNMVJOY.js → datasets-UX47DTTB.js} +1 -1
  109. package/dist/chunks/{desktop-test-3CUHVLXV.js → desktop-test-UUU7PD4P.js} +1 -1
  110. package/dist/chunks/{dist-VYC5VMQB.js → dist-OGLX76LL.js} +1 -1
  111. package/dist/chunks/{dist-ZVJPJLXR.js → dist-W5MJYSPF.js} +1 -1
  112. package/dist/chunks/{evaluation-coordination-XEF5L7KZ.js → evaluation-coordination-3YQN5JQW.js} +1 -1
  113. package/dist/chunks/{experiment-improvements-KRX2DP27.js → experiment-improvements-ZRVD2AGY.js} +1 -1
  114. package/dist/chunks/{experiments-DFGQYA4O.js → experiments-JEB5A2N5.js} +1 -1
  115. package/dist/chunks/{extension-XKXXOP5N.js → extension-JCUA3RWV.js} +1 -1
  116. package/dist/chunks/{help-S7THC6IE.js → help-KA4OINP5.js} +1 -1
  117. package/dist/chunks/host-profile-evaluation-tools-2URLU5SG.js +2 -0
  118. package/dist/chunks/host-profile-external-dataset-B2AQNSDR.js +2 -0
  119. package/dist/chunks/{hosted-app-server-composition-HPL3CRXN.js → hosted-app-server-composition-VJQ3FM4I.js} +1 -1
  120. package/dist/chunks/{hosted-experiment-improvement-NFSVS5TU.js → hosted-experiment-improvement-42YWXB3P.js} +1 -1
  121. package/dist/chunks/hosted-harness-runtime-BM4WONJN.js +2 -0
  122. package/dist/chunks/{hosted-profile-candidate-2S5LFUWD.js → hosted-profile-candidate-HVVC43XQ.js} +1 -1
  123. package/dist/chunks/hosted-profile-compiler-RKDWHYK3.js +2 -0
  124. package/dist/chunks/{hosted-profile-evaluation-control-76BTRTYD.js → hosted-profile-evaluation-control-57V24UGU.js} +1 -1
  125. package/dist/chunks/{hosted-profile-evaluation-inspection-V6Z3A5XJ.js → hosted-profile-evaluation-inspection-BUWLCKCD.js} +1 -1
  126. package/dist/chunks/{hosted-profile-evaluation-preparation-IDJYREW3.js → hosted-profile-evaluation-preparation-3XLRR6UH.js} +1 -1
  127. package/dist/chunks/{hosted-tasksets-ANAE2PIW.js → hosted-tasksets-THKM5QY5.js} +1 -1
  128. package/dist/chunks/{human-review-WR777ODH.js → human-review-CSYAW4PC.js} +1 -1
  129. package/dist/chunks/import-CBDJ4DME.js +3 -0
  130. package/dist/chunks/local-harness-improvement-runtime-3T6E7I5Q.js +2 -0
  131. package/dist/chunks/local-harness-taskset-review-LQPQBALH.js +2 -0
  132. package/dist/chunks/{opchat-T4QTNEIY.js → opchat-6ADSONAD.js} +1 -1
  133. package/dist/chunks/{organizations-75L5DZDV.js → organizations-GT24ZTCN.js} +1 -1
  134. package/dist/chunks/{profile-TFZMUEDR.js → profile-Y2MCSOUK.js} +1 -1
  135. package/dist/chunks/project-action-payload-GHSLE7K3.js +2 -0
  136. package/dist/chunks/{project-agent-6RRO233B.js → project-agent-YYSQIHVE.js} +1 -1
  137. package/dist/chunks/{published-experiment-source-DZFENAQA.js → published-experiment-source-5TMGLKDM.js} +1 -1
  138. package/dist/chunks/refiner-profile-service-ZK7KAFP5.js +2 -0
  139. package/dist/chunks/{runtime-A7OZXM43.js → runtime-QFXCXSVB.js} +2 -2
  140. package/dist/chunks/{sandbox-command-IU5XFTJP.js → sandbox-command-U6346TVJ.js} +1 -1
  141. package/dist/chunks/{sandbox-template-C4V6T36U.js → sandbox-template-XWWPWWNR.js} +1 -1
  142. package/dist/chunks/saved-work-SWHZ4OLO.js +2 -0
  143. package/dist/chunks/{send-turn-XTAIS2JN.js → send-turn-SIXOZUVJ.js} +1 -1
  144. package/dist/chunks/{src-LMC3K6LH.js → src-6SHCCYEN.js} +1 -1
  145. package/dist/chunks/{src-INHPJ63Z.js → src-EZAKCCUV.js} +56 -56
  146. package/dist/chunks/standalone-experiment-turn-owner-LIAQWTGI.js +2 -0
  147. package/dist/chunks/{store-continual-support-reviews-HHA6NX7K.js → store-continual-support-reviews-GDX6CSUU.js} +1 -1
  148. package/dist/chunks/{store-conversation-serving-KPC62UEY.js → store-conversation-serving-W55XMDH4.js} +1 -1
  149. package/dist/chunks/{store-create-improve-QV54XIZW.js → store-create-improve-A7E7CUPZ.js} +1 -1
  150. package/dist/chunks/{store-datasets-RXJ33SUN.js → store-datasets-HKF3EO7B.js} +1 -1
  151. package/dist/chunks/{store-evaluation-results-3F3P527G.js → store-evaluation-results-645RFBGR.js} +1 -1
  152. package/dist/chunks/{store-human-review-RAH7WMIP.js → store-human-review-F5KESW52.js} +1 -1
  153. package/dist/chunks/{store-learned-preference-migration-validation-4CI2IRUF.js → store-learned-preference-migration-validation-V27XD4I7.js} +1 -1
  154. package/dist/chunks/{store-local-experiments-5LUJR7GI.js → store-local-experiments-HWQWNTIU.js} +1 -1
  155. package/dist/chunks/{store-model-batch-review-YEGX327M.js → store-model-batch-review-TOCSDVAP.js} +1 -1
  156. package/dist/chunks/{store-model-configuration-5ZURQATB.js → store-model-configuration-6543ASY2.js} +1 -1
  157. package/dist/chunks/{store-sidebar-file-bookmarks-VB5GTLFY.js → store-sidebar-file-bookmarks-53B7QIGS.js} +1 -1
  158. package/dist/chunks/{store-sidebar-preferences-GWIOG2NH.js → store-sidebar-preferences-YXGEJVUO.js} +1 -1
  159. package/dist/chunks/{store-subagents-T7R2Z6TB.js → store-subagents-HRCAK7VZ.js} +1 -1
  160. package/dist/chunks/{store-task-inbox-JJTBW76C.js → store-task-inbox-WF74W4U2.js} +11 -11
  161. package/dist/chunks/{store-task-inventory-OB3F2APC.js → store-task-inventory-KHCTEZVK.js} +1 -1
  162. package/dist/chunks/{store-taskset-drafts-EKQWWFYQ.js → store-taskset-drafts-3ACG5AVX.js} +1 -1
  163. package/dist/chunks/{store-training-G6YLFSIR.js → store-training-R46WOGXB.js} +1 -1
  164. package/dist/chunks/{store-training-jobs-RC46YBF6.js → store-training-jobs-D4LECE7O.js} +1 -1
  165. package/dist/chunks/{store-training-models-6BA43IPP.js → store-training-models-EQVNXOVB.js} +1 -1
  166. package/dist/chunks/{taskset-EQRFQBYM.js → taskset-NR2X2UOK.js} +1 -1
  167. package/dist/chunks/{taskset-packages-XC6HEE3K.js → taskset-packages-ONULEIVI.js} +1 -1
  168. package/dist/chunks/{teams-bot-EAPGPTHZ.js → teams-bot-CHUYMD6K.js} +1 -1
  169. package/dist/chunks/{training-UF6RPI4T.js → training-IDSGYGU2.js} +1 -1
  170. package/dist/chunks/{web-search-CZ3NCLPY.js → web-search-BPON7H5N.js} +1 -1
  171. package/dist/chunks/{workspaces-EKKE5NAC.js → workspaces-2TJRDM5K.js} +1 -1
  172. package/dist/cli.js +1 -1
  173. package/dist/index.js +1 -1
  174. package/dist/web/assets/App-pcwmC4IR.js +154 -0
  175. package/dist/web/assets/{AppDialog-t2Fx5tK3.js → AppDialog-CdHad7GT.js} +1 -1
  176. package/dist/web/assets/{AppTerminalPanel-Dj1Y32oI.js → AppTerminalPanel-CrmoOgd4.js} +2 -2
  177. package/dist/web/assets/AppsView-0P6cBsD4.js +1 -0
  178. package/dist/web/assets/{BrowserSidebar-jhWi4rVm.js → BrowserSidebar-Cb6edJw6.js} +1 -1
  179. package/dist/web/assets/{CartesianChart-C1DIx0Ia.js → CartesianChart-B2Sxi0lv.js} +1 -1
  180. package/dist/web/assets/{CollaborationTabs-Bdr-HmOL.js → CollaborationTabs-PP0AIXhb.js} +1 -1
  181. package/dist/web/assets/{CommandMenu-Ux2yOHAc.js → CommandMenu-GfQIMe6W.js} +1 -1
  182. package/dist/web/assets/{CommunityView-DPEeVKFn.js → CommunityView-V6KmMl5n.js} +1 -1
  183. package/dist/web/assets/ComposerCreateImproveStrip-oeVeyhPX.js +1 -0
  184. package/dist/web/assets/ConversationImportsSettings-CuQcvVgE.js +1 -0
  185. package/dist/web/assets/ConversationImportsSettings-PfUa8V7X.css +1 -0
  186. package/dist/web/assets/{GetStartedView-CFHP0AaI.js → GetStartedView-2oZ068h_.js} +1 -1
  187. package/dist/web/assets/{HostedModelLearningReview-D8BGTPVN.js → HostedModelLearningReview-DLzak_Vf.js} +1 -1
  188. package/dist/web/assets/{HostedModelLearningSettings-JS1S7vNO.js → HostedModelLearningSettings-Eca6Pd9R.js} +1 -1
  189. package/dist/web/assets/{LabModelVersionDetailPage-Dx5Q3xV2.js → LabModelVersionDetailPage-DsBblnMp.js} +1 -1
  190. package/dist/web/assets/LabSkillSidebar-DDknttrB.js +1 -0
  191. package/dist/web/assets/{LabsRoute-CyYF8-dw.js → LabsRoute-CgNiUHsy.js} +4 -4
  192. package/dist/web/assets/MainChatThread-yCVg99LU.js +2 -0
  193. package/dist/web/assets/MainPane-C86le7UF.js +65 -0
  194. package/dist/web/assets/{MarkdownText-BR4V6lNO.js → MarkdownText-BBVriBCj.js} +1 -1
  195. package/dist/web/assets/{NativeSkillSidebar-DU9IEgIO.js → NativeSkillSidebar-D2uVZkqh.js} +1 -1
  196. package/dist/web/assets/{NewExperienceSwitcher-mIy6FzCj.js → NewExperienceSwitcher-DuD6GScJ.js} +1 -1
  197. package/dist/web/assets/{NewProjectDialog-RfTZTHxl.js → NewProjectDialog-B6XZkJrU.js} +1 -1
  198. package/dist/web/assets/OutputsPage-PUlmcWjv.js +1 -0
  199. package/dist/web/assets/{ProjectsPage-CE6QUB-b.js → ProjectsPage-DWBRmej6.js} +1 -1
  200. package/dist/web/assets/RightChatPanelStack-HaCVep4t.js +1 -0
  201. package/dist/web/assets/{RightSidebarHomePanel-CK0rP3WT.js → RightSidebarHomePanel-BUtdPb2L.js} +1 -1
  202. package/dist/web/assets/{ScheduledWorkPage-vOrYv8pp.js → ScheduledWorkPage-Dg9GkGrT.js} +1 -1
  203. package/dist/web/assets/SettingsView-DjjnCnlb.css +1 -0
  204. package/dist/web/assets/{SettingsView-DCKVrfjj.js → SettingsView-DtldfnV-.js} +4 -4
  205. package/dist/web/assets/{TeamChatView-Bwrjr-vk.js → TeamChatView-C71JX4je.js} +2 -2
  206. package/dist/web/assets/{TerminalOverlay-DhPoKZAq.js → TerminalOverlay-B4F6Q36s.js} +1 -1
  207. package/dist/web/assets/TrainingCreationPanel-B9MxFzQx.js +1 -0
  208. package/dist/web/assets/{TrainingDraftPanel-C9cRX5qf.js → TrainingDraftPanel-7C48sHfC.js} +1 -1
  209. package/dist/web/assets/{UsageSettingsSection-CrdcSGeW.js → UsageSettingsSection-CC57FcUB.js} +1 -1
  210. package/dist/web/assets/{WorkSidebarPanel-DSSikNFQ.js → WorkSidebarPanel-Cto1usLM.js} +1 -1
  211. package/dist/web/assets/{WorkspaceDiffPanel-BAFo0CPN.js → WorkspaceDiffPanel-CL7wi3kp.js} +3 -3
  212. package/dist/web/assets/{WorkspaceEnvironmentMenu-BVHAhwnJ.js → WorkspaceEnvironmentMenu-zdzSDofs.js} +18 -18
  213. package/dist/web/assets/{WorkspaceGitDialogs-CwVoiDQ2.js → WorkspaceGitDialogs-CZSmjnrc.js} +1 -1
  214. package/dist/web/assets/{WorkspaceMonacoEditor-TxLyhzNp.js → WorkspaceMonacoEditor-TrUDJMKb.js} +3 -3
  215. package/dist/web/assets/agent-connections-4Dza2mDg.js +1 -0
  216. package/dist/web/assets/{arrow-up-right-C9aE8Mfz.js → arrow-up-right-xKb5kWQJ.js} +1 -1
  217. package/dist/web/assets/{chunk-P3BRSSRD-DUGfuKA8.js → chunk-P3BRSSRD-BsGTkgyC.js} +1 -1
  218. package/dist/web/assets/{clipboard-Dk158Qp4.js → clipboard-BgjV3aCx.js} +1 -1
  219. package/dist/web/assets/{cloud-upload-k9eqBsHr.js → cloud-upload-Bw9XUsKQ.js} +1 -1
  220. package/dist/web/assets/{cssMode-CO35ARZp.js → cssMode-DxsFJGb-.js} +1 -1
  221. package/dist/web/assets/{folder-open-sYgceW_f.js → folder-open-CbmUjIYS.js} +1 -1
  222. package/dist/web/assets/{folder-plus-CS0R49m9.js → folder-plus-slsst7Ct.js} +1 -1
  223. package/dist/web/assets/{git-commit-horizontal-DrGxH2h4.js → git-commit-horizontal-BIS-8MuS.js} +1 -1
  224. package/dist/web/assets/{htmlMode-REMmzdfq.js → htmlMode-BE4VOrZo.js} +1 -1
  225. package/dist/web/assets/{index-C8aCGagb.js → index-DEg0S7Qk.js} +2 -2
  226. package/dist/web/assets/index-erq7hUne.css +1 -0
  227. package/dist/web/assets/{info-DLdbiUrh.js → info-5bL9xSSf.js} +1 -1
  228. package/dist/web/assets/{jsonMode-KEdMfkIf.js → jsonMode-CYimnBhD.js} +1 -1
  229. package/dist/web/assets/{lspLanguageFeatures-5KZwEoxW.js → lspLanguageFeatures-CiFuk-P7.js} +1 -1
  230. package/dist/web/assets/{minimize-2-CqcI4zcM.js → minimize-2-BGVWKvTg.js} +1 -1
  231. package/dist/web/assets/{monaco.contribution-omszXBEj.js → monaco.contribution-BTY4dJ0f.js} +2 -2
  232. package/dist/web/assets/{monaco.contribution-BJGj65F9.js → monaco.contribution-C7sMrcos.js} +2 -2
  233. package/dist/web/assets/{monaco.contribution-DO10L0zW.js → monaco.contribution-DUE3CQph.js} +2 -2
  234. package/dist/web/assets/{monaco.contribution-Cly9Wt7L.js → monaco.contribution-DkLVGT8N.js} +2 -2
  235. package/dist/web/assets/{monitor-BFVCcbxp.js → monitor-B5hx_tzp.js} +1 -1
  236. package/dist/web/assets/{play-C469pVZq.js → play-pmSO95Qg.js} +1 -1
  237. package/dist/web/assets/{python-Dw0YcVy9.js → python-CiZvL3LX.js} +1 -1
  238. package/dist/web/assets/{save-CtSjPydi.js → save-CvYL4DUg.js} +1 -1
  239. package/dist/web/assets/{square-BuImvLhT.js → square-DT_uFOml.js} +1 -1
  240. package/dist/web/assets/{toggleHighContrast-DjCO9lIP.js → toggleHighContrast-CrE1_HY0.js} +1 -1
  241. package/dist/web/assets/{tsMode-BAOnxKd6.js → tsMode-CI_PdZmj.js} +1 -1
  242. package/dist/web/assets/{upload-2JkFZo3h.js → upload-PVi8vC3T.js} +1 -1
  243. package/dist/web/assets/{useLocalAgentSchedules-BNqAisfS.js → useLocalAgentSchedules-BHJNVf42.js} +1 -1
  244. package/dist/web/assets/useProviderSettings-CU3zXyie.js +5 -0
  245. package/dist/web/assets/{useProviderSettings-CmL_BaxP.css → useProviderSettings-Cktvzinz.css} +1 -1
  246. package/dist/web/assets/{useSessionTurnCache-BHU2-Jmz.js → useSessionTurnCache-BE7cipLX.js} +1 -1
  247. package/dist/web/assets/{wifi-off-CpOAH62M.js → wifi-off-7WiFuOhD.js} +1 -1
  248. package/dist/web/assets/{workers-0QvlA2T5.js → workers-Cv8r4CvM.js} +1 -1
  249. package/dist/web/assets/{yaml-BK3qxo7D.js → yaml-Bj7mdkV2.js} +1 -1
  250. package/dist/web/index.html +2 -2
  251. package/docs/command-reference.md +10 -3
  252. package/docs/conversation-imports.md +57 -0
  253. package/package.json +1 -1
  254. package/dist/chunks/app-server-runtime-VCRNCNX2.js +0 -2
  255. package/dist/chunks/chunk-FV2R5RUN.js +0 -3
  256. package/dist/chunks/chunk-FY5KHLMW.js +0 -2
  257. package/dist/chunks/chunk-HY3GOBFJ.js +0 -58
  258. package/dist/chunks/chunk-KG325WTN.js +0 -2
  259. package/dist/chunks/chunk-MULXCKG7.js +0 -10
  260. package/dist/chunks/chunk-OGDADQGH.js +0 -143
  261. package/dist/chunks/chunk-QHWGQ3A4.js +0 -5
  262. package/dist/chunks/chunk-VRIEKBBH.js +0 -9
  263. package/dist/chunks/chunk-WJ43MJ3F.js +0 -2
  264. package/dist/chunks/chunk-YY7LEQGP.js +0 -2
  265. package/dist/chunks/cli-X25RSO2X.js +0 -2
  266. package/dist/chunks/connected-app-executor-IVLGQP65.js +0 -2
  267. package/dist/chunks/connection-HTF6CC7M.js +0 -2
  268. package/dist/chunks/core-commands-A2DGGIPS.js +0 -2
  269. package/dist/chunks/host-profile-evaluation-tools-NRLXL2S5.js +0 -2
  270. package/dist/chunks/host-profile-external-dataset-K3ICDHIP.js +0 -2
  271. package/dist/chunks/hosted-harness-runtime-723S5ZSH.js +0 -2
  272. package/dist/chunks/hosted-profile-compiler-2DQIFSXW.js +0 -2
  273. package/dist/chunks/import-MLZUHITH.js +0 -4
  274. package/dist/chunks/local-harness-improvement-runtime-JIQ6ZVDW.js +0 -2
  275. package/dist/chunks/local-harness-taskset-review-XVYTGAGK.js +0 -2
  276. package/dist/chunks/project-action-payload-7VGL7OER.js +0 -2
  277. package/dist/chunks/refiner-profile-service-UUIWFJVT.js +0 -2
  278. package/dist/chunks/saved-work-6BMBFP43.js +0 -2
  279. package/dist/chunks/standalone-experiment-turn-owner-JCY5LL5R.js +0 -2
  280. package/dist/web/assets/App-s-CJswyt.js +0 -154
  281. package/dist/web/assets/AppsView-BYE5EBDJ.js +0 -1
  282. package/dist/web/assets/ComposerCreateImproveStrip-CEgh4OtN.js +0 -1
  283. package/dist/web/assets/LabSkillSidebar-BxffN-pN.js +0 -1
  284. package/dist/web/assets/MainChatThread-DZpcFRFl.js +0 -2
  285. package/dist/web/assets/MainPane-5DTtwVCk.js +0 -65
  286. package/dist/web/assets/OutputsPage-Cr1Spf7S.js +0 -1
  287. package/dist/web/assets/RightChatPanelStack-T6VRWuHo.js +0 -1
  288. package/dist/web/assets/SettingsView-Dulr_xlq.css +0 -1
  289. package/dist/web/assets/TrainingCreationPanel-BXHfohNm.js +0 -1
  290. package/dist/web/assets/index-3iPNbbER.css +0 -1
  291. package/dist/web/assets/useProviderSettings-C4L4wDoh.js +0 -5
@@ -0,0 +1,86 @@
1
+ import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
2
+ import{a as Ht}from"./chunk-JFXINDOQ.js";import{a as Le,b as Z,c as D,g as De,h as ge}from"./chunk-APB2STJK.js";import{a as ke,m as I}from"./chunk-KGNCKIFP.js";import{a as p,e as Pt}from"./chunk-FTQLQJQV.js";var Me={codex:"Codex",claude_code:"Claude Code",hermes:"Hermes",openclaw:"OpenClaw",opencode:"OpenCode",grok_build:"Grok Build",pi:"Pi",oh_my_pi:"Oh My Pi"},v=32*1024*1024;import{homedir as Gt}from"node:os";import{realpath as qe,stat as be,readdir as zt,readFile as Xt}from"node:fs/promises";import{resolve as Ie,join as U,isAbsolute as Jt}from"node:path";function $e(e,t){let n=0;for(let a of t){if(!Number.isSafeInteger(a)||a<n||a>e.length)throw new RangeError("Canonical array prefix lengths must be ascending and within the array");n=a}let s=new ke().update("["),o=0;return t.map(a=>{for(;o<a;){let c=JSON.stringify([we(e[o])],null,2).slice(2,-2);s.update(o?`,
3
+ `:`
4
+ `).update(c),o++}return s.clone().update(o?`
5
+ ]
6
+ `:`]
7
+ `).digestHex()})}p($e,"contentHashArrayPrefixes");function we(e){if(e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="string")return e;if(Array.isArray(e))return Array.from({length:e.length},(n,s)=>{let o=Object.getOwnPropertyDescriptor(e,s);if(!o||o.get||o.set)throw new TypeError("Canonical array prefixes require plain JSON values");return we(o.value)});let t=e&&typeof e=="object"?Object.getPrototypeOf(e):void 0;if(e&&typeof e=="object"&&(t===Object.prototype||t===null))return Object.fromEntries(Object.keys(e).sort((n,s)=>n.localeCompare(s)).map(n=>{let s=Object.getOwnPropertyDescriptor(e,n);if(s.get||s.set)throw new TypeError("Canonical array prefixes require plain JSON values");return[n,we(s.value)]}));throw new TypeError("Canonical array prefixes require plain JSON values")}p(we,"sortJsonValue");import{opendir as jt,readFile as qt,stat as ie}from"node:fs/promises";import{basename as Wt,dirname as Bt,join as N,resolve as _e}from"node:path";function Pe(e,t){let n=t.HERMES_HOME?.trim();if(n){let o=n.replace(/\$(\w+)|\$\{([^}]+)\}/gu,(a,c,r)=>t[c||r]??a);return _e(o==="~"?e:o.startsWith("~/")?N(e,o.slice(2)):o)}let s=t.HERMES_DATA_DIR_SUFFIX||"";return process.platform==="win32"?N(t.LOCALAPPDATA?.trim()||N(e,"AppData","Local"),`hermes${s}`):N(e,`.hermes${s}`)}p(Pe,"hermesHome");var Ue=p(e=>ie(e).then(t=>t.isDirectory()).catch(()=>!1),"isDirectory"),Fe=p(e=>ie(e).then(t=>t.isFile()).catch(()=>!1),"isFile");async function Se(e,t){let n=[],s=await jt(e).catch(()=>null);if(!s)return n;let o=0;for await(let a of s){if(++o>100)throw new Error("More than 100 profile entries. Select the exact --source-path.");a.isDirectory()&&!a.isSymbolicLink()&&t(a.name)&&n.push(a.name)}return n.sort()}p(Se,"profileNames");async function He(e){if(Wt(Bt(e))==="profiles")return[{root:e}];let t=N(e,"profiles");try{let n=await Se(t,c=>/^[a-z0-9][a-z0-9_-]{0,63}$/u.test(c)),s=[];for(let c of n)await ie(N(t,".deleted",c)).then(()=>!0).catch(()=>!1)||await Fe(N(t,c,"state.db"))&&s.push({root:N(t,c)});let o="",a=N(e,"active_profile");if(await ie(a).then(c=>c.isFile()&&c.size<=1024).catch(()=>!1)&&(o=(await qt(a,"utf8")).replace(/^\uFEFF/u,"").trim().toLowerCase()),o&&o!=="default"){if(!/^[a-z0-9][a-z0-9_-]{0,63}$/u.test(o))return[{root:e,reason:"Hermes active profile is invalid. Select the exact --source-path."}];let c=s.findIndex(r=>r.root===N(t,o));c<0?s.unshift({root:N(t,o),reason:"Hermes active profile has no retained live state database. Select a profile explicitly."}):s.unshift(...s.splice(c,1))}return(await Fe(N(e,"state.db"))||!s.length)&&s.push({root:e}),s}catch(n){return[{root:e,reason:n instanceof Error?n.message:"Cannot inventory Hermes profiles. Select the exact --source-path."}]}}p(He,"hermesLocations");function oe(e){return/^[a-z0-9][a-z0-9._-]{0,63}$/u.test(e)&&!e.endsWith(".")&&!/^(?:con|prn|aux|nul|com[0-9]|lpt[0-9])(?:\.|$)/iu.test(e)}p(oe,"validOmpProfile");async function je(e,t){let n=N(e,t.PI_CONFIG_DIR||".omp"),s=(t.OMP_PROFILE!==void 0?t.OMP_PROFILE:t.PI_PROFILE)?.trim();if(s&&s!=="default"&&!oe(s))return[{root:n,reason:"Oh My Pi profile is invalid. Select the exact --source-path."}];if(t.PI_CODING_AGENT_SESSION_DIR)return[{root:_e(t.PI_CODING_AGENT_SESSION_DIR)}];let o=(process.platform==="linux"||process.platform==="darwin")&&t.XDG_DATA_HOME?N(t.XDG_DATA_HOME,"omp"):void 0;async function a(c){let r=c?N(n,"profiles",c,"agent"):N(n,"agent"),l=t.PI_PROFILE?.trim(),i=l&&oe(l)?N(n,"profiles",l,"agent"):void 0,d=!c&&t.PI_CODING_AGENT_DIR&&t.PI_CODING_AGENT_DIR!==i?_e(t.PI_CODING_AGENT_DIR):void 0,u=o&&(c?N(o,"profiles",c):o);return{root:(!d||d===r)&&u&&await Ue(u)?u:d||r}}if(p(a,"location"),s||t.OMP_PROFILE!==void 0||t.PI_PROFILE!==void 0||t.PI_CODING_AGENT_DIR)return[await a(s&&s!=="default"?s:void 0)];try{let c=new Set(await Se(N(n,"profiles"),oe));if(o)for(let l of await Se(N(o,"profiles"),oe))c.add(l);let r=[await a()];for(let l of[...c].sort()){let i=await a(l);await Ue(N(i.root,"sessions"))&&r.push(i)}return r}catch(c){return[{root:n,reason:c instanceof Error?c.message:"Cannot inventory Oh My Pi profiles. Select the exact --source-path."}]}}p(je,"ompLocations");async function cs(e){let t=e.home??Gt(),n=e.environment??process.env,s={codex:n.CODEX_HOME||U(t,".codex"),claude_code:n.CLAUDE_CONFIG_DIR||U(t,".claude"),hermes:Pe(t,n),openclaw:n.OPENCLAW_STATE_DIR||U(t,".openclaw"),opencode:U(n.XDG_DATA_HOME||U(t,".local/share"),"opencode"),grok_build:n.GROK_HOME||U(t,".grok"),pi:n.PI_CODING_AGENT_DIR||U(t,".pi/agent"),oh_my_pi:U(t,".omp/agent")},o=s.pi,a=!1;if(n.PI_CODING_AGENT_SESSION_DIR)s.pi=Ie(n.PI_CODING_AGENT_SESSION_DIR);else if(!e.locations?.pi)try{let r=U(o,"settings.json");if((await be(r)).size<=1024*1024){let l=JSON.parse(await Xt(r,"utf8"));typeof l.sessionDir=="string"&&l.sessionDir.trim()&&(Jt(l.sessionDir)?s.pi=l.sessionDir:a=!0)}}catch{}let c=[];for(let r of Object.keys(Me)){let l=e.locations?.[r]?[{root:e.locations[r]}]:r==="hermes"?await He(Ie(s.hermes)):r==="oh_my_pi"?await je(t,n):[{root:s[r]}];for(let i of l){let d=Ie(i.root),u=!1,y=!1;try{d=await qe(d);let f=await be(d);y=f.isFile(),u=f.isDirectory()||y}catch{}if(i.reason&&(u=!1),r==="openclaw"&&u&&!y){let f=U(d,"agents"),S=await zt(f,{withFileTypes:!0}).catch(()=>[]),g=[];for(let m of S.slice(0,100)){if(!m.isDirectory()||m.isSymbolicLink())continue;let h=U(f,m.name,"agent","openclaw-agent.sqlite");await be(h).then(_=>_.isFile()).catch(()=>!1)&&g.push(await qe(h))}if(g.length){for(let m of g)c.push({source:r,root:m,machineId:e.machineId,instanceId:`native-${I([e.machineId,r,m]).slice(0,40)}`,acquisition:"sqlite",available:!0,capabilities:{history:!0,live:!0,nativeResume:!1}});continue}}if(r==="pi"&&a&&!e.locations?.pi){c.push({source:r,root:d,machineId:e.machineId,instanceId:`native-${I([e.machineId,r,d]).slice(0,40)}`,acquisition:"files",available:!1,capabilities:{history:!1,live:!1,nativeResume:!1},reason:"Pi config uses a working-directory-relative sessionDir. Select its resolved directory with --source-path."});continue}c.push({source:r,root:d,machineId:e.machineId,instanceId:`native-${I([e.machineId,r,d]).slice(0,40)}`,acquisition:y&&!/\.(?:db|sqlite)$/u.test(d)?"files":r==="hermes"||r==="opencode"||r==="openclaw"&&y?"sqlite":r==="openclaw"?"bundle":"files",available:u,capabilities:{history:u,live:u&&(r!=="openclaw"||y),nativeResume:!1},...u?{}:{reason:i.reason??"Source location is missing or unreadable. Select a custom location."}})}}return c.filter((r,l)=>c.findIndex(i=>i.instanceId===r.instanceId)===l)}p(cs,"discoverSources");import{open as cn,lstat as ln,readdir as dn,readFile as pn,realpath as ft,stat as ht}from"node:fs/promises";import{basename as X,dirname as un,isAbsolute as Te,join as de,relative as fn,resolve as mn,sep as hn}from"node:path";import{zstdDecompressSync as yn}from"node:zlib";var Q=class extends Error{static{p(this,"ConnectedSessionWithoutUserRequestError")}constructor(){super("The session has no retained user request.")}};function C(e,t="milliseconds"){if(typeof e!="number"&&typeof e!="string")return null;let n=new Date(typeof e=="number"&&t==="seconds"?e*1e3:e);return Number.isFinite(n.getTime())?n.toISOString():null}p(C,"connectedTimestamp");function Yt(e){return{path:e.path,contentHash:I(e.text),sizeBytes:new TextEncoder().encode(e.text).length}}p(Yt,"connectedFileIdentity");function A(e){if(e.events.length+(e.unmappedEvents?.length??0)>D.events)throw new Error("connected_event_limit");let t=e.events.map((i,d)=>({...i,sequence:d}));if(new Set(t.map(i=>i.id)).size!==t.length)throw new Error("connected_duplicate_event");let n=t.flatMap((i,d)=>i.kind==="message"&&i.role==="user"?[d]:[]);if(!n.length)throw new Q;if(n.length+(e.includeConversation===!1?0:1)>D.boundaries)throw new Error("connected_boundary_limit");let s=`family-${I([e.origin,...e.acquisition?[e.acquisition.sourceInstanceId]:[],e.parentSessionId??e.sessionId]).slice(0,32)}`,o=$e(t,n.map(i=>i+1)),a=t.findIndex(i=>i.kind==="compaction"),c=n.map((i,d)=>{let u=n[d+1]??t.length,y=t.slice(i+1,u),f=y.filter(ge).at(-1),S=y.filter(O=>O.kind==="tool_call"||O.kind==="tool_result"),g=new Set(S.filter(O=>O.kind==="tool_call").map(O=>O.callId)),m=new Set(S.filter(O=>O.kind==="tool_result").map(O=>O.callId)),h=S.some(O=>!O.callId)||[...g].some(O=>!m.has(O))||[...m].some(O=>!g.has(O)),_=[...y].reverse().find(O=>O.kind==="terminal"),x=_&&typeof _.content=="object"&&_.content!==null&&!Array.isArray(_.content)?_.content.status:null,T=a>=0&&a<=i,R=y.some(O=>O.kind==="unknown");return{id:`case-${I([e.origin,...e.acquisition?[e.acquisition.sourceInstanceId]:[],e.sessionId,e.branchId??null,t[i].id]).slice(0,40)}`,familyKey:s,projection:"turn",requestEventId:t[i].id,start:i,end:u,inputHash:o[d],outputHash:f?I(f.content):null,revisionHash:I(y),terminal:x==="completed"||x==="failed"||x==="cancelled"?x:"unknown",coverage:{answer:!!f,context:e.contextComplete===!1?"unknown":T?"compacted":"retained",process:S.length?h||R?"partial":"retained":R?"partial":"absent",artifacts:y.some(O=>O.kind==="artifact")?"references_only":"absent",replay:"unavailable",gaps:[...f?[]:["No recorded assistant answer."],...e.contextComplete===!1?["The source omits preceding context."]:[],...T?["Earlier context was compacted by the source."]:[],...h?["Tool call/result correlation is incomplete."]:[],...R?["Some source events have no supported process mapping."]:[],..._?[]:["No terminal receipt was recorded."],"No resettable execution environment was admitted."]}}});if(e.includeConversation!==!1){let i=c[0],d=c.at(-1),u=t.slice(i.start+1),y=u.filter(ge);c.push({...i,id:`conversation-${I([e.origin,...e.acquisition?[e.acquisition.sourceInstanceId]:[],e.sessionId,e.branchId??null]).slice(0,40)}`,projection:"conversation",end:t.length,outputHash:y.length?I(y.map(f=>f.content)):null,revisionHash:I(u),terminal:d.terminal,coverage:{...i.coverage,answer:y.length>0,process:c.some(f=>f.coverage.process==="partial")?"partial":c.some(f=>f.coverage.process==="retained")?"retained":"absent",context:c.some(f=>f.coverage.context==="unknown")?"unknown":c.some(f=>f.coverage.context==="compacted")?"compacted":"retained",artifacts:c.some(f=>f.coverage.artifacts==="references_only")?"references_only":"absent",gaps:[...new Set(c.flatMap(f=>f.coverage.gaps))].slice(0,100)}})}let r={schemaVersion:Le,normalizerVersion:Z,origin:e.origin,sessionId:e.sessionId,branchId:e.branchId??null,parentSessionId:e.parentSessionId??null,exporterVersion:e.exporterVersion??null,sourceFiles:e.files.map(Yt).sort((i,d)=>i.path.localeCompare(d.path)),...e.acquisition?{acquisition:e.acquisition}:{},events:t,unmappedEvents:(e.unmappedEvents??[]).map((i,d)=>({...i,sequence:d})),boundaries:c,warnings:e.warnings??[]},l=De.parse({...r,contentHash:I(r)});if(new TextEncoder().encode(JSON.stringify(l)).length>D.decodedBytes)throw new Error("connected_normalized_size_limit");return l}p(A,"normalizeConnectedSession");function q(e){if(new TextEncoder().encode(e.text).length>D.decodedBytes)throw new Error("Decoded source files exceed 64 MiB.");let t=e.text.replace(/^\uFEFF/u,"").split(/\r?\n/u);if(t.length>D.events+1)throw new Error("connected_event_limit");return t.flatMap((n,s)=>{if(!n.trim())return[];if(new TextEncoder().encode(n).length>D.lineBytes)throw new Error(`Source line ${s+1} exceeds the limit.`);let o;try{o=JSON.parse(n)}catch{throw new Error(`Invalid JSON on line ${s+1}.`)}if(!o||typeof o!="object"||Array.isArray(o))throw new Error(`Unsupported record on line ${s+1}.`);return[o]})}p(q,"connectedJsonLines");function E(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}p(E,"object");function w(e){return{sequence:0,occurredAt:null,role:null,callId:null,parentId:null,usage:null,...e}}p(w,"event");function b(e){return JSON.parse(JSON.stringify(e??null))}p(b,"json");function M(e,t,n="reported_invocation"){let s=E(e),o=p((...i)=>{let d=i.find(u=>typeof u=="number"&&Number.isSafeInteger(u)&&u>=0);return typeof d=="number"?d:null},"number"),a=o(s.input_tokens,s.prompt_tokens),c=o(s.output_tokens,s.completion_tokens),r=o(s.cache_read_input_tokens,s.cached_input_tokens,E(s.input_tokens_details).cached_tokens),l=o(s.total_tokens);return a===null&&c===null&&r===null&&l===null?null:{invocationId:t,inputTokens:a,outputTokens:c,cachedInputTokens:r,totalTokens:l,provenance:n}}p(M,"sourceUsage");function We(e,t){let n=new Set(t.map(i=>E(i.params).sessionId).filter(i=>typeof i=="string"));if(n.size!==1)throw new Error("Grok Build updates must identify exactly one retained session.");let s=[],o=new Set,a=new Map,c=null,r=null,l=!0;for(let i of t){let d=E(i.params),u=E(d.update),y=E(d._meta),f=u.sessionUpdate;if(typeof y.eventId!="string"||o.has(y.eventId))throw new Error("Grok Build updates require unique native event IDs.");o.add(y.eventId);let S=y.eventId,g=C(y.agentTimestampMs??(typeof i.timestamp=="number"?i.timestamp*1e3:null)),m=E(u.content);if(f==="user_message_chunk"){if(m.type!=="text"||typeof m.text!="string")throw new Error("Grok user content type requires a qualified adapter.");!c||l?(c=w({id:S,kind:"message",role:"user",occurredAt:g,content:m.text}),s.push(c),r=null,l=!1):c.content=String(c.content)+m.text}else if(f==="agent_message_chunk"){if(m.type!=="text"||typeof m.text!="string"){s.push(w({id:S,kind:"unknown",occurredAt:g,content:b(u)}));continue}r?r.content=String(r.content)+m.text:(r=w({id:S,kind:"message",role:"assistant",occurredAt:g,content:m.text}),s.push(r))}else if(f==="tool_call"||f==="tool_call_update"){let h=typeof u.toolCallId=="string"?u.toolCallId:null;if(!h){s.push(w({id:S,kind:"unknown",occurredAt:g,content:b(u)}));continue}let _=a.get(h);_?u.rawInput!==void 0&&(_.content=b({title:u.title,input:u.rawInput})):(_=w({id:`${S}:call`,kind:"tool_call",callId:h,occurredAt:g,content:b({title:u.title,input:u.rawInput})}),a.set(h,_),s.push(_)),(u.status==="completed"||u.status==="failed")&&s.push(w({id:`${S}:result`,kind:"tool_result",role:"tool",callId:h,occurredAt:g,content:b({status:u.status,output:u.rawOutput,content:u.content})}))}else if(f==="turn_completed"){let h=E(u.usage),_=typeof u.prompt_id=="string"?u.prompt_id:S;s.push(w({id:S,kind:"terminal",occurredAt:g,content:{status:u.stop_reason==="end_turn"?"completed":u.stop_reason==="cancelled"?"cancelled":"failed"},usage:M({input_tokens:h.inputTokens,output_tokens:h.outputTokens,cached_input_tokens:h.cachedReadTokens,total_tokens:h.totalTokens},_)})),l=!0,r=null,c=null}else f!=="agent_thought_chunk"&&s.push(w({id:S,kind:"unknown",occurredAt:g,content:b(u)}))}return A({origin:"grok_build",sessionId:String([...n][0]),files:[e],events:s,contextComplete:!1,warnings:["Grok retained ACP updates omit system context and encrypted reasoning. Tool coverage reflects only logged updates."]})}p(We,"parseGrokBuildSession");function Be(e,t,n,s){let o=t.filter(h=>h.type==="session"),a=o[0];if(o.length!==1||!a||!(n==="openclaw"?[3,4].includes(Number(a.version)):a.version===3)||typeof a.id!="string")throw new Error("Unsupported native session tree version.");let c,l=(n!=="openclaw"?t:t.map(h=>{if(h.type==="session")return h;if(h.type==="leaf"){if(typeof h.targetId!="string")throw new Error("OpenClaw leaf control does not select a retained entry.");return c=h.targetId,h}if(typeof h.id!="string")throw new Error("OpenClaw transcript entry is missing its native identity.");let _=h.parentId===void 0?c??null:h.parentId;return h.appendMode!=="side"&&(c=h.id),{...h,parentId:_}})).filter(h=>h.type!=="session"&&h.type!=="title"&&h.type!=="leaf"),i=new Map,d=new Set;for(let h of l){if(typeof h.id!="string"||i.has(h.id))throw new Error("Session tree has missing or duplicate entry identities.");i.set(h.id,h),typeof h.parentId=="string"&&d.add(h.parentId)}s??=c;let u=[...i.keys()].filter(h=>!d.has(h));if(!s&&u.length!==1)throw new Error("Select a branch leaf for this branched session.");let y=s??u[0];if(!y||!i.has(y))throw new Error("The selected session branch is unavailable.");let f=[],S=new Set,g=y;for(;g;){if(S.has(g))throw new Error("Session branch contains a cycle.");S.add(g);let h=i.get(g);if(!h)throw new Error("Session branch has a missing ancestor.");f.push(h),g=typeof h.parentId=="string"?h.parentId:null}f.reverse();let m=[];for(let h of f){let _=String(h.id),x={occurredAt:C(h.timestamp),parentId:typeof h.parentId=="string"?h.parentId:null};if(h.type==="compaction"||h.type==="branch_summary"){m.push(w({...x,id:_,kind:"compaction",content:b({summary:h.summary,firstKeptEntryId:h.firstKeptEntryId})}));continue}if(h.type!=="message")continue;let T=E(h.message),R=T.role;if(R==="toolResult"){m.push(w({...x,id:_,kind:"tool_result",role:"tool",callId:typeof T.toolCallId=="string"?T.toolCallId:null,content:b({content:T.content,isError:T.isError===!0})}));continue}if(R!=="user"&&R!=="assistant"&&R!=="system"){m.push(w({...x,id:_,kind:"unknown",content:b({role:R,content:T.content})}));continue}let O=Array.isArray(T.content)?T.content.map(E):[],K=typeof T.content=="string"?T.content:O.filter(F=>F.type==="text").map(F=>String(F.text??"")).join(`
8
+ `),L=E(T.usage),z=M({input_tokens:L.input,output_tokens:L.output,cached_input_tokens:L.cacheRead,total_tokens:L.totalTokens},_);K||R!=="assistant"?m.push(w({...x,id:_,kind:"message",role:R,content:R==="system"&&!K&&T.sections?b(T.sections):K,usage:z})):z&&m.push(w({...x,id:`${_}:usage`,kind:"usage",content:null,usage:z}));for(let[F,j]of O.entries())j.type==="toolCall"?m.push(w({...x,id:`${_}:call:${F}`,kind:"tool_call",callId:typeof j.id=="string"?j.id:null,content:b({name:j.name,arguments:j.arguments})})):j.type!=="text"&&j.type!=="thinking"&&m.push(w({...x,id:`${_}:block:${F}`,kind:"unknown",content:b(j)}));R==="assistant"&&["stop","error","aborted"].includes(String(T.stopReason))&&m.push(w({...x,id:`${_}:terminal`,kind:"terminal",content:{status:T.stopReason==="stop"?"completed":T.stopReason==="aborted"?"cancelled":"failed"}}))}return A({origin:n,sessionId:a.id,branchId:null,...n==="openclaw"?{contextComplete:!1}:{},files:[e],events:m,exporterVersion:`session-v${a.version}`,warnings:["Only the selected branch is included. Private provider payloads and credential metadata are excluded."]})}p(Be,"parsePiSession");function Ge(e,t){let n=E(t),s=E(n.info);if(typeof s.id!="string"||!Array.isArray(n.messages))throw new Error("OpenCode requires its native JSON session export (info and messages).");let o=[];for(let a of n.messages){let c=E(a),r=E(c.info),l=E(r.time);if(typeof r.id!="string"||r.sessionID!==s.id||!Array.isArray(c.parts))throw new Error("OpenCode message identity does not match its session.");let i=r.role;if(i!=="user"&&i!=="assistant")throw new Error("Unsupported OpenCode message role.");let d={occurredAt:C(l.created),parentId:typeof r.parentID=="string"?r.parentID:null},u=c.parts.map(E);if(u.some(m=>m.sessionID!==s.id||m.messageID!==r.id||typeof m.id!="string"))throw new Error("OpenCode part identity does not match its message.");let y=u.filter(m=>m.type==="text").map(m=>String(m.text??"")).join(`
9
+ `),f=E(r.tokens),S=E(f.cache),g=M({input_tokens:f.input,output_tokens:f.output,cached_input_tokens:S.read,total_tokens:f.total},r.id);y||i==="user"?o.push(w({...d,id:r.id,kind:"message",role:i,content:y,usage:g})):g&&o.push(w({...d,id:`${r.id}:usage`,kind:"usage",content:null,usage:g}));for(let m of u){let h=String(m.id);if(m.type==="tool"){let _=E(m.state),x=typeof m.callID=="string"?m.callID:null;o.push(w({...d,id:`${h}:call`,kind:"tool_call",callId:x,content:b({name:m.tool,arguments:_.input})})),(_.status==="completed"||_.status==="error")&&o.push(w({...d,id:`${h}:result`,kind:"tool_result",role:"tool",callId:x,content:b({output:_.output,error:_.error,status:_.status})}))}else m.type==="compaction"?o.push(w({...d,id:h,kind:"compaction",content:b(m)})):["text","reasoning","step-start","step-finish"].includes(String(m.type))||o.push(w({...d,id:h,kind:"unknown",content:b(m)}))}i==="assistant"&&(r.finish==="stop"||r.error)&&o.push(w({...d,id:`${r.id}:terminal`,kind:"terminal",content:{status:r.error?"failed":"completed"}}))}return A({origin:"opencode",sessionId:s.id,parentSessionId:typeof s.parentID=="string"?s.parentID:null,exporterVersion:typeof s.version=="string"?s.version:null,files:[e],events:o,warnings:["Source-reported usage is not an OpenPond billing receipt."]})}p(Ge,"parseOpenCodeSession");var Oe="codex-native-authorization-v1",Vt=Oe;function ze(e){let t=[],n=p((a,c,r)=>{let l={policy:Vt,sourcePath:a,sourceHash:I(c),entries:r};return t.push(l),l},"omit"),s=p((a,c)=>a.replace(/<permissions instructions>[\s\S]*?<\/permissions instructions>/gu,r=>r.replace(/^## Approved command prefixes\r?\n[\s\S]*?(?=^## |<\/permissions instructions>)/gmu,l=>{let i=n(c,l,null);return`## Approved command prefixes
10
+ [Native authorization rules omitted; policy ${i.policy}; source hash ${i.sourceHash}]
11
+ `})),"permissionsText"),o=E(e.payload);if(e.type==="response_item"&&o.type==="message"&&["system","developer"].includes(String(o.role))){let a=typeof o.content=="string"?s(o.content,"/payload/content"):Array.isArray(o.content)?o.content.map((c,r)=>{let l=E(c);return typeof l.text=="string"?{...l,text:s(l.text,`/payload/content/${r}/text`)}:c}):o.content;return{row:{...e,payload:{...o,content:a}},omissions:t}}if(e.type==="world_state"){let a=E(o.state),c=E(a.permissions);if(Array.isArray(c.approved_command_prefixes)){let r=n("/payload/state/permissions/approved_command_prefixes",c.approved_command_prefixes,c.approved_command_prefixes.length);return{row:{...e,payload:{...o,state:{...a,permissions:{...c,approved_command_prefixes:{omitted:"native_authorization_state",...r}}}}},omissions:t}}}return{row:e,omissions:t}}p(ze,"projectCodexAuthorization");function Xe(e,t){let n=E(t.find(c=>c.type==="session_meta")?.payload);if(typeof n.id!="string")throw new Error("This is not a supported Codex rollout: session_meta.id is missing.");let s=[],o=null,a=0;for(let[c,r]of t.entries()){let l=ze(r);a+=l.omissions.length;let i=E(l.row.payload);if(r.type==="session_meta")continue;if(r.type==="turn_context"){o=typeof i.turn_id=="string"?i.turn_id:o;continue}let u={id:typeof i.id=="string"?i.id:`codex-event-${I([c,r]).slice(0,32)}`,occurredAt:C(r.timestamp),parentId:o};if(r.type==="response_item")i.type==="message"&&["user","assistant","system","developer"].includes(String(i.role))?s.push(w({...u,kind:"message",role:i.role==="developer"?"system":i.role,content:b(i.content)})):i.type==="function_call"||i.type==="custom_tool_call"?s.push(w({...u,kind:"tool_call",callId:typeof i.call_id=="string"?i.call_id:null,content:b(i)})):i.type==="function_call_output"||i.type==="custom_tool_call_output"?s.push(w({...u,kind:"tool_result",role:"tool",callId:typeof i.call_id=="string"?i.call_id:null,content:b(i.output)})):s.push(w({...u,kind:"unknown",content:b(i)}));else if(r.type==="compacted")s.push(w({...u,kind:"compaction",content:b(i)}));else if(r.type==="event_msg"){if(["user_message","agent_message","agent_reasoning","task_started"].includes(String(i.type)))continue;if(i.type==="task_complete"||i.type==="turn_aborted")s.push(w({...u,kind:"terminal",content:{status:i.type==="task_complete"?"completed":"cancelled",source:b(i)}}));else if(i.type==="token_count"){let y=E(i.info),f=M(y.total_token_usage,`codex-cumulative:${n.id}:${c}`,"reported_cumulative");s.push(w({...u,kind:"usage",usage:f,content:b(i)}))}else s.push(w({...u,kind:"unknown",content:b(i)}))}else s.push(w({...u,kind:"unknown",content:b(l.row)}))}return A({origin:"codex",sessionId:n.id,parentSessionId:typeof n.forked_from_id=="string"?n.forked_from_id:null,exporterVersion:typeof n.cli_version=="string"?n.cli_version:null,files:[e],events:s,warnings:["Codex cumulative usage is retained as reported totals and is not summed as billed invocations.","Referenced files are unavailable unless separately admitted.",...a?[`Codex native authorization state excluded by codex-native-authorization-v1 from ${a} locations. Omission markers retain source-section hashes; sourceFiles retains original byte hashes. Other conversation evidence is unchanged and still requires privacy admission.`]:[]]})}p(Xe,"parseCodexSession");function ee(e){let t=e.filter(d=>(d.type==="user"||d.type==="assistant")&&typeof d.uuid=="string"),n=new Set(t.flatMap(d=>typeof d.sessionId=="string"?[d.sessionId]:[]));if(n.size!==1||!t.length)throw new Error("A supported Claude Code transcript must identify one session with UUID messages.");let s=[...n][0],o=e.filter(d=>typeof d.uuid=="string"&&d.sessionId===s),a=new Map(o.map(d=>[d.uuid,d]));if(a.size!==o.length)throw new Error("Claude Code transcript contains duplicate message UUIDs.");let c=new Set(o.flatMap(d=>typeof d.parentUuid=="string"?[d.parentUuid]:[])),r=o.filter(d=>!c.has(d.uuid));if(!r.length)throw new Error("Claude Code transcript has no selectable branch leaf.");function l(d){let u=a.get(d);if(!u)throw new Error("The selected Claude Code branch leaf is missing.");let y=[],f=new Set,S=!1;for(;u;){let g=u.uuid;if(f.has(g))throw new Error("Claude Code branch contains a parent cycle.");f.add(g),y.unshift(u);let m=u.parentUuid;if(typeof m!="string")break;u=a.get(m),u||(S=!0)}return{chain:y,missingParent:S,chainHash:I(y)}}p(l,"select");function i(){if(r.length>256)throw new Error("This transcript exceeds the 256-branch inspection limit.");return r.map(d=>{let u=l(d.uuid),y=u.chain.filter(m=>m.type==="user"||m.type==="assistant"),f=y.at(-1),S=E(f?.message).content,g=typeof S=="string"?S:Array.isArray(S)?S.flatMap(m=>typeof E(m).text=="string"?[E(m).text]:[]).join(" "):"";return{leafId:d.uuid,chainHash:u.chainHash,title:g.slice(0,180),updatedAt:C(f?.timestamp),messages:y.length}})}return p(i,"branches"),{sessionId:s,leaves:r,select:l,branches:i}}p(ee,"claudeGraph");function Je(e,t,n){let s=ee(t);if(!n&&s.leaves.length!==1)throw new Error("This transcript has multiple branches. Select a branch leaf UUID before importing.");let{chain:o,missingParent:a}=s.select(n??s.leaves[0].uuid),c=[];for(let r of o){if(r.type!=="user"&&r.type!=="assistant")continue;let l=E(r.message),i=l.content,d={occurredAt:C(r.timestamp),parentId:typeof r.parentUuid=="string"?r.parentUuid:null},u=r.type==="user"?"user":"assistant",y=Array.isArray(i)?i:[{type:"text",text:i}],f=y.filter(S=>E(S).type==="text");f.length&&c.push(w({...d,id:r.uuid,kind:"message",role:u,content:b(f)})),u==="assistant"&&l.usage&&c.push(w({...d,id:`${r.uuid}:usage`,kind:"usage",content:b(l.usage),usage:M(l.usage,typeof l.id=="string"?l.id:r.uuid)}));for(let[S,g]of y.entries()){let m=E(g);if(m.type==="text"||m.type==="thinking"||m.type==="redacted_thinking")continue;let h=`${r.uuid}:${S}`;m.type==="tool_use"?c.push(w({...d,id:h,kind:"tool_call",callId:typeof m.id=="string"?m.id:null,content:b(m)})):m.type==="tool_result"?c.push(w({...d,id:h,kind:"tool_result",role:"tool",callId:typeof m.tool_use_id=="string"?m.tool_use_id:null,content:b(m)})):c.push(w({...d,id:h,kind:"unknown",content:b(m)}))}l.stop_reason==="end_turn"&&c.push(w({...d,id:`${r.uuid}:terminal`,kind:"terminal",content:{status:"completed"}}))}return t.some(r=>r.type==="system"&&r.subtype==="compact_boundary")&&c.unshift(w({id:`compaction-${I(t.filter(r=>r.subtype==="compact_boundary")).slice(0,32)}`,kind:"compaction",content:{source:"claude_compact_boundary"}})),A({origin:"claude_code",sessionId:s.sessionId,branchId:null,parentSessionId:typeof o[0]?.parentSessionId=="string"?o[0].parentSessionId:null,exporterVersion:typeof o.at(-1)?.version=="string"?o.at(-1).version:null,files:[e],events:c,contextComplete:!a,warnings:[...a?["The transcript omits an ancestor; complete context is unavailable."]:[],...o.some(r=>r.isSidechain)?["This is a subagent/sidechain transcript; parent context is not implicitly imported."]:[],"Claude Code transcript schema is internal; only the declared message shapes are normalized."]})}p(Je,"parseClaudeSession");function Ye(e,t){let n=[];for(let[s,o]of e.entries()){let a=E(o),c=typeof a.entryId=="string"?a.entryId:typeof a.id=="string"?a.id:typeof a.id=="number"&&Number.isSafeInteger(a.id)?String(a.id):typeof a.message_id=="string"?a.message_id:`${t}-${I([s,a]).slice(0,32)}`,r={occurredAt:C(a.timestamp,t==="hermes"?"seconds":"milliseconds"),parentId:typeof a.parentId=="string"?a.parentId:null};if(a.role==="tool"){n.push(w({...r,id:c,kind:"tool_result",role:"tool",callId:typeof a.tool_call_id=="string"?a.tool_call_id:null,content:b(a.content)}));continue}if(!["user","assistant","system"].includes(String(a.role))){n.push(w({...r,id:c,kind:"unknown",content:b(a)}));continue}if(n.push(w({...r,id:c,kind:"message",role:a.role,content:b(a.content),usage:M(a.usage,c)})),Array.isArray(a.tool_calls))for(let[l,i]of a.tool_calls.entries()){let d=E(i);n.push(w({...r,id:`${c}:call:${l}`,kind:"tool_call",callId:typeof d.id=="string"?d.id:null,content:b(d)}))}(a.finish_reason==="stop"||a.stop_reason==="end_turn")&&n.push(w({...r,id:`${c}:terminal`,kind:"terminal",content:{status:"completed"}}))}return n}p(Ye,"historyEvents");function Ve(e,t){let n=typeof t.id=="string"?t.id:typeof t.session_id=="string"?t.session_id:null;if(!n||!Array.isArray(t.messages))throw new Error("Hermes requires a full-session export with id or session_id and messages.");if(t.message_count!==void 0&&t.message_count!==t.messages.length)throw new Error("Hermes full-session message count differs from the retained messages.");let s=Array.isArray(t.lineage_session_ids)?t.lineage_session_ids.find(a=>typeof a=="string"&&a):null,o=Ye(t.messages,"hermes");return typeof t.system_prompt=="string"&&t.system_prompt.trim()&&o.unshift(w({id:`hermes-system-${I(t.system_prompt).slice(0,32)}`,kind:"message",role:"system",content:t.system_prompt})),A({origin:"hermes",sessionId:n,parentSessionId:typeof s=="string"?s:typeof t.parent_session_id=="string"?t.parent_session_id:null,exporterVersion:typeof t.version=="string"?t.version:null,files:[e],events:o,warnings:["Reported usage is not an OpenPond billing receipt.","Exporter redaction and missing tools/artifacts remain evidence gaps.",...t.session_id&&!t.id?["This is a Hermes session backup. Exporter version and terminal receipts may be unavailable."]:[]]})}p(Ve,"parseHermesEvidence");function Ke(e){let t=p(u=>{let y=e.find(f=>f.path===u);if(!y)throw new Error(`OpenClaw bundle is missing ${u}.`);return y},"read"),n=E(JSON.parse(t("manifest.json").text)),s=E(JSON.parse(t("session-branch.json").text)),o=t("events.jsonl"),a=q(o);if(n.traceSchema!=="openclaw-trajectory"||n.schemaVersion!==1||typeof n.sessionId!="string"||typeof n.traceId!="string")throw new Error("Unsupported OpenClaw trajectory manifest.");if(n.leafId!==s.leafId||n.eventCount!==a.length||a.some(u=>u.traceSchema!==n.traceSchema||u.schemaVersion!==1||u.sessionId!==n.sessionId||u.traceId!==n.traceId))throw new Error("OpenClaw bundle identity/count does not match its manifest.");if(!Array.isArray(s.entries))throw new Error("OpenClaw active branch entries are missing.");if(s.header&&E(s.header).id!==n.sessionId)throw new Error("OpenClaw branch header differs from the manifest session.");let c=new Set,r=[];for(let[u,y]of s.entries.entries()){let f=E(y);if(typeof f.id!="string"||c.has(f.id)||u>0&&f.parentId!==E(s.entries[u-1]).id)throw new Error("OpenClaw active branch is duplicate, incomplete or unordered.");c.add(f.id),f.type==="message"&&r.push({...E(f.message),entryId:f.id,parentId:f.parentId??null,timestamp:f.timestamp??E(f.message).timestamp})}if(s.entries.length&&E(s.entries.at(-1)).id!==s.leafId)throw new Error("OpenClaw branch does not reach its leaf.");let l=Ye(r,"openclaw"),i=[],d=new Set;for(let[u,y]of a.entries()){if(!Number.isSafeInteger(y.seq)||y.seq<0||d.has(y.seq)||u>0&&Number(a[u-1].seq)>=Number(y.seq))throw new Error("OpenClaw events have invalid/duplicate/unordered sequences.");d.add(y.seq),i.push(w({id:`trajectory:${n.traceId}:${y.seq}`,kind:"unknown",occurredAt:C(y.ts),content:b(y)}))}return A({origin:"openclaw",sessionId:n.sessionId,files:e,events:l,unmappedEvents:i,exporterVersion:typeof n.openclawVersion=="string"?n.openclawVersion:null,warnings:["Raw trajectory events are retained; unqualified event types are not advertised as complete process grading.",...Array.isArray(n.warnings)?n.warnings.map(u=>typeof E(u).message=="string"?String(E(u).message).slice(0,500):"The source exporter reports incomplete evidence."):[]].slice(0,100)})}p(Ke,"parseOpenClawEvidence");function pr(e){return e==="codex"?`${Z}/${Oe}`:Z}p(pr,"agentImportNormalizerRevision");function Ze(e){if(!e.files.length||e.files.length>D.files)throw new Error("Choose between 1 and 100 source files.");let t=new Set,n=0;for(let r of e.files){if(r.path.length>500||r.path.startsWith("/")||r.path.includes("\\")||r.path.split("/").some(l=>!l||l==="."||l==="..")||t.has(r.path))throw new Error("Unsafe or duplicate source file path.");t.add(r.path),n+=new TextEncoder().encode(r.text).length}if(n>D.decodedBytes)throw new Error("Decoded source files exceed 64 MiB.");let s=[],o=[],a=p((r,l)=>{try{s.push(...l().map(i=>e.acquisition?A({origin:i.origin,sessionId:i.sessionId,branchId:i.branchId,parentSessionId:i.parentSessionId,exporterVersion:i.exporterVersion,files:e.files.filter(d=>i.sourceFiles.some(u=>u.path===d.path)),events:i.events,unmappedEvents:i.unmappedEvents,warnings:i.warnings,contextComplete:!i.boundaries.some(d=>d.coverage.context==="unknown"),acquisition:e.acquisition}):i))}catch(i){o.push({file:r,...i instanceof Q?{code:"no_user_request"}:{},message:i instanceof Error?i.message:"Unsupported session."})}},"attempt");if(e.source==="openclaw"&&e.files.some(r=>r.path.endsWith("manifest.json")))a("manifest.json",()=>{let r=e.files[0].path.split("/")[0],l=!e.files.some(i=>i.path==="manifest.json")&&e.files.every(i=>i.path.startsWith(`${r}/`))?e.files.map(i=>({...i,path:i.path.slice(r.length+1)})):e.files;return[Ke(l)]});else for(let r of e.files)a(r.path,()=>{if(e.source==="opencode")return[Ge(r,JSON.parse(r.text))];let l;if(e.source==="hermes"&&r.path.endsWith(".json")){let i=JSON.parse(r.text.replace(/^\uFEFF/u,""));if(!i||typeof i!="object"||Array.isArray(i))throw new Error("Hermes session backup must be one JSON object.");l=[i]}else l=q(r);if(e.source==="grok_build")return[We(r,l)];if(e.source==="pi"||e.source==="oh_my_pi"||e.source==="openclaw")return[Be(r,l,e.source,e.branchLeafId)];if(e.source==="codex")return[Xe(r,l)];if(e.source==="claude_code")return[Je(r,l,e.branchLeafId)];if(e.source==="hermes")return l.map(i=>Ve(r,i));throw new Error("Unsupported source adapter.")});if(s.length>D.sessions||s.reduce((r,l)=>r+l.events.length+l.unmappedEvents.length,0)>D.events||s.reduce((r,l)=>r+l.boundaries.length,0)>D.boundaries)throw new Error("Import exceeds the session/event/boundary limit.");let c=new Map;for(let r of s){let l=JSON.stringify([r.origin,r.sessionId,r.branchId]),i=c.get(l);if(i&&i!==r.contentHash)throw new Error("The same session has different contents in this selection. Choose one export.");c.set(l,r.contentHash)}return{schemaVersion:"openpond.agentImportPreview.v1",source:e.source,sourceHash:I({source:e.source,files:[...e.files].sort((r,l)=>r.path.localeCompare(l.path)),branchLeafId:e.branchLeafId??null}),sessions:s.filter((r,l)=>s.findIndex(i=>i.contentHash===r.contentHash)===l),issues:o}}p(Ze,"previewAgentImport");import{DatabaseSync as on}from"node:sqlite";import{join as an}from"node:path";import{DatabaseSync as sn}from"node:sqlite";import{zstdDecompressSync as rt}from"node:zlib";import{createHash as rn}from"node:crypto";import{createHash as Kt}from"node:crypto";import{readFileSync as Zt,realpathSync as Qe,statSync as Qt}from"node:fs";import{basename as en,dirname as et,join as tt,relative as tn,sep as nt}from"node:path";import{zstdDecompressSync as nn}from"node:zlib";function st(e,t,n){let s=e.prepare("SELECT generation,archive_name,archive_sha256,event_count,raw_bytes,archive_bytes,last_seq,storage,length(archive_blob) AS blob_bytes FROM session_transcript_cold_archives WHERE session_id=?").get(n);if(!s)return null;if(Number(s.archive_bytes)>v||Number(s.raw_bytes)>v||Number(s.event_count)>1e5)throw new Error("OpenClaw cold archive exceeds the retained size limit.");let o;if(s.storage==="sqlite"){if(Number(s.blob_bytes)!==Number(s.archive_bytes))throw new Error("OpenClaw cold archive size differs from its receipt.");let y=e.prepare("SELECT archive_blob FROM session_transcript_cold_archives WHERE session_id=?").get(n);if(!(y.archive_blob instanceof Uint8Array))throw new Error("OpenClaw cold archive is unavailable.");o=y.archive_blob}else if(s.storage==="file"){let y=String(s.archive_name);if(!/^[a-f0-9]{64}\.jsonl\.zst$/.test(y))throw new Error("Invalid OpenClaw cold archive name.");let f=et(t.root),S=en(f)==="agent"?tt(et(f),"sessions"):f,g=Qe(S),m=Qe(tt(S,"cold",y)),h=tn(g,m);if(h===".."||h.startsWith(`..${nt}`)||h.startsWith(nt))throw new Error("OpenClaw cold archive leaves the selected agent directory.");let _=Qt(m);if(!_.isFile()||_.size!==Number(s.archive_bytes))throw new Error("OpenClaw cold archive size differs from its receipt.");o=Zt(m)}else throw new Error("Unsupported OpenClaw cold archive storage.");if(o.length!==Number(s.archive_bytes)||Kt("sha256").update(o).digest("hex")!==s.archive_sha256)throw new Error("OpenClaw cold archive checksum differs from its receipt.");let a=nn(o,{maxOutputLength:v}),c=new TextDecoder("utf8",{fatal:!0}).decode(a).trimEnd().split(`
12
+ `),r=JSON.parse(c.shift()??"null");if(r?.kind!=="header"||r.version!==1||r.sessionId!==n||r.generation!==s.generation)throw new Error("OpenClaw cold archive identity differs from its receipt.");let l=[],i=-1,d=0;for(let y of c){let f=JSON.parse(y);if(!["event","identity","active","index","fts"].includes(f?.kind))throw new Error("Unsupported OpenClaw cold archive record.");if(f.kind==="event"){if(!Number.isSafeInteger(f.row?.seq)||f.row.seq<=i||typeof f.row.event_json!="string")throw new Error("Invalid OpenClaw cold archive event sequence.");i=f.row.seq,d+=Buffer.byteLength(f.row.event_json),l.push(f.row.event_json)}}if(l.length!==Number(s.event_count)||i!==Number(s.last_seq)||d+l.length-1!==Number(s.raw_bytes))throw new Error("OpenClaw cold archive contents differ from its receipt.");let u=JSON.parse(l[0]??"null");if(u?.type!=="session"||u.id!==n)throw new Error("OpenClaw transcript identity differs from selected session.");return{path:`${n}.jsonl`,text:l.join(`
13
+ `)+`
14
+ `}}p(st,"readOpenClawColdArchive");function ot(e){let t=new sn(e.root,{readOnly:!0,allowExtension:!1,enableDoubleQuotedStringLiterals:!1});return t.exec("PRAGMA query_only=ON; PRAGMA busy_timeout=1000; BEGIN"),t}p(ot,"open");function ae(e,t){return!!e.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name=?").get(t)}p(ae,"has");function it(e,t){let n=ot(e);try{let s=ae(n,"session_transcript_archives")?"UNION ALL SELECT session_id AS id,created_at AS updated,archive_sha256 AS revision FROM session_transcript_archives":"",o=ae(n,"session_transcript_cold_archives")?"UNION ALL SELECT session_id AS id,archived_at AS updated,archive_sha256 AS revision FROM session_transcript_cold_archives":"",a=n.prepare(`SELECT id,MAX(updated) AS updated,MAX(revision) AS revision FROM (
15
+ SELECT session_id AS id,MAX(created_at) AS updated,CAST(MAX(seq) AS TEXT) AS revision FROM transcript_events GROUP BY session_id
16
+ ${s} ${o}) WHERE id > ? GROUP BY id ORDER BY id LIMIT ?`).all(t.cursor??"",t.limit+1),c=a.slice(0,t.limit).map(r=>({nativeSessionId:String(r.id),sourceInstanceId:e.instanceId,path:String(r.id),title:String(r.id),cwd:null,updatedAt:new Date(Number(r.updated)||0).toISOString()}));return{items:c,nextCursor:a.length>t.limit?c.at(-1).nativeSessionId:null}}finally{n.close()}}p(it,"listOpenClawSessions");function at(e,t){let n=ot(e);try{if(ae(n,"session_transcript_cold_archives")){let i=st(n,e,t);if(i)return i}if(!n.prepare("SELECT 1 FROM transcript_events WHERE session_id=? LIMIT 1").get(t)){if(!ae(n,"session_transcript_archives"))throw new Error("OpenClaw archive is unavailable.");let i=n.prepare("SELECT archive_name,length(archive_blob) AS bytes FROM session_transcript_archives WHERE session_id=? ORDER BY created_at DESC LIMIT 1").get(t);if(!i||Number(i.bytes)>v)throw new Error("OpenClaw archive is missing or exceeds the retained byte limit.");let d=n.prepare("SELECT archive_blob,archive_sha256,encoding FROM session_transcript_archives WHERE archive_name=? AND session_id=?").get(String(i.archive_name),t);if(!(d.archive_blob instanceof Uint8Array)||rn("sha256").update(d.archive_blob).digest("hex")!==d.archive_sha256)throw new Error("OpenClaw archive checksum differs from its retained receipt.");if(d.encoding!=="zstd"&&d.encoding!=="identity")throw new Error("Unsupported OpenClaw archive encoding.");let u=d.encoding==="zstd"?rt(d.archive_blob,{maxOutputLength:v}):d.archive_blob,y=new TextDecoder("utf8",{fatal:!0}).decode(u),f=JSON.parse(y.split(`
17
+ `,1)[0]);if(f.type!=="session"||f.id!==t)throw new Error("OpenClaw archive identity differs from selected session.");return{path:`${t}.jsonl`,text:y}}let o=n.prepare("SELECT COUNT(*) AS n,SUM(COALESCE(event_utf8_bytes,length(CAST(event_json AS BLOB)),0)) AS bytes FROM transcript_events WHERE session_id=?").get(t);if(Number(o.n)>1e5||Number(o.bytes)>v)throw new Error("OpenClaw transcript exceeds the retained size limit.");let a=n.prepare("SELECT seq,event_json,event_zstd,event_utf8_bytes FROM transcript_events WHERE session_id=? ORDER BY seq LIMIT 100001").all(t),c=0,r=a.map(i=>{let d;if(typeof i.event_json=="string")d=i.event_json;else{if(!(i.event_zstd instanceof Uint8Array)||Number(i.event_utf8_bytes)>v)throw new Error("Unsupported OpenClaw compressed transcript record.");let u=rt(i.event_zstd,{maxOutputLength:v});if(u.length!==Number(i.event_utf8_bytes))throw new Error("OpenClaw compressed transcript size differs from its receipt.");d=new TextDecoder("utf8",{fatal:!0}).decode(u)}if(c+=Buffer.byteLength(d),c>v)throw new Error("OpenClaw transcript exceeds retained size limit.");return d});if(!r.length)throw new Error("OpenClaw transcript is unavailable.");let l=JSON.parse(r[0]);if(l.type!=="session"||l.id!==t)throw new Error("OpenClaw transcript identity differs from selected session.");return{path:`${t}.jsonl`,text:r.join(`
18
+ `)+`
19
+ `}}finally{n.close()}}p(at,"readOpenClawSession");function ct(e){let t=e.root.endsWith(".db")?e.root:an(e.root,e.source==="opencode"?"opencode.db":"state.db"),n=new on(t,{readOnly:!0,allowExtension:!1,enableDoubleQuotedStringLiterals:!1});return n.exec("PRAGMA query_only=ON; PRAGMA busy_timeout=1000; BEGIN"),n}p(ct,"open");function lt(e,t){if(e.source==="openclaw")return it(e,t);let n=ct(e);try{let s=t.since?Date.parse(t.since):0,o=e.source==="opencode"?n.prepare("SELECT id,title,directory AS cwd,time_updated AS updated, time_updated || ':' || COALESCE((SELECT MAX(time_updated) FROM message WHERE session_id=session.id),0) || ':' || COALESCE((SELECT MAX(time_updated) FROM part WHERE session_id=session.id),0) || ':' || (SELECT COUNT(*) FROM part WHERE session_id=session.id) AS revision FROM session WHERE id > ? AND time_updated >= ? ORDER BY id LIMIT ?").all(t.cursor??"",s,t.limit+1):n.prepare("SELECT id,title,cwd,MAX(COALESCE(last_activity_at,0),started_at) * 1000 AS updated FROM sessions WHERE id > ? AND MAX(COALESCE(last_activity_at,0),started_at) * 1000 >= ? ORDER BY id LIMIT ?").all(t.cursor??"",s,t.limit+1),a=o.slice(0,t.limit).map(c=>({nativeSessionId:String(c.id),sourceInstanceId:e.instanceId,path:String(c.id),title:typeof c.title=="string"?c.title:String(c.id),cwd:typeof c.cwd=="string"?c.cwd:null,updatedAt:new Date(Number(c.updated)).toISOString(),storageRevision:e.source==="opencode"?String(c.revision):void 0}));return{items:a,nextCursor:o.length>t.limit?a.at(-1).nativeSessionId:null}}finally{n.close()}}p(lt,"listDatabaseSessions");function dt(e,t){if(e.source==="openclaw")return at(e,t);let n=ct(e);try{let s;if(e.source==="opencode"){let a=n.prepare("SELECT id,title,directory,parent_id,version,time_created,time_updated FROM session WHERE id = ?").get(t);if(!a)throw new Error("Native session is unavailable.");let c=n.prepare("SELECT (SELECT COALESCE(SUM(length(CAST(data AS BLOB))),0) FROM message WHERE session_id=?) + (SELECT COALESCE(SUM(length(CAST(data AS BLOB))),0) FROM part WHERE session_id=?) AS bytes").get(t,t);if(Number(c?.bytes)>v)throw new Error("Native session exceeds the retained byte limit.");let r=n.prepare("SELECT id,data FROM message WHERE session_id = ? ORDER BY time_created,id LIMIT 100001").all(t);if(r.length>1e5)throw new Error("Native session exceeds the event limit.");let l=0,i=r.map(d=>{if(l+=Buffer.byteLength(String(d.data)),l>v)throw new Error("Native session exceeds the retained byte limit.");let u=n.prepare("SELECT id,data FROM part WHERE session_id = ? AND message_id = ? ORDER BY time_created,id LIMIT 100001").all(t,String(d.id));if(u.length>1e5)throw new Error("Native parts exceed the event limit.");return{info:{...JSON.parse(String(d.data)),id:d.id,sessionID:t},parts:u.map(y=>{if(l+=Buffer.byteLength(String(y.data)),l>v)throw new Error("Native session exceeds the retained byte limit.");return{...JSON.parse(String(y.data)),id:y.id,sessionID:t,messageID:d.id}})}});s={info:{...a,parentID:a.parent_id,time:{created:a.time_created,updated:a.time_updated}},messages:i}}else{let a=n.prepare("SELECT id,title,parent_session_id,system_prompt FROM sessions WHERE id = ?").get(t);if(!a)throw new Error("Native session is unavailable.");let c=n.prepare("SELECT COALESCE(SUM(length(CAST(COALESCE(content,'') AS BLOB))+length(CAST(COALESCE(tool_calls,'') AS BLOB))),0) AS bytes FROM messages WHERE session_id=? AND active=1").get(t);if(Number(c?.bytes)>v)throw new Error("Native session exceeds the retained byte limit.");let r=n.prepare("SELECT id,role,content,tool_call_id,tool_calls,timestamp,finish_reason,compacted FROM messages WHERE session_id = ? AND active = 1 ORDER BY id LIMIT 100001").all(t);if(r.length>1e5)throw new Error("Native session exceeds the event limit.");let l=0;s={...a,messages:r.map(i=>{if(l+=Buffer.byteLength(JSON.stringify(i)),l>v)throw new Error("Native session exceeds the retained byte limit.");return{...i,tool_calls:typeof i.tool_calls=="string"?JSON.parse(i.tool_calls):null}}),message_count:r.length}}let o=JSON.stringify(s);if(Buffer.byteLength(o)>v)throw new Error("Native session exceeds the retained byte limit.");return{path:`${t}.json`,text:o}}finally{n.close()}}p(dt,"readDatabaseSession");function ce(e){return typeof e!="string"?null:e.replace(/\s+/gu," ").trim().slice(0,160)||null}p(ce,"titleText");function pt(e,t){let n=e.filter(s=>s.sessionId===void 0||s.sessionId===t);for(let s of[...n].reverse())if(s.type==="custom-title"){let o=ce(s.customTitle);if(o)return o}for(let s of[...n].reverse())if(s.type==="summary"){let o=ce(s.summary);if(o)return o}for(let s of n){if(s.type!=="user"||s.sessionId!==t||s.isMeta||s.isSidechain)continue;let o=E(s.message).content,a=ce(Array.isArray(o)?o.filter(c=>E(c).type==="text").map(c=>E(c).text).filter(c=>typeof c=="string").join(" "):o);if(a)return a}return t}p(pt,"claudeConversationTitle");function ut(e,t){return ce(e)??t}p(ut,"retainedConversationTitle");var le=class extends Error{static{p(this,"NativeSessionNotReadyError")}constructor(){super("This session has no retained user request yet.")}};async function yt(e,t,n=!0){let s=await ft(e.root),o=await ft(mn(s,t)),a=fn(s,o);if(a.startsWith(`..${hn}`)||a===".."||Te(a))throw new Error("History path is outside the selected source.");if(n&&(await ht(o)).size>v)throw new Error("Source file exceeds 32 MiB.");return o}p(yt,"selectedPath");async function te(e,t){let n=await yt(e,t),s=await pn(n);if(s.byteLength>v)throw new Error("Source changed beyond the retained limit.");let o=n.endsWith(".zst")?yn(s,{maxOutputLength:64*1024*1024}):s,a=new TextDecoder("utf-8",{fatal:!0}).decode(o);if(n.endsWith(".jsonl")&&a&&!a.endsWith(`
20
+ `)){let c=a.lastIndexOf(`
21
+ `);try{JSON.parse(a.slice(c+1))}catch{return a.slice(0,c+1)}}return a}p(te,"readSelectedFile");async function En(e){if((await ln(e.root)).isFile())return[""];let t=e.source==="codex"?["sessions","archived_sessions"]:e.source==="grok_build"?["sessions"]:e.source==="claude_code"?["projects"]:e.source==="pi"||e.source==="oh_my_pi"?["sessions"]:[""],n=[];async function s(o,a){if(a>12)throw new Error("Selected history exceeds directory depth limit.");let c;try{c=await dn(de(e.root,o),{withFileTypes:!0})}catch(r){if(r.code==="ENOENT")return;throw r}for(let r of c){let l=de(o,r.name);if(!r.isSymbolicLink()&&(r.isDirectory()?await s(l,a+1):r.isFile()&&(e.source==="openclaw"?r.name==="manifest.json":e.source==="grok_build"?r.name==="updates.jsonl":/\.jsonl(?:\.zst)?$/u.test(r.name))&&n.push(l),n.length>1e4))throw new Error("Select a narrower source directory (more than 10,000 history files).")}}p(s,"walk");for(let o of t)await s(o,0);return!n.length&&t[0]!==""&&await s("",0),n.sort()}p(En,"pathsBelow");function mt(e,t){return(t||e.root).endsWith(".json")}p(mt,"sessionFileJson");async function Vr(e,t={}){if(!e.available||!e.capabilities.history)throw new Error(e.reason??"Native history is unavailable.");let n=t.limit??50;if(!Number.isInteger(n)||n<1||n>100||t.since&&!Number.isFinite(Date.parse(t.since)))throw new Error("Invalid history page or date range.");if(e.acquisition==="sqlite")return lt(e,{...t,limit:n});let s=await En(e),o=[];for(let a of s)if(!(t.cursor&&a<=t.cursor)){try{let c=await ht(de(e.root,a));if(t.since&&c.mtimeMs<Date.parse(t.since))continue;let r;if(e.acquisition!=="bundle"&&!mt(e,a)&&e.source!=="hermes"&&!(a||e.root).endsWith(".zst")){let g=await cn(await yt(e,a,!1),"r");try{let m=Buffer.alloc(262144),h=await g.read(m,0,m.length,0),_=m.subarray(0,h.bytesRead).toString("utf8"),x=_.lastIndexOf(`
22
+ `);if(r=_,!_.endsWith(`
23
+ `))try{JSON.parse(_.slice(x+1))}catch{r=_.slice(0,x+1)}let T=(await g.stat()).size;if(e.source==="claude_code"&&T>h.bytesRead){let R=Math.max(h.bytesRead,T-m.length),O=Buffer.alloc(m.length+1),K=await g.read(O,0,O.length,R-1),L=O.subarray(0,K.bytesRead).toString("utf8"),z=L.indexOf(`
24
+ `);if(L=z<0?"":L.slice(z+1),!L.endsWith(`
25
+ `)){let F=L.lastIndexOf(`
26
+ `);try{JSON.parse(L.slice(F+1))}catch{L=L.slice(0,F+1)}}r+=`
27
+ ${L}`}}finally{await g.close()}}else r=await te(e,a);let l=e.acquisition==="bundle"||mt(e,a)?[E(JSON.parse(r))]:r.split(/\r?\n/u).filter(Boolean).slice(0,e.source==="claude_code"?void 0:12).map(g=>E(JSON.parse(g))),i=l.find(g=>g.type==="session"||g.type==="session_meta")??l[0]??{},d=i.type==="session_meta"?E(i.payload):e.source==="grok_build"?E(i.params):e.source==="opencode"?E(i.info):i,u=e.source==="claude_code"?X(a||e.root).replace(/\.jsonl(?:\.zst)?$/u,""):typeof d.id=="string"?d.id:typeof d.sessionId=="string"?d.sessionId:X(a).replace(/\.jsonl(?:\.zst)?$/u,""),f=(e.source==="claude_code"?l.find(g=>g.sessionId===u&&g.type==="user"&&typeof g.cwd=="string"&&Te(g.cwd)):void 0)?.cwd??d.cwd,S=e.source==="claude_code"?pt(l,u):ut(d.title,u);if(e.source==="grok_build"&&a.endsWith("updates.jsonl"))try{let g=E(JSON.parse(await te(e,de(un(a),"summary.json")))),m=E(g.info);m.id===u&&(f=m.cwd,typeof g.generated_title=="string"&&(S=g.generated_title.slice(0,500)))}catch{}o.push({nativeSessionId:u,sourceInstanceId:e.instanceId,path:a,title:S,cwd:typeof f=="string"&&Te(f)?f:null,updatedAt:c.mtime.toISOString(),storageRevision:[c.dev,c.ino,c.size,c.mtimeMs,c.ctimeMs].join(":")})}catch(c){if(c.code==="ENOENT")continue;o.push({nativeSessionId:X(a||e.root),sourceInstanceId:e.instanceId,path:a,title:X(a||e.root),cwd:null,updatedAt:new Date(0).toISOString(),issue:c instanceof Error?c.message:"Unable to inspect native session"})}if(o.length>n)break}return{items:o.slice(0,n),nextCursor:o.length>n?o[n-1].path:null}}p(Vr,"listSessions");async function Kr(e,t){if(e.source!=="claude_code")return{revision:"",branches:[]};if(t.issue)throw new Error(t.issue);if(t.sourceInstanceId!==e.instanceId)throw new Error("Native session belongs to another selected source.");let n=await te(e,t.path),s=ee(q({path:X(t.path),text:n}));if(s.sessionId!==t.nativeSessionId)throw new Error("Native session changed identity.");return{revision:I(n),branches:s.branches()}}p(Kr,"inspectSessionBranches");async function Zr(e,t,n={}){if(t.issue)throw new Error(t.issue);if(t.sourceInstanceId!==e.instanceId)throw new Error("Native session belongs to another selected source.");let s;if(e.acquisition==="sqlite")s=[dt(e,t.nativeSessionId)];else if(e.acquisition==="bundle"){let a=t.path.slice(0,-13);s=await Promise.all(["manifest.json","events.jsonl","session-branch.json"].map(async c=>({path:c,text:await te(e,`${a}${c}`)})))}else s=[{path:X(t.path||e.root).replace(/\.zst$/u,""),text:await te(e,t.path)}];if(n.expectedBranchRevision&&!n.branchLeafId)throw new Error("Choose a branch before supplying its revision.");if(e.source==="claude_code"){let a=s[0],c=ee(q(a));if(c.sessionId!==t.nativeSessionId)throw new Error("Native session changed identity.");if(n.branchAnchor){if(n.branchLeafId||n.expectedBranchRevision)throw new Error("Choose either a frozen branch snapshot or a followed branch anchor.");if(c.select(n.branchAnchor.leafId).chainHash!==n.branchAnchor.chainHash)throw new Error("The selected branch history changed. Review and select it again before syncing.");let l=c.leaves.filter(i=>c.select(i.uuid).chain.some(d=>d.uuid===n.branchAnchor.leafId));if(l.length!==1)throw new Error("The selected branch diverged. Pause this connection and choose its branch again.");n={...n,branchLeafId:l[0].uuid}}if(n.expectedBranchRevision&&I(a.text)!==n.expectedBranchRevision)throw new Error("This conversation changed. Refresh its branches and choose again.");if(n.branchLeafId){if(!c.leaves.some(r=>r.uuid===n.branchLeafId))throw new Error("The selected Claude branch is no longer a leaf. Refresh and choose again.");s=[{...a,text:c.select(n.branchLeafId).chain.map(r=>JSON.stringify(r)).join(`
28
+ `)+`
29
+ `}]}}else if(n.expectedBranchRevision||n.branchAnchor)throw new Error("Branch revision selection is only supported for Claude Code.");let o=Ze({source:e.source,files:s,acquisition:{machineId:e.machineId,sourceInstanceId:e.instanceId},...n});if(o.issues.length&&o.issues.every(a=>a.code==="no_user_request"))throw new le;if(o.issues.length)throw new Error(o.issues.map(a=>a.message).join("; "));if(e.acquisition==="sqlite"&&o.sessions.some(a=>a.sessionId!==t.nativeSessionId))throw new Error("Native session changed identity.");return{files:s,preview:o,branchLeafId:n.branchLeafId}}p(Zr,"readSession");var Et=Pt(Ht(),1);function J(e,t=new Date){if(e.length>512)throw new Error("Cron expressions must be at most 512 characters.");let n=e.trim().split(/\s+/u);if(n.length!==5)throw new Error("Use five cron fields: minute hour day-of-month month day-of-week.");let s=[[],[],[],["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],["sun","mon","tue","wed","thu","fri","sat"]],o=n.map((i,d)=>i.replace(/[a-z]+/giu,u=>{let y=s[d].indexOf(u.toLowerCase());if(y<0)throw new Error("Cron supports standard month/weekday names, numbers, *, lists, ranges and steps.");return String(y+(d===3?1:0))}));if(o.some(i=>!/^[\d*,/\-]+$/u.test(i)))throw new Error("Cron supports numbers, *, lists, ranges and steps; second-level schedules are not supported.");let a=o.join(" "),c=Et.CronExpressionParser.parse(a,{currentDate:t,tz:Intl.DateTimeFormat().resolvedOptions().timeZone}),r=c.fields;if(r.minute.values.length!==1)throw new Error("Imports support at most one scheduled run per hour. Choose a single cron minute, such as 0 or 30.");let l={minute:[...r.minute.values],hour:[...r.hour.values],month:[...r.month.values],dayOfMonth:r.dayOfMonth.values.map(Number),dayOfWeek:[...new Set(r.dayOfWeek.values.map(i=>Number(i)%7))],anyDayOfMonth:r.dayOfMonth.isWildcard,anyDayOfWeek:r.dayOfWeek.isWildcard};return{expression:a,calendar:l,interval:c}}p(J,"parseImportCron");function ne(e,t){let n=e.dayOfMonth.includes(t.getDate()),s=e.dayOfWeek.includes(t.getDay());return(!e.anyDayOfMonth&&!e.anyDayOfWeek&&(n||s)||n&&e.anyDayOfWeek||e.anyDayOfMonth&&!e.anyDayOfWeek&&s)&&e.month.includes(t.getMonth()+1)&&e.hour.includes(t.getHours())&&e.minute.includes(t.getMinutes())}p(ne,"importCalendarMatches");var ve=["sun","mon","tue","wed","thu","fri","sat"];function gn(e){if(!/^(?:[01]\d|2[0-3]):[0-5]\d$/u.test(e))throw new Error("Use a sync time in 24-hour HH:MM format, such as 00:00.");return e}p(gn,"syncTime");function Y(e){if(e.frequency==="hourly")return{frequency:e.frequency};if(e.frequency==="cron"){let n=J(e.expression);return n.interval.next(),{frequency:"cron",expression:n.expression}}let t=gn(e.time);if(e.frequency==="daily")return{frequency:"daily",time:t};if(e.frequency==="weekly"&&Number.isInteger(e.day)&&e.day>=0&&e.day<=6)return{frequency:"weekly",time:t,day:e.day};throw new Error("Choose a supported import frequency and, for weekly imports, a weekday from Sunday (0) to Saturday (6).")}p(Y,"validateCollectorSchedule");function pe(e){if(e.frequency==="cron")return e.expression;if(e.frequency==="hourly")return"0 * * * *";let[t,n]=e.time.split(":").map(Number);return`${n} ${t} * * ${e.frequency==="weekly"?e.day:"*"}`}p(pe,"scheduleExpression");function ro(e){return e.frequency==="cron"?`cron ${e.expression}`:e.frequency==="hourly"?"hourly at minute 00":e.frequency==="daily"?`daily at ${e.time}`:`weekly on ${ve[e.day]} at ${e.time}`}p(ro,"scheduleDescription");function wn(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}p(wn,"localDay");function _n(e){return`${wn(e)}T${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}`}p(_n,"scheduledMinute");function gt(e,t=new Date){let{interval:n,calendar:s}=J(pe(e),t);for(let o=0;o<10;o++){let a=n.next().toDate();if(ne(s,a))return a.toISOString()}throw new Error("Unable to determine the next sync time.")}p(gt,"nextScheduledSync");function oo(e,t,n=new Date){return!e||t===_n(n)?!1:ne(J(pe(e),n).calendar,n)}p(oo,"scheduledSyncDue");import{DatabaseSync as bn}from"node:sqlite";import{mkdir as In,chmod as _t}from"node:fs/promises";import{join as On}from"node:path";var ue={heartbeatMs:1e4,staleMs:6e4,maxPending:1e4,maxBytes:134217728,batchCases:20,runMs:36e5,requestMs:6e4,attemptsPerRun:3};function lo(e,t){if(t.id!==e.id||t.teamId!==e.teamId||t.projectId!==e.projectId||t.machineId!==e.source.machineId||t.sourceInstanceId!==e.source.instanceId||t.sourceRoot!==e.source.root||t.source!==e.source.source)throw new Error("The hosted destination belongs to another source or workspace.");return{taskDatasetId:t.taskDatasetId,conversationDatasetId:t.conversationDatasetId}}p(lo,"collectorDestinations");function wt(e){let t={tasks:null,conversations:null};if(!e.accountBaseUrl||!e.destinations)return t;let n;try{n=new URL(e.accountBaseUrl)}catch{return t}if(n.protocol!=="https:"&&!(n.protocol==="http:"&&["localhost","127.0.0.1"].includes(n.hostname))||n.username||n.password||n.search||n.hash||n.pathname!=="/")return t;let s=p(o=>o?`${n.origin}/console/datasets/${encodeURIComponent(o)}/tasks?project=${encodeURIComponent(e.projectId)}&connection=${encodeURIComponent(e.id)}`:null,"link");return{tasks:s(e.destinations.taskDatasetId),conversations:s(e.destinations.conversationDatasetId)}}p(wt,"collectorDestinationLinks");var fe=class{static{p(this,"CollectorProgress")}database;constructor(t){this.database=t,t.exec(`
30
+ CREATE TABLE IF NOT EXISTS backfills(connection_id TEXT PRIMARY KEY,discovered INTEGER NOT NULL DEFAULT 0);
31
+ CREATE TABLE IF NOT EXISTS backfill_units(connection_id TEXT NOT NULL,session_key TEXT NOT NULL,state TEXT NOT NULL,error TEXT,PRIMARY KEY(connection_id,session_key));
32
+ CREATE TABLE IF NOT EXISTS backfill_operations(operation_id TEXT PRIMARY KEY,connection_id TEXT NOT NULL,session_key TEXT NOT NULL,admitted INTEGER NOT NULL DEFAULT 0);
33
+ `)}reset(t){for(let n of["backfill_operations","backfill_units","backfills"])this.database.prepare(`DELETE FROM ${n} WHERE connection_id=?`).run(t)}select(t,n){this.database.prepare("INSERT OR IGNORE INTO backfills(connection_id) VALUES(?)").run(t),this.database.prepare("SELECT discovered FROM backfills WHERE connection_id=?").get(t)?.discovered||this.database.prepare("INSERT OR IGNORE INTO backfill_units VALUES(?,?,'reading',NULL)").run(t,n)}tracks(t,n){let s=this.database.prepare("SELECT state FROM backfill_units WHERE connection_id=? AND session_key=?").get(t,n);return s?.state==="reading"||s?.state==="error"}queued(t,n,s){this.tracks(n,s)&&this.database.prepare("INSERT OR IGNORE INTO backfill_operations VALUES(?,?,?,0)").run(t,n,s)}retained(t,n,s){if(!this.tracks(t,n))return;let o=this.database.prepare("SELECT id FROM pending WHERE connection_id=? AND json_extract(payload,'$.sessionKey')=?").all(t,s);for(let a of o)this.queued(String(a.id),t,n)}read(t,n,s){if(!this.tracks(t,n))return;let o=this.database.prepare("SELECT COUNT(*) AS n FROM backfill_operations WHERE connection_id=? AND session_key=? AND admitted=0").get(t,n);this.database.prepare("UPDATE backfill_units SET state=?,error=NULL WHERE connection_id=? AND session_key=?").run(Number(o?.n)?"queued":s?"complete":"skipped",t,n)}failed(t,n,s){this.tracks(t,n)&&this.database.prepare("UPDATE backfill_units SET state='error',error=? WHERE connection_id=? AND session_key=?").run(s.slice(0,500),t,n)}discovered(t){this.database.prepare("INSERT INTO backfills VALUES(?,1) ON CONFLICT(connection_id) DO UPDATE SET discovered=1").run(t)}acknowledge(t){let n=this.database.prepare("SELECT connection_id,session_key FROM backfill_operations WHERE operation_id=?").get(t);if(!n)return;this.database.prepare("UPDATE backfill_operations SET admitted=1 WHERE operation_id=?").run(t);let s=this.database.prepare("SELECT COUNT(*) AS n FROM backfill_operations WHERE connection_id=? AND session_key=? AND admitted=0").get(n.connection_id,n.session_key);Number(s?.n)||this.database.prepare("UPDATE backfill_units SET state='complete' WHERE connection_id=? AND session_key=? AND state='queued'").run(n.connection_id,n.session_key)}status(t){let n=this.database.prepare("SELECT discovered FROM backfills WHERE connection_id=?").get(t),s=this.database.prepare("SELECT state,COUNT(*) AS n FROM backfill_units WHERE connection_id=? GROUP BY state").all(t),o=p(c=>Number(s.find(r=>r.state===c)?.n??0),"count"),a=s.reduce((c,r)=>c+Number(r.n),0);return{stage:n?.discovered?o("error")?"attention":o("reading")?"reading":o("queued")?"uploading":"complete":"discovering",total:a,admitted:o("complete"),skipped:o("skipped"),failed:o("error")}}};import{setImmediate as Sn}from"node:timers/promises";var me=class extends Error{static{p(this,"CollectorQueueFullError")}constructor(){super("Import queue is full. Pending uploads must finish before more history can be read.")}},he=class{static{p(this,"CollectorSnapshots")}database;constructor(t){this.database=t,t.exec(`
34
+ CREATE TABLE IF NOT EXISTS collector_snapshots(hash TEXT PRIMARY KEY,payload TEXT NOT NULL,bytes INTEGER NOT NULL);
35
+ CREATE TABLE IF NOT EXISTS pending_snapshots(operation_id TEXT PRIMARY KEY,snapshot_hash TEXT NOT NULL);
36
+ CREATE INDEX IF NOT EXISTS pending_snapshots_hash ON pending_snapshots(snapshot_hash);
37
+ `)}prepare(t){let n=JSON.stringify(t);return{hash:I(t),payload:n,bytes:Buffer.byteLength(n)}}exists(t){return!!this.database.prepare("SELECT 1 FROM collector_snapshots WHERE hash=?").get(t)}retain(t,n){this.database.prepare("INSERT OR IGNORE INTO collector_snapshots VALUES(?,?,?)").run(n.hash,n.payload,n.bytes),this.database.prepare("INSERT OR REPLACE INTO pending_snapshots VALUES(?,?)").run(t,n.hash)}files(t){let n=this.database.prepare("SELECT payload FROM collector_snapshots JOIN pending_snapshots ON hash=snapshot_hash WHERE operation_id=?").get(t);if(!n)throw new Error("The pending import's source snapshot is missing.");return JSON.parse(String(n.payload))}bytes(t){return Number(t?this.database.prepare("SELECT COALESCE(SUM(bytes),0) AS n FROM collector_snapshots WHERE hash IN (SELECT snapshot_hash FROM pending_snapshots JOIN pending ON operation_id=pending.id WHERE connection_id=?)").get(t)?.n:this.database.prepare("SELECT COALESCE(SUM(bytes),0) AS n FROM collector_snapshots").get()?.n)}collect(){this.database.exec(`DELETE FROM pending_snapshots WHERE operation_id NOT IN (SELECT id FROM pending);
38
+ DELETE FROM collector_snapshots WHERE hash NOT IN (SELECT snapshot_hash FROM pending_snapshots);`)}async migrate(t){let n=this.database.prepare("SELECT id FROM pending WHERE id NOT IN (SELECT operation_id FROM pending_snapshots)").all();for(let s of n){if(await Sn(),t())return;let o=this.database.prepare("SELECT payload FROM pending WHERE id=?").get(s.id);if(!o)continue;let{files:a,...c}=JSON.parse(String(o.payload)),r=this.prepare(a),l=JSON.stringify(c);this.database.exec("BEGIN IMMEDIATE");try{this.retain(String(s.id),r),this.database.prepare("UPDATE pending SET payload=?,bytes=? WHERE id=?").run(l,Buffer.byteLength(l),s.id),this.database.exec("COMMIT")}catch(i){throw this.database.exec("ROLLBACK"),i}}this.collect()}};var P=class e{static{p(this,"CollectorStore")}database;progress;snapshots;constructor(t){this.database=t,this.progress=new fe(t),this.snapshots=new he(t)}static async open(t){await In(t,{recursive:!0,mode:448}),await _t(t,448);let n=On(t,"collector.sqlite"),s=new bn(n);return await _t(n,384),s.exec(`PRAGMA journal_mode=WAL; PRAGMA synchronous=FULL; PRAGMA busy_timeout=1000;
39
+ CREATE TABLE IF NOT EXISTS settings(key TEXT PRIMARY KEY,value TEXT NOT NULL);
40
+ CREATE TABLE IF NOT EXISTS connections(id TEXT PRIMARY KEY,config TEXT NOT NULL,admitted INTEGER NOT NULL DEFAULT 0,error TEXT);
41
+ CREATE TABLE IF NOT EXISTS admitted_boundaries(connection_id TEXT NOT NULL,boundary_id TEXT NOT NULL,PRIMARY KEY(connection_id,boundary_id));
42
+ CREATE TABLE IF NOT EXISTS source_scans(connection_id TEXT NOT NULL,session_key TEXT NOT NULL,revision TEXT NOT NULL,PRIMARY KEY(connection_id,session_key));
43
+ CREATE TABLE IF NOT EXISTS checkpoints(connection_id TEXT NOT NULL,session_key TEXT NOT NULL,boundary_id TEXT NOT NULL,revision TEXT NOT NULL,PRIMARY KEY(connection_id,session_key,boundary_id));
44
+ CREATE TABLE IF NOT EXISTS pending(id TEXT PRIMARY KEY,connection_id TEXT NOT NULL,payload TEXT NOT NULL,bytes INTEGER NOT NULL,attempts INTEGER NOT NULL DEFAULT 0,retry_at INTEGER NOT NULL DEFAULT 0,created_at INTEGER NOT NULL);
45
+ INSERT OR IGNORE INTO settings VALUES('desiredState','stopped');`),new e(s)}close(){this.database.close()}setting(t){let n=this.database.prepare("SELECT value FROM settings WHERE key=?").get(t);return typeof n?.value=="string"?n.value:null}set(t,n){this.database.prepare("INSERT INTO settings VALUES(?,?) ON CONFLICT(key) DO UPDATE SET value=excluded.value").run(t,n)}connections(){return this.database.prepare("SELECT config FROM connections ORDER BY id").all().map(t=>JSON.parse(String(t.config)))}put(t){this.database.exec("BEGIN IMMEDIATE");try{let n=this.connections().find(o=>o.id===t.id);if(n&&n.revision>t.revision){this.database.exec("COMMIT");return}let s=!!n&&(n.source.instanceId!==t.source.instanceId||n.projectId!==t.projectId||n.teamId!==t.teamId||n.apiBaseUrl!==t.apiBaseUrl||n.account!==t.account);if(s&&(t={...t,destinations:void 0}),n&&(s||n.since!==t.since)){this.progress.reset(t.id),this.database.prepare("DELETE FROM settings WHERE key=?").run(`errors:${t.id}`),this.database.prepare("DELETE FROM settings WHERE key=?").run(`syncAcknowledged:${t.id}`),t={...t,completedSyncRevision:0},this.error(t.id,null);for(let o of["source_scans","checkpoints","pending"])this.database.prepare(`DELETE FROM ${o} WHERE connection_id=?`).run(t.id);this.snapshots.collect(),s&&(this.database.prepare("DELETE FROM admitted_boundaries WHERE connection_id=?").run(t.id),this.database.prepare("UPDATE connections SET admitted=0 WHERE id=?").run(t.id),this.database.prepare("DELETE FROM settings WHERE key=?").run(`lastAdmission:${t.id}`))}else n&&(t={...t,requestedSyncRevision:Math.max(n.requestedSyncRevision??0,t.requestedSyncRevision??0),completedSyncRevision:Math.max(n.completedSyncRevision??0,t.completedSyncRevision??0)});this.database.prepare("INSERT INTO connections(id,config) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET config=excluded.config").run(t.id,JSON.stringify(t)),this.database.exec("COMMIT")}catch(n){throw this.database.exec("ROLLBACK"),n}}error(t,n){this.database.prepare("UPDATE connections SET error=? WHERE id=?").run(n?.slice(0,500)??null,t)}queued(t){return Number((t?this.database.prepare("SELECT COUNT(*) AS n FROM pending WHERE connection_id=?").get(t):this.database.prepare("SELECT COUNT(*) AS n FROM pending").get())?.n??0)}sourceChanged(t,n,s){return this.database.prepare("SELECT revision FROM source_scans WHERE connection_id=? AND session_key=?").get(t,n)?.revision!==s}scanned(t,n,s){this.database.prepare("INSERT INTO source_scans VALUES(?,?,?) ON CONFLICT(connection_id,session_key) DO UPDATE SET revision=excluded.revision").run(t,n,s)}changed(t,n,s,o){return this.database.prepare("SELECT revision FROM checkpoints WHERE connection_id=? AND session_key=? AND boundary_id=?").get(t,n,s)?.revision!==o}enqueue(t,n,s,o=this.snapshots.prepare(t.files)){let{files:a,...c}=t,r=JSON.stringify(c),l=Buffer.byteLength(r);this.database.exec("BEGIN IMMEDIATE");try{if(this.database.prepare("SELECT 1 FROM pending WHERE id=?").get(t.operationId)){this.database.exec("COMMIT");return}let i=this.database.prepare("SELECT COUNT(*) AS count,COALESCE(SUM(bytes),0) AS bytes FROM pending").get();if(Number(i.count)>=ue.maxPending||Number(i.bytes)+this.snapshots.bytes()+l+(this.snapshots.exists(o.hash)?0:o.bytes)>ue.maxBytes)throw new me;this.snapshots.retain(t.operationId,o),this.database.prepare("INSERT OR IGNORE INTO pending(id,connection_id,payload,bytes,created_at) VALUES(?,?,?,?,?)").run(t.operationId,t.connectionId,r,l,Date.now());let d=this.database.prepare("INSERT INTO checkpoints VALUES(?,?,?,?) ON CONFLICT(connection_id,session_key,boundary_id) DO UPDATE SET revision=excluded.revision");for(let u of n)d.run(t.connectionId,t.sessionKey,u.id,u.revision);s&&this.progress.queued(t.operationId,t.connectionId,s),this.database.exec("COMMIT")}catch(i){throw this.database.exec("ROLLBACK"),i}}next(t){let n=this.database.prepare("SELECT id,payload,attempts FROM pending WHERE connection_id=? ORDER BY created_at,id LIMIT 1").get(t);return n?{entry:{...JSON.parse(String(n.payload)),files:this.snapshots.files(String(n.id))},attempts:Number(n.attempts)}:null}acknowledge(t){this.database.exec("BEGIN IMMEDIATE");try{let n=this.database.prepare("DELETE FROM pending WHERE id=?").run(t.operationId);if(Number(n.changes)>0){this.snapshots.collect(),this.progress.acknowledge(t.operationId),this.set(`lastAdmission:${t.connectionId}`,new Date().toISOString());let s=0,o=this.database.prepare("INSERT OR IGNORE INTO admitted_boundaries VALUES(?,?)");for(let a of t.boundaryIds)s+=Number(o.run(t.connectionId,a).changes);this.database.prepare("UPDATE connections SET admitted=admitted+? WHERE id=?").run(s,t.connectionId)}this.database.exec("COMMIT")}catch(n){throw this.database.exec("ROLLBACK"),n}}retry(t,n){let s=Math.min(6e4,1e3*2**Math.min(n,6));this.database.prepare("UPDATE pending SET attempts=?,retry_at=? WHERE id=?").run(n+1,Date.now()+s+Math.floor(Math.random()*Math.max(1,s/5)),t)}schedule(t){let n=this.setting(`schedule:${t}`);return n?Y(JSON.parse(n)):null}status(){let t=this.setting("heartbeatAt"),n=Number(this.setting("pid"))||null,s=!1;try{n&&(process.kill(n,0),s=!0)}catch{}return{schemaVersion:1,running:s&&!!t&&Date.now()-Date.parse(t)<ue.staleMs,desiredState:this.setting("desiredState")==="running"?"running":"stopped",pid:n,heartbeatAt:t,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,connections:this.database.prepare("SELECT id,config,admitted,error FROM connections ORDER BY id").all().map(o=>{let a=JSON.parse(String(o.config)),c=this.schedule(String(o.id)),r=this.setting(`run:${o.id}`),l=r?JSON.parse(r):null;return l?.state==="running"&&!s&&(l.state="failed",l.error="The import was interrupted before completion. Run Sync now to resume."),{id:String(o.id),state:a.state,projectId:a.projectId,teamId:a.teamId,accountBaseUrl:a.accountBaseUrl??null,sourceInstanceId:a.source.instanceId,sourceRoot:a.source.root,source:a.source.source,queued:this.queued(String(o.id)),admitted:Number(o.admitted),error:typeof o.error=="string"?o.error:null,backfill:this.progress.status(String(o.id)),pendingBytes:this.snapshots.bytes(String(o.id))+Number(this.database.prepare("SELECT COALESCE(SUM(bytes),0) AS bytes FROM pending WHERE connection_id=?").get(String(o.id))?.bytes??0),lastAdmissionAt:this.setting(`lastAdmission:${o.id}`),since:a.since,schedule:c,nextRunAt:c&&a.state==="active"?gt(c):null,lastSuccessfulSyncAt:this.setting(`lastSuccess:${o.id}`),run:l,requestedSyncRevision:a.requestedSyncRevision??0,completedSyncRevision:a.completedSyncRevision??0,acknowledgedSyncRevision:Number(this.setting(`syncAcknowledged:${o.id}`))||0,destinationLinks:wt(a)}})}}};import{randomUUID as Lt}from"node:crypto";import{createHash as Tn}from"node:crypto";import{constants as B}from"node:fs";import{chmod as It,copyFile as vn,lstat as G,mkdir as Nn,mkdtemp as xn,open as Ce,realpath as ye,rename as Rn,rm as Ot}from"node:fs/promises";import{dirname as St,isAbsolute as Cn,join as W,relative as An,resolve as kn,sep as Ln}from"node:path";var Tt="appimage-runtime",Dn='const p=require("node:path");const u=require("node:url");const entry=p.join(process.env.APPDIR,"resources","cli","cli.js");process.argv.splice(1,0,entry);import(u.pathToFileURL(entry).href);';async function xe(e){let t=kn(e);for(let s=t;;s=St(s)){let o=await G(s).catch(a=>{if(a.code==="ENOENT")return null;throw a});if(o&&(!o.isDirectory()||o.isSymbolicLink()))throw new Error("Collector runtime storage must use real directories.");if(St(s)===s)break}await Nn(t,{recursive:!0,mode:448});let n=await G(t);if(!n.isDirectory()||n.isSymbolicLink()||n.uid!==process.getuid())throw new Error("Collector runtime storage must belong to the current user.");await It(t,448)}p(xe,"privateDirectory");async function Re(e){let t=Tn("sha256"),n=await Ce(e,B.O_RDONLY|B.O_NOFOLLOW);try{for await(let s of n.createReadStream({autoClose:!1}))t.update(s)}finally{await n.close()}return t.digest("hex")}p(Re,"digest");async function Ne(e){let t=await Ce(e,B.O_RDONLY|B.O_NOFOLLOW);try{await t.sync()}finally{await t.close()}}p(Ne,"sync");async function bt(e,t){let n=await G(e);if(!n.isFile()||n.isSymbolicLink()||n.uid!==process.getuid()||(n.mode&511)!==320||await Re(e)!==t)throw new Error("Retained AppImage runtime failed its ownership or integrity check.")}p(bt,"verify");async function vt(e,t=process.env){if(process.platform!=="linux"||!t.APPIMAGE||!t.APPDIR)return null;let n=await ye(t.APPDIR),s=await ye(e.executable),o=An(n,s);if(Cn(o)||o===".."||o.startsWith(`..${Ln}`))return null;let a=e.args[0];if(!a||await ye(a)!==W(n,"resources","cli","cli.js"))throw new Error("AppImage collection requires its bundled CLI entrypoint.");let c=await ye(t.APPIMAGE),r=await G(c);if(!r.isFile()||r.size>1024*1024*1024)throw new Error("AppImage runtime is unavailable or exceeds the retained size limit.");let l=Buffer.alloc(11),i=await Ce(c,B.O_RDONLY|B.O_NOFOLLOW);try{await i.read(l,0,l.length,0)}finally{await i.close()}if(!l.subarray(0,4).equals(Buffer.from([127,69,76,70]))||!l.subarray(8,11).equals(Buffer.from([65,73,2])))throw new Error("Collector runtime must be a type-2 AppImage.");let d=await Re(c);await xe(e.directory);let u=W(e.directory,Tt);await xe(u);let y=W(u,d),f=W(y,"openpond.AppImage"),S=await G(y).catch(g=>{if(g.code==="ENOENT")return null;throw g});if(S){if(!S.isDirectory()||S.isSymbolicLink()||S.uid!==process.getuid()||(S.mode&511)!==448)throw new Error("Retained runtime directory is not private.");await bt(f,d)}else{let g=await xn(W(u,".stage-"));try{let m=W(g,"openpond.AppImage");await vn(c,m,B.COPYFILE_EXCL),await It(m,320);let h=await G(c);if(r.dev!==h.dev||r.ino!==h.ino||r.size!==h.size||r.mtimeMs!==h.mtimeMs||await Re(m)!==d)throw new Error("AppImage changed while preparing the collector runtime; retry installation.");await Ne(m),await Ne(g);try{await Rn(g,y)}catch(_){if(!["EEXIST","ENOTEMPTY"].includes(_.code??""))throw _}await bt(f,d),await Ne(u)}finally{await Ot(g,{recursive:!0,force:!0})}}return{executable:f,args:["-e",Dn,"--",...e.args.slice(1)]}}p(vt,"retainAppImageRuntime");async function Nt(e){let t=W(e,Tt),n=await G(t).catch(s=>{if(s.code==="ENOENT")return null;throw s});if(n){if(await xe(e),!n.isDirectory()||n.isSymbolicLink()||n.uid!==process.getuid())throw new Error("Refusing to remove unowned collector runtime storage.");await Ot(t,{recursive:!0})}}p(Nt,"removeAppImageRuntimes");import{execFile as Un}from"node:child_process";import{promisify as Fn}from"node:util";import{mkdir as Ae,writeFile as Pn,rm as H,rename as Hn}from"node:fs/promises";import{homedir as Dt}from"node:os";import{isAbsolute as At,join as k}from"node:path";function xt(e){let t=e.schedules.map(n=>J(pe(n)).calendar);return`"use strict";
46
+ const matches = ${ne.toString()};
47
+ const calendars = ${JSON.stringify(t)};
48
+ if (calendars.some(calendar => matches(calendar, new Date()))) {
49
+ const { spawn } = require("node:child_process");
50
+ const child = spawn(${JSON.stringify(e.executable)}, ${JSON.stringify(e.args)}, { stdio: "inherit", windowsHide: true });
51
+ process.on("SIGINT", () => child.kill("SIGINT"));
52
+ process.on("SIGTERM", () => child.kill("SIGTERM"));
53
+ child.on("error", error => { console.error(error.message); process.exitCode = 1; });
54
+ child.on("exit", (code, signal) => { process.exitCode = code ?? (signal === "SIGINT" ? 130 : 143); });
55
+ }
56
+ `}p(xt,"collectorCalendarGate");var Mn=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],se=p(e=>e.replace(/&/gu,"&amp;").replace(/</gu,"&lt;").replace(/>/gu,"&gt;").replace(/"/gu,"&quot;"),"xml"),Rt=p(e=>`"${e.replace(/\\/gu,"\\\\").replace(/"/gu,'\\"').replace(/%/gu,"%%").replace(/\$/gu,()=>"$$")}"`,"systemdQuote"),$n=p(e=>`"${e.replace(/(\\*)"/gu,'$1$1\\"').replace(/(\\+)$/u,"$1$1")}"`,"windowsQuote");function Ct(e){let t=[...new Map(e.schedules.map(r=>{let l=Y(r);return[JSON.stringify(l),l]})).values()],n=[e.executable,e.gatePath],s=t.some(r=>r.frequency==="cron")?[{frequency:"calendar-tick"}]:t,o=p(r=>{if(r.frequency==="calendar-tick")return"*-*-* *:*:00";if(r.frequency==="hourly")return"*-*-* *:00:00";if(r.frequency==="cron")throw new Error("Cron needs the calendar gate.");return`${r.frequency==="weekly"?`${ve[r.day]} `:""}*-*-* ${r.time}:00`},"cron"),a=p(r=>{if(r.frequency==="calendar-tick")return"<dict/>";if(r.frequency==="hourly")return"<dict><key>Minute</key><integer>0</integer></dict>";if(r.frequency==="cron")throw new Error("Cron needs the calendar gate.");let[l,i]=r.time.split(":").map(Number);return`<dict>${r.frequency==="weekly"?`<key>Weekday</key><integer>${r.day}</integer>`:""}<key>Hour</key><integer>${l}</integer><key>Minute</key><integer>${i}</integer></dict>`},"launchd"),c=p(r=>{if(r.frequency==="calendar-tick"||r.frequency==="hourly")return`<CalendarTrigger><Repetition><Interval>${r.frequency==="hourly"?"PT1H":"PT1M"}</Interval><Duration>P1D</Duration><StopAtDurationEnd>false</StopAtDurationEnd></Repetition><StartBoundary>2020-01-01T00:00:00</StartBoundary><Enabled>true</Enabled><ScheduleByDay><DaysInterval>1</DaysInterval></ScheduleByDay></CalendarTrigger>`;if(r.frequency==="cron")throw new Error("Cron needs the calendar gate.");return`<CalendarTrigger><StartBoundary>2020-01-01T${r.time}:00</StartBoundary><Enabled>true</Enabled>${r.frequency==="daily"?"<ScheduleByDay><DaysInterval>1</DaysInterval></ScheduleByDay>":`<ScheduleByWeek><WeeksInterval>1</WeeksInterval><DaysOfWeek><${Mn[r.day]}/></DaysOfWeek></ScheduleByWeek>`}</CalendarTrigger>`},"windows");return{gate:xt({executable:e.executable,args:e.args,schedules:t}),service:`[Unit]
57
+ Description=OpenPond conversation import job
58
+ After=network-online.target
59
+ [Service]
60
+ Type=oneshot
61
+ ${e.environment.map(([r,l])=>`Environment=${Rt(`${r}=${l}`)}`).join(`
62
+ `)}
63
+ ExecStart=${n.map(Rt).join(" ")}
64
+ TimeoutStartSec=65min
65
+ TimeoutStopSec=15s
66
+ Restart=no
67
+ Nice=10
68
+ UMask=0077
69
+ NoNewPrivileges=true
70
+ `,timer:`[Unit]
71
+ Description=OpenPond scheduled conversation imports
72
+ [Timer]
73
+ ${s.map(r=>`OnCalendar=${o(r)}`).join(`
74
+ `)}
75
+ AccuracySec=1s
76
+ RandomizedDelaySec=0
77
+ Persistent=false
78
+ WakeSystem=false
79
+ Unit=${e.name}.service
80
+ [Install]
81
+ WantedBy=timers.target
82
+ `,plist:`<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>Label</key><string>${e.name}</string><key>ProgramArguments</key><array>${n.map(r=>`<string>${se(r)}</string>`).join("")}</array><key>EnvironmentVariables</key><dict>${e.environment.map(([r,l])=>`<key>${se(r)}</key><string>${se(l)}</string>`).join("")}</dict><key>StartCalendarInterval</key><array>${s.map(a).join("")}</array><key>RunAtLoad</key><false/><key>KeepAlive</key><false/><key>Nice</key><integer>10</integer></dict></plist>`,windowsTask(r,l){return`<?xml version="1.0"?><Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"><Triggers>${s.map(c).join("")}</Triggers><Principals><Principal id="Owner"><UserId>${se(r)}</UserId><LogonType>InteractiveToken</LogonType><RunLevel>LeastPrivilege</RunLevel></Principal></Principals><Settings><MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy><DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries><StopIfGoingOnBatteries>false</StopIfGoingOnBatteries><StartWhenAvailable>false</StartWhenAvailable><WakeToRun>false</WakeToRun><ExecutionTimeLimit>PT65M</ExecutionTimeLimit></Settings><Actions Context="Owner"><Exec><Command>powershell.exe</Command><Arguments>${se(["-NoProfile","-NonInteractive","-File",l].map($n).join(" "))}</Arguments></Exec></Actions></Task>`},powershell:`${e.environment.map(([r,l])=>`$env:${r} = '${l.replace(/'/gu,"''")}'`).join(`
83
+ `)}
84
+ & ${n.map(r=>`'${r.replace(/'/gu,"''")}'`).join(" ")}
85
+ exit $LASTEXITCODE
86
+ `}}p(Ct,"collectorServiceFiles");var Mt=Fn(Un),$=p(async(e,t)=>{await Mt(e,t,{timeout:15e3,maxBuffer:16384,windowsHide:!0})},"command");function $t(e){return`openpond-import-${I(e).slice(0,16)}`}p($t,"identity");async function ei(e,t){let n=await P.open(e);try{n.put(t)}finally{n.close()}}p(ei,"configureCollector");async function Ee(e){let t=await P.open(e);try{return t.status()}finally{t.close()}}p(Ee,"collectorStatus");async function jn(e,t,n){let s=await P.open(e);try{if(t==="start"||t==="stop")s.set("desiredState",t==="start"?"running":"stopped");else if(t==="sync")s.set("syncNow","yes");else{let o=s.connections().find(a=>a.id===n);if(!o)throw new Error("Select a retained connection.");s.put({...o,state:t==="pause"?"paused":t==="resume"?"active":"disconnected"})}return s.status()}finally{s.close()}}p(jn,"controlCollector");async function kt(e){if(process.platform==="darwin"&&(await Ee(e.directory)).running)throw new Error("Wait for the current import to finish, or cancel it, before changing its macOS schedule.");if(!At(e.directory)||!At(e.executable)||[e.directory,e.executable,...e.args].some(i=>/[\r\n\0]/u.test(i)))throw new Error("Collector jobs require absolute paths and single-line arguments.");let t=await vt(e);t&&(e={...e,...t,environment:{...e.environment,ELECTRON_RUN_AS_NODE:"1",APPIMAGE_EXTRACT_AND_RUN:"1"}});let n=Object.entries(e.environment??{});if(n.some(([i,d])=>!["OPENPOND_HOME","ELECTRON_RUN_AS_NODE","APPIMAGE_EXTRACT_AND_RUN"].includes(i)||typeof d!="string"||/[\r\n\0]/u.test(d)))throw new Error("Unsupported service environment setting.");let s=e.home??Dt(),o=$t(e.directory),a=await P.open(e.directory),c;try{c=a.connections().map(i=>a.schedule(i.id)).filter(i=>i!==null)}finally{a.close()}let r=k(e.directory,"calendar-gate.cjs"),l=Ct({name:o,gatePath:r,executable:e.executable,args:[...e.args,"import","service","run","--scheduled","--collector-dir",e.directory],environment:n,schedules:c});if(await V(r,l.gate,{mode:384}),process.platform==="linux"){let i=k(s,".config/systemd/user");await Ae(i,{recursive:!0,mode:448}),await re("systemctl",["--user","disable",`${o}.service`]),await V(k(i,`${o}.service`),l.service,{mode:384}),c.length?(await V(k(i,`${o}.timer`),l.timer,{mode:384}),await $("systemctl",["--user","daemon-reload"]),await $("systemctl",["--user","enable","--now",`${o}.timer`]),await $("systemctl",["--user","restart",`${o}.timer`])):(await re("systemctl",["--user","disable","--now",`${o}.timer`]),await H(k(i,`${o}.timer`),{force:!0}),await $("systemctl",["--user","daemon-reload"]))}else if(process.platform==="darwin"){let i=k(s,"Library/LaunchAgents"),d=k(i,`${o}.plist`);await Ae(i,{recursive:!0,mode:448}),await re("launchctl",["bootout",`gui/${process.getuid()}/${o}`]),c.length?(await V(d,l.plist,{mode:384}),await $("launchctl",["bootstrap",`gui/${process.getuid()}`,d])):await H(d,{force:!0})}else if(process.platform==="win32")if(!c.length)await re("schtasks",["/Delete","/TN",o,"/F"]);else{let i=(await Mt("whoami",[],{timeout:5e3,maxBuffer:1024})).stdout.trim(),d=k(e.directory,"scheduled-task.xml"),u=k(e.directory,"start-collector.ps1");await Ae(e.directory,{recursive:!0,mode:448}),await V(u,l.powershell,{mode:384}),await V(d,l.windowsTask(i,u),{mode:384}),await $("schtasks",["/Create","/TN",o,"/XML",d,"/F"])}else throw new Error("Scheduled imports need a supported OS scheduler. Use import sync manually on this OS.");return{name:o,platform:process.platform,status:await Ee(e.directory)}}p(kt,"installCollectorService");async function re(e,t){try{await $(e,t)}catch(n){let s=n;if(s.code==="ENOENT"||!/not (?:loaded|found|exist)|does not exist|No such|could not be found|cannot find|not been loaded/iu.test(s.stderr??s.message))throw n}}p(re,"optionalCommand");async function ti(e,t,n){if(n!==null&&(n=Y(n)),process.platform==="darwin"&&(await Ee(e.directory)).running)throw new Error("Wait for the current import to finish, or cancel it, before changing its macOS schedule.");let s=await P.open(e.directory),o=Lt(),a;s.database.exec("BEGIN IMMEDIATE");try{let c=s.connections().find(l=>l.id===t);if(!c||n&&c.state==="disconnected")throw new Error("Select a connected source before scheduling imports.");let r=s.setting("scheduleOwner");if(r){let{pid:l}=JSON.parse(r),i=!0;try{process.kill(l,0)}catch(d){i=d.code!=="ESRCH"}if(i)throw new Error("Another schedule update is in progress. Try again shortly.")}a=s.setting(`schedule:${t}`),s.set("scheduleOwner",JSON.stringify({pid:process.pid,token:o})),s.set(`schedule:${t}`,n?JSON.stringify(n):""),s.database.exec("COMMIT")}catch(c){throw s.database.exec("ROLLBACK"),s.close(),c}try{return await kt(e),s.status()}catch(c){s.set(`schedule:${t}`,a??"");try{await kt(e)}catch{throw new Error(`Schedule installation failed and OS rollback could not be verified. Review the OS scheduler. ${c instanceof Error?c.message:""}`)}throw c}finally{s.set("scheduleOwner",""),s.close()}}p(ti,"setCollectorSchedule");async function ni(e,t=Dt()){await jn(e,"stop");let n=$t(e);if(process.platform==="linux")await re("systemctl",["--user","disable","--now",`${n}.timer`]),await H(k(t,".config/systemd/user",`${n}.timer`),{force:!0}),await $("systemctl",["--user","disable","--now",`${n}.service`]),await H(k(t,".config/systemd/user",`${n}.service`),{force:!0}),await $("systemctl",["--user","daemon-reload"]);else if(process.platform==="darwin")await $("launchctl",["bootout",`gui/${process.getuid()}/${n}`]),await H(k(t,"Library/LaunchAgents",`${n}.plist`),{force:!0});else if(process.platform==="win32")await $("schtasks",["/End","/TN",n]),await $("schtasks",["/Delete","/TN",n,"/F"]),await H(k(e,"scheduled-task.xml"),{force:!0}),await H(k(e,"start-collector.ps1"),{force:!0});else throw new Error("No per-user supervisor is available.");await H(k(e,"calendar-gate.cjs"),{force:!0}),process.platform==="linux"&&await Nt(e);let s=await P.open(e);try{for(let o of s.connections())s.set(`schedule:${o.id}`,"")}finally{s.close()}return Ee(e)}p(ni,"uninstallCollectorService");async function V(e,t,n){let s=`${e}.${Lt()}.tmp`;try{await Pn(s,t,{...n,flag:"wx"}),await Hn(s,e)}finally{await H(s,{force:!0})}}p(V,"atomicServiceFile");import{homedir as qn}from"node:os";import{join as Ft,resolve as Ut}from"node:path";import{randomUUID as Wn}from"node:crypto";import{mkdir as Bn,open as Gn,readFile as zn}from"node:fs/promises";function Xn(e=Ft(qn(),".openpond")){return process.env.OPENPOND_COLLECTOR_DIR?Ut(process.env.OPENPOND_COLLECTOR_DIR):Ut(e,"conversation-importer")}p(Xn,"collectorDirectory");async function li(e=Xn()){await Bn(e,{recursive:!0,mode:448});let t=Ft(e,"machine-id");try{let s=await Gn(t,"wx",384);try{await s.writeFile(Wn()),await s.sync()}finally{await s.close()}}catch(s){if(s.code!=="EEXIST")throw s}let n=(await zn(t,"utf8")).trim();if(!/^[a-f0-9-]{36}$/u.test(n))throw new Error("Collector machine identity is invalid; restore its retained state.");return n}p(li,"collectorMachineId");export{Me as a,cs as b,pr as c,le as d,Vr as e,Kr as f,Zr as g,ue as h,lo as i,me as j,ve as k,gn as l,Y as m,ro as n,_n as o,oo as p,P as q,ei as r,Ee as s,jn as t,kt as u,ti as v,ni as w,Xn as x,li as y};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __openpondCreateRequire } from "node:module"; var require = __openpondCreateRequire(import.meta.url);
2
- import{F as Ie}from"./chunk-EIRYMSEG.js";import{a as B}from"./chunk-7ED24PP6.js";import{a as Ee}from"./chunk-2IHO4GDJ.js";import{a as je}from"./chunk-GJ2ZJFDD.js";import{e as He}from"./chunk-H6IW2R22.js";import{b as Re,c as ie,m as ne}from"./chunk-ACYFMLWG.js";import{e as ve,i as Se,l as Pe,m as be}from"./chunk-TVQAPBLZ.js";import{k as v,l as fe,m as j}from"./chunk-KGNCKIFP.js";import{a as c}from"./chunk-FTQLQJQV.js";import{promises as f}from"node:fs";import n from"node:path";import te from"node:path";import{constants as De,promises as D}from"node:fs";import R from"node:path";async function Fe(e){let t=await D.lstat(e);if(t.isSymbolicLink())throw new Error(`Profile source cannot be a symlink: ${e}`);if(t.isFile())return[R.basename(e)];if(!t.isDirectory())throw new Error(`Profile source is not a file or directory: ${e}`);return _(e)}c(Fe,"sourceFilesForImport");function xe(e){for(let t of["agent.ts","index.ts","agent/agent.ts","agent.yaml","agent.yml","agent.json"])if(e.includes(t))return t;return e[0]}c(xe,"selectAgentPrimaryFile");async function $e(e,t){let a=await D.lstat(e);if(!a.isFile()||a.isSymbolicLink())throw new Error(`Harness import source must be a regular non-symlink file: ${e}`);await D.mkdir(R.dirname(t),{recursive:!0}),await D.copyFile(e,t,De.COPYFILE_EXCL)}c($e,"copyRegularFile");function Z(e){let t=R.extname(e).toLowerCase();return[".md",".txt"].includes(t)?t===".md"?"text/markdown":"text/plain":[".json"].includes(t)?"application/json":[".yaml",".yml"].includes(t)?"application/yaml":[".ts",".tsx",".js",".mjs",".cjs"].includes(t)?"text/javascript":t===".py"?"text/x-python":"application/octet-stream"}c(Z,"mediaTypeForPath");async function ee(e,t){let a=R.resolve(e,...t.split("/")),o=R.relative(e,a);if(!o||o.startsWith("..")||R.isAbsolute(o))throw new Error(`Harness source path escapes its root: ${t}`);let s=await D.lstat(a);if(!s.isFile()||s.isSymbolicLink())throw new Error(`Harness source path must be a regular non-symlink file: ${t}`);let r=await D.realpath(a),w=R.relative(await D.realpath(e),r);if(w.startsWith("..")||R.isAbsolute(w))throw new Error(`Harness source path resolves outside its root: ${t}`);return a}c(ee,"resolveContainedRegularFile");async function _(e,t=e){let a=await D.readdir(t,{withFileTypes:!0}),o=[];for(let s of a){if(["node_modules",".git",".openpond"].includes(s.name)||s.name.startsWith(".env"))continue;let r=R.join(t,s.name);if(s.isSymbolicLink())throw new Error(`Harness source cannot contain symlinks: ${R.relative(e,r)}`);if(s.isDirectory())o.push(...await _(e,r));else if(s.isFile())o.push(R.relative(e,r).split(R.sep).join("/"));else throw new Error(`Harness source contains an unsupported entry: ${R.relative(e,r)}`)}return o.sort()}c(_,"listRegularFiles");function H(e){return e.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"harness"}c(H,"safeSegment");function Ae(e,t){let a=[];return{async copy(o,s){await $e(o,s);let r=te.relative(e,o),w=te.relative(t,s);r&&!r.startsWith("..")&&!te.isAbsolute(r)&&a.push({releasedPath:w.split(te.sep).join("/"),profileRelativePath:r.split(te.sep).join("/")})},add(o,s){a.push({releasedPath:o,profileRelativePath:s})},policy(o){return a.filter(s=>o.some(r=>r.path===s.releasedPath&&r.visibility==="policy"))}}}c(Ae,"createProfileSourceBindings");var Le=c(e=>e==="evals/catalog.json"||/^evals\/(definitions|suites|tasksets)\//.test(e)||/^workflows\/[^/]+\/evals\//.test(e),"isProfilePrivateEvaluationPath");import{execFile as _e}from"node:child_process";import{promises as L}from"node:fs";import G from"node:path";import{promisify as Ne}from"node:util";var ze=Ne(_e);async function nt(e){let t=G.join(e.runPath,"package.json"),a=await L.lstat(t).catch(()=>null);if(a&&(!a.isFile()||a.isSymbolicLink()))throw new Error("Released Profile Agent package manifest must be a regular file.");a||await L.writeFile(t,`{"type":"module"}
3
- `,{flag:"wx"});let o=await me(e.runPath);if(o){let r=o==="npm"?["ci","--omit=dev","--ignore-scripts","--no-audit","--no-fund"]:["install","--prod","--frozen-lockfile","--ignore-scripts","--config.node-linker=hoisted"];await(e.install??Je)(o,r,e.runPath)}let s=G.join(e.runPath,"node_modules","openpond-agent-sdk");if(!await L.lstat(s).catch(()=>null)){let r=JSON.parse(await L.readFile(t,"utf8"));if({...le(r.dependencies),...le(r.optionalDependencies)}["openpond-agent-sdk"])throw new Error("Released Profile Agent declared an SDK dependency that the locked installation did not provide.");let P=await Ie();await L.mkdir(G.dirname(s),{recursive:!0}),await L.symlink(P,s,"dir")}}c(nt,"prepareReleasedProfileActionDependencies");async function me(e){let t=G.join(e,"package.json"),a=await L.lstat(t).catch(()=>null);if(!a)return null;if(!a.isFile()||a.isSymbolicLink())throw new Error("Released Profile Agent package manifest must be a regular file.");let o=JSON.parse(await L.readFile(t,"utf8")),s={...le(o.dependencies),...le(o.optionalDependencies)};if(Object.keys(s).length){for(let[P,u]of Object.entries(s))if(/^(?:file:|link:|workspace:|git\+|https?:)/i.test(u))throw new Error(`Released Profile Agent dependency ${P} must use a portable registry version.`);let r=await We(G.join(e,"package-lock.json")),w=await We(G.join(e,"pnpm-lock.yaml"));if(r===w)throw new Error("Released Profile Agent with third-party dependencies requires exactly one npm or pnpm lockfile.");return r?"npm":"pnpm"}return null}c(me,"inspectReleasedProfileActionDependencies");function le(e){if(e===void 0)return{};if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Released Profile Agent dependencies must be a package map.");let t=Object.entries(e);if(t.some(([a,o])=>!a||typeof o!="string"||!o.trim()))throw new Error("Released Profile Agent dependencies must name portable versions.");return Object.fromEntries(t)}c(le,"dependencyMap");async function We(e){let t=await L.lstat(e).catch(()=>null);if(t&&(!t.isFile()||t.isSymbolicLink()))throw new Error("Released Profile Agent lockfile must be a regular file.");return!!t}c(We,"regularFile");async function Je(e,t,a){try{let o=process.platform==="win32"?`${e}.cmd`:e;await ze(o,t,{cwd:a,timeout:3e5,maxBuffer:1e6,...process.platform==="win32"?{shell:!0}:{}})}catch{throw new Error(`Released Profile Agent locked ${e} dependency installation failed.`)}}c(Je,"installLockedDependencies");var Te="harness.json";async function we(e,t,a,o,s){let r=n.resolve(a.sourcePath),w=[],P=Ae(r,e),u=P.copy,N=new Set((await _(r)).filter(Le)),E=new Set,y=c(i=>{let h=i.id;E.has(h)&&(h=`${h}-${j(i.path).slice(0,8)}`),E.add(h);let b={...i,id:h};return w.push(b),b},"addDeclaration");await f.mkdir(e,{recursive:!0});let ae=n.join(r,"instructions","system.md"),V=await f.lstat(ae).catch(i=>{if(i.code==="ENOENT")return null;throw i});if(V){if(!V.isFile()||V.isSymbolicLink())throw new Error("Profile instructions require an actual regular source file.");await u(ae,n.join(e,"instructions","system.md")),y({id:"instruction-system",kind:"instruction",path:"instructions/system.md",parentId:null,mediaType:"text/markdown",visibility:"policy",portability:"portable"})}for(let i of a.skills.filter(h=>h.enabled)){if(i.validationStatus!=="valid")throw new Error(`Cannot import invalid Profile Skill ${i.name}: ${i.validationMessages.join(" ")}`);let h=n.dirname(n.join(r,i.path)),b=`skills/${H(i.name)}/SKILL.md`;await u(n.join(h,"SKILL.md"),n.join(e,...b.split("/")));let T=y({id:`skill-${H(i.name)}`,kind:"skill",path:b,parentId:null,mediaType:"text/markdown",visibility:"policy",portability:"portable"});for(let p of i.resourceFiles){let O=`skills/${H(i.name)}/${p.split(n.sep).join("/")}`;await u(n.join(h,p),n.join(e,...O.split("/"))),y({id:`skill-resource-${H(i.name)}-${j(p).slice(0,12)}`,kind:"skill_resource",path:O,parentId:T.id,mediaType:Z(O),visibility:"policy",portability:"portable"})}}for(let i of a.agents.filter(h=>h.enabled)){let h=n.resolve(r,i.path),b=await f.realpath(h),T=await f.realpath(r),p=n.relative(T,b);if(p.startsWith("..")||n.isAbsolute(p))throw new Error("Profile Agent source escapes its admitted Profile root.");let O=await f.lstat(h),U=(await Fe(h)).filter(A=>{let C=O.isDirectory()?n.join(b,...A.split("/")):b;return!N.has(n.relative(T,C).split(n.sep).join("/"))});if(U.length===0)throw new Error(`Profile Agent ${i.id} has no source files.`);let Y=xe(U);for(let A of U){let C=`agents/${H(i.id)}/${A}`,Q=(await f.stat(h)).isDirectory()?n.join(h,...A.split("/")):h;await u(Q,n.join(e,...C.split("/"))),y({id:A===Y?`agent-${H(i.id)}`:`agent-asset-${H(i.id)}-${j(A).slice(0,12)}`,kind:A===Y?"agent":"asset",path:C,parentId:null,mediaType:Z(C),visibility:"policy",portability:"portable"})}await me(n.join(e,"agents",H(i.id)))}let X=new Set,se=new Set(a.agents.filter(i=>i.enabled).map(i=>i.id)),W=a.actionCatalog.filter(i=>i.agentId&&se.has(i.agentId)).map(i=>({id:i.id,agentId:H(i.agentId),sourceActionId:i.sourceActionId??i.id,inputSchema:typeof i.inputSchema=="object"&&i.inputSchema!==null?i.inputSchema:{type:"object",additionalProperties:!0}})),re=new Set(W.map(i=>i.id)),z=n.join(r,"workflows","catalog.json"),F=await f.lstat(z).catch(()=>null),l=(await _(r)).filter(i=>i.startsWith("workflows/")),S=l.some(i=>/^workflows\/[^/]+\/(PROMPT\.md|ACTION\.json)$/.test(i));if(S&&F)throw new Error("Authored Workflow packages and legacy workflows/catalog.json cannot coexist; migrate the catalog first.");if(F||S||W.length){if(F&&(!F.isFile()||F.isSymbolicLink()))throw new Error("Profile workflow catalog must be a regular file.");let i=S?He({files:new Map(await Promise.all(l.map(async p=>[p,await f.readFile(await ee(r,p),"utf8")]))),skillPaths:new Set(w.filter(p=>p.kind==="skill").map(p=>p.path)),actionIds:re}):null,h=i?Buffer.from(v(i.catalog)):F?await f.readFile(z):Buffer.from(v({schemaVersion:"openpond.profileWorkflows.v1",workflows:[]}));F&&P.add("workflows/catalog.json","workflows/catalog.json");let b=ie({catalog:JSON.parse(h.toString("utf8")),sourcePaths:new Set(w.filter(p=>p.kind==="skill").map(p=>p.path)),actionIds:new Set(W.map(p=>p.id))});for(let p of b.workflows)X.add(p.id);ue(b);let T="workflows/catalog.json";await f.mkdir(n.join(e,"workflows"),{recursive:!0}),await f.writeFile(n.join(e,"workflows","catalog.json"),h,{flag:"wx"});for(let p of i?.referencedPaths??[])await u(n.join(r,...p.split("/")),n.join(e,...p.split("/"))),y({id:`profile-workflow-source-${j(p).slice(0,16)}`,kind:"asset",path:p,parentId:null,mediaType:Z(p),visibility:"policy",portability:"portable"});y({id:"profile-workflows",kind:"workflow",path:T,parentId:null,mediaType:"application/json",visibility:"policy",portability:"portable"})}(F||S||W.length)&&(await f.writeFile(n.join(e,"workflows","actions.json"),v({schemaVersion:"openpond.profileWorkflowActions.v1",actions:W}),{flag:"wx"}),y({id:"profile-workflow-actions",kind:"asset",path:"workflows/actions.json",parentId:null,mediaType:"application/json",visibility:"policy",portability:"portable"}));let I=n.join(r,"evals","catalog.json"),J=await f.lstat(I).catch(()=>null),$=(await _(r)).filter(i=>/^workflows\/[^/]+\/evals\/[^/]+\.json$/.test(i)||/^evals\/(definitions|suites)\/[^/]+\.json$/.test(i));if(J&&$.length)throw new Error("Authored evaluation definitions and legacy evals/catalog.json cannot coexist; migrate the catalog first.");if(J||$.length){let[{ProfileEvaluationDefinitionSchema:i,ProfileEvaluationSuiteSchema:h,validateProfileEvaluationCatalog:b},{validateTasksetPackage:T}]=await Promise.all([import("./dist-OMGUJYPD.js"),import("./taskset-packages-XC6HEE3K.js")]);if(J&&(!J.isFile()||J.isSymbolicLink()))throw new Error("Profile evaluation catalog must be a regular file.");let p=[],O=[];for(let g of $){let x=JSON.parse(await f.readFile(await ee(r,g),"utf8"));if(g.startsWith("evals/suites/"))O.push(h.parse(x));else{let M=i.parse(x),K=/^workflows\/([^/]+)\/evals\//.exec(g)?.[1];if(K&&(M.target.kind!=="workflow"||M.target.workflowId!==K))throw new Error(`Profile evaluation ${M.id} must target its containing Workflow ${K}.`);p.push(M)}}let U=$.length?Buffer.from(v({schemaVersion:"openpond.profileEvaluations.v1",definitions:p.sort((g,x)=>g.id.localeCompare(x.id)),suites:O.sort((g,x)=>g.id.localeCompare(x.id))})):await f.readFile(I),{catalog:Y}=b({catalog:JSON.parse(U.toString("utf8")),workflowIds:X,skillPaths:new Set(w.filter(g=>g.kind==="skill").map(g=>g.path)),actionIds:re});await f.mkdir(n.join(e,"evals"),{recursive:!0}),await f.writeFile(n.join(e,"evals","catalog.json"),U,{flag:"wx"});for(let g of $)await u(n.join(r,...g.split("/")),n.join(e,...g.split("/"))),y({id:`profile-evaluation-source-${j(g).slice(0,16)}`,kind:"asset",path:g,parentId:null,mediaType:"application/json",visibility:"verifier",portability:"portable"});y({id:"profile-evaluations",kind:"asset",path:"evals/catalog.json",parentId:null,mediaType:"application/json",visibility:"verifier",portability:"portable"});let A=new Set(Y.definitions.map(g=>g.tasksetRelease.contentHash)),C=n.join(r,"evals","tasksets"),Q=await f.lstat(C).catch(()=>null);if(Q&&(!Q.isDirectory()||Q.isSymbolicLink()))throw new Error("Profile evaluation Taskset directory must be a regular directory.");for(let g of A){let x=n.join(C,`${g}.json`),M=await f.lstat(x).catch(()=>null);if(!M)throw new Error(`Profile evaluation Taskset package ${g} is missing.`);if(!M.isFile()||M.isSymbolicLink())throw new Error("Profile evaluation Taskset package must be a regular file.");let K=T(JSON.parse(await f.readFile(x,"utf8")));if(K.taskset.contentHash!==g||!Y.definitions.some(ye=>ye.tasksetRelease.contentHash===g&&ye.tasksetRelease.id===K.taskset.id))throw new Error("Profile evaluation Taskset package differs from its catalog reference.");let ke=`evals/tasksets/${g}.json`;await u(x,n.join(e,...ke.split("/"))),y({id:`profile-evaluation-taskset-${g.slice(0,16)}`,kind:"asset",path:ke,parentId:null,mediaType:"application/json",visibility:"verifier",portability:"portable"})}}let q=await Be(a,o),k=`dependency-lock/${q.name}`;await f.mkdir(n.join(e,"dependency-lock"),{recursive:!0}),q.sourcePath?await u(q.sourcePath,n.join(e,...k.split("/"))):await f.writeFile(n.join(e,...k.split("/")),v(q.generated),{flag:"wx"}),y({id:"dependency-lock",kind:"dependency_lock",path:k,parentId:null,mediaType:Z(k),visibility:"policy",portability:"portable"}),await f.writeFile(n.join(e,"program.json"),v({runtimeProtocol:"openpond.agent-runtime.v1"}),{flag:"wx"}),y({id:"agent-runtime-program",kind:"program",path:"program.json",parentId:null,mediaType:"application/json",visibility:"policy",portability:"portable"});let de=B.parse({schemaVersion:"openpond.harnessSourceManifest.v1",name:t,files:w,toolDeclarations:[],capabilityRequirements:[],lifecycle:{create:!0,reset:!0,step:!0,collect:!0,destroy:!0,resetScope:"attempt"},graderInterface:{visibleEvidence:["output","runtime_events","artifacts"],privilegedEvidence:["expected_output","private_verifier"],privateVerifierIsolation:!0},runtimeProtocol:"openpond.agent-runtime.v1",metadata:{importedFrom:"openpond.profile",profileId:a.activeProfile,...s?{profileRepositoryId:s}:{},profileGitHead:o??a.git?.head??null,profileSourceBindings:P.policy(w),profileInstructionSourcePath:"instructions/system.md",excludedEvalCount:a.evals.length,actionConversionPending:a.actionCatalog.length>0}});await f.writeFile(n.join(e,Te),v(de),{flag:"wx"}),await ce(e,t)}c(we,"writeImportedProfileSource");function ue(e){for(let t of e.workflows){let a=ne(t.inputSchema);if(!a.valid)throw new Error(`Profile workflow ${t.id} has an invalid input schema: ${a.issues[0]?.message??"schema mismatch"}`)}}c(ue,"assertProfileWorkflowInputSchemas");async function ce(e,t){let a=n.join(e,Te),o=B.parse(JSON.parse(await f.readFile(a,"utf8")));if(o.files.some(u=>u.kind==="instruction"))return;let s="instructions/system.md";await f.mkdir(n.join(e,"instructions"),{recursive:!0}),await f.writeFile(n.join(e,...s.split("/")),`# ${t}
2
+ import{F as Ie}from"./chunk-FKJHEZCW.js";import{a as B}from"./chunk-7ED24PP6.js";import{a as Ee}from"./chunk-2IHO4GDJ.js";import{a as je}from"./chunk-GJ2ZJFDD.js";import{e as He}from"./chunk-H6IW2R22.js";import{b as Re,c as ie,m as ne}from"./chunk-ACYFMLWG.js";import{e as ve,i as Se,l as Pe,m as be}from"./chunk-TVQAPBLZ.js";import{k as v,l as fe,m as j}from"./chunk-KGNCKIFP.js";import{a as c}from"./chunk-FTQLQJQV.js";import{promises as f}from"node:fs";import n from"node:path";import te from"node:path";import{constants as De,promises as D}from"node:fs";import R from"node:path";async function Fe(e){let t=await D.lstat(e);if(t.isSymbolicLink())throw new Error(`Profile source cannot be a symlink: ${e}`);if(t.isFile())return[R.basename(e)];if(!t.isDirectory())throw new Error(`Profile source is not a file or directory: ${e}`);return _(e)}c(Fe,"sourceFilesForImport");function xe(e){for(let t of["agent.ts","index.ts","agent/agent.ts","agent.yaml","agent.yml","agent.json"])if(e.includes(t))return t;return e[0]}c(xe,"selectAgentPrimaryFile");async function $e(e,t){let a=await D.lstat(e);if(!a.isFile()||a.isSymbolicLink())throw new Error(`Harness import source must be a regular non-symlink file: ${e}`);await D.mkdir(R.dirname(t),{recursive:!0}),await D.copyFile(e,t,De.COPYFILE_EXCL)}c($e,"copyRegularFile");function Z(e){let t=R.extname(e).toLowerCase();return[".md",".txt"].includes(t)?t===".md"?"text/markdown":"text/plain":[".json"].includes(t)?"application/json":[".yaml",".yml"].includes(t)?"application/yaml":[".ts",".tsx",".js",".mjs",".cjs"].includes(t)?"text/javascript":t===".py"?"text/x-python":"application/octet-stream"}c(Z,"mediaTypeForPath");async function ee(e,t){let a=R.resolve(e,...t.split("/")),o=R.relative(e,a);if(!o||o.startsWith("..")||R.isAbsolute(o))throw new Error(`Harness source path escapes its root: ${t}`);let s=await D.lstat(a);if(!s.isFile()||s.isSymbolicLink())throw new Error(`Harness source path must be a regular non-symlink file: ${t}`);let r=await D.realpath(a),w=R.relative(await D.realpath(e),r);if(w.startsWith("..")||R.isAbsolute(w))throw new Error(`Harness source path resolves outside its root: ${t}`);return a}c(ee,"resolveContainedRegularFile");async function _(e,t=e){let a=await D.readdir(t,{withFileTypes:!0}),o=[];for(let s of a){if(["node_modules",".git",".openpond"].includes(s.name)||s.name.startsWith(".env"))continue;let r=R.join(t,s.name);if(s.isSymbolicLink())throw new Error(`Harness source cannot contain symlinks: ${R.relative(e,r)}`);if(s.isDirectory())o.push(...await _(e,r));else if(s.isFile())o.push(R.relative(e,r).split(R.sep).join("/"));else throw new Error(`Harness source contains an unsupported entry: ${R.relative(e,r)}`)}return o.sort()}c(_,"listRegularFiles");function H(e){return e.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"harness"}c(H,"safeSegment");function Ae(e,t){let a=[];return{async copy(o,s){await $e(o,s);let r=te.relative(e,o),w=te.relative(t,s);r&&!r.startsWith("..")&&!te.isAbsolute(r)&&a.push({releasedPath:w.split(te.sep).join("/"),profileRelativePath:r.split(te.sep).join("/")})},add(o,s){a.push({releasedPath:o,profileRelativePath:s})},policy(o){return a.filter(s=>o.some(r=>r.path===s.releasedPath&&r.visibility==="policy"))}}}c(Ae,"createProfileSourceBindings");var Le=c(e=>e==="evals/catalog.json"||/^evals\/(definitions|suites|tasksets)\//.test(e)||/^workflows\/[^/]+\/evals\//.test(e),"isProfilePrivateEvaluationPath");import{execFile as _e}from"node:child_process";import{promises as L}from"node:fs";import G from"node:path";import{promisify as Ne}from"node:util";var ze=Ne(_e);async function nt(e){let t=G.join(e.runPath,"package.json"),a=await L.lstat(t).catch(()=>null);if(a&&(!a.isFile()||a.isSymbolicLink()))throw new Error("Released Profile Agent package manifest must be a regular file.");a||await L.writeFile(t,`{"type":"module"}
3
+ `,{flag:"wx"});let o=await me(e.runPath);if(o){let r=o==="npm"?["ci","--omit=dev","--ignore-scripts","--no-audit","--no-fund"]:["install","--prod","--frozen-lockfile","--ignore-scripts","--config.node-linker=hoisted"];await(e.install??Je)(o,r,e.runPath)}let s=G.join(e.runPath,"node_modules","openpond-agent-sdk");if(!await L.lstat(s).catch(()=>null)){let r=JSON.parse(await L.readFile(t,"utf8"));if({...le(r.dependencies),...le(r.optionalDependencies)}["openpond-agent-sdk"])throw new Error("Released Profile Agent declared an SDK dependency that the locked installation did not provide.");let P=await Ie();await L.mkdir(G.dirname(s),{recursive:!0}),await L.symlink(P,s,"dir")}}c(nt,"prepareReleasedProfileActionDependencies");async function me(e){let t=G.join(e,"package.json"),a=await L.lstat(t).catch(()=>null);if(!a)return null;if(!a.isFile()||a.isSymbolicLink())throw new Error("Released Profile Agent package manifest must be a regular file.");let o=JSON.parse(await L.readFile(t,"utf8")),s={...le(o.dependencies),...le(o.optionalDependencies)};if(Object.keys(s).length){for(let[P,u]of Object.entries(s))if(/^(?:file:|link:|workspace:|git\+|https?:)/i.test(u))throw new Error(`Released Profile Agent dependency ${P} must use a portable registry version.`);let r=await We(G.join(e,"package-lock.json")),w=await We(G.join(e,"pnpm-lock.yaml"));if(r===w)throw new Error("Released Profile Agent with third-party dependencies requires exactly one npm or pnpm lockfile.");return r?"npm":"pnpm"}return null}c(me,"inspectReleasedProfileActionDependencies");function le(e){if(e===void 0)return{};if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Released Profile Agent dependencies must be a package map.");let t=Object.entries(e);if(t.some(([a,o])=>!a||typeof o!="string"||!o.trim()))throw new Error("Released Profile Agent dependencies must name portable versions.");return Object.fromEntries(t)}c(le,"dependencyMap");async function We(e){let t=await L.lstat(e).catch(()=>null);if(t&&(!t.isFile()||t.isSymbolicLink()))throw new Error("Released Profile Agent lockfile must be a regular file.");return!!t}c(We,"regularFile");async function Je(e,t,a){try{let o=process.platform==="win32"?`${e}.cmd`:e;await ze(o,t,{cwd:a,timeout:3e5,maxBuffer:1e6,...process.platform==="win32"?{shell:!0}:{}})}catch{throw new Error(`Released Profile Agent locked ${e} dependency installation failed.`)}}c(Je,"installLockedDependencies");var Te="harness.json";async function we(e,t,a,o,s){let r=n.resolve(a.sourcePath),w=[],P=Ae(r,e),u=P.copy,N=new Set((await _(r)).filter(Le)),E=new Set,y=c(i=>{let h=i.id;E.has(h)&&(h=`${h}-${j(i.path).slice(0,8)}`),E.add(h);let b={...i,id:h};return w.push(b),b},"addDeclaration");await f.mkdir(e,{recursive:!0});let ae=n.join(r,"instructions","system.md"),V=await f.lstat(ae).catch(i=>{if(i.code==="ENOENT")return null;throw i});if(V){if(!V.isFile()||V.isSymbolicLink())throw new Error("Profile instructions require an actual regular source file.");await u(ae,n.join(e,"instructions","system.md")),y({id:"instruction-system",kind:"instruction",path:"instructions/system.md",parentId:null,mediaType:"text/markdown",visibility:"policy",portability:"portable"})}for(let i of a.skills.filter(h=>h.enabled)){if(i.validationStatus!=="valid")throw new Error(`Cannot import invalid Profile Skill ${i.name}: ${i.validationMessages.join(" ")}`);let h=n.dirname(n.join(r,i.path)),b=`skills/${H(i.name)}/SKILL.md`;await u(n.join(h,"SKILL.md"),n.join(e,...b.split("/")));let T=y({id:`skill-${H(i.name)}`,kind:"skill",path:b,parentId:null,mediaType:"text/markdown",visibility:"policy",portability:"portable"});for(let p of i.resourceFiles){let O=`skills/${H(i.name)}/${p.split(n.sep).join("/")}`;await u(n.join(h,p),n.join(e,...O.split("/"))),y({id:`skill-resource-${H(i.name)}-${j(p).slice(0,12)}`,kind:"skill_resource",path:O,parentId:T.id,mediaType:Z(O),visibility:"policy",portability:"portable"})}}for(let i of a.agents.filter(h=>h.enabled)){let h=n.resolve(r,i.path),b=await f.realpath(h),T=await f.realpath(r),p=n.relative(T,b);if(p.startsWith("..")||n.isAbsolute(p))throw new Error("Profile Agent source escapes its admitted Profile root.");let O=await f.lstat(h),U=(await Fe(h)).filter(A=>{let C=O.isDirectory()?n.join(b,...A.split("/")):b;return!N.has(n.relative(T,C).split(n.sep).join("/"))});if(U.length===0)throw new Error(`Profile Agent ${i.id} has no source files.`);let Y=xe(U);for(let A of U){let C=`agents/${H(i.id)}/${A}`,Q=(await f.stat(h)).isDirectory()?n.join(h,...A.split("/")):h;await u(Q,n.join(e,...C.split("/"))),y({id:A===Y?`agent-${H(i.id)}`:`agent-asset-${H(i.id)}-${j(A).slice(0,12)}`,kind:A===Y?"agent":"asset",path:C,parentId:null,mediaType:Z(C),visibility:"policy",portability:"portable"})}await me(n.join(e,"agents",H(i.id)))}let X=new Set,se=new Set(a.agents.filter(i=>i.enabled).map(i=>i.id)),W=a.actionCatalog.filter(i=>i.agentId&&se.has(i.agentId)).map(i=>({id:i.id,agentId:H(i.agentId),sourceActionId:i.sourceActionId??i.id,inputSchema:typeof i.inputSchema=="object"&&i.inputSchema!==null?i.inputSchema:{type:"object",additionalProperties:!0}})),re=new Set(W.map(i=>i.id)),z=n.join(r,"workflows","catalog.json"),F=await f.lstat(z).catch(()=>null),l=(await _(r)).filter(i=>i.startsWith("workflows/")),S=l.some(i=>/^workflows\/[^/]+\/(PROMPT\.md|ACTION\.json)$/.test(i));if(S&&F)throw new Error("Authored Workflow packages and legacy workflows/catalog.json cannot coexist; migrate the catalog first.");if(F||S||W.length){if(F&&(!F.isFile()||F.isSymbolicLink()))throw new Error("Profile workflow catalog must be a regular file.");let i=S?He({files:new Map(await Promise.all(l.map(async p=>[p,await f.readFile(await ee(r,p),"utf8")]))),skillPaths:new Set(w.filter(p=>p.kind==="skill").map(p=>p.path)),actionIds:re}):null,h=i?Buffer.from(v(i.catalog)):F?await f.readFile(z):Buffer.from(v({schemaVersion:"openpond.profileWorkflows.v1",workflows:[]}));F&&P.add("workflows/catalog.json","workflows/catalog.json");let b=ie({catalog:JSON.parse(h.toString("utf8")),sourcePaths:new Set(w.filter(p=>p.kind==="skill").map(p=>p.path)),actionIds:new Set(W.map(p=>p.id))});for(let p of b.workflows)X.add(p.id);ue(b);let T="workflows/catalog.json";await f.mkdir(n.join(e,"workflows"),{recursive:!0}),await f.writeFile(n.join(e,"workflows","catalog.json"),h,{flag:"wx"});for(let p of i?.referencedPaths??[])await u(n.join(r,...p.split("/")),n.join(e,...p.split("/"))),y({id:`profile-workflow-source-${j(p).slice(0,16)}`,kind:"asset",path:p,parentId:null,mediaType:Z(p),visibility:"policy",portability:"portable"});y({id:"profile-workflows",kind:"workflow",path:T,parentId:null,mediaType:"application/json",visibility:"policy",portability:"portable"})}(F||S||W.length)&&(await f.writeFile(n.join(e,"workflows","actions.json"),v({schemaVersion:"openpond.profileWorkflowActions.v1",actions:W}),{flag:"wx"}),y({id:"profile-workflow-actions",kind:"asset",path:"workflows/actions.json",parentId:null,mediaType:"application/json",visibility:"policy",portability:"portable"}));let I=n.join(r,"evals","catalog.json"),J=await f.lstat(I).catch(()=>null),$=(await _(r)).filter(i=>/^workflows\/[^/]+\/evals\/[^/]+\.json$/.test(i)||/^evals\/(definitions|suites)\/[^/]+\.json$/.test(i));if(J&&$.length)throw new Error("Authored evaluation definitions and legacy evals/catalog.json cannot coexist; migrate the catalog first.");if(J||$.length){let[{ProfileEvaluationDefinitionSchema:i,ProfileEvaluationSuiteSchema:h,validateProfileEvaluationCatalog:b},{validateTasksetPackage:T}]=await Promise.all([import("./dist-OMGUJYPD.js"),import("./taskset-packages-ONULEIVI.js")]);if(J&&(!J.isFile()||J.isSymbolicLink()))throw new Error("Profile evaluation catalog must be a regular file.");let p=[],O=[];for(let g of $){let x=JSON.parse(await f.readFile(await ee(r,g),"utf8"));if(g.startsWith("evals/suites/"))O.push(h.parse(x));else{let M=i.parse(x),K=/^workflows\/([^/]+)\/evals\//.exec(g)?.[1];if(K&&(M.target.kind!=="workflow"||M.target.workflowId!==K))throw new Error(`Profile evaluation ${M.id} must target its containing Workflow ${K}.`);p.push(M)}}let U=$.length?Buffer.from(v({schemaVersion:"openpond.profileEvaluations.v1",definitions:p.sort((g,x)=>g.id.localeCompare(x.id)),suites:O.sort((g,x)=>g.id.localeCompare(x.id))})):await f.readFile(I),{catalog:Y}=b({catalog:JSON.parse(U.toString("utf8")),workflowIds:X,skillPaths:new Set(w.filter(g=>g.kind==="skill").map(g=>g.path)),actionIds:re});await f.mkdir(n.join(e,"evals"),{recursive:!0}),await f.writeFile(n.join(e,"evals","catalog.json"),U,{flag:"wx"});for(let g of $)await u(n.join(r,...g.split("/")),n.join(e,...g.split("/"))),y({id:`profile-evaluation-source-${j(g).slice(0,16)}`,kind:"asset",path:g,parentId:null,mediaType:"application/json",visibility:"verifier",portability:"portable"});y({id:"profile-evaluations",kind:"asset",path:"evals/catalog.json",parentId:null,mediaType:"application/json",visibility:"verifier",portability:"portable"});let A=new Set(Y.definitions.map(g=>g.tasksetRelease.contentHash)),C=n.join(r,"evals","tasksets"),Q=await f.lstat(C).catch(()=>null);if(Q&&(!Q.isDirectory()||Q.isSymbolicLink()))throw new Error("Profile evaluation Taskset directory must be a regular directory.");for(let g of A){let x=n.join(C,`${g}.json`),M=await f.lstat(x).catch(()=>null);if(!M)throw new Error(`Profile evaluation Taskset package ${g} is missing.`);if(!M.isFile()||M.isSymbolicLink())throw new Error("Profile evaluation Taskset package must be a regular file.");let K=T(JSON.parse(await f.readFile(x,"utf8")));if(K.taskset.contentHash!==g||!Y.definitions.some(ye=>ye.tasksetRelease.contentHash===g&&ye.tasksetRelease.id===K.taskset.id))throw new Error("Profile evaluation Taskset package differs from its catalog reference.");let ke=`evals/tasksets/${g}.json`;await u(x,n.join(e,...ke.split("/"))),y({id:`profile-evaluation-taskset-${g.slice(0,16)}`,kind:"asset",path:ke,parentId:null,mediaType:"application/json",visibility:"verifier",portability:"portable"})}}let q=await Be(a,o),k=`dependency-lock/${q.name}`;await f.mkdir(n.join(e,"dependency-lock"),{recursive:!0}),q.sourcePath?await u(q.sourcePath,n.join(e,...k.split("/"))):await f.writeFile(n.join(e,...k.split("/")),v(q.generated),{flag:"wx"}),y({id:"dependency-lock",kind:"dependency_lock",path:k,parentId:null,mediaType:Z(k),visibility:"policy",portability:"portable"}),await f.writeFile(n.join(e,"program.json"),v({runtimeProtocol:"openpond.agent-runtime.v1"}),{flag:"wx"}),y({id:"agent-runtime-program",kind:"program",path:"program.json",parentId:null,mediaType:"application/json",visibility:"policy",portability:"portable"});let de=B.parse({schemaVersion:"openpond.harnessSourceManifest.v1",name:t,files:w,toolDeclarations:[],capabilityRequirements:[],lifecycle:{create:!0,reset:!0,step:!0,collect:!0,destroy:!0,resetScope:"attempt"},graderInterface:{visibleEvidence:["output","runtime_events","artifacts"],privilegedEvidence:["expected_output","private_verifier"],privateVerifierIsolation:!0},runtimeProtocol:"openpond.agent-runtime.v1",metadata:{importedFrom:"openpond.profile",profileId:a.activeProfile,...s?{profileRepositoryId:s}:{},profileGitHead:o??a.git?.head??null,profileSourceBindings:P.policy(w),profileInstructionSourcePath:"instructions/system.md",excludedEvalCount:a.evals.length,actionConversionPending:a.actionCatalog.length>0}});await f.writeFile(n.join(e,Te),v(de),{flag:"wx"}),await ce(e,t)}c(we,"writeImportedProfileSource");function ue(e){for(let t of e.workflows){let a=ne(t.inputSchema);if(!a.valid)throw new Error(`Profile workflow ${t.id} has an invalid input schema: ${a.issues[0]?.message??"schema mismatch"}`)}}c(ue,"assertProfileWorkflowInputSchemas");async function ce(e,t){let a=n.join(e,Te),o=B.parse(JSON.parse(await f.readFile(a,"utf8")));if(o.files.some(u=>u.kind==="instruction"))return;let s="instructions/system.md";await f.mkdir(n.join(e,"instructions"),{recursive:!0}),await f.writeFile(n.join(e,...s.split("/")),`# ${t}
4
4
 
5
5
  Keep reusable, provider-neutral execution guidance for this Harness here.
6
6
  `,{flag:"wx"});let w=new Set(o.files.map(u=>u.id)).has("instruction-system")?`instruction-system-${j(s).slice(0,8)}`:"instruction-system",P=B.parse({...o,name:t,files:[...o.files,{id:w,kind:"instruction",path:s,parentId:null,mediaType:"text/markdown",visibility:"policy",portability:"portable"}]});await f.writeFile(a,v(P),{flag:"w"})}c(ce,"ensureHarnessInstructionSurface");async function Be(e,t){let a=e.repoPath?n.resolve(e.repoPath):null;if(a)for(let o of["pnpm-lock.yaml","package-lock.json","yarn.lock"]){let s=n.join(a,o),r=await f.lstat(s).catch(()=>null);if(r?.isFile()&&!r.isSymbolicLink())return{name:o,sourcePath:s}}return{name:"profile-import.json",sourcePath:null,generated:{source:"openpond.profile",profileId:e.activeProfile,profileGitHead:t??e.git?.head??null,dependenciesResolved:!1}}}c(Be,"importedDependencyLock");import{randomUUID as ge}from"node:crypto";import{promises as d}from"node:fs";import m from"node:path";var oe="harness.json",Oe=25e7;function Ve(e,t){let a=`${H(t)}-${j(t).slice(0,16)}`,o=m.join(e,"library","harnesses","workspaces",a);return{root:o,source:m.join(o,"source")}}c(Ve,"localHarnessWorkspacePaths");async function xt(e){return pe({...e,initializeSource:c(t=>Ue(t,e.name),"initializeSource")})}c(xt,"createLocalHarnessWorkspace");async function $t(e){if(e.profile.mode!=="local"||!e.profile.sourcePath)throw new Error("Only a loaded local Profile with a source path can be imported.");return pe({...e,compilationWorkspaceId:e.repositoryId?Me(e.repositoryId,e.name):e.id,initializeSource:c(t=>we(t,e.name,e.profile,e.sourceRevision,e.repositoryId),"initializeSource")})}c($t,"importProfileIntoLocalHarnessWorkspace");function Me(e,t){return`profile-source-${j([e,t]).slice(0,24)}`}c(Me,"profileCompilationWorkspaceId");async function At(e){if(e.profile.mode!=="local"||!e.profile.sourcePath)throw new Error("Only a loaded Profile source can be compiled.");let t=m.join(e.storeDir,"library","harnesses","profile-previews");await d.mkdir(t,{recursive:!0});let a=m.join(t,ge());try{await we(a,e.name,e.profile,e.sourceRevision,e.repositoryId);let o=e.repositoryId?Me(e.repositoryId,e.name):e.workspaceId;return await he({workspaceId:o,sourceDir:a})}finally{await d.rm(a,{recursive:!0,force:!0})}}c(At,"compileProfileHarnessSource");async function Lt(e){let t=await he({workspaceId:e.id,sourceDir:e.sourceDir}),a=await e.store.getHarnessWorkspace(e.id);if(a){let o=a.currentChannel.release?await e.store.getHarnessReleaseRecord(a.currentChannel.release.contentHash):null;if(a.ownerScope.id!==e.ownerId||a.sourceRevision!==t.sourceRevision||o?.harnessRelease.contentHash!==t.harnessRelease.contentHash)throw new Error("Configured Harness source changed; use a new workspace ID for the new release.");return}await pe({...e,initializeSource:c(async o=>{await d.mkdir(o,{recursive:!0}),await d.writeFile(m.join(o,oe),v(t.manifest));for(let s of t.sourceFiles){let r=m.join(o,s.path);await d.mkdir(m.dirname(r),{recursive:!0}),await d.writeFile(r,s.bytes)}},"initializeSource")})}c(Lt,"importLocalHarnessWorkspaceSource");async function Wt(e){let t=await e.store.getHarnessReleaseRecord(e.sourceRelease.contentHash);if(!t||t.harnessRelease.id!==e.sourceRelease.id)throw new Error("Harness workspace fork source release is unavailable.");return pe({...e,initializeSource:c(async a=>{await d.cp(m.join(t.bundlePath,"source"),a,{recursive:!0,force:!1,errorOnExist:!0,verbatimSymlinks:!1}),await ce(a,e.name)},"initializeSource")})}c(Wt,"forkLocalHarnessWorkspaceFromRelease");async function pe(e){let t=e.now??(()=>new Date().toISOString()),a=Ve(e.storeDir,e.id),o=m.dirname(a.root);await d.mkdir(o,{recursive:!0});let s=m.join(o,`.${m.basename(a.root)}.creating-${ge()}`),r=m.join(s,"source");try{await e.initializeSource(r),await d.rename(s,a.root)}catch(w){throw await d.rm(s,{recursive:!0,force:!0}).catch(()=>{}),w}try{let w=await he({workspaceId:e.compilationWorkspaceId??e.id,sourceDir:a.source}),P=await qe({storeDir:e.storeDir,workspaceId:e.id,compiled:w,createdAt:t()}),u=t(),N=je.parse({schemaVersion:"openpond.harnessWorkspace.v1",id:e.id,ownerScope:e.originOwnerScope??{kind:"personal",id:e.ownerId},name:e.name,location:"local",sourceRevision:w.sourceRevision,revision:0,dirty:!1,currentChannel:{name:"personal",release:{id:w.harnessRelease.id,contentHash:w.harnessRelease.contentHash},revision:1},createdAt:u,updatedAt:u,metadata:{...e.originMetadata,sourceLayout:"openpond.harnessSourceManifest.v1",...e.selectionEligible===!1?{selectionEligible:!1}:{}}});return await e.store.createHarnessWorkspaceWithRelease({workspace:N,release:P})}catch(w){throw await d.rm(a.root,{recursive:!0,force:!0}).catch(()=>{}),w}}c(pe,"createLocalHarnessWorkspaceFromInitializer");async function he(e){let t=m.resolve(e.sourceDir),a=m.join(t,oe),o=B.parse(JSON.parse(await d.readFile(a,"utf8"))),s=new Set(o.files.map(l=>l.path)),r=(await _(t)).filter(l=>l!==oe),w=r.filter(l=>!s.has(l)),P=[...s].filter(l=>!r.includes(l));if(w.length||P.length)throw new Error(`Harness source manifest mismatch. Unlisted: ${w.join(", ")||"none"}; missing: ${P.join(", ")||"none"}.`);let u=[];for(let l of o.files){let S=await ee(t,l.path),I=await d.readFile(S);if(I.byteLength>Oe)throw new Error(`Harness source file ${l.path} exceeds ${Oe} bytes.`);u.push({path:l.path,bytes:I,asset:{id:l.id,path:l.path,contentHash:fe(I),sizeBytes:I.byteLength,mediaType:l.mediaType,visibility:l.visibility}})}let N=u.find(({path:l})=>l==="workflows/catalog.json");if(N){let l=o.files.find(k=>k.path===N.path);if(l?.kind!=="workflow"||l.visibility!=="policy")throw new Error("Profile workflow catalog requires a policy-visible workflow declaration.");let S=u.find(({path:k})=>k==="workflows/actions.json"),I=o.files.find(k=>k.path==="workflows/actions.json");if(!S||I?.visibility!=="policy")throw new Error("Profile workflow catalog requires a released action inventory.");let J=Re.parse(JSON.parse(new TextDecoder().decode(S.bytes))).actions,$=new Set;for(let k of J){if($.has(k.id))throw new Error(`Duplicate Profile workflow action ${k.id}.`);if($.add(k.id),!ne(k.inputSchema).valid)throw new Error(`Profile workflow action ${k.id} has an invalid input schema.`);if(!o.files.some(de=>de.path.startsWith(`agents/${k.agentId}/`)))throw new Error(`Profile workflow action ${k.id} lacks its Agent source.`)}let q=ie({catalog:JSON.parse(new TextDecoder().decode(N.bytes)),sourcePaths:new Set(o.files.filter(k=>k.kind==="skill").map(k=>k.path)),actionIds:$});ue(q)}let E=j({manifest:o,files:u.map(({path:l,asset:S})=>({path:l,contentHash:S.contentHash,sizeBytes:S.sizeBytes}))}),y=c(l=>u.filter(({path:S})=>o.files.find(I=>I.path===S)?.kind===l).map(({asset:S})=>S),"byKind"),ae=y("dependency_lock")[0],V=y("program")[0],X=o.files.filter(l=>l.portability==="local_only").map(l=>l.id),se=o.files.filter(l=>l.visibility==="host_private").map(l=>l.id),W=[...X.map(l=>`Asset ${l} is local-only.`),...se.map(l=>`Asset ${l} is host-private.`)],re={id:`harness-source-${E.slice(0,24)}`,contentHash:E},z=Pe({schemaVersion:"openpond.agentSnapshot.v2",id:`agent-snapshot-${j([E,o.toolDeclarations]).slice(0,24)}`,sourceRelease:re,instructions:y("instruction"),skills:y("skill"),agents:y("agent"),toolDeclarations:o.toolDeclarations,capabilityRequirements:o.capabilityRequirements,dependencyLock:ae,portability:{portable:W.length===0,blockers:W,localOnlyAssetRefs:X,hostPrivateAssetRefs:se},metadata:{workspaceId:e.workspaceId,sourceRevision:E,sourceLayout:o.schemaVersion}}),F=be({schemaVersion:"openpond.harnessRelease.v2",id:`harness-${j([z.contentHash,V.contentHash,o.lifecycle]).slice(0,24)}`,agentSnapshot:{id:z.id,contentHash:z.contentHash},program:V,tools:o.toolDeclarations,lifecycle:o.lifecycle,graderInterface:o.graderInterface,files:u.map(({asset:l})=>l),metadata:{runtimeProtocol:o.runtimeProtocol,sourceRevision:E,sourceLayout:o.schemaVersion,...o.metadata.importedFrom==="openpond.profile"?{profile:{id:o.metadata.profileId,sourceRevision:o.metadata.profileGitHead??E,...o.metadata.profileRepositoryId?{repositoryId:o.metadata.profileRepositoryId}:{}}}:{}}});return{manifest:o,sourceRevision:E,agentSnapshot:z,harnessRelease:F,sourceFiles:u}}c(he,"compileLocalHarnessSource");async function qe(e){let t=m.join(e.storeDir,"library","harnesses","releases"),a=m.join(t,e.compiled.harnessRelease.contentHash);await d.mkdir(t,{recursive:!0});let o=m.join(t,`.${e.compiled.harnessRelease.contentHash}.materializing-${ge()}`);try{await d.mkdir(m.join(o,"source"),{recursive:!0});for(let s of e.compiled.sourceFiles){let r=m.join(o,"source",...s.path.split("/"));await d.mkdir(m.dirname(r),{recursive:!0}),await d.writeFile(r,s.bytes,{flag:"wx"})}await d.writeFile(m.join(o,"source",oe),v(e.compiled.manifest),{flag:"wx"}),await d.writeFile(m.join(o,"agent-snapshot.json"),v(e.compiled.agentSnapshot),{flag:"wx"}),await d.writeFile(m.join(o,"harness-release.json"),v(e.compiled.harnessRelease),{flag:"wx"});try{await d.rename(o,a)}catch(s){if(s.code!=="EEXIST"&&s.code!=="ENOTEMPTY")throw s;await Ce(a,e.compiled),await d.rm(o,{recursive:!0,force:!0})}await Ce(a,e.compiled)}catch(s){throw await d.rm(o,{recursive:!0,force:!0}).catch(()=>{}),s}return Ee.parse({schemaVersion:"openpond.localHarnessReleaseRecord.v1",workspaceId:e.workspaceId,sourceRevision:e.compiled.sourceRevision,agentSnapshot:e.compiled.agentSnapshot,harnessRelease:e.compiled.harnessRelease,bundlePath:a,createdAt:e.createdAt})}c(qe,"materializeLocalHarnessRelease");async function Ue(e,t){let a=B.parse({schemaVersion:"openpond.harnessSourceManifest.v1",name:t,files:[{id:"dependency-lock",kind:"dependency_lock",path:"dependency-lock.json",parentId:null,mediaType:"application/json",visibility:"policy",portability:"portable"},{id:"agent-runtime-program",kind:"program",path:"program.json",parentId:null,mediaType:"application/json",visibility:"policy",portability:"portable"}],toolDeclarations:[],capabilityRequirements:[],lifecycle:{create:!0,reset:!0,step:!0,collect:!0,destroy:!0,resetScope:"attempt"},graderInterface:{visibleEvidence:["output","runtime_events","artifacts"],privilegedEvidence:["expected_output","private_verifier"],privateVerifierIsolation:!0},runtimeProtocol:"openpond.agent-runtime.v1",metadata:{}});await d.mkdir(e,{recursive:!0}),await d.writeFile(m.join(e,"dependency-lock.json"),v({dependencies:{}}),{flag:"wx"}),await d.writeFile(m.join(e,"program.json"),v({runtimeProtocol:"openpond.agent-runtime.v1"}),{flag:"wx"}),await d.writeFile(m.join(e,oe),v(a),{flag:"wx"}),await ce(e,t)}c(Ue,"writeDefaultHarnessSource");async function Ce(e,t){let a=ve.parse(JSON.parse(await d.readFile(m.join(e,"agent-snapshot.json"),"utf8"))),o=Se.parse(JSON.parse(await d.readFile(m.join(e,"harness-release.json"),"utf8")));if(a.contentHash!==t.agentSnapshot.contentHash||o.contentHash!==t.harnessRelease.contentHash)throw new Error("Materialized Harness release does not match the compiled immutable objects.");for(let s of t.sourceFiles){let r=await d.readFile(m.join(e,"source",...s.path.split("/")));if(fe(r)!==s.asset.contentHash)throw new Error(`Materialized Harness asset ${s.path} failed hash verification.`)}}c(Ce,"verifyMaterializedRelease");export{Z as a,ee as b,_ as c,H as d,Le as e,nt as f,Ve as g,xt as h,$t as i,At as j,Lt as k,Wt as l,he as m,qe as n};