inspect-ai 0.3.70__py3-none-any.whl → 0.3.72__py3-none-any.whl

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 (219) hide show
  1. inspect_ai/_cli/eval.py +14 -8
  2. inspect_ai/_display/core/display.py +2 -0
  3. inspect_ai/_display/core/footer.py +13 -3
  4. inspect_ai/_display/plain/display.py +6 -2
  5. inspect_ai/_display/rich/display.py +19 -6
  6. inspect_ai/_display/textual/app.py +6 -1
  7. inspect_ai/_display/textual/display.py +4 -0
  8. inspect_ai/_display/textual/widgets/transcript.py +10 -6
  9. inspect_ai/_eval/task/run.py +5 -8
  10. inspect_ai/_util/content.py +20 -1
  11. inspect_ai/_util/transcript.py +10 -4
  12. inspect_ai/_util/working.py +4 -0
  13. inspect_ai/_view/www/App.css +6 -0
  14. inspect_ai/_view/www/dist/assets/index.css +115 -87
  15. inspect_ai/_view/www/dist/assets/index.js +5324 -2276
  16. inspect_ai/_view/www/eslint.config.mjs +24 -1
  17. inspect_ai/_view/www/log-schema.json +283 -20
  18. inspect_ai/_view/www/package.json +8 -3
  19. inspect_ai/_view/www/src/App.tsx +2 -2
  20. inspect_ai/_view/www/src/components/AnsiDisplay.tsx +4 -3
  21. inspect_ai/_view/www/src/components/Card.tsx +9 -8
  22. inspect_ai/_view/www/src/components/DownloadButton.tsx +2 -1
  23. inspect_ai/_view/www/src/components/EmptyPanel.tsx +2 -2
  24. inspect_ai/_view/www/src/components/ErrorPanel.tsx +4 -3
  25. inspect_ai/_view/www/src/components/ExpandablePanel.tsx +13 -5
  26. inspect_ai/_view/www/src/components/FindBand.tsx +3 -3
  27. inspect_ai/_view/www/src/components/HumanBaselineView.tsx +3 -3
  28. inspect_ai/_view/www/src/components/LabeledValue.tsx +5 -4
  29. inspect_ai/_view/www/src/components/LargeModal.tsx +18 -13
  30. inspect_ai/_view/www/src/components/{LightboxCarousel.css → LightboxCarousel.module.css} +22 -18
  31. inspect_ai/_view/www/src/components/LightboxCarousel.tsx +36 -27
  32. inspect_ai/_view/www/src/components/MessageBand.tsx +2 -1
  33. inspect_ai/_view/www/src/components/NavPills.tsx +9 -8
  34. inspect_ai/_view/www/src/components/ProgressBar.tsx +2 -1
  35. inspect_ai/_view/www/src/components/TabSet.tsx +21 -15
  36. inspect_ai/_view/www/src/index.tsx +2 -2
  37. inspect_ai/_view/www/src/metadata/MetaDataGrid.tsx +11 -9
  38. inspect_ai/_view/www/src/metadata/MetaDataView.tsx +3 -2
  39. inspect_ai/_view/www/src/metadata/MetadataGrid.module.css +1 -0
  40. inspect_ai/_view/www/src/metadata/RenderedContent.tsx +16 -0
  41. inspect_ai/_view/www/src/plan/DatasetDetailView.tsx +3 -2
  42. inspect_ai/_view/www/src/plan/DetailStep.tsx +2 -1
  43. inspect_ai/_view/www/src/plan/PlanCard.tsx +2 -5
  44. inspect_ai/_view/www/src/plan/PlanDetailView.tsx +6 -9
  45. inspect_ai/_view/www/src/plan/ScorerDetailView.tsx +2 -1
  46. inspect_ai/_view/www/src/plan/SolverDetailView.tsx +3 -3
  47. inspect_ai/_view/www/src/samples/InlineSampleDisplay.tsx +2 -2
  48. inspect_ai/_view/www/src/samples/SampleDialog.tsx +3 -3
  49. inspect_ai/_view/www/src/samples/SampleDisplay.tsx +2 -2
  50. inspect_ai/_view/www/src/samples/SampleSummaryView.tsx +2 -2
  51. inspect_ai/_view/www/src/samples/SamplesTools.tsx +2 -1
  52. inspect_ai/_view/www/src/samples/chat/ChatMessage.tsx +3 -19
  53. inspect_ai/_view/www/src/samples/chat/ChatMessageRenderer.tsx +2 -1
  54. inspect_ai/_view/www/src/samples/chat/ChatMessageRow.tsx +2 -1
  55. inspect_ai/_view/www/src/samples/chat/ChatView.tsx +2 -1
  56. inspect_ai/_view/www/src/samples/chat/ChatViewVirtualList.tsx +22 -7
  57. inspect_ai/_view/www/src/samples/chat/MessageContent.tsx +35 -6
  58. inspect_ai/_view/www/src/samples/chat/MessageContents.tsx +2 -2
  59. inspect_ai/_view/www/src/samples/chat/messages.ts +15 -2
  60. inspect_ai/_view/www/src/samples/chat/tools/ToolCallView.tsx +13 -4
  61. inspect_ai/_view/www/src/samples/chat/tools/ToolInput.module.css +2 -2
  62. inspect_ai/_view/www/src/samples/chat/tools/ToolInput.tsx +18 -19
  63. inspect_ai/_view/www/src/samples/chat/tools/ToolOutput.module.css +1 -1
  64. inspect_ai/_view/www/src/samples/chat/tools/ToolOutput.tsx +4 -3
  65. inspect_ai/_view/www/src/samples/chat/tools/ToolTitle.tsx +2 -2
  66. inspect_ai/_view/www/src/samples/error/FlatSampleErrorView.tsx +2 -3
  67. inspect_ai/_view/www/src/samples/error/SampleErrorView.tsx +3 -2
  68. inspect_ai/_view/www/src/samples/list/SampleFooter.tsx +2 -1
  69. inspect_ai/_view/www/src/samples/list/SampleHeader.tsx +2 -1
  70. inspect_ai/_view/www/src/samples/list/SampleList.tsx +57 -45
  71. inspect_ai/_view/www/src/samples/list/SampleRow.tsx +2 -1
  72. inspect_ai/_view/www/src/samples/list/SampleSeparator.tsx +2 -1
  73. inspect_ai/_view/www/src/samples/sample-tools/EpochFilter.tsx +2 -2
  74. inspect_ai/_view/www/src/samples/sample-tools/SelectScorer.tsx +4 -3
  75. inspect_ai/_view/www/src/samples/sample-tools/SortFilter.tsx +2 -5
  76. inspect_ai/_view/www/src/samples/sample-tools/sample-filter/SampleFilter.tsx +2 -2
  77. inspect_ai/_view/www/src/samples/scores/SampleScoreView.tsx +2 -1
  78. inspect_ai/_view/www/src/samples/scores/SampleScores.tsx +2 -2
  79. inspect_ai/_view/www/src/samples/transcript/ApprovalEventView.tsx +2 -1
  80. inspect_ai/_view/www/src/samples/transcript/ErrorEventView.tsx +2 -1
  81. inspect_ai/_view/www/src/samples/transcript/InfoEventView.tsx +2 -1
  82. inspect_ai/_view/www/src/samples/transcript/InputEventView.tsx +2 -1
  83. inspect_ai/_view/www/src/samples/transcript/LoggerEventView.module.css +4 -0
  84. inspect_ai/_view/www/src/samples/transcript/LoggerEventView.tsx +12 -2
  85. inspect_ai/_view/www/src/samples/transcript/ModelEventView.module.css +1 -1
  86. inspect_ai/_view/www/src/samples/transcript/ModelEventView.tsx +25 -28
  87. inspect_ai/_view/www/src/samples/transcript/SampleInitEventView.tsx +2 -1
  88. inspect_ai/_view/www/src/samples/transcript/SampleLimitEventView.tsx +5 -4
  89. inspect_ai/_view/www/src/samples/transcript/SampleTranscript.tsx +2 -2
  90. inspect_ai/_view/www/src/samples/transcript/SandboxEventView.tsx +8 -7
  91. inspect_ai/_view/www/src/samples/transcript/ScoreEventView.tsx +2 -2
  92. inspect_ai/_view/www/src/samples/transcript/StepEventView.tsx +3 -3
  93. inspect_ai/_view/www/src/samples/transcript/SubtaskEventView.tsx +18 -14
  94. inspect_ai/_view/www/src/samples/transcript/ToolEventView.tsx +5 -5
  95. inspect_ai/_view/www/src/samples/transcript/TranscriptView.tsx +34 -15
  96. inspect_ai/_view/www/src/samples/transcript/event/EventNav.tsx +2 -1
  97. inspect_ai/_view/www/src/samples/transcript/event/EventNavs.tsx +2 -1
  98. inspect_ai/_view/www/src/samples/transcript/event/EventRow.tsx +3 -2
  99. inspect_ai/_view/www/src/samples/transcript/event/EventSection.tsx +2 -2
  100. inspect_ai/_view/www/src/samples/transcript/event/EventTimingPanel.module.css +28 -0
  101. inspect_ai/_view/www/src/samples/transcript/event/EventTimingPanel.tsx +115 -0
  102. inspect_ai/_view/www/src/samples/transcript/event/utils.ts +29 -0
  103. inspect_ai/_view/www/src/samples/transcript/state/StateDiffView.tsx +2 -1
  104. inspect_ai/_view/www/src/samples/transcript/state/StateEventRenderers.tsx +3 -3
  105. inspect_ai/_view/www/src/samples/transcript/state/StateEventView.tsx +11 -8
  106. inspect_ai/_view/www/src/types/log.d.ts +129 -34
  107. inspect_ai/_view/www/src/usage/ModelTokenTable.tsx +6 -10
  108. inspect_ai/_view/www/src/usage/ModelUsagePanel.module.css +4 -0
  109. inspect_ai/_view/www/src/usage/ModelUsagePanel.tsx +32 -9
  110. inspect_ai/_view/www/src/usage/TokenTable.tsx +4 -6
  111. inspect_ai/_view/www/src/usage/UsageCard.tsx +2 -1
  112. inspect_ai/_view/www/src/utils/format.ts +1 -1
  113. inspect_ai/_view/www/src/utils/json.ts +24 -0
  114. inspect_ai/_view/www/src/workspace/WorkSpace.tsx +6 -5
  115. inspect_ai/_view/www/src/workspace/WorkSpaceView.tsx +9 -2
  116. inspect_ai/_view/www/src/workspace/error/TaskErrorPanel.tsx +2 -1
  117. inspect_ai/_view/www/src/workspace/navbar/Navbar.tsx +2 -1
  118. inspect_ai/_view/www/src/workspace/navbar/PrimaryBar.tsx +3 -3
  119. inspect_ai/_view/www/src/workspace/navbar/ResultsPanel.tsx +4 -3
  120. inspect_ai/_view/www/src/workspace/navbar/SecondaryBar.tsx +5 -4
  121. inspect_ai/_view/www/src/workspace/navbar/StatusPanel.tsx +5 -8
  122. inspect_ai/_view/www/src/workspace/sidebar/EvalStatus.tsx +5 -4
  123. inspect_ai/_view/www/src/workspace/sidebar/LogDirectoryTitleView.tsx +2 -1
  124. inspect_ai/_view/www/src/workspace/sidebar/Sidebar.tsx +2 -1
  125. inspect_ai/_view/www/src/workspace/sidebar/SidebarLogEntry.tsx +2 -2
  126. inspect_ai/_view/www/src/workspace/sidebar/SidebarScoreView.tsx +2 -1
  127. inspect_ai/_view/www/src/workspace/sidebar/SidebarScoresView.tsx +2 -2
  128. inspect_ai/_view/www/src/workspace/tabs/InfoTab.tsx +2 -2
  129. inspect_ai/_view/www/src/workspace/tabs/JsonTab.tsx +2 -5
  130. inspect_ai/_view/www/src/workspace/tabs/SamplesTab.tsx +12 -11
  131. inspect_ai/_view/www/yarn.lock +241 -5
  132. inspect_ai/log/_condense.py +3 -0
  133. inspect_ai/log/_recorders/eval.py +6 -1
  134. inspect_ai/log/_transcript.py +58 -1
  135. inspect_ai/model/__init__.py +2 -0
  136. inspect_ai/model/_call_tools.py +7 -0
  137. inspect_ai/model/_chat_message.py +22 -7
  138. inspect_ai/model/_conversation.py +10 -8
  139. inspect_ai/model/_generate_config.py +25 -4
  140. inspect_ai/model/_model.py +133 -57
  141. inspect_ai/model/_model_output.py +3 -0
  142. inspect_ai/model/_openai.py +106 -40
  143. inspect_ai/model/_providers/anthropic.py +281 -153
  144. inspect_ai/model/_providers/google.py +27 -8
  145. inspect_ai/model/_providers/groq.py +9 -4
  146. inspect_ai/model/_providers/openai.py +57 -4
  147. inspect_ai/model/_providers/openai_o1.py +10 -0
  148. inspect_ai/model/_providers/providers.py +1 -1
  149. inspect_ai/model/_reasoning.py +15 -2
  150. inspect_ai/scorer/_model.py +23 -19
  151. inspect_ai/solver/_human_agent/agent.py +14 -10
  152. inspect_ai/solver/_human_agent/commands/__init__.py +7 -3
  153. inspect_ai/solver/_human_agent/commands/submit.py +76 -30
  154. inspect_ai/tool/__init__.py +2 -0
  155. inspect_ai/tool/_tool.py +3 -1
  156. inspect_ai/tool/_tools/_computer/_common.py +117 -58
  157. inspect_ai/tool/_tools/_computer/_computer.py +80 -57
  158. inspect_ai/tool/_tools/_computer/_resources/image_home_dir/.config/Code/User/settings.json +7 -1
  159. inspect_ai/tool/_tools/_computer/_resources/image_home_dir/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml +91 -0
  160. inspect_ai/tool/_tools/_computer/_resources/tool/.pylintrc +8 -0
  161. inspect_ai/tool/_tools/_computer/_resources/tool/.vscode/settings.json +12 -0
  162. inspect_ai/tool/_tools/_computer/_resources/tool/_args.py +78 -0
  163. inspect_ai/tool/_tools/_computer/_resources/tool/_constants.py +20 -0
  164. inspect_ai/tool/_tools/_computer/_resources/tool/_run.py +1 -1
  165. inspect_ai/tool/_tools/_computer/_resources/tool/_x11_client.py +175 -113
  166. inspect_ai/tool/_tools/_computer/_resources/tool/computer_tool.py +76 -20
  167. inspect_ai/tool/_tools/_computer/_resources/tool/pyproject.toml +65 -0
  168. inspect_ai/tool/_tools/_computer/test_args.py +151 -0
  169. inspect_ai/tool/_tools/_web_browser/_resources/.pylintrc +8 -0
  170. inspect_ai/tool/_tools/_web_browser/_resources/.vscode/launch.json +24 -0
  171. inspect_ai/tool/_tools/_web_browser/_resources/.vscode/settings.json +25 -0
  172. inspect_ai/tool/_tools/_web_browser/_resources/Dockerfile +5 -6
  173. inspect_ai/tool/_tools/_web_browser/_resources/README.md +10 -11
  174. inspect_ai/tool/_tools/_web_browser/_resources/accessibility_tree.py +71 -0
  175. inspect_ai/tool/_tools/_web_browser/_resources/accessibility_tree_node.py +323 -0
  176. inspect_ai/tool/_tools/_web_browser/_resources/cdp/__init__.py +5 -0
  177. inspect_ai/tool/_tools/_web_browser/_resources/cdp/a11y.py +279 -0
  178. inspect_ai/tool/_tools/_web_browser/_resources/cdp/dom.py +9 -0
  179. inspect_ai/tool/_tools/_web_browser/_resources/cdp/dom_snapshot.py +293 -0
  180. inspect_ai/tool/_tools/_web_browser/_resources/cdp/page.py +94 -0
  181. inspect_ai/tool/_tools/_web_browser/_resources/constants.py +2 -0
  182. inspect_ai/tool/_tools/_web_browser/_resources/images/usage_diagram.svg +2 -0
  183. inspect_ai/tool/_tools/_web_browser/_resources/playwright_browser.py +50 -0
  184. inspect_ai/tool/_tools/_web_browser/_resources/playwright_crawler.py +31 -359
  185. inspect_ai/tool/_tools/_web_browser/_resources/playwright_page_crawler.py +280 -0
  186. inspect_ai/tool/_tools/_web_browser/_resources/pyproject.toml +65 -0
  187. inspect_ai/tool/_tools/_web_browser/_resources/rectangle.py +64 -0
  188. inspect_ai/tool/_tools/_web_browser/_resources/rpc_client_helpers.py +146 -0
  189. inspect_ai/tool/_tools/_web_browser/_resources/scale_factor.py +64 -0
  190. inspect_ai/tool/_tools/_web_browser/_resources/test_accessibility_tree_node.py +180 -0
  191. inspect_ai/tool/_tools/_web_browser/_resources/test_playwright_crawler.py +15 -9
  192. inspect_ai/tool/_tools/_web_browser/_resources/test_rectangle.py +15 -0
  193. inspect_ai/tool/_tools/_web_browser/_resources/test_web_client.py +44 -0
  194. inspect_ai/tool/_tools/_web_browser/_resources/web_browser_rpc_types.py +39 -0
  195. inspect_ai/tool/_tools/_web_browser/_resources/web_client.py +198 -48
  196. inspect_ai/tool/_tools/_web_browser/_resources/web_client_new_session.py +26 -25
  197. inspect_ai/tool/_tools/_web_browser/_resources/web_server.py +178 -39
  198. inspect_ai/tool/_tools/_web_browser/_web_browser.py +38 -19
  199. inspect_ai/util/__init__.py +2 -1
  200. inspect_ai/util/_display.py +12 -0
  201. inspect_ai/util/_sandbox/events.py +55 -21
  202. inspect_ai/util/_sandbox/self_check.py +131 -43
  203. inspect_ai/util/_subtask.py +11 -0
  204. {inspect_ai-0.3.70.dist-info → inspect_ai-0.3.72.dist-info}/METADATA +1 -1
  205. {inspect_ai-0.3.70.dist-info → inspect_ai-0.3.72.dist-info}/RECORD +209 -186
  206. {inspect_ai-0.3.70.dist-info → inspect_ai-0.3.72.dist-info}/WHEEL +1 -1
  207. inspect_ai/_view/www/src/components/VirtualList.module.css +0 -19
  208. inspect_ai/_view/www/src/components/VirtualList.tsx +0 -292
  209. inspect_ai/tool/_tools/_computer/_computer_split.py +0 -198
  210. inspect_ai/tool/_tools/_web_browser/_resources/accessibility_node.py +0 -312
  211. inspect_ai/tool/_tools/_web_browser/_resources/dm_env_servicer.py +0 -275
  212. inspect_ai/tool/_tools/_web_browser/_resources/images/usage_diagram.png +0 -0
  213. inspect_ai/tool/_tools/_web_browser/_resources/test_accessibility_node.py +0 -176
  214. inspect_ai/tool/_tools/_web_browser/_resources/test_dm_env_servicer.py +0 -135
  215. inspect_ai/tool/_tools/_web_browser/_resources/test_web_environment.py +0 -71
  216. inspect_ai/tool/_tools/_web_browser/_resources/web_environment.py +0 -184
  217. {inspect_ai-0.3.70.dist-info → inspect_ai-0.3.72.dist-info}/LICENSE +0 -0
  218. {inspect_ai-0.3.70.dist-info → inspect_ai-0.3.72.dist-info}/entry_points.txt +0 -0
  219. {inspect_ai-0.3.70.dist-info → inspect_ai-0.3.72.dist-info}/top_level.txt +0 -0
@@ -351,14 +351,14 @@
351
351
  resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
352
352
  integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
353
353
 
354
- "@eslint-community/eslint-utils@^4.2.0":
354
+ "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
355
355
  version "4.4.1"
356
356
  resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56"
357
357
  integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==
358
358
  dependencies:
359
359
  eslint-visitor-keys "^3.4.3"
360
360
 
361
- "@eslint-community/regexpp@^4.12.1":
361
+ "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1":
362
362
  version "4.12.1"
363
363
  resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
364
364
  integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
@@ -496,6 +496,27 @@
496
496
  resolved "https://registry.yarnpkg.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz#775374306116d51c0c500b8c4face0f9a04752d8"
497
497
  integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==
498
498
 
499
+ "@nodelib/fs.scandir@2.1.5":
500
+ version "2.1.5"
501
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
502
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
503
+ dependencies:
504
+ "@nodelib/fs.stat" "2.0.5"
505
+ run-parallel "^1.1.9"
506
+
507
+ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
508
+ version "2.0.5"
509
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
510
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
511
+
512
+ "@nodelib/fs.walk@^1.2.3":
513
+ version "1.2.8"
514
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
515
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
516
+ dependencies:
517
+ "@nodelib/fs.scandir" "2.1.5"
518
+ fastq "^1.6.0"
519
+
499
520
  "@popperjs/core@^2.11.8", "@popperjs/core@^2.9.2":
500
521
  version "2.11.8"
501
522
  resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
@@ -712,6 +733,87 @@
712
733
  dependencies:
713
734
  "@types/estree" "*"
714
735
 
736
+ "@typescript-eslint/eslint-plugin@8.25.0":
737
+ version "8.25.0"
738
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.25.0.tgz#5e1d56f067e5808fa82d1b75bced82396e868a14"
739
+ integrity sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA==
740
+ dependencies:
741
+ "@eslint-community/regexpp" "^4.10.0"
742
+ "@typescript-eslint/scope-manager" "8.25.0"
743
+ "@typescript-eslint/type-utils" "8.25.0"
744
+ "@typescript-eslint/utils" "8.25.0"
745
+ "@typescript-eslint/visitor-keys" "8.25.0"
746
+ graphemer "^1.4.0"
747
+ ignore "^5.3.1"
748
+ natural-compare "^1.4.0"
749
+ ts-api-utils "^2.0.1"
750
+
751
+ "@typescript-eslint/parser@8.25.0":
752
+ version "8.25.0"
753
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.25.0.tgz#58fb81c7b7a35184ba17583f3d7ac6c4f3d95be8"
754
+ integrity sha512-4gbs64bnbSzu4FpgMiQ1A+D+urxkoJk/kqlDJ2W//5SygaEiAP2B4GoS7TEdxgwol2el03gckFV9lJ4QOMiiHg==
755
+ dependencies:
756
+ "@typescript-eslint/scope-manager" "8.25.0"
757
+ "@typescript-eslint/types" "8.25.0"
758
+ "@typescript-eslint/typescript-estree" "8.25.0"
759
+ "@typescript-eslint/visitor-keys" "8.25.0"
760
+ debug "^4.3.4"
761
+
762
+ "@typescript-eslint/scope-manager@8.25.0":
763
+ version "8.25.0"
764
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.25.0.tgz#ac3805077aade898e98ca824294c998545597df3"
765
+ integrity sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg==
766
+ dependencies:
767
+ "@typescript-eslint/types" "8.25.0"
768
+ "@typescript-eslint/visitor-keys" "8.25.0"
769
+
770
+ "@typescript-eslint/type-utils@8.25.0":
771
+ version "8.25.0"
772
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.25.0.tgz#ee0d2f67c80af5ae74b5d6f977e0f8ded0059677"
773
+ integrity sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g==
774
+ dependencies:
775
+ "@typescript-eslint/typescript-estree" "8.25.0"
776
+ "@typescript-eslint/utils" "8.25.0"
777
+ debug "^4.3.4"
778
+ ts-api-utils "^2.0.1"
779
+
780
+ "@typescript-eslint/types@8.25.0":
781
+ version "8.25.0"
782
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.25.0.tgz#f91512c2f532b1d6a8826cadd0b0e5cd53cf97e0"
783
+ integrity sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw==
784
+
785
+ "@typescript-eslint/typescript-estree@8.25.0":
786
+ version "8.25.0"
787
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.25.0.tgz#d8409c63abddd4cf5b93c031b24b9edc1c7c1299"
788
+ integrity sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q==
789
+ dependencies:
790
+ "@typescript-eslint/types" "8.25.0"
791
+ "@typescript-eslint/visitor-keys" "8.25.0"
792
+ debug "^4.3.4"
793
+ fast-glob "^3.3.2"
794
+ is-glob "^4.0.3"
795
+ minimatch "^9.0.4"
796
+ semver "^7.6.0"
797
+ ts-api-utils "^2.0.1"
798
+
799
+ "@typescript-eslint/utils@8.25.0":
800
+ version "8.25.0"
801
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.25.0.tgz#3ea2f9196a915ef4daa2c8eafd44adbd7d56d08a"
802
+ integrity sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA==
803
+ dependencies:
804
+ "@eslint-community/eslint-utils" "^4.4.0"
805
+ "@typescript-eslint/scope-manager" "8.25.0"
806
+ "@typescript-eslint/types" "8.25.0"
807
+ "@typescript-eslint/typescript-estree" "8.25.0"
808
+
809
+ "@typescript-eslint/visitor-keys@8.25.0":
810
+ version "8.25.0"
811
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.25.0.tgz#e8646324cd1793f96e02669cb717a05319403164"
812
+ integrity sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ==
813
+ dependencies:
814
+ "@typescript-eslint/types" "8.25.0"
815
+ eslint-visitor-keys "^4.2.0"
816
+
715
817
  "@vitejs/plugin-react@^4.3.4":
716
818
  version "4.3.4"
717
819
  resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz#c64be10b54c4640135a5b28a2432330e88ad7c20"
@@ -791,6 +893,20 @@ brace-expansion@^1.1.7:
791
893
  balanced-match "^1.0.0"
792
894
  concat-map "0.0.1"
793
895
 
896
+ brace-expansion@^2.0.1:
897
+ version "2.0.1"
898
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
899
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
900
+ dependencies:
901
+ balanced-match "^1.0.0"
902
+
903
+ braces@^3.0.3:
904
+ version "3.0.3"
905
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
906
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
907
+ dependencies:
908
+ fill-range "^7.1.1"
909
+
794
910
  browserslist@^4.24.0:
795
911
  version "4.24.4"
796
912
  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b"
@@ -897,7 +1013,7 @@ cuint@^0.2.2:
897
1013
  resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"
898
1014
  integrity sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==
899
1015
 
900
- debug@^4.1.0, debug@^4.3.1, debug@^4.3.2:
1016
+ debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
901
1017
  version "4.4.0"
902
1018
  resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
903
1019
  integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
@@ -968,6 +1084,11 @@ escape-string-regexp@^4.0.0:
968
1084
  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
969
1085
  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
970
1086
 
1087
+ eslint-plugin-react-hooks@^5.1.0:
1088
+ version "5.1.0"
1089
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz#3d34e37d5770866c34b87d5b499f5f0b53bf0854"
1090
+ integrity sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==
1091
+
971
1092
  eslint-scope@^8.2.0:
972
1093
  version "8.2.0"
973
1094
  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442"
@@ -1064,6 +1185,17 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
1064
1185
  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
1065
1186
  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
1066
1187
 
1188
+ fast-glob@^3.3.2:
1189
+ version "3.3.3"
1190
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
1191
+ integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
1192
+ dependencies:
1193
+ "@nodelib/fs.stat" "^2.0.2"
1194
+ "@nodelib/fs.walk" "^1.2.3"
1195
+ glob-parent "^5.1.2"
1196
+ merge2 "^1.3.0"
1197
+ micromatch "^4.0.8"
1198
+
1067
1199
  fast-json-patch@^3.1.1:
1068
1200
  version "3.1.1"
1069
1201
  resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947"
@@ -1079,6 +1211,13 @@ fast-levenshtein@^2.0.6:
1079
1211
  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
1080
1212
  integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
1081
1213
 
1214
+ fastq@^1.6.0:
1215
+ version "1.19.1"
1216
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5"
1217
+ integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
1218
+ dependencies:
1219
+ reusify "^1.0.4"
1220
+
1082
1221
  fflate@^0.8.2:
1083
1222
  version "0.8.2"
1084
1223
  resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea"
@@ -1091,6 +1230,13 @@ file-entry-cache@^8.0.0:
1091
1230
  dependencies:
1092
1231
  flat-cache "^4.0.0"
1093
1232
 
1233
+ fill-range@^7.1.1:
1234
+ version "7.1.1"
1235
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
1236
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
1237
+ dependencies:
1238
+ to-regex-range "^5.0.1"
1239
+
1094
1240
  filtrex@^3.1.0:
1095
1241
  version "3.1.0"
1096
1242
  resolved "https://registry.yarnpkg.com/filtrex/-/filtrex-3.1.0.tgz#5ec00994615ff10e5e09c89bb290c855cb408c21"
@@ -1127,6 +1273,13 @@ gensync@^1.0.0-beta.2:
1127
1273
  resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
1128
1274
  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
1129
1275
 
1276
+ glob-parent@^5.1.2:
1277
+ version "5.1.2"
1278
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1279
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1280
+ dependencies:
1281
+ is-glob "^4.0.1"
1282
+
1130
1283
  glob-parent@^6.0.2:
1131
1284
  version "6.0.2"
1132
1285
  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
@@ -1156,6 +1309,11 @@ good-listener@^1.2.2:
1156
1309
  dependencies:
1157
1310
  delegate "^3.1.2"
1158
1311
 
1312
+ graphemer@^1.4.0:
1313
+ version "1.4.0"
1314
+ resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
1315
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
1316
+
1159
1317
  has-flag@^4.0.0:
1160
1318
  version "4.0.0"
1161
1319
  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
@@ -1166,7 +1324,7 @@ htm@^3.1.1:
1166
1324
  resolved "https://registry.yarnpkg.com/htm/-/htm-3.1.1.tgz#49266582be0dc66ed2235d5ea892307cc0c24b78"
1167
1325
  integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==
1168
1326
 
1169
- ignore@^5.2.0:
1327
+ ignore@^5.2.0, ignore@^5.3.1:
1170
1328
  version "5.3.2"
1171
1329
  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
1172
1330
  integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
@@ -1189,13 +1347,18 @@ is-extglob@^2.1.1:
1189
1347
  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1190
1348
  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
1191
1349
 
1192
- is-glob@^4.0.0, is-glob@^4.0.3:
1350
+ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
1193
1351
  version "4.0.3"
1194
1352
  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1195
1353
  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1196
1354
  dependencies:
1197
1355
  is-extglob "^2.1.1"
1198
1356
 
1357
+ is-number@^7.0.0:
1358
+ version "7.0.0"
1359
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1360
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1361
+
1199
1362
  isexe@^2.0.0:
1200
1363
  version "2.0.0"
1201
1364
  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -1317,6 +1480,19 @@ mdurl@^2.0.0:
1317
1480
  resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0"
1318
1481
  integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==
1319
1482
 
1483
+ merge2@^1.3.0:
1484
+ version "1.4.1"
1485
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1486
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1487
+
1488
+ micromatch@^4.0.8:
1489
+ version "4.0.8"
1490
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
1491
+ integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
1492
+ dependencies:
1493
+ braces "^3.0.3"
1494
+ picomatch "^2.3.1"
1495
+
1320
1496
  mime@~2.5.2:
1321
1497
  version "2.5.2"
1322
1498
  resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"
@@ -1329,6 +1505,13 @@ minimatch@^3.1.2:
1329
1505
  dependencies:
1330
1506
  brace-expansion "^1.1.7"
1331
1507
 
1508
+ minimatch@^9.0.4:
1509
+ version "9.0.5"
1510
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
1511
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
1512
+ dependencies:
1513
+ brace-expansion "^2.0.1"
1514
+
1332
1515
  minimatch@~3.0.4:
1333
1516
  version "3.0.8"
1334
1517
  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1"
@@ -1409,6 +1592,11 @@ picocolors@^1.0.0, picocolors@^1.1.1:
1409
1592
  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
1410
1593
  integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
1411
1594
 
1595
+ picomatch@^2.3.1:
1596
+ version "2.3.1"
1597
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1598
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1599
+
1412
1600
  postcss-url@^10.1.3:
1413
1601
  version "10.1.3"
1414
1602
  resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-10.1.3.tgz#54120cc910309e2475ec05c2cfa8f8a2deafdf1e"
@@ -1453,6 +1641,11 @@ punycode@^2.1.0:
1453
1641
  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
1454
1642
  integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
1455
1643
 
1644
+ queue-microtask@^1.2.2:
1645
+ version "1.2.3"
1646
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1647
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1648
+
1456
1649
  react-dom@^19.0.0:
1457
1650
  version "19.0.0"
1458
1651
  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57"
@@ -1465,6 +1658,11 @@ react-refresh@^0.14.2:
1465
1658
  resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9"
1466
1659
  integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
1467
1660
 
1661
+ react-virtuoso@^4.12.5:
1662
+ version "4.12.5"
1663
+ resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-4.12.5.tgz#cf92efc2527e56d6df1d4d63c6e4dd3fac5a4030"
1664
+ integrity sha512-YeCbRRsC9CLf0buD0Rct7WsDbzf+yBU1wGbo05/XjbcN2nJuhgh040m3y3+6HVogTZxEqVm45ac9Fpae4/MxRQ==
1665
+
1468
1666
  react@^19.0.0:
1469
1667
  version "19.0.0"
1470
1668
  resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd"
@@ -1480,6 +1678,11 @@ resolve-from@^4.0.0:
1480
1678
  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1481
1679
  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1482
1680
 
1681
+ reusify@^1.0.4:
1682
+ version "1.1.0"
1683
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
1684
+ integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
1685
+
1483
1686
  rollup@^4.20.0:
1484
1687
  version "4.31.0"
1485
1688
  resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.31.0.tgz#b84af969a0292cb047dce2c0ec5413a9457597a4"
@@ -1508,6 +1711,13 @@ rollup@^4.20.0:
1508
1711
  "@rollup/rollup-win32-x64-msvc" "4.31.0"
1509
1712
  fsevents "~2.3.2"
1510
1713
 
1714
+ run-parallel@^1.1.9:
1715
+ version "1.2.0"
1716
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1717
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1718
+ dependencies:
1719
+ queue-microtask "^1.2.2"
1720
+
1511
1721
  scheduler@^0.25.0:
1512
1722
  version "0.25.0"
1513
1723
  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015"
@@ -1523,6 +1733,11 @@ semver@^6.0.0, semver@^6.3.1:
1523
1733
  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
1524
1734
  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
1525
1735
 
1736
+ semver@^7.6.0:
1737
+ version "7.7.1"
1738
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
1739
+ integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
1740
+
1526
1741
  seroval-plugins@^1.1.0:
1527
1742
  version "1.2.0"
1528
1743
  resolved "https://registry.yarnpkg.com/seroval-plugins/-/seroval-plugins-1.2.0.tgz#7fcf8537938e0446f843897172fc64f01322c33f"
@@ -1581,6 +1796,18 @@ tiny-emitter@^2.0.0:
1581
1796
  resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
1582
1797
  integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
1583
1798
 
1799
+ to-regex-range@^5.0.1:
1800
+ version "5.0.1"
1801
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1802
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1803
+ dependencies:
1804
+ is-number "^7.0.0"
1805
+
1806
+ ts-api-utils@^2.0.1:
1807
+ version "2.0.1"
1808
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.1.tgz#660729385b625b939aaa58054f45c058f33f10cd"
1809
+ integrity sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==
1810
+
1584
1811
  type-check@^0.4.0, type-check@~0.4.0:
1585
1812
  version "0.4.0"
1586
1813
  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -1588,6 +1815,15 @@ type-check@^0.4.0, type-check@~0.4.0:
1588
1815
  dependencies:
1589
1816
  prelude-ls "^1.2.1"
1590
1817
 
1818
+ typescript-eslint@^8.25.0:
1819
+ version "8.25.0"
1820
+ resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.25.0.tgz#73047c157cd70ee93cf2f9243f1599d21cf60239"
1821
+ integrity sha512-TxRdQQLH4g7JkoFlYG3caW5v1S6kEkz8rqt80iQJZUYPq1zD1Ra7HfQBJJ88ABRaMvHAXnwRvRB4V+6sQ9xN5Q==
1822
+ dependencies:
1823
+ "@typescript-eslint/eslint-plugin" "8.25.0"
1824
+ "@typescript-eslint/parser" "8.25.0"
1825
+ "@typescript-eslint/utils" "8.25.0"
1826
+
1591
1827
  typescript@^5.7.3:
1592
1828
  version "5.7.3"
1593
1829
  resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e"
@@ -10,6 +10,7 @@ from inspect_ai._util.content import (
10
10
  Content,
11
11
  ContentAudio,
12
12
  ContentImage,
13
+ ContentReasoning,
13
14
  ContentText,
14
15
  ContentVideo,
15
16
  )
@@ -315,3 +316,5 @@ def walk_content(content: Content, content_fn: Callable[[str], str]) -> Content:
315
316
  return content.model_copy(update=dict(audio=content_fn(content.audio)))
316
317
  elif isinstance(content, ContentVideo):
317
318
  return content.model_copy(update=dict(video=content_fn(content.video)))
319
+ elif isinstance(content, ContentReasoning):
320
+ return content.model_copy(update=dict(reasoning=content_fn(content.reasoning)))
@@ -16,6 +16,7 @@ from inspect_ai._util.constants import LOG_SCHEMA_VERSION
16
16
  from inspect_ai._util.content import (
17
17
  ContentAudio,
18
18
  ContentImage,
19
+ ContentReasoning,
19
20
  ContentText,
20
21
  ContentVideo,
21
22
  )
@@ -252,7 +253,11 @@ def text_inputs(inputs: str | list[ChatMessage]) -> str | list[ChatMessage]:
252
253
  for message in inputs:
253
254
  if not isinstance(message.content, str):
254
255
  filtered_content: list[
255
- ContentText | ContentImage | ContentAudio | ContentVideo
256
+ ContentText
257
+ | ContentReasoning
258
+ | ContentImage
259
+ | ContentAudio
260
+ | ContentVideo
256
261
  ] = []
257
262
  for content in message.content:
258
263
  if content.type == "text":
@@ -8,7 +8,9 @@ from typing import (
8
8
  Iterator,
9
9
  Literal,
10
10
  Sequence,
11
+ Type,
11
12
  TypeAlias,
13
+ TypeVar,
12
14
  Union,
13
15
  )
14
16
 
@@ -17,6 +19,7 @@ from pydantic import BaseModel, ConfigDict, Field, JsonValue, field_serializer
17
19
  from inspect_ai._util.constants import SAMPLE_SUBTASK
18
20
  from inspect_ai._util.error import EvalError
19
21
  from inspect_ai._util.json import JsonChange, json_changes
22
+ from inspect_ai._util.working import sample_working_time
20
23
  from inspect_ai.dataset._dataset import Sample
21
24
  from inspect_ai.log._message import LoggingMessage
22
25
  from inspect_ai.model._chat_message import ChatMessage
@@ -41,7 +44,10 @@ logger = getLogger(__name__)
41
44
 
42
45
  class BaseEvent(BaseModel):
43
46
  timestamp: datetime = Field(default_factory=datetime.now)
44
- """Time at which event occurred."""
47
+ """Clock time at which event occurred."""
48
+
49
+ working_start: float = Field(default_factory=sample_working_time)
50
+ """Working time (within sample) at which the event occurred."""
45
51
 
46
52
  pending: bool | None = Field(default=None)
47
53
  """Is this event pending?"""
@@ -133,6 +139,18 @@ class ModelEvent(BaseEvent):
133
139
  call: ModelCall | None = Field(default=None)
134
140
  """Raw call made to model API."""
135
141
 
142
+ completed: datetime | None = Field(default=None)
143
+ """Time that model call completed (see `timestamp` for started)"""
144
+
145
+ working_time: float | None = Field(default=None)
146
+ """working time for model call that succeeded (i.e. was not retried)."""
147
+
148
+ @field_serializer("completed")
149
+ def serialize_completed(self, dt: datetime) -> str:
150
+ if dt is None:
151
+ return None
152
+ return dt.astimezone().isoformat()
153
+
136
154
 
137
155
  class ToolEvent(BaseEvent):
138
156
  """Call to a tool."""
@@ -167,18 +185,28 @@ class ToolEvent(BaseEvent):
167
185
  events: list["Event"] = Field(default_factory=list)
168
186
  """Transcript of events for tool."""
169
187
 
188
+ completed: datetime | None = Field(default=None)
189
+ """Time that tool call completed (see `timestamp` for started)"""
190
+
191
+ working_time: float | None = Field(default=None)
192
+ """Working time for tool call (i.e. time not spent waiting on semaphores)."""
193
+
170
194
  def _set_result(
171
195
  self,
172
196
  result: ToolResult,
173
197
  truncated: tuple[int, int] | None,
174
198
  error: ToolCallError | None,
175
199
  events: list["Event"],
200
+ waiting_time: float,
176
201
  ) -> None:
177
202
  self.result = result
178
203
  self.truncated = truncated
179
204
  self.error = error
180
205
  self.events = events
181
206
  self.pending = None
207
+ completed = datetime.now()
208
+ self.completed = completed
209
+ self.working_time = (completed - self.timestamp).total_seconds() - waiting_time
182
210
 
183
211
  # mechanism for operator to cancel the tool call
184
212
 
@@ -206,6 +234,10 @@ class ToolEvent(BaseEvent):
206
234
  model_config = ConfigDict(arbitrary_types_allowed=True)
207
235
  """Required so that we can include '_task' as a member."""
208
236
 
237
+ @field_serializer("completed")
238
+ def serialize_completed(self, dt: datetime) -> str:
239
+ return dt.astimezone().isoformat()
240
+
209
241
 
210
242
  class SandboxEvent(BaseEvent):
211
243
  """Sandbox execution or I/O"""
@@ -234,6 +266,13 @@ class SandboxEvent(BaseEvent):
234
266
  output: str | None = Field(default=None)
235
267
  """Output (for exec and read_file). Truncated to 100 lines."""
236
268
 
269
+ completed: datetime | None = Field(default=None)
270
+ """Time that sandbox action completed (see `timestamp` for started)"""
271
+
272
+ @field_serializer("completed")
273
+ def serialize_completed(self, dt: datetime) -> str:
274
+ return dt.astimezone().isoformat()
275
+
237
276
 
238
277
  class ApprovalEvent(BaseEvent):
239
278
  """Tool approval."""
@@ -366,6 +405,16 @@ class SubtaskEvent(BaseEvent):
366
405
  events: list["Event"] = Field(default_factory=list)
367
406
  """Transcript of events for subtask."""
368
407
 
408
+ completed: datetime | None = Field(default=None)
409
+ """Time that subtask completed (see `timestamp` for started)"""
410
+
411
+ working_time: float | None = Field(default=None)
412
+ """Working time for subtask (i.e. time not spent waiting on semaphores or model retries)."""
413
+
414
+ @field_serializer("completed")
415
+ def serialize_completed(self, dt: datetime) -> str:
416
+ return dt.astimezone().isoformat()
417
+
369
418
 
370
419
  Event: TypeAlias = Union[
371
420
  SampleInitEvent
@@ -387,6 +436,8 @@ Event: TypeAlias = Union[
387
436
  ]
388
437
  """Event in a transcript."""
389
438
 
439
+ ET = TypeVar("ET", bound=BaseEvent)
440
+
390
441
 
391
442
  class Transcript:
392
443
  """Transcript of events."""
@@ -426,6 +477,12 @@ class Transcript:
426
477
  def events(self) -> Sequence[Event]:
427
478
  return self._events
428
479
 
480
+ def find_last_event(self, event_cls: Type[ET]) -> ET | None:
481
+ for event in reversed(self.events):
482
+ if isinstance(event, event_cls):
483
+ return event
484
+ return None
485
+
429
486
  def _event(self, event: Event) -> None:
430
487
  self._events.append(event)
431
488
 
@@ -4,6 +4,7 @@ from inspect_ai._util.content import (
4
4
  Content,
5
5
  ContentAudio,
6
6
  ContentImage,
7
+ ContentReasoning,
7
8
  ContentText,
8
9
  ContentVideo,
9
10
  )
@@ -51,6 +52,7 @@ __all__ = [
51
52
  "CachePolicy",
52
53
  "ContentAudio",
53
54
  "ContentImage",
55
+ "ContentReasoning",
54
56
  "ContentText",
55
57
  "ContentVideo",
56
58
  "Content",
@@ -36,6 +36,7 @@ from inspect_ai._util.content import (
36
36
  from inspect_ai._util.format import format_function_call
37
37
  from inspect_ai._util.text import truncate_string_to_bytes
38
38
  from inspect_ai._util.trace import trace_action
39
+ from inspect_ai._util.working import sample_waiting_time
39
40
  from inspect_ai.model._conversation import conversation_tool_mesage
40
41
  from inspect_ai.tool import Tool, ToolCall, ToolError, ToolInfo
41
42
  from inspect_ai.tool._tool import ToolApprovalError, ToolParsingError
@@ -180,6 +181,10 @@ async def call_tools(
180
181
  task = asyncio.create_task(call_tool_task(call))
181
182
 
182
183
  # create pending tool event and add it to the transcript
184
+ # (record the waiting time for the sample so we can compare
185
+ # it at the end to deduce total waiting time inside the tool
186
+ # call (in turn used to calculate working time)
187
+ waiting_time_start = sample_waiting_time()
183
188
  event = ToolEvent(
184
189
  id=call.id,
185
190
  function=call.function,
@@ -227,11 +232,13 @@ async def call_tools(
227
232
  conversation_tool_mesage(tool_message)
228
233
 
229
234
  # update the event with the results
235
+ waiting_time_end = sample_waiting_time()
230
236
  event._set_result(
231
237
  result=result_event.result,
232
238
  truncated=result_event.truncated,
233
239
  error=result_event.error,
234
240
  events=result_event.events,
241
+ waiting_time=waiting_time_end - waiting_time_start,
235
242
  )
236
243
 
237
244
  # return tool messages