agentroam-runtime-darwin-arm64 0.2.0-preview.64 → 0.2.0-preview.65

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 (224) hide show
  1. package/manifest.json +2 -2
  2. package/package.json +1 -1
  3. package/runtime/.next/BUILD_ID +1 -1
  4. package/runtime/.next/app-build-manifest.json +10 -10
  5. package/runtime/.next/app-path-routes-manifest.json +1 -1
  6. package/runtime/.next/build-manifest.json +3 -3
  7. package/runtime/.next/prerender-manifest.json +1 -1
  8. package/runtime/.next/required-server-files.json +1 -1
  9. package/runtime/.next/server/app/_not-found/page.js +1 -1
  10. package/runtime/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/runtime/.next/server/app/_not-found.html +1 -1
  12. package/runtime/.next/server/app/_not-found.rsc +1 -1
  13. package/runtime/.next/server/app/api/agent/abort/route.js +1 -1
  14. package/runtime/.next/server/app/api/agent/answer/route.js +1 -1
  15. package/runtime/.next/server/app/api/agent/codex-sharing/route.js +1 -1
  16. package/runtime/.next/server/app/api/agent/harness/status/route.js +1 -1
  17. package/runtime/.next/server/app/api/agent/model/route.js +1 -1
  18. package/runtime/.next/server/app/api/agent/models/route.js +1 -1
  19. package/runtime/.next/server/app/api/agent/run/route.js +2 -2
  20. package/runtime/.next/server/app/api/agent/runtime-health/route.js +1 -1
  21. package/runtime/.next/server/app/api/agent/steer/route.js +1 -1
  22. package/runtime/.next/server/app/api/agent/stream/route.js +3 -3
  23. package/runtime/.next/server/app/api/agent-workspaces/[workspaceId]/sessions/route.js +1 -1
  24. package/runtime/.next/server/app/api/agent-workspaces/route.js +1 -1
  25. package/runtime/.next/server/app/api/auth/verify/route.js +1 -1
  26. package/runtime/.next/server/app/api/business/route.js +1 -1
  27. package/runtime/.next/server/app/api/client-logs/route.js +1 -1
  28. package/runtime/.next/server/app/api/collaboration/route.js +1 -1
  29. package/runtime/.next/server/app/api/flow/v1/catalog/route.js +1 -1
  30. package/runtime/.next/server/app/api/flow/v1/runs/[runId]/cancel/route.js +1 -1
  31. package/runtime/.next/server/app/api/flow/v1/runs/[runId]/events/route.js +4 -4
  32. package/runtime/.next/server/app/api/flow/v1/runs/route.js +1 -1
  33. package/runtime/.next/server/app/api/flow-studio/config/route.js +1 -1
  34. package/runtime/.next/server/app/api/mcp/connect/route.js +1 -1
  35. package/runtime/.next/server/app/api/mcp/disconnect/route.js +1 -1
  36. package/runtime/.next/server/app/api/mcp/servers/route.js +1 -1
  37. package/runtime/.next/server/app/api/memory/[key]/route.js +1 -1
  38. package/runtime/.next/server/app/api/memory/route.js +1 -1
  39. package/runtime/.next/server/app/api/plugins/load/route.js +1 -1
  40. package/runtime/.next/server/app/api/projects/[id]/route.js +1 -1
  41. package/runtime/.next/server/app/api/projects/check/route.js +1 -1
  42. package/runtime/.next/server/app/api/projects/directories/route.js +1 -1
  43. package/runtime/.next/server/app/api/projects/roots/route.js +1 -1
  44. package/runtime/.next/server/app/api/projects/route.js +1 -1
  45. package/runtime/.next/server/app/api/push/subscribe/route.js +2 -2
  46. package/runtime/.next/server/app/api/push/unsubscribe/route.js +2 -2
  47. package/runtime/.next/server/app/api/push/vapid/route.js +2 -2
  48. package/runtime/.next/server/app/api/push/vapid.body +1 -1
  49. package/runtime/.next/server/app/api/remote-tools/register/route.js +1 -1
  50. package/runtime/.next/server/app/api/sessions/[id]/changes/route.js +2 -2
  51. package/runtime/.next/server/app/api/sessions/[id]/fork/route.js +1 -1
  52. package/runtime/.next/server/app/api/sessions/[id]/fork-at/route.js +1 -1
  53. package/runtime/.next/server/app/api/sessions/[id]/goals/route.js +1 -1
  54. package/runtime/.next/server/app/api/sessions/[id]/handoff/route.js +1 -1
  55. package/runtime/.next/server/app/api/sessions/[id]/native-goal/route.js +1 -1
  56. package/runtime/.next/server/app/api/sessions/[id]/query-index/route.js +1 -1
  57. package/runtime/.next/server/app/api/sessions/[id]/release/route.js +1 -1
  58. package/runtime/.next/server/app/api/sessions/[id]/route.js +1 -1
  59. package/runtime/.next/server/app/api/sessions/[id]/thread-goal/route.js +1 -1
  60. package/runtime/.next/server/app/api/sessions/[id]/tool-result/route.js +1 -1
  61. package/runtime/.next/server/app/api/sessions/route.js +1 -1
  62. package/runtime/.next/server/app/api/settings/route.js +1 -1
  63. package/runtime/.next/server/app/api/skills/route.js +1 -1
  64. package/runtime/.next/server/app/api/tool-policies/[policyId]/route.js +1 -1
  65. package/runtime/.next/server/app/api/tool-policies/route.js +1 -1
  66. package/runtime/.next/server/app/api/tools/route.js +1 -1
  67. package/runtime/.next/server/app/api/update/check/route.js +1 -1
  68. package/runtime/.next/server/app/api/update/install/route.js +1 -1
  69. package/runtime/.next/server/app/api/update/status/route.js +1 -1
  70. package/runtime/.next/server/app/api/web-auth/login/route.js +1 -1
  71. package/runtime/.next/server/app/api/web-auth/logout/route.js +1 -1
  72. package/runtime/.next/server/app/api/web-auth/revoke-all/route.js +1 -1
  73. package/runtime/.next/server/app/api/web-auth/setup/route.js +1 -1
  74. package/runtime/.next/server/app/api/web-auth/status/route.js +1 -1
  75. package/runtime/.next/server/app/api/web-console/bootstrap/route.js +1 -1
  76. package/runtime/.next/server/app/api/web-console/computer-settings/route.js +1 -1
  77. package/runtime/.next/server/app/api/web-console/computers/route.js +1 -1
  78. package/runtime/.next/server/app/api/web-console/device-state/route.js +1 -1
  79. package/runtime/.next/server/app/api/web-console/history/route.js +1 -1
  80. package/runtime/.next/server/app/api/web-console/preferences/route.js +1 -1
  81. package/runtime/.next/server/app/web/page.js +4 -4
  82. package/runtime/.next/server/app/web/page_client-reference-manifest.js +1 -1
  83. package/runtime/.next/server/app-paths-manifest.json +34 -34
  84. package/runtime/.next/server/chunks/5303.js +1 -1
  85. package/runtime/.next/server/middleware-build-manifest.js +1 -1
  86. package/runtime/.next/server/pages/404.html +1 -1
  87. package/runtime/.next/server/pages/500.html +1 -1
  88. package/runtime/.next/server/pages-manifest.json +1 -1
  89. package/runtime/.next/server/server-reference-manifest.json +1 -1
  90. package/runtime/.next/static/chunks/216-befe93998f760830.js +1 -0
  91. package/runtime/.next/static/chunks/app/web/{error-4d3646f97c1344d3.js → error-17e28c153738a003.js} +1 -1
  92. package/runtime/.next/static/chunks/app/web/layout-60e82f81fa232177.js +1 -0
  93. package/runtime/.next/static/chunks/app/web/page-9d2cdb1ef9ad40b2.js +1 -0
  94. package/runtime/.next/static/chunks/{main-app-00dfdb2d5c09719c.js → main-app-a953e6764afe1e60.js} +1 -1
  95. package/runtime/.next/static/css/1c4153a5b834f93f.css +1 -0
  96. package/runtime/native/Support.noindex/AgentRoam Remote Desktop.app/Contents/MacOS/agentroam-remote-desktop +0 -0
  97. package/runtime/native/Support.noindex/AgentRoam Remote Desktop.app/Contents/Resources/agentroam-component.json +1 -1
  98. package/runtime/native/Support.noindex/AgentRoam Remote Desktop.app/Contents/_CodeSignature/CodeResources +2 -2
  99. package/runtime/node_modules/.package-lock.json +126 -126
  100. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/bridge.mjs +73 -73
  101. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/browser-sdk.js +32 -32
  102. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/{core-xpxe8nzb.mjs → core-1qw7dszx.mjs} +1 -1
  103. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/core-cz9sh4ze.mjs +40 -0
  104. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/core-nmrdrt5c.mjs +52 -0
  105. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/{core-5682eevd.mjs → core-nxm5bcfb.mjs} +2 -2
  106. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/core.mjs +8 -8
  107. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/extractFromBunfs.js +169 -40
  108. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/manifest.json +21 -22
  109. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/manifest.zst.json +25 -26
  110. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/package.json +14 -14
  111. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/sdk.mjs +56 -56
  112. package/runtime/node_modules/mediabunny/dist/bundles/mediabunny.cjs +25 -13
  113. package/runtime/node_modules/mediabunny/dist/bundles/mediabunny.min.cjs +8 -8
  114. package/runtime/node_modules/mediabunny/dist/bundles/mediabunny.min.mjs +8 -8
  115. package/runtime/node_modules/mediabunny/dist/bundles/mediabunny.mjs +25 -13
  116. package/runtime/node_modules/mediabunny/dist/bundles/mediabunny.node.cjs +25 -13
  117. package/runtime/node_modules/mediabunny/dist/modules/src/isobmff/isobmff-demuxer.js +22 -11
  118. package/runtime/node_modules/mediabunny/dist/modules/src/matroska/matroska-demuxer.js +27 -11
  119. package/runtime/node_modules/mediabunny/dist/modules/src/tsconfig.tsbuildinfo +1 -1
  120. package/runtime/node_modules/mediabunny/dist/modules/src/version.js +1 -1
  121. package/runtime/node_modules/mediabunny/package.json +1 -1
  122. package/runtime/node_modules/mediabunny/src/isobmff/isobmff-demuxer.ts +23 -11
  123. package/runtime/node_modules/mediabunny/src/matroska/matroska-demuxer.ts +30 -11
  124. package/runtime/node_modules/mediabunny/src/version.ts +1 -1
  125. package/runtime/package-lock.json +159 -159
  126. package/runtime/server.js +1 -1
  127. package/runtime/webapp/dist/assets/{AiHubPane-D1SGdI6y.js → AiHubPane-Cd-7gwJs.js} +1 -1
  128. package/runtime/webapp/dist/assets/{App-Y_UUrP8i.js → App-DQqv62sH.js} +3 -3
  129. package/runtime/webapp/dist/assets/{BrowserLivePanel-CapyOwFL.js → BrowserLivePanel-DDrnghqj.js} +1 -1
  130. package/runtime/webapp/dist/assets/{CollaborationDashboard-CEF41i5J.js → CollaborationDashboard-qQQqXrQI.js} +1 -1
  131. package/runtime/webapp/dist/assets/{CollaborationPage-C8PN5oNe.js → CollaborationPage-BS3Z5dAy.js} +1 -1
  132. package/runtime/webapp/dist/assets/{FilePreview-BdB8syBQ.js → FilePreview-C4gxZRtw.js} +3 -3
  133. package/runtime/webapp/dist/assets/{FileTree-Cf8wDAVy.js → FileTree-DrpruRST.js} +1 -1
  134. package/runtime/webapp/dist/assets/{FlowStudioPane-DuUmV_ki.js → FlowStudioPane-BjOuLwks.js} +1 -1
  135. package/runtime/webapp/dist/assets/{RemoteDesktopPage-DBoSlmlh.js → RemoteDesktopPage-B1AGyJrT.js} +1 -1
  136. package/runtime/webapp/dist/assets/{TerminalPane-B2s2ff23.js → TerminalPane-BxEtw8rn.js} +1 -1
  137. package/runtime/webapp/dist/assets/{abnfDiagram-VCTEODGH-CQ78RP8v.js → abnfDiagram-VCTEODGH-BHgKdAyZ.js} +1 -1
  138. package/runtime/webapp/dist/assets/{arc-B4CNFgtV.js → arc-B8zNXyCl.js} +1 -1
  139. package/runtime/webapp/dist/assets/{architectureDiagram-5GKGNRK7-B-pYUJdJ.js → architectureDiagram-5GKGNRK7-D596eLfj.js} +1 -1
  140. package/runtime/webapp/dist/assets/{artifact-links-DrWFmMXT.js → artifact-links-DwSH3xn_.js} +1 -1
  141. package/runtime/webapp/dist/assets/{blockDiagram-I7D4REHJ-CEEpSPhh.js → blockDiagram-I7D4REHJ-C4eZ-RzC.js} +1 -1
  142. package/runtime/webapp/dist/assets/{c4Diagram-7LVT6UL2-Bq7l-OxC.js → c4Diagram-7LVT6UL2-Cxe44X-3.js} +1 -1
  143. package/runtime/webapp/dist/assets/channel-8FdPmR58.js +1 -0
  144. package/runtime/webapp/dist/assets/{chunk-2Q5K7J3B-B2yw0jQL.js → chunk-2Q5K7J3B-D_syaagC.js} +1 -1
  145. package/runtime/webapp/dist/assets/{chunk-5VM5RSS4-D7AIGjlP.js → chunk-5VM5RSS4-q_wDWTVC.js} +1 -1
  146. package/runtime/webapp/dist/assets/{chunk-F27PBJKO-_wNxBMaG.js → chunk-F27PBJKO-C5U_ckFK.js} +1 -1
  147. package/runtime/webapp/dist/assets/{chunk-IMKFNOWR-bMSiSCLu.js → chunk-IMKFNOWR-5a_rZZVM.js} +1 -1
  148. package/runtime/webapp/dist/assets/{chunk-JWPE2WC7-Zu8gSQip.js → chunk-JWPE2WC7-DR8znCWR.js} +1 -1
  149. package/runtime/webapp/dist/assets/{chunk-POPQ4Y6H-8G7L6RqL.js → chunk-POPQ4Y6H-3vOXloa3.js} +1 -1
  150. package/runtime/webapp/dist/assets/{chunk-SVP7TREG-a6VVTk08.js → chunk-SVP7TREG-y9Uxi4pg.js} +1 -1
  151. package/runtime/webapp/dist/assets/{chunk-TICWLB2K-ddeHMudM.js → chunk-TICWLB2K-Bi7VvqOR.js} +1 -1
  152. package/runtime/webapp/dist/assets/{chunk-XXDRQBXY-DSuvta0Q.js → chunk-XXDRQBXY-CRpw-5Cj.js} +1 -1
  153. package/runtime/webapp/dist/assets/classDiagram-ZZMXUADV-CCHBpIvI.js +1 -0
  154. package/runtime/webapp/dist/assets/classDiagram-v2-VYDZK3BY-CCHBpIvI.js +1 -0
  155. package/runtime/webapp/dist/assets/{clipboard-DS4Pu9OB.js → clipboard-BKglnESD.js} +1 -1
  156. package/runtime/webapp/dist/assets/{codeSyntax-BWSPpoSH.js → codeSyntax-Dmbrlor0.js} +1 -1
  157. package/runtime/webapp/dist/assets/{collaboration-D7MlFa87.js → collaboration-BZSnjFZ-.js} +1 -1
  158. package/runtime/webapp/dist/assets/{cose-bilkent-JH36ORCC-D1TkGbTC.js → cose-bilkent-JH36ORCC-4JQKrvR5.js} +1 -1
  159. package/runtime/webapp/dist/assets/{cynefin-OW5HDTMX-CYPV2qwK.js → cynefin-OW5HDTMX-BO4eLWHY.js} +1 -1
  160. package/runtime/webapp/dist/assets/{cynefinDiagram-5FMLGOSQ-DH8spH6U.js → cynefinDiagram-5FMLGOSQ-Dg-Bt9fs.js} +1 -1
  161. package/runtime/webapp/dist/assets/{dagre-GXQ25YYZ-Dkv69aQ5.js → dagre-GXQ25YYZ-utMMpYq0.js} +1 -1
  162. package/runtime/webapp/dist/assets/{diagram-S7CK7UJ4-Gl094s_z.js → diagram-S7CK7UJ4-BUzOnotG.js} +1 -1
  163. package/runtime/webapp/dist/assets/{diagram-UQ7AKVKN-DKzCe2K6.js → diagram-UQ7AKVKN-Bkesml6e.js} +1 -1
  164. package/runtime/webapp/dist/assets/{diagram-VSXAHHWV-Dq1LtLSa.js → diagram-VSXAHHWV-P-Qqxnpn.js} +1 -1
  165. package/runtime/webapp/dist/assets/{diagram-VX7I27RA-CN9QKehv.js → diagram-VX7I27RA-xpyBMRkH.js} +1 -1
  166. package/runtime/webapp/dist/assets/{diagram-Z3DM3KII-1J67VxEA.js → diagram-Z3DM3KII-FMNqO2NJ.js} +1 -1
  167. package/runtime/webapp/dist/assets/{ebnfDiagram-PWID7BFC-CRyJYtkK.js → ebnfDiagram-PWID7BFC-D8-cmvEK.js} +1 -1
  168. package/runtime/webapp/dist/assets/{erDiagram-RLTQ6QDP-C0jVGZ7x.js → erDiagram-RLTQ6QDP-mEgSpGUN.js} +1 -1
  169. package/runtime/webapp/dist/assets/{file-types-Bi7YTERW.js → file-types-DgQXHGm7.js} +1 -1
  170. package/runtime/webapp/dist/assets/{flowDiagram-HODETNUW-wm5Kefw0.js → flowDiagram-HODETNUW-DJWXgpoo.js} +1 -1
  171. package/runtime/webapp/dist/assets/{ganttDiagram-EL5Y4UJY-DN5F7ix3.js → ganttDiagram-EL5Y4UJY-B5HA7Xox.js} +1 -1
  172. package/runtime/webapp/dist/assets/{gitGraphDiagram-WWUBYQGX-DcpXNY21.js → gitGraphDiagram-WWUBYQGX-CP4Zmize.js} +1 -1
  173. package/runtime/webapp/dist/assets/index-BReRPZnZ.js +485 -0
  174. package/runtime/webapp/dist/assets/index-DfpiL3X7.css +1 -0
  175. package/runtime/webapp/dist/assets/{infoDiagram-27XIBGKW-B1iXrK9c.js → infoDiagram-27XIBGKW-DApDSX70.js} +1 -1
  176. package/runtime/webapp/dist/assets/{ishikawaDiagram-5VMMS53U-C1jZv655.js → ishikawaDiagram-5VMMS53U-BCYtD2Fm.js} +1 -1
  177. package/runtime/webapp/dist/assets/{journeyDiagram-3NMN7TZE-BRSFQ0r1.js → journeyDiagram-3NMN7TZE-D3WEyKHq.js} +1 -1
  178. package/runtime/webapp/dist/assets/{kanban-definition-UXKFOSKX-Cl9je8cc.js → kanban-definition-UXKFOSKX-Q6vb0ZbD.js} +1 -1
  179. package/runtime/webapp/dist/assets/{layout-CKkSxSc4.js → layout-Bp7cvpx1.js} +1 -1
  180. package/runtime/webapp/dist/assets/{linear-CC85eD8_.js → linear-4ik7NzLN.js} +1 -1
  181. package/runtime/webapp/dist/assets/{loader-circle-C63zcjMg.js → loader-circle-BCsj2yyN.js} +1 -1
  182. package/runtime/webapp/dist/assets/{mermaid.core-DIjc2ZR6.js → mermaid.core-CmhaKXiP.js} +5 -5
  183. package/runtime/webapp/dist/assets/{mindmap-definition-YA3MSWOX-mJUtqDVt.js → mindmap-definition-YA3MSWOX-DabuuB2q.js} +1 -1
  184. package/runtime/webapp/dist/assets/{page-bnT1btVj.js → page-Cgp9NEw1.js} +5 -5
  185. package/runtime/webapp/dist/assets/{pegDiagram-XKGWAZYB-Dt3xAyl2.js → pegDiagram-XKGWAZYB-eIBdAhCQ.js} +1 -1
  186. package/runtime/webapp/dist/assets/{pieDiagram-E7YTZNPT-DleFmb0m.js → pieDiagram-E7YTZNPT-DUd7f60Q.js} +1 -1
  187. package/runtime/webapp/dist/assets/{quadrantDiagram-AXDQQJYC-BpeD8UfU.js → quadrantDiagram-AXDQQJYC-BPSqBWPV.js} +1 -1
  188. package/runtime/webapp/dist/assets/{railroadDiagram-O6MQD6OU-BBQ5ixic.js → railroadDiagram-O6MQD6OU-CHqMz56-.js} +1 -1
  189. package/runtime/webapp/dist/assets/{requirementDiagram-BXWQKSXE-xO5TSQS3.js → requirementDiagram-BXWQKSXE-BfOzGN7B.js} +1 -1
  190. package/runtime/webapp/dist/assets/{rotate-ccw-AmWkL3kV.js → rotate-ccw-p76OF6j6.js} +1 -1
  191. package/runtime/webapp/dist/assets/{rotate-cw-DrY9cGmB.js → rotate-cw-D5iQzT0K.js} +1 -1
  192. package/runtime/webapp/dist/assets/{sankeyDiagram-P5KCCOFB-Fyt0-RhU.js → sankeyDiagram-P5KCCOFB-BFOPAhWl.js} +1 -1
  193. package/runtime/webapp/dist/assets/{send-ATfKaKHb.js → send-DdY_K1RT.js} +1 -1
  194. package/runtime/webapp/dist/assets/{sequenceDiagram-WJ2MYXX4-xkFumv3g.js → sequenceDiagram-WJ2MYXX4-CdQhFjho.js} +1 -1
  195. package/runtime/webapp/dist/assets/{sizeCapture-INFHLROL-Ch5NIy5j.js → sizeCapture-INFHLROL-BP_2bwHb.js} +1 -1
  196. package/runtime/webapp/dist/assets/{smartphone-BL3ONtnq.js → smartphone-C2--txxG.js} +1 -1
  197. package/runtime/webapp/dist/assets/{stateDiagram-D77RDMKH-BYyhiW6f.js → stateDiagram-D77RDMKH-D2_O1o9C.js} +1 -1
  198. package/runtime/webapp/dist/assets/stateDiagram-v2-MP3YSRHH-b3DtWIlg.js +1 -0
  199. package/runtime/webapp/dist/assets/{swimlanes-42K2YHIH-Da71LrsA.js → swimlanes-42K2YHIH-BwEWz-Bu.js} +1 -1
  200. package/runtime/webapp/dist/assets/swimlanesDiagram-VR7AAH4N-CxL0Wh2Z.js +8 -0
  201. package/runtime/webapp/dist/assets/{timeline-definition-24CTP7MA-BaXSS2__.js → timeline-definition-24CTP7MA-DqDB5dmr.js} +1 -1
  202. package/runtime/webapp/dist/assets/{trash-2-DBC-hIuM.js → trash-2-CZx0p0L3.js} +1 -1
  203. package/runtime/webapp/dist/assets/{vennDiagram-4TSXK5OY-D_V4cbSG.js → vennDiagram-4TSXK5OY-Cf4VnZ2O.js} +1 -1
  204. package/runtime/webapp/dist/assets/{wardleyDiagram-VM6X3IG4-C-31z3KF.js → wardleyDiagram-VM6X3IG4-D9FBNJOU.js} +1 -1
  205. package/runtime/webapp/dist/assets/{web-Co-fisS2.js → web-BVybOQy8.js} +1 -1
  206. package/runtime/webapp/dist/assets/{web-C3itPQLn.js → web-CT9Joona.js} +1 -1
  207. package/runtime/webapp/dist/assets/{x-qYJy8CK-.js → x-COYLzqlQ.js} +1 -1
  208. package/runtime/webapp/dist/assets/{xychartDiagram-S5SC5T6Z-DKF--ymA.js → xychartDiagram-S5SC5T6Z-BRVtPtRz.js} +1 -1
  209. package/runtime/webapp/dist/index.html +2 -2
  210. package/runtime/.next/static/chunks/344-04fd45d8838bfada.js +0 -1
  211. package/runtime/.next/static/chunks/app/web/layout-c8709c08fb7ad857.js +0 -1
  212. package/runtime/.next/static/chunks/app/web/page-b876912c109021db.js +0 -1
  213. package/runtime/.next/static/css/71e679260520d186.css +0 -1
  214. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/core-36zyfan5.mjs +0 -52
  215. package/runtime/node_modules/@anthropic-ai/claude-agent-sdk/core-nne0e2ds.mjs +0 -40
  216. package/runtime/webapp/dist/assets/channel-B0Az_kl0.js +0 -1
  217. package/runtime/webapp/dist/assets/classDiagram-ZZMXUADV-HNxe_TWF.js +0 -1
  218. package/runtime/webapp/dist/assets/classDiagram-v2-VYDZK3BY-HNxe_TWF.js +0 -1
  219. package/runtime/webapp/dist/assets/index-Ddj6oQ7t.js +0 -480
  220. package/runtime/webapp/dist/assets/index-hju2LxNM.css +0 -1
  221. package/runtime/webapp/dist/assets/stateDiagram-v2-MP3YSRHH-BbZH2Sb9.js +0 -1
  222. package/runtime/webapp/dist/assets/swimlanesDiagram-VR7AAH4N-CxBioyEE.js +0 -8
  223. /package/runtime/.next/static/{4yVGaJwabJff1LDiyzYia → nDZmrx61FQSBYCG7rH1JD}/_buildManifest.js +0 -0
  224. /package/runtime/.next/static/{4yVGaJwabJff1LDiyzYia → nDZmrx61FQSBYCG7rH1JD}/_ssgManifest.js +0 -0
@@ -1699,7 +1699,7 @@ var AC3_SAMPLE_RATES = [48e3, 44100, 32e3];
1699
1699
  var EAC3_REDUCED_SAMPLE_RATES = [24e3, 22050, 16e3];
1700
1700
 
1701
1701
  // src/version.ts
1702
- var VERSION = "1.62.0";
1702
+ var VERSION = "1.62.1";
1703
1703
  var VERSIONED_NAME = `Mediabunny v${VERSION}`;
1704
1704
 
1705
1705
  // src/codec-data.ts
@@ -9143,7 +9143,7 @@ var IsobmffTrackBacking = class {
9143
9143
  return packet;
9144
9144
  }
9145
9145
  /** Looks for a packet in the fragments while trying to load as few fragments as possible to retrieve it. */
9146
- async performFragmentedLookup(startFragment, getMatchInFragment, searchTimestamp, latestTimestamp, options, isRetry = false) {
9146
+ async performFragmentedLookup(startFragment, getMatchInFragment, searchTimestamp, latestTimestamp, options, stopPos = Infinity, lookupRetryCount = 0) {
9147
9147
  const demuxer = this.internalTrack.demuxer;
9148
9148
  let currentFragment = null;
9149
9149
  let bestFragment = null;
@@ -9174,6 +9174,7 @@ var IsobmffTrackBacking = class {
9174
9174
  lookupEntry?.moofOffset ?? 0,
9175
9175
  positionCacheEntry?.moofOffset ?? 0
9176
9176
  ) || null;
9177
+ const lookupTableWins = !!lookupEntry && lookupEntry.moofOffset >= (positionCacheEntry?.moofOffset ?? 0);
9177
9178
  let currentPos;
9178
9179
  if (!startFragment) {
9179
9180
  currentPos = lookupEntryPosition ?? 0;
@@ -9185,12 +9186,14 @@ var IsobmffTrackBacking = class {
9185
9186
  currentPos = lookupEntryPosition;
9186
9187
  }
9187
9188
  }
9188
- while (true) {
9189
+ const scanStartPos = currentFragment ? currentFragment.moofOffset : currentPos;
9190
+ while (currentPos < stopPos) {
9189
9191
  if (currentFragment) {
9190
9192
  const trackData = currentFragment.trackData.get(this.internalTrack.id);
9191
9193
  if (trackData && trackData.startTimestamp > latestTimestamp) {
9192
9194
  break;
9193
9195
  }
9196
+ currentFragment = null;
9194
9197
  }
9195
9198
  const summary = demuxer.fragmentSummaries.get(currentPos);
9196
9199
  if (summary && !summary.trackIds.has(this.internalTrack.id)) {
@@ -9221,16 +9224,19 @@ var IsobmffTrackBacking = class {
9221
9224
  }
9222
9225
  currentPos = boxStartPos + boxInfo.totalSize;
9223
9226
  }
9224
- if (lookupEntry && (!bestFragment || bestFragment.moofOffset < lookupEntry.moofOffset)) {
9225
- const previousLookupEntry = this.internalTrack.fragmentLookupTable[lookupEntryIndex - 1];
9226
- const newSearchTimestamp = !isRetry && previousLookupEntry ? previousLookupEntry.timestamp : -Infinity;
9227
+ if (lookupEntryPosition !== null && (!bestFragment || bestFragment.moofOffset < lookupEntryPosition)) {
9228
+ const step = 1 << lookupRetryCount;
9229
+ const previousEntryTimestamp = lookupTableWins ? this.internalTrack.fragmentLookupTable[lookupEntryIndex - step]?.timestamp : this.internalTrack.fragmentPositionCache[positionCacheIndex - step]?.startTimestamp;
9230
+ const newSearchTimestamp = previousEntryTimestamp ?? -Infinity;
9227
9231
  return this.performFragmentedLookup(
9228
9232
  null,
9229
9233
  getMatchInFragment,
9230
9234
  newSearchTimestamp,
9231
9235
  latestTimestamp,
9232
9236
  options,
9233
- true
9237
+ scanStartPos,
9238
+ // So we don't read the same fragments again
9239
+ lookupRetryCount + 1
9234
9240
  );
9235
9241
  }
9236
9242
  if (bestFragment) {
@@ -12250,7 +12256,7 @@ var MatroskaTrackBacking = class {
12250
12256
  return packet;
12251
12257
  }
12252
12258
  /** Looks for a packet in the clusters while trying to load as few clusters as possible to retrieve it. */
12253
- async performClusterLookup(startCluster, getMatchInCluster, searchTimestamp, latestTimestamp, options, isRetry = false) {
12259
+ async performClusterLookup(startCluster, getMatchInCluster, searchTimestamp, latestTimestamp, options, stopPos = Infinity, lookupRetryCount = 0) {
12254
12260
  const { demuxer, segment } = this.internalTrack;
12255
12261
  let currentCluster = null;
12256
12262
  let bestCluster = null;
@@ -12281,6 +12287,7 @@ var MatroskaTrackBacking = class {
12281
12287
  cuePoint?.clusterPosition ?? 0,
12282
12288
  positionCacheEntry?.elementStartPos ?? 0
12283
12289
  ) || null;
12290
+ const cuePointWins = !!cuePoint && cuePoint.clusterPosition >= (positionCacheEntry?.elementStartPos ?? 0);
12284
12291
  let currentPos;
12285
12292
  if (!startCluster) {
12286
12293
  currentPos = lookupEntryPosition ?? segment.clusterSeekStartPos;
@@ -12292,12 +12299,14 @@ var MatroskaTrackBacking = class {
12292
12299
  currentPos = lookupEntryPosition;
12293
12300
  }
12294
12301
  }
12295
- while (segment.elementEndPos === null || currentPos <= segment.elementEndPos - MIN_HEADER_SIZE) {
12302
+ const scanStartPos = currentCluster ? currentCluster.elementStartPos : currentPos;
12303
+ while ((segment.elementEndPos === null || currentPos <= segment.elementEndPos - MIN_HEADER_SIZE) && currentPos < stopPos) {
12296
12304
  if (currentCluster) {
12297
12305
  const trackData = currentCluster.trackData.get(this.internalTrack.id);
12298
12306
  if (trackData && trackData.startTimestamp > latestTimestamp) {
12299
12307
  break;
12300
12308
  }
12309
+ currentCluster = null;
12301
12310
  }
12302
12311
  const summary = segment.clusterSummaries.get(currentPos);
12303
12312
  if (summary && !summary.trackIds.has(this.internalTrack.id)) {
@@ -12361,16 +12370,19 @@ var MatroskaTrackBacking = class {
12361
12370
  }
12362
12371
  currentPos = endPos;
12363
12372
  }
12364
- if (cuePoint && (!bestCluster || bestCluster.elementStartPos < cuePoint.clusterPosition)) {
12365
- const previousCuePoint = this.internalTrack.cuePoints[cuePointIndex - 1];
12366
- const newSearchTimestamp = !isRetry && previousCuePoint ? previousCuePoint.time : -Infinity;
12373
+ if (lookupEntryPosition !== null && (!bestCluster || bestCluster.elementStartPos < lookupEntryPosition)) {
12374
+ const step = 1 << lookupRetryCount;
12375
+ const previousEntryTimestamp = cuePointWins ? this.internalTrack.cuePoints[cuePointIndex - step]?.time : this.internalTrack.clusterPositionCache[positionCacheIndex - step]?.startTimestamp;
12376
+ const newSearchTimestamp = previousEntryTimestamp ?? -Infinity;
12367
12377
  return this.performClusterLookup(
12368
12378
  null,
12369
12379
  getMatchInCluster,
12370
12380
  newSearchTimestamp,
12371
12381
  latestTimestamp,
12372
12382
  options,
12373
- true
12383
+ scanStartPos,
12384
+ // So we don't read the same clusters again
12385
+ lookupRetryCount + 1
12374
12386
  );
12375
12387
  }
12376
12388
  if (bestCluster) {
@@ -1853,7 +1853,7 @@ var Mediabunny = (() => {
1853
1853
  var EAC3_REDUCED_SAMPLE_RATES = [24e3, 22050, 16e3];
1854
1854
 
1855
1855
  // src/version.ts
1856
- var VERSION = "1.62.0";
1856
+ var VERSION = "1.62.1";
1857
1857
  var VERSIONED_NAME = `Mediabunny v${VERSION}`;
1858
1858
 
1859
1859
  // src/codec-data.ts
@@ -9297,7 +9297,7 @@ var Mediabunny = (() => {
9297
9297
  return packet;
9298
9298
  }
9299
9299
  /** Looks for a packet in the fragments while trying to load as few fragments as possible to retrieve it. */
9300
- async performFragmentedLookup(startFragment, getMatchInFragment, searchTimestamp, latestTimestamp, options, isRetry = false) {
9300
+ async performFragmentedLookup(startFragment, getMatchInFragment, searchTimestamp, latestTimestamp, options, stopPos = Infinity, lookupRetryCount = 0) {
9301
9301
  const demuxer = this.internalTrack.demuxer;
9302
9302
  let currentFragment = null;
9303
9303
  let bestFragment = null;
@@ -9328,6 +9328,7 @@ var Mediabunny = (() => {
9328
9328
  lookupEntry?.moofOffset ?? 0,
9329
9329
  positionCacheEntry?.moofOffset ?? 0
9330
9330
  ) || null;
9331
+ const lookupTableWins = !!lookupEntry && lookupEntry.moofOffset >= (positionCacheEntry?.moofOffset ?? 0);
9331
9332
  let currentPos;
9332
9333
  if (!startFragment) {
9333
9334
  currentPos = lookupEntryPosition ?? 0;
@@ -9339,12 +9340,14 @@ var Mediabunny = (() => {
9339
9340
  currentPos = lookupEntryPosition;
9340
9341
  }
9341
9342
  }
9342
- while (true) {
9343
+ const scanStartPos = currentFragment ? currentFragment.moofOffset : currentPos;
9344
+ while (currentPos < stopPos) {
9343
9345
  if (currentFragment) {
9344
9346
  const trackData = currentFragment.trackData.get(this.internalTrack.id);
9345
9347
  if (trackData && trackData.startTimestamp > latestTimestamp) {
9346
9348
  break;
9347
9349
  }
9350
+ currentFragment = null;
9348
9351
  }
9349
9352
  const summary = demuxer.fragmentSummaries.get(currentPos);
9350
9353
  if (summary && !summary.trackIds.has(this.internalTrack.id)) {
@@ -9375,16 +9378,19 @@ var Mediabunny = (() => {
9375
9378
  }
9376
9379
  currentPos = boxStartPos + boxInfo.totalSize;
9377
9380
  }
9378
- if (lookupEntry && (!bestFragment || bestFragment.moofOffset < lookupEntry.moofOffset)) {
9379
- const previousLookupEntry = this.internalTrack.fragmentLookupTable[lookupEntryIndex - 1];
9380
- const newSearchTimestamp = !isRetry && previousLookupEntry ? previousLookupEntry.timestamp : -Infinity;
9381
+ if (lookupEntryPosition !== null && (!bestFragment || bestFragment.moofOffset < lookupEntryPosition)) {
9382
+ const step = 1 << lookupRetryCount;
9383
+ const previousEntryTimestamp = lookupTableWins ? this.internalTrack.fragmentLookupTable[lookupEntryIndex - step]?.timestamp : this.internalTrack.fragmentPositionCache[positionCacheIndex - step]?.startTimestamp;
9384
+ const newSearchTimestamp = previousEntryTimestamp ?? -Infinity;
9381
9385
  return this.performFragmentedLookup(
9382
9386
  null,
9383
9387
  getMatchInFragment,
9384
9388
  newSearchTimestamp,
9385
9389
  latestTimestamp,
9386
9390
  options,
9387
- true
9391
+ scanStartPos,
9392
+ // So we don't read the same fragments again
9393
+ lookupRetryCount + 1
9388
9394
  );
9389
9395
  }
9390
9396
  if (bestFragment) {
@@ -12404,7 +12410,7 @@ var Mediabunny = (() => {
12404
12410
  return packet;
12405
12411
  }
12406
12412
  /** Looks for a packet in the clusters while trying to load as few clusters as possible to retrieve it. */
12407
- async performClusterLookup(startCluster, getMatchInCluster, searchTimestamp, latestTimestamp, options, isRetry = false) {
12413
+ async performClusterLookup(startCluster, getMatchInCluster, searchTimestamp, latestTimestamp, options, stopPos = Infinity, lookupRetryCount = 0) {
12408
12414
  const { demuxer, segment } = this.internalTrack;
12409
12415
  let currentCluster = null;
12410
12416
  let bestCluster = null;
@@ -12435,6 +12441,7 @@ var Mediabunny = (() => {
12435
12441
  cuePoint?.clusterPosition ?? 0,
12436
12442
  positionCacheEntry?.elementStartPos ?? 0
12437
12443
  ) || null;
12444
+ const cuePointWins = !!cuePoint && cuePoint.clusterPosition >= (positionCacheEntry?.elementStartPos ?? 0);
12438
12445
  let currentPos;
12439
12446
  if (!startCluster) {
12440
12447
  currentPos = lookupEntryPosition ?? segment.clusterSeekStartPos;
@@ -12446,12 +12453,14 @@ var Mediabunny = (() => {
12446
12453
  currentPos = lookupEntryPosition;
12447
12454
  }
12448
12455
  }
12449
- while (segment.elementEndPos === null || currentPos <= segment.elementEndPos - MIN_HEADER_SIZE) {
12456
+ const scanStartPos = currentCluster ? currentCluster.elementStartPos : currentPos;
12457
+ while ((segment.elementEndPos === null || currentPos <= segment.elementEndPos - MIN_HEADER_SIZE) && currentPos < stopPos) {
12450
12458
  if (currentCluster) {
12451
12459
  const trackData = currentCluster.trackData.get(this.internalTrack.id);
12452
12460
  if (trackData && trackData.startTimestamp > latestTimestamp) {
12453
12461
  break;
12454
12462
  }
12463
+ currentCluster = null;
12455
12464
  }
12456
12465
  const summary = segment.clusterSummaries.get(currentPos);
12457
12466
  if (summary && !summary.trackIds.has(this.internalTrack.id)) {
@@ -12515,16 +12524,19 @@ var Mediabunny = (() => {
12515
12524
  }
12516
12525
  currentPos = endPos;
12517
12526
  }
12518
- if (cuePoint && (!bestCluster || bestCluster.elementStartPos < cuePoint.clusterPosition)) {
12519
- const previousCuePoint = this.internalTrack.cuePoints[cuePointIndex - 1];
12520
- const newSearchTimestamp = !isRetry && previousCuePoint ? previousCuePoint.time : -Infinity;
12527
+ if (lookupEntryPosition !== null && (!bestCluster || bestCluster.elementStartPos < lookupEntryPosition)) {
12528
+ const step = 1 << lookupRetryCount;
12529
+ const previousEntryTimestamp = cuePointWins ? this.internalTrack.cuePoints[cuePointIndex - step]?.time : this.internalTrack.clusterPositionCache[positionCacheIndex - step]?.startTimestamp;
12530
+ const newSearchTimestamp = previousEntryTimestamp ?? -Infinity;
12521
12531
  return this.performClusterLookup(
12522
12532
  null,
12523
12533
  getMatchInCluster,
12524
12534
  newSearchTimestamp,
12525
12535
  latestTimestamp,
12526
12536
  options,
12527
- true
12537
+ scanStartPos,
12538
+ // So we don't read the same clusters again
12539
+ lookupRetryCount + 1
12528
12540
  );
12529
12541
  }
12530
12542
  if (bestCluster) {
@@ -2860,7 +2860,11 @@ class IsobmffTrackBacking {
2860
2860
  // The timestamp with which we can search the lookup table
2861
2861
  searchTimestamp,
2862
2862
  // The timestamp for which we know the correct sample will not come after it
2863
- latestTimestamp, options, isRetry = false) {
2863
+ latestTimestamp, options,
2864
+ // The position for which we know the correct sample will not come after it
2865
+ stopPos = Infinity,
2866
+ // How many times we've retried due to a faulty lookup table entry
2867
+ lookupRetryCount = 0) {
2864
2868
  const demuxer = this.internalTrack.demuxer;
2865
2869
  let currentFragment = null;
2866
2870
  let bestFragment = null;
@@ -2886,6 +2890,7 @@ class IsobmffTrackBacking {
2886
2890
  ? this.internalTrack.fragmentPositionCache[positionCacheIndex]
2887
2891
  : null;
2888
2892
  const lookupEntryPosition = Math.max(lookupEntry?.moofOffset ?? 0, positionCacheEntry?.moofOffset ?? 0) || null;
2893
+ const lookupTableWins = !!lookupEntry && lookupEntry.moofOffset >= (positionCacheEntry?.moofOffset ?? 0);
2889
2894
  let currentPos;
2890
2895
  if (!startFragment) {
2891
2896
  currentPos = lookupEntryPosition ?? 0;
@@ -2900,13 +2905,15 @@ class IsobmffTrackBacking {
2900
2905
  currentPos = lookupEntryPosition;
2901
2906
  }
2902
2907
  }
2903
- while (true) {
2908
+ const scanStartPos = currentFragment ? currentFragment.moofOffset : currentPos;
2909
+ while (currentPos < stopPos) {
2904
2910
  if (currentFragment) {
2905
2911
  const trackData = currentFragment.trackData.get(this.internalTrack.id);
2906
2912
  if (trackData && trackData.startTimestamp > latestTimestamp) {
2907
2913
  // We're already past the upper bound, no need to keep searching
2908
2914
  break;
2909
2915
  }
2916
+ currentFragment = null; // So we don't process it again next iteration
2910
2917
  }
2911
2918
  const summary = demuxer.fragmentSummaries.get(currentPos);
2912
2919
  if (summary && !summary.trackIds.has(this.internalTrack.id)) {
@@ -2941,15 +2948,19 @@ class IsobmffTrackBacking {
2941
2948
  }
2942
2949
  currentPos = boxStartPos + boxInfo.totalSize;
2943
2950
  }
2944
- // Catch faulty lookup table entries
2945
- if (lookupEntry && (!bestFragment || bestFragment.moofOffset < lookupEntry.moofOffset)) {
2946
- // The lookup table entry lied to us! We found a lookup entry but no fragment there that satisfied
2947
- // the match. In this case, let's search again but using the lookup entry before that. If that one lies
2948
- // too, we stop trusting the table altogether, since walking back through many faulty entries would mean
2949
- // rescanning the file over and over.
2950
- const previousLookupEntry = this.internalTrack.fragmentLookupTable[lookupEntryIndex - 1];
2951
- const newSearchTimestamp = !isRetry && previousLookupEntry ? previousLookupEntry.timestamp : -Infinity;
2952
- return this.performFragmentedLookup(null, getMatchInFragment, newSearchTimestamp, latestTimestamp, options, true);
2951
+ // Handle unsatisfactory lookup table entries or position cache entries
2952
+ if (lookupEntryPosition !== null && (!bestFragment || bestFragment.moofOffset < lookupEntryPosition)) {
2953
+ // We found a lookup entry but no fragment from there on that satisfied the match. In this case, let's
2954
+ // search again but using a previous entry of the kind we started from. Each time this happens, we double
2955
+ // the backwards step to perform better (and have more sequential reads) if it takes us a long time to find
2956
+ // the media.
2957
+ const step = 1 << lookupRetryCount;
2958
+ const previousEntryTimestamp = lookupTableWins
2959
+ ? this.internalTrack.fragmentLookupTable[lookupEntryIndex - step]?.timestamp
2960
+ : this.internalTrack.fragmentPositionCache[positionCacheIndex - step]?.startTimestamp;
2961
+ const newSearchTimestamp = previousEntryTimestamp ?? -Infinity;
2962
+ return this.performFragmentedLookup(null, getMatchInFragment, newSearchTimestamp, latestTimestamp, options, scanStartPos, // So we don't read the same fragments again
2963
+ lookupRetryCount + 1);
2953
2964
  }
2954
2965
  if (bestFragment) {
2955
2966
  // If we finished looping but didn't find a perfect match, still return the best match we found
@@ -2141,7 +2141,11 @@ class MatroskaTrackBacking {
2141
2141
  // The timestamp with which we can search the lookup table
2142
2142
  searchTimestamp,
2143
2143
  // The timestamp for which we know the correct block will not come after it
2144
- latestTimestamp, options, isRetry = false) {
2144
+ latestTimestamp, options,
2145
+ // The position for which we know the correct block will not come after it
2146
+ stopPos = Infinity,
2147
+ // How many times we've retried due to a faulty lookup entry
2148
+ lookupRetryCount = 0) {
2145
2149
  const { demuxer, segment } = this.internalTrack;
2146
2150
  let currentCluster = null;
2147
2151
  let bestCluster = null;
@@ -2168,6 +2172,7 @@ class MatroskaTrackBacking {
2168
2172
  ? this.internalTrack.clusterPositionCache[positionCacheIndex]
2169
2173
  : null;
2170
2174
  const lookupEntryPosition = Math.max(cuePoint?.clusterPosition ?? 0, positionCacheEntry?.elementStartPos ?? 0) || null;
2175
+ const cuePointWins = !!cuePoint && cuePoint.clusterPosition >= (positionCacheEntry?.elementStartPos ?? 0);
2171
2176
  let currentPos;
2172
2177
  if (!startCluster) {
2173
2178
  currentPos = lookupEntryPosition ?? segment.clusterSeekStartPos;
@@ -2182,13 +2187,16 @@ class MatroskaTrackBacking {
2182
2187
  currentPos = lookupEntryPosition;
2183
2188
  }
2184
2189
  }
2185
- while (segment.elementEndPos === null || currentPos <= segment.elementEndPos - MIN_HEADER_SIZE) {
2190
+ const scanStartPos = currentCluster ? currentCluster.elementStartPos : currentPos;
2191
+ while ((segment.elementEndPos === null || currentPos <= segment.elementEndPos - MIN_HEADER_SIZE)
2192
+ && currentPos < stopPos) {
2186
2193
  if (currentCluster) {
2187
2194
  const trackData = currentCluster.trackData.get(this.internalTrack.id);
2188
2195
  if (trackData && trackData.startTimestamp > latestTimestamp) {
2189
2196
  // We're already past the upper bound, no need to keep searching
2190
2197
  break;
2191
2198
  }
2199
+ currentCluster = null; // So we don't process it again next iteration
2192
2200
  }
2193
2201
  const summary = segment.clusterSummaries.get(currentPos);
2194
2202
  if (summary && !summary.trackIds.has(this.internalTrack.id)) {
@@ -2259,15 +2267,23 @@ class MatroskaTrackBacking {
2259
2267
  }
2260
2268
  currentPos = endPos;
2261
2269
  }
2262
- // Catch faulty cue points
2263
- if (cuePoint && (!bestCluster || bestCluster.elementStartPos < cuePoint.clusterPosition)) {
2264
- // The cue point lied to us! We found a cue point but no cluster there that satisfied the match. In this
2265
- // case, let's search again but using the cue point before that. If that one lies too, we stop trusting the
2266
- // cues altogether, since walking back through many faulty cue points would mean rescanning the file over
2267
- // and over.
2268
- const previousCuePoint = this.internalTrack.cuePoints[cuePointIndex - 1];
2269
- const newSearchTimestamp = !isRetry && previousCuePoint ? previousCuePoint.time : -Infinity;
2270
- return this.performClusterLookup(null, getMatchInCluster, newSearchTimestamp, latestTimestamp, options, true);
2270
+ // Handle unsatisfactoy cue points or position cache entries
2271
+ if (lookupEntryPosition !== null && (!bestCluster || bestCluster.elementStartPos < lookupEntryPosition)) {
2272
+ // We found a lookup entry but no cluster from there on that satisfied the match. In this case, let's search
2273
+ // again but using a previous entry of the kind we started from. Each time this happens, we double the
2274
+ // backwards step to perform better (and have more sequential reads) if it takes us a long time to find
2275
+ // the media.
2276
+ //
2277
+ // Note that this doesn't only kick for faulty cue points but also for multi-track files where only one
2278
+ // track has cue points. Since we distribute the cue points to the track with none, they might not
2279
+ // accurately reflect where media can be found.
2280
+ const step = 1 << lookupRetryCount;
2281
+ const previousEntryTimestamp = cuePointWins
2282
+ ? this.internalTrack.cuePoints[cuePointIndex - step]?.time
2283
+ : this.internalTrack.clusterPositionCache[positionCacheIndex - step]?.startTimestamp;
2284
+ const newSearchTimestamp = previousEntryTimestamp ?? -Infinity;
2285
+ return this.performClusterLookup(null, getMatchInCluster, newSearchTimestamp, latestTimestamp, options, scanStartPos, // So we don't read the same clusters again
2286
+ lookupRetryCount + 1);
2271
2287
  }
2272
2288
  if (bestCluster) {
2273
2289
  // If we finished looping but didn't find a perfect match, still return the best match we found