@cardstack/boxel-cli 0.13.0-unstable.4 → 0.13.0-unstable.5

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 (1050) hide show
  1. package/bundled-realms/pretui/components/doc-report.gts +2 -2
  2. package/bundled-realms/pretui/components/doc-report.usage.gts +3 -3
  3. package/bundled-realms/pretui/components/form-field.md +1 -1
  4. package/bundled-realms/pretui/components/icon-button.md +1 -1
  5. package/bundled-realms/pretui/components/popup.md +1 -1
  6. package/bundled-realms/pretui/components/switch.gts +13 -0
  7. package/bundled-realms/pretui/components/switch.md +5 -3
  8. package/bundled-realms/pretui/components/theme-frame.gts +49 -22
  9. package/bundled-realms/pretui/components/tooltip.gts +141 -42
  10. package/bundled-realms/pretui/components/tooltip.md +10 -12
  11. package/bundled-realms/pretui/components/tooltip.usage.gts +3 -5
  12. package/bundled-realms/pretui/docs/structure.md +1 -1
  13. package/bundled-realms/pretui/internal/overlay.gts +4 -2
  14. package/bundled-realms/pretui/pretui-css.gts +6 -2
  15. package/bundled-realms/pretui/theme-scoped-css.gts +262 -0
  16. package/bundled-test-harness/assets/account-switch-failed-test-DwAZq6Sc.js +45 -0
  17. package/bundled-test-harness/assets/adapter-C_6pnsx1.js +2 -0
  18. package/bundled-test-harness/assets/add-field-to-card-definition-tool-test-zMYtJWBv.js +112 -0
  19. package/bundled-test-harness/assets/ai-assistant-create-workspace-test-CwhAV-Ow.js +130 -0
  20. package/bundled-test-harness/assets/ai-assistant-panel-relogin-test-DNgclkGJ.js +46 -0
  21. package/bundled-test-harness/assets/ai-assistant-test-DGYFiRTb.js +2223 -0
  22. package/bundled-test-harness/assets/ai-function-generation-test-Dj6WzKkh.js +1176 -0
  23. package/bundled-test-harness/assets/ai-module-creation-test-EsOoJpQ1.js +151 -0
  24. package/bundled-test-harness/assets/aibot-message-uGaCPn5o.js +1312 -0
  25. package/bundled-test-harness/assets/app-pIzBYfiZ.js +14146 -0
  26. package/bundled-test-harness/assets/apply-markdown-edit-test-CPhfeg1i.js +230 -0
  27. package/bundled-test-harness/assets/ask-user-picker-NVRkhKwt.js +370 -0
  28. package/bundled-test-harness/assets/ask-user-picker-test-SsZqFm9W.js +39 -0
  29. package/bundled-test-harness/assets/assistant-transcript-test-DesuBCIB.js +57 -0
  30. package/bundled-test-harness/assets/audio-metadata-extractor-test-8JM6oZXG.js +1176 -0
  31. package/bundled-test-harness/assets/authed-fetch-test-yPTMe-9V.js +73 -0
  32. package/bundled-test-harness/assets/avif-image-def-test-Kyknj908.js +187 -0
  33. package/bundled-test-harness/assets/basic-test-D9OrrMaq.js +139 -0
  34. package/bundled-test-harness/assets/binary-upload-dedupe-test-Dnxlbbu6.js +308 -0
  35. package/bundled-test-harness/assets/bot-registration-test-Bk2lTaCW.js +97 -0
  36. package/bundled-test-harness/assets/box-test-BbV9sMyU.js +50 -0
  37. package/bundled-test-harness/assets/brand-guide-attachments-test-z4wTsKbI.js +84 -0
  38. package/bundled-test-harness/assets/brand-guide-custom-css-test-BlSJE8xo.js +196 -0
  39. package/bundled-test-harness/assets/brand-guide-edit-test-DJ1OQ6IB.js +140 -0
  40. package/bundled-test-harness/assets/brand-logo-mark-field-test-ux7eetkO.js +86 -0
  41. package/bundled-test-harness/assets/broken-link-template-test-CqB3MWyw.js +192 -0
  42. package/bundled-test-harness/assets/bundled-base-modules-test-B2oNLZSJ.js +54 -0
  43. package/bundled-test-harness/assets/bundled-base-oracle-test-DelPfFjn.js +37 -0
  44. package/bundled-test-harness/assets/buried-stack-item-scroll-test-Ixsl1tS0.js +236 -0
  45. package/bundled-test-harness/assets/button-BvYQm_A1.js +141 -0
  46. package/bundled-test-harness/assets/bxl-cyclic-graph-test-p23WCLRW.js +47 -0
  47. package/bundled-test-harness/assets/bxl-expression-test-CVTQYT_C.js +250 -0
  48. package/bundled-test-harness/assets/bxl-indexing-test-D_A7X2sr.js +212 -0
  49. package/bundled-test-harness/assets/bxl-platform-module-test-Cltfyybp.js +71 -0
  50. package/bundled-test-harness/assets/can-invoke-test-DJi7jMaU.js +455 -0
  51. package/bundled-test-harness/assets/can-read-realm-test-CIz6WX_K.js +56 -0
  52. package/bundled-test-harness/assets/cancel-indexing-job-test-0LlrOgYK.js +69 -0
  53. package/bundled-test-harness/assets/capture-test-diHIWmh0.js +360 -0
  54. package/bundled-test-harness/assets/card-api-test-Ci9b0ghP.js +198 -0
  55. package/bundled-test-harness/assets/card-basics-test-RKQoQWZD.js +5364 -0
  56. package/bundled-test-harness/assets/card-chooser-paging-test-BoUyFMEw.js +235 -0
  57. package/bundled-test-harness/assets/card-chooser-test-7ZwhxxkH.js +393 -0
  58. package/bundled-test-harness/assets/card-context-search-results-KmkXJbmC.js +30 -0
  59. package/bundled-test-harness/assets/card-context-search-results-test-CpMr8OlX.js +184 -0
  60. package/bundled-test-harness/assets/card-def-field-def-relationships-test-ByPl5n55.js +562 -0
  61. package/bundled-test-harness/assets/card-def-menu-items-test-ohuHc0b4.js +228 -0
  62. package/bundled-test-harness/assets/card-delete-test-Be971b-V.js +466 -0
  63. package/bundled-test-harness/assets/card-error-3q1o3i0e.js +72 -0
  64. package/bundled-test-harness/assets/card-error-awaiting-index-test-DPgYKfbF.js +53 -0
  65. package/bundled-test-harness/assets/card-info-thumbnail-picker-test-CVfeJyjt.js +219 -0
  66. package/bundled-test-harness/assets/card-playground-test-D-7bi4PQ.js +1491 -0
  67. package/bundled-test-harness/assets/card-prerender-DemTfK_a.js +12939 -0
  68. package/bundled-test-harness/assets/card-thunk-error-test-DCBh1vRT.js +48 -0
  69. package/bundled-test-harness/assets/card-type-service-test-DXPrfVYk.js +161 -0
  70. package/bundled-test-harness/assets/check-correctness-test-DjE7r1X2.js +1093 -0
  71. package/bundled-test-harness/assets/check-domain-availability-test-U10xSKbY.js +98 -0
  72. package/bundled-test-harness/assets/chip-0r_r9SC8.js +44 -0
  73. package/bundled-test-harness/assets/choreo-Ci5dG5fv.js +2 -0
  74. package/bundled-test-harness/assets/choreo-D1K9RyjM.js +1031 -0
  75. package/bundled-test-harness/assets/choreo-feature-reel-test-vzmW-SFd.js +155 -0
  76. package/bundled-test-harness/assets/choreo-gallery-build-order-test-J6n0_PKm.js +436 -0
  77. package/bundled-test-harness/assets/choreo-gallery-compositor-test-DSi1N9bi.js +399 -0
  78. package/bundled-test-harness/assets/choreo-gallery-cover-test-BT05gNKC.js +214 -0
  79. package/bundled-test-harness/assets/choreo-gallery-crossing-stage-test-BIuLOZH6.js +133 -0
  80. package/bundled-test-harness/assets/choreo-gallery-demos-alive-test-ClGjpnj6.js +42 -0
  81. package/bundled-test-harness/assets/choreo-gallery-drift-test-OjxMXV0Y.js +620 -0
  82. package/bundled-test-harness/assets/choreo-gallery-escort-test-D6VL4FfT.js +187 -0
  83. package/bundled-test-harness/assets/choreo-gallery-films-test-DBcDHGx8.js +140 -0
  84. package/bundled-test-harness/assets/choreo-gallery-filter-test-BUghtJZe.js +46 -0
  85. package/bundled-test-harness/assets/choreo-gallery-fold-test-0D9-_h_I.js +180 -0
  86. package/bundled-test-harness/assets/choreo-gallery-guide-pages-test-DS41eNNV.js +114 -0
  87. package/bundled-test-harness/assets/choreo-gallery-guides-test-CZnaxUNJ.js +321 -0
  88. package/bundled-test-harness/assets/choreo-gallery-hang-test-WFvsJ-MJ.js +426 -0
  89. package/bundled-test-harness/assets/choreo-gallery-highlight-test-Dn0hYPLC.js +60 -0
  90. package/bundled-test-harness/assets/choreo-gallery-inline-edit-test-C5WvS67s.js +370 -0
  91. package/bundled-test-harness/assets/choreo-gallery-interruption-test-CgT9RKTe.js +176 -0
  92. package/bundled-test-harness/assets/choreo-gallery-lone-stack-test-BZgqbTJd.js +104 -0
  93. package/bundled-test-harness/assets/choreo-gallery-navigation-test-CWzXkvbW.js +193 -0
  94. package/bundled-test-harness/assets/choreo-gallery-playhead-transport-test-Dt71t4CU.js +111 -0
  95. package/bundled-test-harness/assets/choreo-gallery-poplayout-subtree-test-B_rDq4em.js +127 -0
  96. package/bundled-test-harness/assets/choreo-gallery-presence-modes-test-j_cZ9cAM.js +100 -0
  97. package/bundled-test-harness/assets/choreo-gallery-presentation-test-CIFKR65J.js +157 -0
  98. package/bundled-test-harness/assets/choreo-gallery-reduced-motion-test-BvRCiCvB.js +145 -0
  99. package/bundled-test-harness/assets/choreo-gallery-sheet-standalone-test-DgO2MBzU.js +89 -0
  100. package/bundled-test-harness/assets/choreo-gallery-sheet-test-BntUKT_P.js +48 -0
  101. package/bundled-test-harness/assets/choreo-gallery-site-test-CvSE6Jyq.js +237 -0
  102. package/bundled-test-harness/assets/choreo-gallery-stage-Dj6tFzon.js +256 -0
  103. package/bundled-test-harness/assets/choreo-gallery-stage-keyboard-test-CkDrAPA8.js +102 -0
  104. package/bundled-test-harness/assets/choreo-gallery-stages-test-DHUmzoRW.js +35 -0
  105. package/bundled-test-harness/assets/choreo-gallery-subdivision-test-BZ9-cDFh.js +138 -0
  106. package/bundled-test-harness/assets/choreo-gallery-table-plan-test-7uP6mZpo.js +144 -0
  107. package/bundled-test-harness/assets/choreo-gallery-theater-test-DgEue9FD.js +252 -0
  108. package/bundled-test-harness/assets/choreo-gallery-tuning-test-CfPx5iCp.js +95 -0
  109. package/bundled-test-harness/assets/choreo-gallery-widget-room-test-o9T2EFKq.js +88 -0
  110. package/bundled-test-harness/assets/choreo-gallery-wires-test-73JLkxn6.js +148 -0
  111. package/bundled-test-harness/assets/client-telemetry-test-DFM4mML2.js +340 -0
  112. package/bundled-test-harness/assets/clip-CsRtHZiN.js +92 -0
  113. package/bundled-test-harness/assets/clip-CycGr0Lf.js +2 -0
  114. package/bundled-test-harness/assets/code-block-DRE8KQZQ.js +502 -0
  115. package/bundled-test-harness/assets/code-ref-test-CDcqE8_C.js +163 -0
  116. package/bundled-test-harness/assets/code-submode-availability-test-DPTqZYYm.js +198 -0
  117. package/bundled-test-harness/assets/code-submode-test-AHV4mzJ4.js +1839 -0
  118. package/bundled-test-harness/assets/codeblocks-test-D9pbJMK8.js +418 -0
  119. package/bundled-test-harness/assets/codemirror-editor-test-BeAMVivu.js +1512 -0
  120. package/bundled-test-harness/assets/codemirror-embed-toolbar-test-Bnb7_KUT.js +366 -0
  121. package/bundled-test-harness/assets/color-field-test-CR6gGEqE.js +212 -0
  122. package/bundled-test-harness/assets/compaction-test-BSqAGv4g.js +150 -0
  123. package/bundled-test-harness/assets/computed-test-DtyZGgdc.js +1320 -0
  124. package/bundled-test-harness/assets/container-CEslVSTe.js +10884 -0
  125. package/bundled-test-harness/assets/content-preview-components-test-BztI4fz-.js +462 -0
  126. package/bundled-test-harness/assets/copy-and-edit-test-Cqw7kcur.js +292 -0
  127. package/bundled-test-harness/assets/copy-card-test-D5m3eVEH.js +218 -0
  128. package/bundled-test-harness/assets/copy-file-to-realm-test-FPY-6Ddm.js +148 -0
  129. package/bundled-test-harness/assets/copy-source-test-9pJD-qey.js +56 -0
  130. package/bundled-test-harness/assets/create-file-test-DjMf88u_.js +1086 -0
  131. package/bundled-test-harness/assets/create-file-test-XbgOqg38.js +464 -0
  132. package/bundled-test-harness/assets/create-listing-modal-test-DyGlGMWu.js +273 -0
  133. package/bundled-test-harness/assets/create-listing-pr-request-test-CBtIV0Z8.js +117 -0
  134. package/bundled-test-harness/assets/create-spec-test-4xR0gM7E.js +256 -0
  135. package/bundled-test-harness/assets/create-submission-workflow-test-DQpWrpGT.js +132 -0
  136. package/bundled-test-harness/assets/create-workspace-test-BQAudgpS.js +104 -0
  137. package/bundled-test-harness/assets/credential-fields-test-DXKBdbZD.js +200 -0
  138. package/bundled-test-harness/assets/csv-file-def-test-Cnp4y834.js +102 -0
  139. package/bundled-test-harness/assets/dashboard-CmuOhIYC.js +3628 -0
  140. package/bundled-test-harness/assets/dashboard-CzN49x74.css +2400 -0
  141. package/bundled-test-harness/assets/dashboard-add-workspace-test-T32hWB-g.js +50 -0
  142. package/bundled-test-harness/assets/dashboard-agents-test-BN5maCgQ.js +334 -0
  143. package/bundled-test-harness/assets/dashboard-archive-test-BzwUte_Z.js +128 -0
  144. package/bundled-test-harness/assets/dashboard-delete-test-D2Gcp81V.js +163 -0
  145. package/bundled-test-harness/assets/dashboard-duplicate-offer-test-BgKNIr35.js +71 -0
  146. package/bundled-test-harness/assets/dashboard-duplicate-test-D7JEWylc.js +222 -0
  147. package/bundled-test-harness/assets/dashboard-get-started-test-DOGPzGoA.js +374 -0
  148. package/bundled-test-harness/assets/dashboard-ir2bakJS.js +142 -0
  149. package/bundled-test-harness/assets/dashboard-pinned-cards-test-Bn_P9xJU.js +220 -0
  150. package/bundled-test-harness/assets/dashboard-publish-test-64sGQ0nG.js +70 -0
  151. package/bundled-test-harness/assets/dashboard-reindex-test-DJjYq1ct.js +115 -0
  152. package/bundled-test-harness/assets/dashboard-section-rail-test-ZkAhWu5V.js +169 -0
  153. package/bundled-test-harness/assets/dashboard-state-test-BbkpPB5L.js +162 -0
  154. package/bundled-test-harness/assets/dashboard-test-CBLdPrSt.js +545 -0
  155. package/bundled-test-harness/assets/dashboard-unreachable-notice-test-DFT3R1Zx.js +62 -0
  156. package/bundled-test-harness/assets/dashboard-workspace-test-DqBdCFo2.js +537 -0
  157. package/bundled-test-harness/assets/dashboard-workspaces-section-test-CH1HDfxR.js +410 -0
  158. package/bundled-test-harness/assets/data-file-def-preview-test-CNsZwQEJ.js +155 -0
  159. package/bundled-test-harness/assets/date-time-fields-test-CEFaZTnF.js +359 -0
  160. package/bundled-test-harness/assets/debug-message-test-0hv0RwE_.js +117 -0
  161. package/bundled-test-harness/assets/declared-captures-test-C-0yPRU7.js +879 -0
  162. package/bundled-test-harness/assets/delete-workspace-test-CZOwGy78.js +102 -0
  163. package/bundled-test-harness/assets/diffing-test-BEKI905O.js +210 -0
  164. package/bundled-test-harness/assets/download-file-to-realm-test-C1kAGDll.js +119 -0
  165. package/bundled-test-harness/assets/editor-test-C9x5ZY6g.js +688 -0
  166. package/bundled-test-harness/assets/edits-D76-aanh.js +651 -0
  167. package/bundled-test-harness/assets/email-field-test-LGkrB_2B.js +75 -0
  168. package/bundled-test-harness/assets/enum-field-test-CPyV1J-m.js +935 -0
  169. package/bundled-test-harness/assets/error-display-test-bWuUtfIG.js +343 -0
  170. package/bundled-test-harness/assets/evaluate-module-test-CbS5h8t3.js +91 -0
  171. package/bundled-test-harness/assets/execute-atomic-operations-test-B4Kfco0k.js +113 -0
  172. package/bundled-test-harness/assets/externals-CDQm-Lm7.js +4393 -0
  173. package/bundled-test-harness/assets/fallback-banner-live-delete-test-DQSiTzvj.js +207 -0
  174. package/bundled-test-harness/assets/fallback-banner-test-CJFKLpOy.js +225 -0
  175. package/bundled-test-harness/assets/fallback-banner-test-DQkrFE4-.js +53 -0
  176. package/bundled-test-harness/assets/fallback-models-test-CiWfmxaB.js +161 -0
  177. package/bundled-test-harness/assets/fetch-card-json-test-DULUqUEu.js +61 -0
  178. package/bundled-test-harness/assets/field-configuration-test-BXZq28xa.js +551 -0
  179. package/bundled-test-harness/assets/field-markdown-domain-test-DdXCifs6.js +616 -0
  180. package/bundled-test-harness/assets/field-markdown-oversize-test-DouPPTHX.js +88 -0
  181. package/bundled-test-harness/assets/field-markdown-primitives-test-DSRGJeyl.js +365 -0
  182. package/bundled-test-harness/assets/field-markdown-specialized-test-DlTYLl_s.js +534 -0
  183. package/bundled-test-harness/assets/field-playground-test-NhS4VvoN.js +894 -0
  184. package/bundled-test-harness/assets/field-support-predicates-test-DWpyT1Qf.js +167 -0
  185. package/bundled-test-harness/assets/file-attachment-test-m72-VerW.js +796 -0
  186. package/bundled-test-harness/assets/file-chooser-panel-test-DuAqD9bn.js +153 -0
  187. package/bundled-test-harness/assets/file-chooser-test-CjaXXwpT.js +504 -0
  188. package/bundled-test-harness/assets/file-def-format-templates-test-BDs4OmHq.js +380 -0
  189. package/bundled-test-harness/assets/file-def-live-reload-test-BqTdnq-W.js +124 -0
  190. package/bundled-test-harness/assets/file-def-menu-items-test-DqdINXsD.js +138 -0
  191. package/bundled-test-harness/assets/file-def-navigation-test-BPGr0SQy.js +109 -0
  192. package/bundled-test-harness/assets/file-def-serialization-test-CvjW-FlC.js +89 -0
  193. package/bundled-test-harness/assets/file-def-test-C-Yv_NjS.js +216 -0
  194. package/bundled-test-harness/assets/file-preview-live-reload-test-MzwGwasU.js +310 -0
  195. package/bundled-test-harness/assets/file-resource-primitives-test-D3GmfqNs.js +255 -0
  196. package/bundled-test-harness/assets/file-tree-from-index-test-CfldnUgm.js +96 -0
  197. package/bundled-test-harness/assets/file-tree-test--0ZCPRe9.js +851 -0
  198. package/bundled-test-harness/assets/file-view-model-test-BDIAeBV8.js +346 -0
  199. package/bundled-test-harness/assets/filedef-export-shape-test-B2tgU404.js +61 -0
  200. package/bundled-test-harness/assets/film-D1E-odYG.js +13 -0
  201. package/bundled-test-harness/assets/film-D25Y0ED6.js +2 -0
  202. package/bundled-test-harness/assets/film-D97U-ydx.js +4074 -0
  203. package/bundled-test-harness/assets/flac-audio-def-test-ByoXMoQ1.js +143 -0
  204. package/bundled-test-harness/assets/font-metadata-extractor-test-hawLTDTG.js +415 -0
  205. package/bundled-test-harness/assets/formatted-aibot-message-test-Bdx_-Ktn.js +109 -0
  206. package/bundled-test-harness/assets/formatted-user-message-test-CodbrU3t.js +43 -0
  207. package/bundled-test-harness/assets/freestyle-test-faQhSciz.js +17 -0
  208. package/bundled-test-harness/assets/full-reindex-realm-test-CE5RJTIC.js +101 -0
  209. package/bundled-test-harness/assets/garbage-collection-test-v-3sev77.js +403 -0
  210. package/bundled-test-harness/assets/general-test-DQuxDvXK.js +923 -0
  211. package/bundled-test-harness/assets/generate-example-cards-one-shot-test-CucWyrkH.js +65 -0
  212. package/bundled-test-harness/assets/generic-file-def-preview-test-_EDRsebi.js +71 -0
  213. package/bundled-test-harness/assets/get-available-realm-identifiers-test-CV023yek.js +47 -0
  214. package/bundled-test-harness/assets/get-catalog-realm-identifiers-test--DOu3DyV.js +47 -0
  215. package/bundled-test-harness/assets/get-default-writable-realm-test-Bic8jl6R.js +54 -0
  216. package/bundled-test-harness/assets/get-published-realms-test-DrA5YcFN.js +71 -0
  217. package/bundled-test-harness/assets/get-realm-of-resource-identifier-test-jfU6SIWn.js +54 -0
  218. package/bundled-test-harness/assets/get-relationship-membership-state-test-Ccy2Z7MN.js +1308 -0
  219. package/bundled-test-harness/assets/get-user-system-card-test-Bmq2lmWv.js +67 -0
  220. package/bundled-test-harness/assets/gif-image-def-test-N1mMQC-X.js +188 -0
  221. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-DzPKH76g.js +160 -0
  222. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-D9mlcQuN.js +74 -0
  223. package/bundled-test-harness/assets/gts-file-def-test-BL1jpQ9J.js +100 -0
  224. package/bundled-test-harness/assets/head-format-preview-test-BVCaPQqc.js +158 -0
  225. package/bundled-test-harness/assets/helpers-Ds68JxHe.js +5 -0
  226. package/bundled-test-harness/assets/host-mode-service-B4bisRdR.js +262 -0
  227. package/bundled-test-harness/assets/host-mode-test-BmkN2PCJ.js +831 -0
  228. package/bundled-test-harness/assets/host-submode-test-C6SxQ796.js +1392 -0
  229. package/bundled-test-harness/assets/html-component-test-CNQ9wF0Q.js +65 -0
  230. package/bundled-test-harness/assets/html-def-test-BcaCVVQq.js +160 -0
  231. package/bundled-test-harness/assets/html-meta-extractor-test-BU1hjkTp.js +60 -0
  232. package/bundled-test-harness/assets/hydratable-card-test-CX6MWiti.js +426 -0
  233. package/bundled-test-harness/assets/icon-button-C1zH38Nc.js +67 -0
  234. package/bundled-test-harness/assets/image-metadata-extractor-test-CakSBPZ_.js +1109 -0
  235. package/bundled-test-harness/assets/index-changes-test-D8RtgfyG.js +367 -0
  236. package/bundled-test-harness/assets/index-query-engine-test-BOvxkx07.js +2593 -0
  237. package/bundled-test-harness/assets/index-writer-test-B_bR2fjw.js +3040 -0
  238. package/bundled-test-harness/assets/inspector-test-BwPXJj1S.js +2058 -0
  239. package/bundled-test-harness/assets/instance-filter-matcher-test-COAlkUed.js +788 -0
  240. package/bundled-test-harness/assets/instantiate-card-test-BVQhZjpq.js +164 -0
  241. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DzQLG41H.js +475 -0
  242. package/bundled-test-harness/assets/interact-submode-setup-C5bKXq73.js +566 -0
  243. package/bundled-test-harness/assets/invalidate-realm-identifiers-test-Cd3dpjhB.js +99 -0
  244. package/bundled-test-harness/assets/invite-user-to-room-test-Brabz1tt.js +142 -0
  245. package/bundled-test-harness/assets/invoke-card-operation-test-C1Q1FUf4.js +333 -0
  246. package/bundled-test-harness/assets/isolated-render-test-BLJfS7BU.js +51 -0
  247. package/bundled-test-harness/assets/job-scoped-doc-cache-test-Bgv5woaB.js +181 -0
  248. package/bundled-test-harness/assets/job-scoped-instance-residency-test-C_bB6KpR.js +103 -0
  249. package/bundled-test-harness/assets/jpg-image-def-test-gdLIKocD.js +697 -0
  250. package/bundled-test-harness/assets/json-file-def-test-CPYMRBY-.js +95 -0
  251. package/bundled-test-harness/assets/key-notices-badge-test-DemslfLw.js +155 -0
  252. package/bundled-test-harness/assets/key-readiness-test-5tq5JycL.js +190 -0
  253. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-BbhDZ2PH.js +398 -0
  254. package/bundled-test-harness/assets/linksto-error-sentinel-test-C2t7fFPi.js +238 -0
  255. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test--U_UvUty.js +354 -0
  256. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-Dj3Xy0ZF.js +303 -0
  257. package/bundled-test-harness/assets/linksto-sentinel-reload-test-D0dK4Jjs.js +197 -0
  258. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test---IYiXok.js +260 -0
  259. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-CT04MhES.js +196 -0
  260. package/bundled-test-harness/assets/lint-and-fix-test-aadgx7rX.js +51 -0
  261. package/bundled-test-harness/assets/live-test-BGij_vuc.js +100 -0
  262. package/bundled-test-harness/assets/live-test-CppvValf.js +2 -0
  263. package/bundled-test-harness/assets/load-default-skills-test-Cp2m_ebp.js +74 -0
  264. package/bundled-test-harness/assets/loader-parallel-prefetch-test-vU_26Jqu.js +257 -0
  265. package/bundled-test-harness/assets/loader-test-CTaw8K_B.js +482 -0
  266. package/bundled-test-harness/assets/loading-test-DGGt4qZZ.js +63 -0
  267. package/bundled-test-harness/assets/m4a-audio-def-test-DAiReOXH.js +190 -0
  268. package/bundled-test-harness/assets/main-DUKPWRts.js +5 -0
  269. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-CIXq9FqR.js +470 -0
  270. package/bundled-test-harness/assets/markdown-embed-chooser-test-zFGh9WfP.js +334 -0
  271. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-Byn_WFwY.js +447 -0
  272. package/bundled-test-harness/assets/markdown-embed-preview-test-Y3iFMttg.js +368 -0
  273. package/bundled-test-harness/assets/markdown-fallback-test-Br1TPkLZ.js +316 -0
  274. package/bundled-test-harness/assets/markdown-file-def-test-Crm2MAnq.js +380 -0
  275. package/bundled-test-harness/assets/markdown-helpers-test-CZ9Vvywc.js +188 -0
  276. package/bundled-test-harness/assets/markdown-highlighting-test-CFMkoVDl.js +244 -0
  277. package/bundled-test-harness/assets/markdown-preview-Df5fp1SY.js +72 -0
  278. package/bundled-test-harness/assets/markdown-preview-test-DDaPzsVs.js +238 -0
  279. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-aH6HQly1.js +146 -0
  280. package/bundled-test-harness/assets/markdown-skill-search-test-CiNLQs-5.js +80 -0
  281. package/bundled-test-harness/assets/matrix-service-account-switch-sessions-test-DaA8w1Jj.js +63 -0
  282. package/bundled-test-harness/assets/matrix-service-boot-assembly-test-21GIlf55.js +300 -0
  283. package/bundled-test-harness/assets/matrix-service-personal-realm-test-jn9DUENm.js +125 -0
  284. package/bundled-test-harness/assets/matrix-service-realm-servers-test-eNZVJakl.js +55 -0
  285. package/bundled-test-harness/assets/matrix-service-realms-list-updated-test-Cabm8_dY.js +132 -0
  286. package/bundled-test-harness/assets/matrix-service-relogin-test-C77EFgjc.js +59 -0
  287. package/bundled-test-harness/assets/matrix-service-sliding-sync-test-BgM0fPiO.js +35 -0
  288. package/bundled-test-harness/assets/menu-Cl50TSFe.js +3561 -0
  289. package/bundled-test-harness/assets/message-service-subscription-test-CfEqH2jP.js +110 -0
  290. package/bundled-test-harness/assets/message-service-test-DsTzH1In.js +144 -0
  291. package/bundled-test-harness/assets/message-tool-test-C5xVfTtj.js +33 -0
  292. package/bundled-test-harness/assets/midi-audio-def-test-goLRCNCZ.js +182 -0
  293. package/bundled-test-harness/assets/migrate-skill-test-yPCbVfxG.js +161 -0
  294. package/bundled-test-harness/assets/mini-YXjrY_tH.js +1404 -0
  295. package/bundled-test-harness/assets/mini-card-chooser-test-DrllikHB.js +272 -0
  296. package/bundled-test-harness/assets/mini-file-chooser-test-BfqayhmI.js +201 -0
  297. package/bundled-test-harness/assets/mock-matrix-C7BrPS6S.js +2 -0
  298. package/bundled-test-harness/assets/mock-matrix-FjsXmU7-.js +15107 -0
  299. package/bundled-test-harness/assets/modal-BgaZavcs.js +322 -0
  300. package/bundled-test-harness/assets/model-cost-tier-test-CZlu1zww.js +174 -0
  301. package/bundled-test-harness/assets/model-file-extract-test-CjEBupY5.js +206 -0
  302. package/bundled-test-harness/assets/module-transpile-cache-test-XW6DDsmz.js +67 -0
  303. package/bundled-test-harness/assets/monaco-test-DkoRuFiQ.js +100 -0
  304. package/bundled-test-harness/assets/mp3-audio-def-test-v369NNsQ.js +133 -0
  305. package/bundled-test-harness/assets/multiple-stacks-test-CJpYPWdM.js +208 -0
  306. package/bundled-test-harness/assets/nested-query-field-render-test-CfDrBcUN.js +249 -0
  307. package/bundled-test-harness/assets/no-stacks-test-MmsJeLpz.js +48 -0
  308. package/bundled-test-harness/assets/number-field-test-A7B2r0M5.js +184 -0
  309. package/bundled-test-harness/assets/office-file-def-test-BNRvFmCB.js +263 -0
  310. package/bundled-test-harness/assets/office-metadata-extractor-test-zlDoEIEp.js +218 -0
  311. package/bundled-test-harness/assets/office-poster-capture-test-DdFEaOxR.js +203 -0
  312. package/bundled-test-harness/assets/ogg-audio-def-test-kk91BzQY.js +196 -0
  313. package/bundled-test-harness/assets/open-create-listing-modal-test-D1Dl1pov.js +131 -0
  314. package/bundled-test-harness/assets/open-image-in-new-tab-test-DyCmdMyO.js +52 -0
  315. package/bundled-test-harness/assets/open-secure-window-test-dz1vPudF.js +253 -0
  316. package/bundled-test-harness/assets/open-workspace-test-BvTcskzP.js +46 -0
  317. package/bundled-test-harness/assets/operation-lowering-test-CKkamOQt.js +2957 -0
  318. package/bundled-test-harness/assets/operations-invocation-test-BMj42rQe.js +523 -0
  319. package/bundled-test-harness/assets/operations-optimistic-test-KJLyzT8v.js +203 -0
  320. package/bundled-test-harness/assets/operations-query-test-J3HcnaoK.js +459 -0
  321. package/bundled-test-harness/assets/operations-store-reconciliation-test-CkbGBMBQ.js +406 -0
  322. package/bundled-test-harness/assets/operations-test-C7zXXpRW.js +2518 -0
  323. package/bundled-test-harness/assets/operator-mode-acceptance-test-BPolI_RD.js +1195 -0
  324. package/bundled-test-harness/assets/operator-mode-card-chooser-test-CQ1v8med.js +1036 -0
  325. package/bundled-test-harness/assets/operator-mode-links-test-BMHEauS3.js +797 -0
  326. package/bundled-test-harness/assets/operator-mode-test-blL_JVF8.js +696 -0
  327. package/bundled-test-harness/assets/operator-mode-ui-test-BG6I7-Hc.js +1045 -0
  328. package/bundled-test-harness/assets/overlay-D2rQi8lJ.js +427 -0
  329. package/bundled-test-harness/assets/overlay-menu-items-test-D-zmRQQ0.js +331 -0
  330. package/bundled-test-harness/assets/overlays-COinwHCP.js +2 -0
  331. package/bundled-test-harness/assets/overlays-detached-element-test-C73nMXes.js +56 -0
  332. package/bundled-test-harness/assets/overlays-nTqcu69K.js +75 -0
  333. package/bundled-test-harness/assets/panel-D9SEMehG.js +15124 -0
  334. package/bundled-test-harness/assets/past-sessions-test-De9N4wVX.js +321 -0
  335. package/bundled-test-harness/assets/patch-fields-test-Bp2IE0Jw.js +1014 -0
  336. package/bundled-test-harness/assets/patch-instance-test-DssuRGKP.js +348 -0
  337. package/bundled-test-harness/assets/pdf-file-def-test-Barj9ffD.js +111 -0
  338. package/bundled-test-harness/assets/pdf-metadata-extractor-test-B7KnXcIm.js +130 -0
  339. package/bundled-test-harness/assets/permission-checking-realm-test-OBzvhDB_.js +306 -0
  340. package/bundled-test-harness/assets/persist-module-inspector-view-test-BIdbkdPr.js +60 -0
  341. package/bundled-test-harness/assets/persist-scroll-position-test-Bhb7wJiy.js +254 -0
  342. package/bundled-test-harness/assets/phone-number-field-test-C2yuCrXY.js +73 -0
  343. package/bundled-test-harness/assets/pill-menu-test-BIp91YXi.js +60 -0
  344. package/bundled-test-harness/assets/plate-DAr_pvwC.js +41 -0
  345. package/bundled-test-harness/assets/plate-DeoQd99m.js +2 -0
  346. package/bundled-test-harness/assets/player-BvXGBItd.js +2 -0
  347. package/bundled-test-harness/assets/player-CAVQUyKk.js +82 -0
  348. package/bundled-test-harness/assets/playground-B02e8uqB.js +58 -0
  349. package/bundled-test-harness/assets/plural-field-components-test-C1acuN-A.js +198 -0
  350. package/bundled-test-harness/assets/png-image-def-test-B9QeVo1f.js +266 -0
  351. package/bundled-test-harness/assets/policy-audit-confirmation-test-CeVquvc_.js +155 -0
  352. package/bundled-test-harness/assets/policy-scoped-search-test-SFPiIqR3.js +339 -0
  353. package/bundled-test-harness/assets/prerender-file-extract-test-HSJKAHyO.js +346 -0
  354. package/bundled-test-harness/assets/prerender-html-test-BTAcFCme.js +670 -0
  355. package/bundled-test-harness/assets/prerender-meta-test-Csyz2b21.js +614 -0
  356. package/bundled-test-harness/assets/prerender-module-test-DpTYAbmI.js +409 -0
  357. package/bundled-test-harness/assets/prerender-persistence-block-test-BhIt-7kK.js +124 -0
  358. package/bundled-test-harness/assets/prerender-pre-model-error-test-DxKPQKqx.js +61 -0
  359. package/bundled-test-harness/assets/prerender-serialize-cycle-test-C8V5YWQO.js +134 -0
  360. package/bundled-test-harness/assets/prerendered-html-read-test-Cq7JVGwg.js +191 -0
  361. package/bundled-test-harness/assets/pretui-components-test-Ducr9fLT.css +743 -0
  362. package/bundled-test-harness/assets/pretui-components-test-Hs0uyIUQ.js +992 -0
  363. package/bundled-test-harness/assets/pretui-primitives-CRs8NRm0.js +69 -0
  364. package/bundled-test-harness/assets/preview-format-test-cCqLrfdY.js +103 -0
  365. package/bundled-test-harness/assets/preview-test-BMqJSoR1.js +474 -0
  366. package/bundled-test-harness/assets/process-card-test-578tfDvr.js +94 -0
  367. package/bundled-test-harness/assets/profile-settings-modal-CVnNl7Yu.js +990 -0
  368. package/bundled-test-harness/assets/publish-realm-COoeWexp.js +82 -0
  369. package/bundled-test-harness/assets/publish-realm-test-a5nkx0Ov.js +210 -0
  370. package/bundled-test-harness/assets/query-field-barrier-test-qX3xVPfk.js +113 -0
  371. package/bundled-test-harness/assets/query-field-error-sentinel-test-V6JDPFLX.js +201 -0
  372. package/bundled-test-harness/assets/query-field-membership-status-test-CK7eDf-K.js +323 -0
  373. package/bundled-test-harness/assets/query-field-page-optin-test-B5YBHUvU.js +126 -0
  374. package/bundled-test-harness/assets/query-field-schema-test-D4SjOGlK.js +231 -0
  375. package/bundled-test-harness/assets/query-field-search-throttle-test-BVkm1-D8.js +154 -0
  376. package/bundled-test-harness/assets/query-field-stale-prerender-test-9g7hcD91.js +152 -0
  377. package/bundled-test-harness/assets/query-fields-test-CQYqhzpN.js +535 -0
  378. package/bundled-test-harness/assets/quick-look-test-icQwb1NJ.js +139 -0
  379. package/bundled-test-harness/assets/read-card-for-ai-assistant-test-D0mJorwH.js +91 -0
  380. package/bundled-test-harness/assets/read-file-for-ai-assistant-test-B_F_2GEB.js +45 -0
  381. package/bundled-test-harness/assets/read-source-test-BgJV4B4F.js +67 -0
  382. package/bundled-test-harness/assets/read-text-file-test-DaeLzg4u.js +124 -0
  383. package/bundled-test-harness/assets/realm-C_a9su1j.js +2858 -0
  384. package/bundled-test-harness/assets/realm-api-keys-D5USFOoS.js +2 -0
  385. package/bundled-test-harness/assets/realm-api-keys-m_VOcixC.js +578 -0
  386. package/bundled-test-harness/assets/realm-api-keys-test-C_uZnTmq.js +588 -0
  387. package/bundled-test-harness/assets/realm-api-keys-test-gtJ8XZCE.js +109 -0
  388. package/bundled-test-harness/assets/realm-config-m5eccPW8.js +833 -0
  389. package/bundled-test-harness/assets/realm-config-policy-standing-test-CXJ4ZMde.js +290 -0
  390. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-DoEunShH.js +274 -0
  391. package/bundled-test-harness/assets/realm-config-settings-test-BYi9i4O6.js +187 -0
  392. package/bundled-test-harness/assets/realm-field-test-B_PUoqnk.js +100 -0
  393. package/bundled-test-harness/assets/realm-indexing-test-8iLjeV_e.js +4380 -0
  394. package/bundled-test-harness/assets/realm-policy-fitted-test-Bptvra0U.js +206 -0
  395. package/bundled-test-harness/assets/realm-policy-test-DwG0qqXE.js +1141 -0
  396. package/bundled-test-harness/assets/realm-querying-test-Dvw26A6Q.js +1067 -0
  397. package/bundled-test-harness/assets/realm-server-form-agnostic-test-DrXQH0UP.js +96 -0
  398. package/bundled-test-harness/assets/realm-server-subscriber-test-Dkj23vQK.js +46 -0
  399. package/bundled-test-harness/assets/realm-service-info-test-CdRlDhj-.js +67 -0
  400. package/bundled-test-harness/assets/realm-test-DGYN48Qx.js +2364 -0
  401. package/bundled-test-harness/assets/realm-token-refresh-test-CEWATL9h.js +153 -0
  402. package/bundled-test-harness/assets/realm-url-tooltip-test-8ZjTNPuy.js +78 -0
  403. package/bundled-test-harness/assets/reasoning-test-WUx-4agu.js +221 -0
  404. package/bundled-test-harness/assets/recent-files-test-Dc6L6Dm4.js +450 -0
  405. package/bundled-test-harness/assets/reindex-realm-test-CFRSt39u.js +117 -0
  406. package/bundled-test-harness/assets/relationship-loading-state-test-FKbtOFUr.js +290 -0
  407. package/bundled-test-harness/assets/remix-card-test-CKGC_Sgq.js +58 -0
  408. package/bundled-test-harness/assets/rendered-markdown-B_jWmDrK.js +292 -0
  409. package/bundled-test-harness/assets/rendered-markdown-test-sdWhU0NA.js +587 -0
  410. package/bundled-test-harness/assets/resident-instance-reuse-test-BjdhE6CM.js +82 -0
  411. package/bundled-test-harness/assets/result-tile-o6dtjgX4.js +144 -0
  412. package/bundled-test-harness/assets/rich-markdown-field-test-VXr6l20h.js +1647 -0
  413. package/bundled-test-harness/assets/room-message-test-BYNhZ39n.js +484 -0
  414. package/bundled-test-harness/assets/run-FzaqmBEl.js +3959 -0
  415. package/bundled-test-harness/assets/run-realm-code-DsBUf1si.js +2964 -0
  416. package/bundled-test-harness/assets/run-realm-code-test-cS0DzaKo.js +3844 -0
  417. package/bundled-test-harness/assets/sanitize-module-list-test-CvuOOiUY.js +85 -0
  418. package/bundled-test-harness/assets/save-card-skip-index-wait-test-fpJ1eq32.js +89 -0
  419. package/bundled-test-harness/assets/schema-editor-test-NkKjCgyf.js +785 -0
  420. package/bundled-test-harness/assets/schema-generation-test-Dmg3lWl7.js +28 -0
  421. package/bundled-test-harness/assets/scrolling-test-Dd4gv_fj.js +412 -0
  422. package/bundled-test-harness/assets/search-adorn-test-CZebk7_y.js +136 -0
  423. package/bundled-test-harness/assets/search-and-choose-test-Bd4NZUup.js +154 -0
  424. package/bundled-test-harness/assets/search-correlation-id-test-DXKlEO55.js +139 -0
  425. package/bundled-test-harness/assets/search-entries-result-test-QQawA8Fm.js +234 -0
  426. package/bundled-test-harness/assets/search-entries-test-3DlqGPQq.js +1486 -0
  427. package/bundled-test-harness/assets/search-entries-tool-test-D1TvDE9D.js +504 -0
  428. package/bundled-test-harness/assets/search-google-images-test-DqsoQGr1.js +166 -0
  429. package/bundled-test-harness/assets/search-results-DGrNaPxh.js +266 -0
  430. package/bundled-test-harness/assets/search-results-test-CqVHYNRt.js +578 -0
  431. package/bundled-test-harness/assets/search-selection-menu-test-D6bIjKiH.js +108 -0
  432. package/bundled-test-harness/assets/search-sheet-files-test-Bf37TQXo.js +126 -0
  433. package/bundled-test-harness/assets/search-sheet-persistence-test-CV4_XdxR.js +131 -0
  434. package/bundled-test-harness/assets/search-test-Dlb-wg3a.js +2249 -0
  435. package/bundled-test-harness/assets/search-tool-test-BJLgVMoL.js +156 -0
  436. package/bundled-test-harness/assets/searchable-option-test-eJaIPH_L.js +322 -0
  437. package/bundled-test-harness/assets/searchable-search-doc-test-yH9fLGNS.js +1271 -0
  438. package/bundled-test-harness/assets/section-rail-CNFCebtT.js +113 -0
  439. package/bundled-test-harness/assets/section-rail-test-KNJAWWl6.js +256 -0
  440. package/bundled-test-harness/assets/secure-sign-in-Dyljp0Th.js +174 -0
  441. package/bundled-test-harness/assets/secure-sign-in-test-QnqNuTP3.js +373 -0
  442. package/bundled-test-harness/assets/segmented-control-DxJdoJ4Z.js +173 -0
  443. package/bundled-test-harness/assets/select-BiQTg2ts.js +175 -0
  444. package/bundled-test-harness/assets/send-ai-assistant-message-test-CAn7M2dZ.js +52 -0
  445. package/bundled-test-harness/assets/send-bot-trigger-event-test-qBu5E_jy.js +56 -0
  446. package/bundled-test-harness/assets/send-request-via-proxy-test-CLuwLBq_.js +380 -0
  447. package/bundled-test-harness/assets/sending-test-Dt9Dh2wW.js +659 -0
  448. package/bundled-test-harness/assets/serialization-rri-form-audit-test-hMJukiKt.js +136 -0
  449. package/bundled-test-harness/assets/serialization-test-W5e3wKbz.js +8758 -0
  450. package/bundled-test-harness/assets/set-user-system-card-test-CjgWLkNV.js +59 -0
  451. package/bundled-test-harness/assets/setup-CssMNvui.js +772 -0
  452. package/bundled-test-harness/assets/setup-D8YXvK-p.js +2 -0
  453. package/bundled-test-harness/assets/shared-link-target-reuse-test-D42UO8DC.js +207 -0
  454. package/bundled-test-harness/assets/show-card-test-CHEaS514.js +365 -0
  455. package/bundled-test-harness/assets/signed-capture-link-test-BgEu0F-S.js +132 -0
  456. package/bundled-test-harness/assets/single-stack-test-DYcu_v7Z.js +652 -0
  457. package/bundled-test-harness/assets/skills-test-BP8QNesE.js +648 -0
  458. package/bundled-test-harness/assets/skip-boot-index-guard-test-BzRIncDN.js +46 -0
  459. package/bundled-test-harness/assets/spec-test-BYvFR6Xb.js +1077 -0
  460. package/bundled-test-harness/assets/spinner-Bx9x55NA.js +49 -0
  461. package/bundled-test-harness/assets/src-LqENIikj.js +5 -0
  462. package/bundled-test-harness/assets/src-a4d10Hra.js +216 -0
  463. package/bundled-test-harness/assets/stick-to-bottom-resize-test-BBLiCR3X.js +56 -0
  464. package/bundled-test-harness/assets/store-add-test-D_9IHQjZ.js +50 -0
  465. package/bundled-test-harness/assets/store-module-rebuild-test-BRGZoLRV.js +454 -0
  466. package/bundled-test-harness/assets/store-search-test-3G8JHuj2.js +175 -0
  467. package/bundled-test-harness/assets/store-test-Dd4WQp7L.js +3672 -0
  468. package/bundled-test-harness/assets/structured-theme-test-11TNsgUW.js +377 -0
  469. package/bundled-test-harness/assets/summarize-session-test-CwzD_ZbD.js +172 -0
  470. package/bundled-test-harness/assets/svg-image-def-test-zV6aMK9q.js +167 -0
  471. package/bundled-test-harness/assets/switch-submode-test-DQU2cP5_.js +168 -0
  472. package/bundled-test-harness/assets/sync-openrouter-models-test-xrXVaC2H.js +97 -0
  473. package/bundled-test-harness/assets/test-support-QTh6wGxu.js +3 -0
  474. package/bundled-test-harness/assets/test-support-Tr-PYFgc.js +99 -0
  475. package/bundled-test-harness/assets/tests-zLlwPutr.js +3598 -0
  476. package/bundled-test-harness/assets/text-file-def-test-Cyq78UFY.js +94 -0
  477. package/bundled-test-harness/assets/text-input-validator-test-C1uDVZU7.js +156 -0
  478. package/bundled-test-harness/assets/text-suggestion-test-C4XAqWqY.js +340 -0
  479. package/bundled-test-harness/assets/theme-card-test-dVNz4tgU.js +621 -0
  480. package/bundled-test-harness/assets/theme-dashboard-nav-test-DYSn5pqo.js +196 -0
  481. package/bundled-test-harness/assets/theme-scheme-island-test-C1WpkfEP.js +264 -0
  482. package/bundled-test-harness/assets/theme-scoped-css-parity-test-BVluppsE.js +176 -0
  483. package/bundled-test-harness/assets/titles-0a1luoTq.js +52 -0
  484. package/bundled-test-harness/assets/titles-DKHNLVwC.js +2 -0
  485. package/bundled-test-harness/assets/to-device-streaming-test-3A6jI0_r.js +163 -0
  486. package/bundled-test-harness/assets/token-usage-test-33ovcqPk.js +160 -0
  487. package/bundled-test-harness/assets/tools-J_Knr_W6.js +774 -0
  488. package/bundled-test-harness/assets/tools-calling-test-CfqZX0Ed.js +200 -0
  489. package/bundled-test-harness/assets/tools-test-B4x58ZmI.js +1624 -0
  490. package/bundled-test-harness/assets/tools-test-DtUQp5ez.js +3204 -0
  491. package/bundled-test-harness/assets/tooltip-B0rEgyMW.css +66 -0
  492. package/bundled-test-harness/assets/tooltip-DvUMUgVX.js +195 -0
  493. package/bundled-test-harness/assets/transform-cards-test-CYQbZeD9.js +341 -0
  494. package/bundled-test-harness/assets/ts-file-def-preview-test-m39f8Zio.js +95 -0
  495. package/bundled-test-harness/assets/ts-file-def-test-xIcL5xWe.js +92 -0
  496. package/bundled-test-harness/assets/ttf-font-def-test-ClQ2SzFF.js +206 -0
  497. package/bundled-test-harness/assets/turn-settling-test-DqYk312r.js +160 -0
  498. package/bundled-test-harness/assets/turn-summary-Bmt7ZxTS.js +1039 -0
  499. package/bundled-test-harness/assets/unpublish-realm-test-0ToTJczx.js +102 -0
  500. package/bundled-test-harness/assets/update-room-skills-test-o_j8NOUV.js +240 -0
  501. package/bundled-test-harness/assets/use-ai-assistant-test-D7HFpxKJ.js +384 -0
  502. package/bundled-test-harness/assets/user-message-BAOt1hS3.js +262 -0
  503. package/bundled-test-harness/assets/validate-realm-test-e3xIbNLB.js +67 -0
  504. package/bundled-test-harness/assets/video-metadata-extractor-test-D8naLSlg.js +520 -0
  505. package/bundled-test-harness/assets/view-visually-test-BuhGau5E.js +335 -0
  506. package/bundled-test-harness/assets/virtual-network-reset-test-CgaFNGPi.js +96 -0
  507. package/bundled-test-harness/assets/wav-audio-def-test-CWG_UdCh.js +160 -0
  508. package/bundled-test-harness/assets/webp-image-def-test-sN4yw8Zu.js +226 -0
  509. package/bundled-test-harness/assets/workspace-0LfPqbYB.js +445 -0
  510. package/bundled-test-harness/assets/workspace-a11y-test-DQxYDRAP.js +197 -0
  511. package/bundled-test-harness/assets/workspace-actions-jGJSfl8M.js +588 -0
  512. package/bundled-test-harness/assets/workspace-behavior-test-BnF-bmBN.js +338 -0
  513. package/bundled-test-harness/assets/workspace-delete-multiple-test-D-rxPDuT.js +212 -0
  514. package/bundled-test-harness/assets/workspace-delete-summary-test-C2-Mve5R.js +63 -0
  515. package/bundled-test-harness/assets/workspace-hosting-test-BvDKdlOb.js +138 -0
  516. package/bundled-test-harness/assets/workspace-indexing-test-B34T3kqD.js +71 -0
  517. package/bundled-test-harness/assets/workspace-test-CJivgv-m.js +51 -0
  518. package/bundled-test-harness/assets/workspace-test-CuSRpPnQ.js +385 -0
  519. package/bundled-test-harness/assets/workspace-timestamp-labels-test-aWgjdbCp.js +68 -0
  520. package/bundled-test-harness/assets/workspace-unit-test-DHMUf2KT.js +122 -0
  521. package/bundled-test-harness/assets/write-binary-file-test-P-hVQuin.js +124 -0
  522. package/bundled-test-harness/assets/write-text-file-test-fXvJueDd.js +191 -0
  523. package/bundled-test-harness/assets/zip-archive-test-C2P5CUSR.js +285 -0
  524. package/bundled-test-harness/assets/zip-file-def-test-BfJZAmGt.js +164 -0
  525. package/bundled-test-harness/boxel-ui-checksum.txt +1 -1
  526. package/bundled-test-harness/index.html +47 -47
  527. package/bundled-test-harness/tests/index.html +49 -49
  528. package/bundled-types/boxel-ui/helpers/theme-scoped-css.ts +4 -0
  529. package/bundled-types/choreo/choreo.gts +13 -1
  530. package/bundled-types/choreo/run.ts +19 -0
  531. package/bundled-types/host-app/components/operator-mode/dashboard/get-started.gts +152 -7
  532. package/bundled-types/host-app/components/operator-mode/dashboard/index.gts +2 -0
  533. package/bundled-types/host-app/components/operator-mode/dashboard/workspace.gts +5 -3
  534. package/bundled-types/host-app/components/operator-mode/dashboard-modals/workspace-modals.gts +5 -22
  535. package/bundled-types/host-app/components/operator-mode/host-submode/publishing-realm-popover.gts +1 -1
  536. package/bundled-types/host-app/components/operator-mode/host-submode.gts +111 -37
  537. package/bundled-types/host-app/components/operator-mode/publish-realm-modal.gts +1 -0
  538. package/bundled-types/host-app/lib/modal-focus-trap.ts +33 -0
  539. package/bundled-types/host-app/lib/workspace-actions.ts +21 -0
  540. package/bundled-types/host-app/services/host-mode-service.ts +39 -0
  541. package/bundled-types/host-app/services/realm.ts +14 -0
  542. package/bundled-types/host-tests/helpers/dashboard.ts +67 -0
  543. package/package.json +1 -1
  544. package/bundled-test-harness/assets/account-switch-failed-test-FytUFiPO.js +0 -45
  545. package/bundled-test-harness/assets/adapter-DvmPwSZv.js +0 -2
  546. package/bundled-test-harness/assets/add-field-to-card-definition-tool-test-DN525jiY.js +0 -112
  547. package/bundled-test-harness/assets/ai-assistant-create-workspace-test-q3tKqVJQ.js +0 -130
  548. package/bundled-test-harness/assets/ai-assistant-panel-relogin-test-DgeXcCyi.js +0 -46
  549. package/bundled-test-harness/assets/ai-assistant-test-lDIGPKFP.js +0 -2223
  550. package/bundled-test-harness/assets/ai-function-generation-test-D5GbLyvL.js +0 -1176
  551. package/bundled-test-harness/assets/ai-module-creation-test-I3-j2beD.js +0 -151
  552. package/bundled-test-harness/assets/aibot-message-Dmsjifs6.js +0 -1312
  553. package/bundled-test-harness/assets/app-BS9_-DhN.js +0 -14146
  554. package/bundled-test-harness/assets/apply-markdown-edit-test-4zlwt0Db.js +0 -230
  555. package/bundled-test-harness/assets/ask-user-picker-Dr-0qpNr.js +0 -370
  556. package/bundled-test-harness/assets/ask-user-picker-test-633AFdmS.js +0 -39
  557. package/bundled-test-harness/assets/assistant-transcript-test-BgRnLvMg.js +0 -57
  558. package/bundled-test-harness/assets/audio-metadata-extractor-test-4xsQqL-0.js +0 -1176
  559. package/bundled-test-harness/assets/authed-fetch-test-663mT5_N.js +0 -73
  560. package/bundled-test-harness/assets/avif-image-def-test-h01BPIJy.js +0 -187
  561. package/bundled-test-harness/assets/basic-test-DiD6T-8Q.js +0 -139
  562. package/bundled-test-harness/assets/binary-upload-dedupe-test-CkjMPO_e.js +0 -308
  563. package/bundled-test-harness/assets/bot-registration-test-CFZHpwdj.js +0 -97
  564. package/bundled-test-harness/assets/box-test-C3pSy5ED.js +0 -50
  565. package/bundled-test-harness/assets/brand-guide-attachments-test-EoC_u7Vc.js +0 -84
  566. package/bundled-test-harness/assets/brand-guide-custom-css-test-Dn3fvblr.js +0 -196
  567. package/bundled-test-harness/assets/brand-guide-edit-test-NeiT3MyK.js +0 -140
  568. package/bundled-test-harness/assets/brand-logo-mark-field-test-C2A1EnBB.js +0 -86
  569. package/bundled-test-harness/assets/broken-link-template-test-CWn6V5zZ.js +0 -192
  570. package/bundled-test-harness/assets/bundled-base-modules-test-D7mLzpsw.js +0 -54
  571. package/bundled-test-harness/assets/bundled-base-oracle-test-I7xCId_k.js +0 -37
  572. package/bundled-test-harness/assets/buried-stack-item-scroll-test-DFBev0h-.js +0 -236
  573. package/bundled-test-harness/assets/button-BeSuhveJ.js +0 -207
  574. package/bundled-test-harness/assets/bxl-cyclic-graph-test-DPykwvvx.js +0 -47
  575. package/bundled-test-harness/assets/bxl-expression-test-LBWJiFb9.js +0 -250
  576. package/bundled-test-harness/assets/bxl-indexing-test-BuZmLk7y.js +0 -212
  577. package/bundled-test-harness/assets/bxl-platform-module-test-BNIvlkCM.js +0 -71
  578. package/bundled-test-harness/assets/can-invoke-test-t-bFIIeX.js +0 -455
  579. package/bundled-test-harness/assets/can-read-realm-test-2Q_MzRT9.js +0 -56
  580. package/bundled-test-harness/assets/cancel-indexing-job-test-QeYxEukn.js +0 -69
  581. package/bundled-test-harness/assets/capture-test-CJmJG8YR.js +0 -360
  582. package/bundled-test-harness/assets/card-api-test-B43I510H.js +0 -198
  583. package/bundled-test-harness/assets/card-basics-test-CBClzP2y.js +0 -5364
  584. package/bundled-test-harness/assets/card-chooser-paging-test-HEVzf6pR.js +0 -235
  585. package/bundled-test-harness/assets/card-chooser-test-GfjBRPFI.js +0 -393
  586. package/bundled-test-harness/assets/card-context-search-results-CoSr4EdS.js +0 -30
  587. package/bundled-test-harness/assets/card-context-search-results-test-BLMlZu9t.js +0 -184
  588. package/bundled-test-harness/assets/card-def-field-def-relationships-test-DEBOzKan.js +0 -562
  589. package/bundled-test-harness/assets/card-def-menu-items-test-88_h8o0D.js +0 -228
  590. package/bundled-test-harness/assets/card-delete-test-DKom1phy.js +0 -466
  591. package/bundled-test-harness/assets/card-error-awaiting-index-test-DEwgFZMP.js +0 -53
  592. package/bundled-test-harness/assets/card-error-r6_cXst9.js +0 -72
  593. package/bundled-test-harness/assets/card-info-thumbnail-picker-test-B7LiY15e.js +0 -219
  594. package/bundled-test-harness/assets/card-playground-test-CgyIJHui.js +0 -1491
  595. package/bundled-test-harness/assets/card-prerender-rPfzpIOU.js +0 -12939
  596. package/bundled-test-harness/assets/card-thunk-error-test-L0pvg4Ce.js +0 -48
  597. package/bundled-test-harness/assets/card-type-service-test-B2dhqxSD.js +0 -161
  598. package/bundled-test-harness/assets/check-correctness-test-DgqaLlCW.js +0 -1093
  599. package/bundled-test-harness/assets/check-domain-availability-test-B0hJHY5l.js +0 -98
  600. package/bundled-test-harness/assets/chip-D01NW3WH.js +0 -44
  601. package/bundled-test-harness/assets/choreo-D2Jl79RU.js +0 -1019
  602. package/bundled-test-harness/assets/choreo-_E8SOEe-.js +0 -2
  603. package/bundled-test-harness/assets/choreo-feature-reel-test-WLjsZDmS.js +0 -155
  604. package/bundled-test-harness/assets/choreo-gallery-build-order-test-6jnS8PsS.js +0 -436
  605. package/bundled-test-harness/assets/choreo-gallery-compositor-test-CbUZsVB6.js +0 -399
  606. package/bundled-test-harness/assets/choreo-gallery-cover-test-CbvAStgk.js +0 -214
  607. package/bundled-test-harness/assets/choreo-gallery-crossing-stage-test-tdjvUSa6.js +0 -133
  608. package/bundled-test-harness/assets/choreo-gallery-demos-alive-test-CsnM3hQK.js +0 -42
  609. package/bundled-test-harness/assets/choreo-gallery-drift-test-DG2LQTa7.js +0 -620
  610. package/bundled-test-harness/assets/choreo-gallery-escort-test-mn3-qXP1.js +0 -187
  611. package/bundled-test-harness/assets/choreo-gallery-films-test-BuktaC0D.js +0 -140
  612. package/bundled-test-harness/assets/choreo-gallery-filter-test-Dd-zpps0.js +0 -46
  613. package/bundled-test-harness/assets/choreo-gallery-fold-test-CWc1ijGc.js +0 -180
  614. package/bundled-test-harness/assets/choreo-gallery-guide-pages-test-tk2QmYPU.js +0 -114
  615. package/bundled-test-harness/assets/choreo-gallery-guides-test-DVbf1zM4.js +0 -321
  616. package/bundled-test-harness/assets/choreo-gallery-hang-test-B7EFp2dx.js +0 -426
  617. package/bundled-test-harness/assets/choreo-gallery-highlight-test-BFgbdesP.js +0 -60
  618. package/bundled-test-harness/assets/choreo-gallery-inline-edit-test-DJb8FC5R.js +0 -370
  619. package/bundled-test-harness/assets/choreo-gallery-interruption-test-DWyMXo5D.js +0 -176
  620. package/bundled-test-harness/assets/choreo-gallery-lone-stack-test-D3b8LsJ6.js +0 -104
  621. package/bundled-test-harness/assets/choreo-gallery-navigation-test-CjjU6Rvn.js +0 -193
  622. package/bundled-test-harness/assets/choreo-gallery-playhead-transport-test-Le_h3QWU.js +0 -111
  623. package/bundled-test-harness/assets/choreo-gallery-poplayout-subtree-test-Cp-DlWj4.js +0 -127
  624. package/bundled-test-harness/assets/choreo-gallery-presence-modes-test-DayS4GCJ.js +0 -100
  625. package/bundled-test-harness/assets/choreo-gallery-presentation-test-DeAfuFS7.js +0 -157
  626. package/bundled-test-harness/assets/choreo-gallery-reduced-motion-test-BgPWpggq.js +0 -145
  627. package/bundled-test-harness/assets/choreo-gallery-sheet-standalone-test-PzyoMNYv.js +0 -89
  628. package/bundled-test-harness/assets/choreo-gallery-sheet-test-CxaiNBkL.js +0 -48
  629. package/bundled-test-harness/assets/choreo-gallery-site-test-6xtSntS5.js +0 -237
  630. package/bundled-test-harness/assets/choreo-gallery-stage-E6Q5r-zU.js +0 -256
  631. package/bundled-test-harness/assets/choreo-gallery-stage-keyboard-test-C7aWMr9a.js +0 -102
  632. package/bundled-test-harness/assets/choreo-gallery-stages-test-CDWWgC61.js +0 -35
  633. package/bundled-test-harness/assets/choreo-gallery-subdivision-test-Bkp15XJv.js +0 -138
  634. package/bundled-test-harness/assets/choreo-gallery-table-plan-test-CcGRi_3O.js +0 -144
  635. package/bundled-test-harness/assets/choreo-gallery-theater-test-Qph5pLT_.js +0 -252
  636. package/bundled-test-harness/assets/choreo-gallery-tuning-test-C4DhFLVA.js +0 -95
  637. package/bundled-test-harness/assets/choreo-gallery-widget-room-test-LK493r1M.js +0 -88
  638. package/bundled-test-harness/assets/choreo-gallery-wires-test-B7SeUCc8.js +0 -148
  639. package/bundled-test-harness/assets/client-telemetry-test-DGmHzAFx.js +0 -340
  640. package/bundled-test-harness/assets/clip-BpYQPVz_.js +0 -2
  641. package/bundled-test-harness/assets/clip-CNaYbIwL.js +0 -92
  642. package/bundled-test-harness/assets/code-block-Cp2CJo5-.js +0 -502
  643. package/bundled-test-harness/assets/code-ref-test-C8JBHDb-.js +0 -163
  644. package/bundled-test-harness/assets/code-submode-availability-test-CzG1Tv6L.js +0 -198
  645. package/bundled-test-harness/assets/code-submode-test-BclVWjm5.js +0 -1839
  646. package/bundled-test-harness/assets/codeblocks-test-CmQlyxN7.js +0 -418
  647. package/bundled-test-harness/assets/codemirror-editor-test-B74H_yn8.js +0 -1512
  648. package/bundled-test-harness/assets/codemirror-embed-toolbar-test-Bz6VEysU.js +0 -366
  649. package/bundled-test-harness/assets/color-field-test-DMCPQKIP.js +0 -212
  650. package/bundled-test-harness/assets/compaction-test-saQCLBrQ.js +0 -150
  651. package/bundled-test-harness/assets/computed-test-C05HliJC.js +0 -1320
  652. package/bundled-test-harness/assets/container-Cqcwrd-m.js +0 -10857
  653. package/bundled-test-harness/assets/content-preview-components-test-DZPj4_CU.js +0 -462
  654. package/bundled-test-harness/assets/copy-and-edit-test-DiXTQNTF.js +0 -292
  655. package/bundled-test-harness/assets/copy-card-test-ys7GquUY.js +0 -218
  656. package/bundled-test-harness/assets/copy-file-to-realm-test-Gn0Wn4vT.js +0 -148
  657. package/bundled-test-harness/assets/copy-source-test-BTLrOmPm.js +0 -56
  658. package/bundled-test-harness/assets/create-file-test-BCeIW-Rt.js +0 -464
  659. package/bundled-test-harness/assets/create-file-test-DbHQ5JsS.js +0 -1086
  660. package/bundled-test-harness/assets/create-listing-modal-test-CeHc4ter.js +0 -273
  661. package/bundled-test-harness/assets/create-listing-pr-request-test-DXbJNfMh.js +0 -117
  662. package/bundled-test-harness/assets/create-spec-test-BDIZoyHT.js +0 -256
  663. package/bundled-test-harness/assets/create-submission-workflow-test-Bix5J-3A.js +0 -132
  664. package/bundled-test-harness/assets/create-workspace-test-BmNnLHwC.js +0 -104
  665. package/bundled-test-harness/assets/credential-fields-test-NK1F4QWn.js +0 -200
  666. package/bundled-test-harness/assets/csv-file-def-test-BSfs4TTP.js +0 -102
  667. package/bundled-test-harness/assets/dashboard-C4T7ffKY.js +0 -3576
  668. package/bundled-test-harness/assets/dashboard-CFeHuP5-.js +0 -81
  669. package/bundled-test-harness/assets/dashboard-DQlpW-ux.css +0 -2392
  670. package/bundled-test-harness/assets/dashboard-add-workspace-test--rr6objf.js +0 -50
  671. package/bundled-test-harness/assets/dashboard-agents-test-D1y8H4xH.js +0 -334
  672. package/bundled-test-harness/assets/dashboard-archive-test-bN4EQaXv.js +0 -128
  673. package/bundled-test-harness/assets/dashboard-delete-test-BvsASb8B.js +0 -163
  674. package/bundled-test-harness/assets/dashboard-duplicate-offer-test-DEsd5ZzZ.js +0 -71
  675. package/bundled-test-harness/assets/dashboard-duplicate-test-BnR0sTgB.js +0 -222
  676. package/bundled-test-harness/assets/dashboard-get-started-test-DG4uUXLv.js +0 -246
  677. package/bundled-test-harness/assets/dashboard-pinned-cards-test-AoGGVRAS.js +0 -220
  678. package/bundled-test-harness/assets/dashboard-reindex-test-BN9a96Xp.js +0 -115
  679. package/bundled-test-harness/assets/dashboard-section-rail-test-B3OT9V2T.js +0 -169
  680. package/bundled-test-harness/assets/dashboard-state-test-BY0Zqrmj.js +0 -162
  681. package/bundled-test-harness/assets/dashboard-test-C13oNpWt.js +0 -545
  682. package/bundled-test-harness/assets/dashboard-unreachable-notice-test-DZIV4x5j.js +0 -62
  683. package/bundled-test-harness/assets/dashboard-workspace-test-CBnOQViI.js +0 -537
  684. package/bundled-test-harness/assets/dashboard-workspaces-section-test-KU8ZVOYp.js +0 -396
  685. package/bundled-test-harness/assets/data-file-def-preview-test-CI5gcdtK.js +0 -155
  686. package/bundled-test-harness/assets/date-time-fields-test-D2CpR_Pb.js +0 -359
  687. package/bundled-test-harness/assets/debug-message-test-Df1kHesw.js +0 -117
  688. package/bundled-test-harness/assets/declared-captures-test-hQ43zuox.js +0 -879
  689. package/bundled-test-harness/assets/delete-workspace-test-BhfMKsix.js +0 -102
  690. package/bundled-test-harness/assets/diffing-test-CHRh55mC.js +0 -210
  691. package/bundled-test-harness/assets/download-file-to-realm-test-CC1HURCi.js +0 -119
  692. package/bundled-test-harness/assets/editor-test-DkeCv28f.js +0 -688
  693. package/bundled-test-harness/assets/edits-BSJqtUXM.js +0 -651
  694. package/bundled-test-harness/assets/email-field-test-DihK0suO.js +0 -75
  695. package/bundled-test-harness/assets/enum-field-test-Gja3bzt5.js +0 -935
  696. package/bundled-test-harness/assets/error-display-test-GhYZu7cp.js +0 -343
  697. package/bundled-test-harness/assets/evaluate-module-test-D_t4CiUq.js +0 -91
  698. package/bundled-test-harness/assets/execute-atomic-operations-test-xtou8Zeg.js +0 -113
  699. package/bundled-test-harness/assets/externals-B02-sD_L.js +0 -4393
  700. package/bundled-test-harness/assets/fallback-banner-live-delete-test-DtxzNXdE.js +0 -207
  701. package/bundled-test-harness/assets/fallback-banner-test-BfmiQ_68.js +0 -53
  702. package/bundled-test-harness/assets/fallback-banner-test-DLtTdmvn.js +0 -225
  703. package/bundled-test-harness/assets/fallback-models-test-BxNJxhfd.js +0 -161
  704. package/bundled-test-harness/assets/fetch-card-json-test-DofKbzvC.js +0 -61
  705. package/bundled-test-harness/assets/field-configuration-test-SUoPaXWy.js +0 -551
  706. package/bundled-test-harness/assets/field-markdown-domain-test-BwtR0dPP.js +0 -616
  707. package/bundled-test-harness/assets/field-markdown-oversize-test-D8UJcBc3.js +0 -88
  708. package/bundled-test-harness/assets/field-markdown-primitives-test-D5_ZdoDO.js +0 -365
  709. package/bundled-test-harness/assets/field-markdown-specialized-test-Dpd5hs04.js +0 -534
  710. package/bundled-test-harness/assets/field-playground-test-CzhYzKGv.js +0 -894
  711. package/bundled-test-harness/assets/field-support-predicates-test-BSvVOFth.js +0 -167
  712. package/bundled-test-harness/assets/file-attachment-test-fM-yFedm.js +0 -796
  713. package/bundled-test-harness/assets/file-chooser-panel-test-CKj8YTdY.js +0 -153
  714. package/bundled-test-harness/assets/file-chooser-test-Bs8jFXqa.js +0 -504
  715. package/bundled-test-harness/assets/file-def-format-templates-test-CxrRoWoD.js +0 -380
  716. package/bundled-test-harness/assets/file-def-live-reload-test-X_8YEkve.js +0 -124
  717. package/bundled-test-harness/assets/file-def-menu-items-test-Dx879o_o.js +0 -138
  718. package/bundled-test-harness/assets/file-def-navigation-test-MMI_EEO1.js +0 -109
  719. package/bundled-test-harness/assets/file-def-serialization-test-B5lguBQD.js +0 -89
  720. package/bundled-test-harness/assets/file-def-test-Di9QWcrj.js +0 -216
  721. package/bundled-test-harness/assets/file-preview-live-reload-test-aqx93A7c.js +0 -310
  722. package/bundled-test-harness/assets/file-resource-primitives-test-a5abpcSB.js +0 -255
  723. package/bundled-test-harness/assets/file-tree-from-index-test-CnruGxJ8.js +0 -96
  724. package/bundled-test-harness/assets/file-tree-test-BCyWDdSE.js +0 -851
  725. package/bundled-test-harness/assets/file-view-model-test-BfpLa01Y.js +0 -346
  726. package/bundled-test-harness/assets/filedef-export-shape-test-CQ9XbrzS.js +0 -61
  727. package/bundled-test-harness/assets/film-CL1zj_bJ.js +0 -2
  728. package/bundled-test-harness/assets/film-Dq_quZ31.js +0 -13
  729. package/bundled-test-harness/assets/film-xbkQa060.js +0 -4074
  730. package/bundled-test-harness/assets/flac-audio-def-test-BmVp9dMx.js +0 -143
  731. package/bundled-test-harness/assets/focus-Dm4wkM72.js +0 -306
  732. package/bundled-test-harness/assets/font-metadata-extractor-test-OWEh9_MS.js +0 -415
  733. package/bundled-test-harness/assets/formatted-aibot-message-test-BpHsWpuV.js +0 -109
  734. package/bundled-test-harness/assets/formatted-user-message-test-DZW5TAr0.js +0 -43
  735. package/bundled-test-harness/assets/freestyle-test-D_uaPU_3.js +0 -17
  736. package/bundled-test-harness/assets/full-reindex-realm-test-C6vHL5kC.js +0 -101
  737. package/bundled-test-harness/assets/garbage-collection-test-D-Ao4t2n.js +0 -403
  738. package/bundled-test-harness/assets/general-test-PSGI8W0z.js +0 -923
  739. package/bundled-test-harness/assets/generate-example-cards-one-shot-test-J-m-0E6W.js +0 -65
  740. package/bundled-test-harness/assets/generic-file-def-preview-test-BAsOhTYU.js +0 -71
  741. package/bundled-test-harness/assets/get-available-realm-identifiers-test-D5PBOr97.js +0 -47
  742. package/bundled-test-harness/assets/get-catalog-realm-identifiers-test-NM9UURHE.js +0 -47
  743. package/bundled-test-harness/assets/get-default-writable-realm-test-BxXc9a3J.js +0 -54
  744. package/bundled-test-harness/assets/get-published-realms-test-C8TJEc4-.js +0 -71
  745. package/bundled-test-harness/assets/get-realm-of-resource-identifier-test-Dt8CB6lS.js +0 -54
  746. package/bundled-test-harness/assets/get-relationship-membership-state-test-9_8x3myJ.js +0 -1308
  747. package/bundled-test-harness/assets/get-user-system-card-test-k0UO-uba.js +0 -67
  748. package/bundled-test-harness/assets/gif-image-def-test-BWrqPGDX.js +0 -188
  749. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-BgG8QI9E.js +0 -160
  750. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-BKOvNyCN.js +0 -74
  751. package/bundled-test-harness/assets/gts-file-def-test-BCRHwDeZ.js +0 -100
  752. package/bundled-test-harness/assets/head-format-preview-test-DnfUhniI.js +0 -158
  753. package/bundled-test-harness/assets/helpers-DklkegO_.js +0 -5
  754. package/bundled-test-harness/assets/host-mode-service-vOfN0smp.js +0 -232
  755. package/bundled-test-harness/assets/host-mode-test-CCCJFz6_.js +0 -831
  756. package/bundled-test-harness/assets/host-submode-test-CtCfbuPA.js +0 -1342
  757. package/bundled-test-harness/assets/html-component-test-CWyhb5ZX.js +0 -65
  758. package/bundled-test-harness/assets/html-def-test-Cb8C2lUx.js +0 -160
  759. package/bundled-test-harness/assets/html-meta-extractor-test-BHT9Rtir.js +0 -60
  760. package/bundled-test-harness/assets/hydratable-card-test-DpgpdesD.js +0 -426
  761. package/bundled-test-harness/assets/icon-button-ABCGVF3C.js +0 -67
  762. package/bundled-test-harness/assets/image-metadata-extractor-test-ClhPTouq.js +0 -1109
  763. package/bundled-test-harness/assets/index-changes-test-CgnVr3LH.js +0 -367
  764. package/bundled-test-harness/assets/index-query-engine-test-CQTwju5_.js +0 -2593
  765. package/bundled-test-harness/assets/index-writer-test-IoVOoZT2.js +0 -3040
  766. package/bundled-test-harness/assets/inspector-test-BN2Ieb77.js +0 -2058
  767. package/bundled-test-harness/assets/instance-filter-matcher-test-Bq-_Sy89.js +0 -788
  768. package/bundled-test-harness/assets/instantiate-card-test-DEeDTzFV.js +0 -164
  769. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DP6kOyJS.js +0 -475
  770. package/bundled-test-harness/assets/interact-submode-setup-B0_cHqH-.js +0 -566
  771. package/bundled-test-harness/assets/invalidate-realm-identifiers-test-9uUD91Pw.js +0 -99
  772. package/bundled-test-harness/assets/invite-user-to-room-test-CcDA45Ac.js +0 -142
  773. package/bundled-test-harness/assets/invoke-card-operation-test-DmUtgueM.js +0 -333
  774. package/bundled-test-harness/assets/isolated-render-test-B2eXNHu6.js +0 -51
  775. package/bundled-test-harness/assets/job-scoped-doc-cache-test-DF9D7cOc.js +0 -181
  776. package/bundled-test-harness/assets/job-scoped-instance-residency-test-CSS8xUU5.js +0 -103
  777. package/bundled-test-harness/assets/jpg-image-def-test-voECMTht.js +0 -697
  778. package/bundled-test-harness/assets/json-file-def-test-8Y4KLjUC.js +0 -95
  779. package/bundled-test-harness/assets/key-notices-badge-test-d1mYqx0e.js +0 -155
  780. package/bundled-test-harness/assets/key-readiness-test-BtCg7PCk.js +0 -190
  781. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-CyCMbJnN.js +0 -398
  782. package/bundled-test-harness/assets/linksto-error-sentinel-test-BDW572-v.js +0 -238
  783. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test-B4wM97hD.js +0 -354
  784. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-BhJmtJ0_.js +0 -303
  785. package/bundled-test-harness/assets/linksto-sentinel-reload-test-BpBQ5V_i.js +0 -197
  786. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test-pkBBl4e9.js +0 -260
  787. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-Bb6wjUdD.js +0 -196
  788. package/bundled-test-harness/assets/lint-and-fix-test-CcMLn-co.js +0 -51
  789. package/bundled-test-harness/assets/live-test-AyBnq7BX.js +0 -2
  790. package/bundled-test-harness/assets/live-test-CgnAcIDw.js +0 -100
  791. package/bundled-test-harness/assets/load-default-skills-test-BIOwtx0Y.js +0 -74
  792. package/bundled-test-harness/assets/loader-parallel-prefetch-test-D5_oRSER.js +0 -257
  793. package/bundled-test-harness/assets/loader-test-DSc_jR1c.js +0 -482
  794. package/bundled-test-harness/assets/loading-test-8pldx7S-.js +0 -63
  795. package/bundled-test-harness/assets/m4a-audio-def-test-BDI5apzM.js +0 -190
  796. package/bundled-test-harness/assets/main-5kHyCkdm.js +0 -5
  797. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-Wud0s7WZ.js +0 -470
  798. package/bundled-test-harness/assets/markdown-embed-chooser-test-DVzzS-0C.js +0 -334
  799. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-B5W_iqsi.js +0 -447
  800. package/bundled-test-harness/assets/markdown-embed-preview-test-CZF_s0fB.js +0 -368
  801. package/bundled-test-harness/assets/markdown-fallback-test-fT6BS4W7.js +0 -316
  802. package/bundled-test-harness/assets/markdown-file-def-test-B1aTzazR.js +0 -380
  803. package/bundled-test-harness/assets/markdown-helpers-test-gNKZf7Mw.js +0 -188
  804. package/bundled-test-harness/assets/markdown-highlighting-test-Du5_CQmD.js +0 -244
  805. package/bundled-test-harness/assets/markdown-preview-h-_aJhRc.js +0 -72
  806. package/bundled-test-harness/assets/markdown-preview-test-DJvoVsXw.js +0 -238
  807. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-VwJi3Paj.js +0 -146
  808. package/bundled-test-harness/assets/markdown-skill-search-test-ysCdf0xM.js +0 -80
  809. package/bundled-test-harness/assets/matrix-service-account-switch-sessions-test-K2JuMy36.js +0 -63
  810. package/bundled-test-harness/assets/matrix-service-boot-assembly-test-CkdL_-os.js +0 -300
  811. package/bundled-test-harness/assets/matrix-service-personal-realm-test-Dy1DultK.js +0 -125
  812. package/bundled-test-harness/assets/matrix-service-realm-servers-test-DHDDKuEg.js +0 -55
  813. package/bundled-test-harness/assets/matrix-service-realms-list-updated-test-DcTbZpMl.js +0 -132
  814. package/bundled-test-harness/assets/matrix-service-relogin-test-D3NQktoa.js +0 -59
  815. package/bundled-test-harness/assets/matrix-service-sliding-sync-test-6CAflWOA.js +0 -35
  816. package/bundled-test-harness/assets/menu-kUSaJIPq.js +0 -3562
  817. package/bundled-test-harness/assets/message-service-subscription-test-DaQdgDWi.js +0 -110
  818. package/bundled-test-harness/assets/message-service-test-BsGEgM_m.js +0 -144
  819. package/bundled-test-harness/assets/message-tool-test-BB_4kw1V.js +0 -33
  820. package/bundled-test-harness/assets/midi-audio-def-test-BbbkFjqf.js +0 -182
  821. package/bundled-test-harness/assets/migrate-skill-test-X9xImDuq.js +0 -161
  822. package/bundled-test-harness/assets/mini-AwF31elJ.js +0 -1404
  823. package/bundled-test-harness/assets/mini-card-chooser-test-BZtrEiWu.js +0 -272
  824. package/bundled-test-harness/assets/mini-file-chooser-test-MIHW3kCI.js +0 -201
  825. package/bundled-test-harness/assets/mock-matrix-Dd8k0DNa.js +0 -15107
  826. package/bundled-test-harness/assets/mock-matrix-DhPN_34j.js +0 -2
  827. package/bundled-test-harness/assets/modal-LTh3_oHK.js +0 -322
  828. package/bundled-test-harness/assets/model-cost-tier-test-h1IkU9mp.js +0 -174
  829. package/bundled-test-harness/assets/model-file-extract-test-ntSo0wZF.js +0 -206
  830. package/bundled-test-harness/assets/module-transpile-cache-test-CDeRaaeP.js +0 -67
  831. package/bundled-test-harness/assets/monaco-test-C0Fa744D.js +0 -100
  832. package/bundled-test-harness/assets/mp3-audio-def-test-B4j4qR9H.js +0 -133
  833. package/bundled-test-harness/assets/multiple-stacks-test-BhA25ywL.js +0 -208
  834. package/bundled-test-harness/assets/nested-query-field-render-test-S9Y8YNKB.js +0 -249
  835. package/bundled-test-harness/assets/no-stacks-test-B7VciWyg.js +0 -48
  836. package/bundled-test-harness/assets/number-field-test-CS74lDPN.js +0 -184
  837. package/bundled-test-harness/assets/office-file-def-test-2cKc1pmd.js +0 -263
  838. package/bundled-test-harness/assets/office-metadata-extractor-test-DC8Fo-OW.js +0 -218
  839. package/bundled-test-harness/assets/office-poster-capture-test-Ba0_5UrT.js +0 -203
  840. package/bundled-test-harness/assets/ogg-audio-def-test-CIPQ1d4w.js +0 -196
  841. package/bundled-test-harness/assets/open-create-listing-modal-test-bmQkY5Zl.js +0 -131
  842. package/bundled-test-harness/assets/open-image-in-new-tab-test-DBD7_vMH.js +0 -52
  843. package/bundled-test-harness/assets/open-secure-window-test-BgeuYAqz.js +0 -253
  844. package/bundled-test-harness/assets/open-workspace-test-DRHGljV0.js +0 -46
  845. package/bundled-test-harness/assets/operation-lowering-test-CH1c0pSH.js +0 -2957
  846. package/bundled-test-harness/assets/operations-invocation-test-B1YkCLrv.js +0 -523
  847. package/bundled-test-harness/assets/operations-optimistic-test-DAbtOwsC.js +0 -203
  848. package/bundled-test-harness/assets/operations-query-test-9p1ZIDe-.js +0 -459
  849. package/bundled-test-harness/assets/operations-store-reconciliation-test-D0EQh3w2.js +0 -406
  850. package/bundled-test-harness/assets/operations-test-BQhlrfe3.js +0 -2518
  851. package/bundled-test-harness/assets/operator-mode-acceptance-test-DtHnonEb.js +0 -1195
  852. package/bundled-test-harness/assets/operator-mode-card-chooser-test-DQUxZxaq.js +0 -1036
  853. package/bundled-test-harness/assets/operator-mode-links-test-BJ26HllS.js +0 -797
  854. package/bundled-test-harness/assets/operator-mode-test-DIPDI0qt.js +0 -696
  855. package/bundled-test-harness/assets/operator-mode-ui-test-CfA-fAh4.js +0 -1045
  856. package/bundled-test-harness/assets/overlay-DecPh3nt.js +0 -123
  857. package/bundled-test-harness/assets/overlay-menu-items-test-C6XqjLtu.js +0 -331
  858. package/bundled-test-harness/assets/overlays-Ctp8ePzZ.js +0 -75
  859. package/bundled-test-harness/assets/overlays-CzWpSg5T.js +0 -2
  860. package/bundled-test-harness/assets/overlays-detached-element-test-DvL_8Bb5.js +0 -56
  861. package/bundled-test-harness/assets/panel-CImumikB.js +0 -15124
  862. package/bundled-test-harness/assets/past-sessions-test-N6riGN_I.js +0 -321
  863. package/bundled-test-harness/assets/patch-fields-test-D30_-KwQ.js +0 -1014
  864. package/bundled-test-harness/assets/patch-instance-test-C5rGscZq.js +0 -348
  865. package/bundled-test-harness/assets/pdf-file-def-test-DtiqGRvZ.js +0 -111
  866. package/bundled-test-harness/assets/pdf-metadata-extractor-test-FU02KmdV.js +0 -130
  867. package/bundled-test-harness/assets/permission-checking-realm-test-DqdNJDwU.js +0 -306
  868. package/bundled-test-harness/assets/persist-module-inspector-view-test-BHOAgPVy.js +0 -60
  869. package/bundled-test-harness/assets/persist-scroll-position-test-qtmS518r.js +0 -254
  870. package/bundled-test-harness/assets/phone-number-field-test-DhdaM7uL.js +0 -73
  871. package/bundled-test-harness/assets/pill-menu-test-C9Mrrepl.js +0 -60
  872. package/bundled-test-harness/assets/plate-9n-sXyCw.js +0 -41
  873. package/bundled-test-harness/assets/plate-BnZcAk-_.js +0 -2
  874. package/bundled-test-harness/assets/player-Cu5b4LEJ.js +0 -82
  875. package/bundled-test-harness/assets/player-unk2mkxV.js +0 -2
  876. package/bundled-test-harness/assets/playground-BwA8wFGK.js +0 -58
  877. package/bundled-test-harness/assets/plural-field-components-test-CFNQKETg.js +0 -198
  878. package/bundled-test-harness/assets/png-image-def-test-DG5Vhlqb.js +0 -266
  879. package/bundled-test-harness/assets/policy-audit-confirmation-test-yfKU47LR.js +0 -155
  880. package/bundled-test-harness/assets/policy-scoped-search-test-BjQRDYqR.js +0 -339
  881. package/bundled-test-harness/assets/prerender-file-extract-test-CEU4SaAZ.js +0 -346
  882. package/bundled-test-harness/assets/prerender-html-test-CGB3ClCS.js +0 -670
  883. package/bundled-test-harness/assets/prerender-meta-test-xqc4fW_0.js +0 -614
  884. package/bundled-test-harness/assets/prerender-module-test-CI1TmZw-.js +0 -409
  885. package/bundled-test-harness/assets/prerender-persistence-block-test-Da0dJO_N.js +0 -124
  886. package/bundled-test-harness/assets/prerender-pre-model-error-test-BVLyhk8R.js +0 -61
  887. package/bundled-test-harness/assets/prerender-serialize-cycle-test-glJFfxHU.js +0 -134
  888. package/bundled-test-harness/assets/prerendered-html-read-test-Mp4L0VHQ.js +0 -191
  889. package/bundled-test-harness/assets/pretui-components-test-BBpA9UnA.js +0 -991
  890. package/bundled-test-harness/assets/pretui-components-test-BqFq7rw_.css +0 -730
  891. package/bundled-test-harness/assets/preview-format-test-C55Bwcur.js +0 -103
  892. package/bundled-test-harness/assets/preview-test-CTAhRGU8.js +0 -474
  893. package/bundled-test-harness/assets/process-card-test-UjqpuxB7.js +0 -94
  894. package/bundled-test-harness/assets/profile-settings-modal-C8bCgTMK.js +0 -989
  895. package/bundled-test-harness/assets/publish-realm-ixUB4FPK.js +0 -82
  896. package/bundled-test-harness/assets/publish-realm-test-CrrsdL4W.js +0 -210
  897. package/bundled-test-harness/assets/query-field-barrier-test-DjivFE93.js +0 -113
  898. package/bundled-test-harness/assets/query-field-error-sentinel-test-0HwnV4Mw.js +0 -201
  899. package/bundled-test-harness/assets/query-field-membership-status-test-C8yTTBkc.js +0 -323
  900. package/bundled-test-harness/assets/query-field-page-optin-test-D4l_GcII.js +0 -126
  901. package/bundled-test-harness/assets/query-field-schema-test-DDbcNNm5.js +0 -231
  902. package/bundled-test-harness/assets/query-field-search-throttle-test-CXp50Ax0.js +0 -154
  903. package/bundled-test-harness/assets/query-field-stale-prerender-test-DErzt-Cv.js +0 -152
  904. package/bundled-test-harness/assets/query-fields-test-Dz67fdSl.js +0 -535
  905. package/bundled-test-harness/assets/quick-look-test-B1ijDsh_.js +0 -139
  906. package/bundled-test-harness/assets/read-card-for-ai-assistant-test-DJxZ16H_.js +0 -91
  907. package/bundled-test-harness/assets/read-file-for-ai-assistant-test-BoRQkZ8c.js +0 -45
  908. package/bundled-test-harness/assets/read-source-test-Bl-NjchO.js +0 -67
  909. package/bundled-test-harness/assets/read-text-file-test-CP37CZoo.js +0 -124
  910. package/bundled-test-harness/assets/realm-CaK5mkT-.js +0 -2852
  911. package/bundled-test-harness/assets/realm-api-keys-BNUFWbGR.js +0 -579
  912. package/bundled-test-harness/assets/realm-api-keys-CkshxhXC.js +0 -2
  913. package/bundled-test-harness/assets/realm-api-keys-test-BP8xifjn.js +0 -109
  914. package/bundled-test-harness/assets/realm-api-keys-test-CwdK9YXp.js +0 -588
  915. package/bundled-test-harness/assets/realm-config-iKwE3Htp.js +0 -833
  916. package/bundled-test-harness/assets/realm-config-policy-standing-test-BgVEIDnB.js +0 -290
  917. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-BoJoKzmX.js +0 -274
  918. package/bundled-test-harness/assets/realm-config-settings-test-Kxw-GHye.js +0 -187
  919. package/bundled-test-harness/assets/realm-field-test-CdGOxrFb.js +0 -100
  920. package/bundled-test-harness/assets/realm-indexing-test-CHtsBV2b.js +0 -4380
  921. package/bundled-test-harness/assets/realm-policy-fitted-test--DhNZSdC.js +0 -206
  922. package/bundled-test-harness/assets/realm-policy-test-D7714iVa.js +0 -1141
  923. package/bundled-test-harness/assets/realm-querying-test-Cj1ekZ0H.js +0 -1067
  924. package/bundled-test-harness/assets/realm-server-form-agnostic-test-CZFPNJfD.js +0 -96
  925. package/bundled-test-harness/assets/realm-server-subscriber-test-C86WmBp0.js +0 -46
  926. package/bundled-test-harness/assets/realm-service-info-test-CdgcwKDR.js +0 -67
  927. package/bundled-test-harness/assets/realm-test-DPoLsvKz.js +0 -2364
  928. package/bundled-test-harness/assets/realm-token-refresh-test-Ch35Siwi.js +0 -153
  929. package/bundled-test-harness/assets/realm-url-tooltip-test-x8xWOENK.js +0 -78
  930. package/bundled-test-harness/assets/reasoning-test-BxpE8Jvf.js +0 -221
  931. package/bundled-test-harness/assets/recent-files-test-DTmEzPLq.js +0 -450
  932. package/bundled-test-harness/assets/reindex-realm-test-BQ8KULn4.js +0 -117
  933. package/bundled-test-harness/assets/relationship-loading-state-test-BJoArPWf.js +0 -290
  934. package/bundled-test-harness/assets/remix-card-test-DsTA1KoG.js +0 -58
  935. package/bundled-test-harness/assets/rendered-markdown-DvukulDO.js +0 -292
  936. package/bundled-test-harness/assets/rendered-markdown-test-DxGptXSV.js +0 -587
  937. package/bundled-test-harness/assets/resident-instance-reuse-test-ZWnVu8uj.js +0 -82
  938. package/bundled-test-harness/assets/result-tile-CPyI6Vmv.js +0 -144
  939. package/bundled-test-harness/assets/rich-markdown-field-test-CdygoXIO.js +0 -1647
  940. package/bundled-test-harness/assets/room-message-test-D3NfMqH0.js +0 -484
  941. package/bundled-test-harness/assets/run-D_Px28eF.js +0 -3956
  942. package/bundled-test-harness/assets/run-realm-code-qWCZxmJ7.js +0 -2964
  943. package/bundled-test-harness/assets/run-realm-code-test-UzyeEJq6.js +0 -3844
  944. package/bundled-test-harness/assets/sanitize-module-list-test-Babq44bP.js +0 -85
  945. package/bundled-test-harness/assets/save-card-skip-index-wait-test-BcELXlQ_.js +0 -89
  946. package/bundled-test-harness/assets/schema-editor-test-CEvruZbt.js +0 -785
  947. package/bundled-test-harness/assets/schema-generation-test-hYAMdCrn.js +0 -28
  948. package/bundled-test-harness/assets/scrolling-test-DVIsh-_1.js +0 -412
  949. package/bundled-test-harness/assets/search-adorn-test-CkVhqFd0.js +0 -136
  950. package/bundled-test-harness/assets/search-and-choose-test-DUhOB3FV.js +0 -154
  951. package/bundled-test-harness/assets/search-correlation-id-test-Drn4r26N.js +0 -139
  952. package/bundled-test-harness/assets/search-entries-result-test-DTCRJ_wc.js +0 -234
  953. package/bundled-test-harness/assets/search-entries-test-CE0B47pw.js +0 -1486
  954. package/bundled-test-harness/assets/search-entries-tool-test-C4aG0ckM.js +0 -504
  955. package/bundled-test-harness/assets/search-google-images-test-LyhcB2f3.js +0 -166
  956. package/bundled-test-harness/assets/search-results-D4pSne0x.js +0 -266
  957. package/bundled-test-harness/assets/search-results-test-CRZHhqhn.js +0 -578
  958. package/bundled-test-harness/assets/search-selection-menu-test-B7Y3E_nj.js +0 -108
  959. package/bundled-test-harness/assets/search-sheet-files-test-C2y534g8.js +0 -126
  960. package/bundled-test-harness/assets/search-sheet-persistence-test-DePC59Bk.js +0 -131
  961. package/bundled-test-harness/assets/search-test-Dy8NxFkU.js +0 -2249
  962. package/bundled-test-harness/assets/search-tool-test-lctDaMH3.js +0 -156
  963. package/bundled-test-harness/assets/searchable-option-test-CE64M8oM.js +0 -322
  964. package/bundled-test-harness/assets/searchable-search-doc-test-C6u3mVvT.js +0 -1271
  965. package/bundled-test-harness/assets/section-rail-B_UQX00B.js +0 -113
  966. package/bundled-test-harness/assets/section-rail-test-DIda7MIw.js +0 -256
  967. package/bundled-test-harness/assets/secure-sign-in-CqqqfQG8.js +0 -174
  968. package/bundled-test-harness/assets/secure-sign-in-test-DimbVr_W.js +0 -373
  969. package/bundled-test-harness/assets/segmented-control-iePxSdTS.js +0 -173
  970. package/bundled-test-harness/assets/select-tNs6_xwW.js +0 -175
  971. package/bundled-test-harness/assets/send-ai-assistant-message-test-2GVrMF9Z.js +0 -52
  972. package/bundled-test-harness/assets/send-bot-trigger-event-test-B_3dKfGN.js +0 -56
  973. package/bundled-test-harness/assets/send-request-via-proxy-test-_clNWyYc.js +0 -380
  974. package/bundled-test-harness/assets/sending-test-DCPFXUVg.js +0 -659
  975. package/bundled-test-harness/assets/serialization-rri-form-audit-test-BI0zCs8Y.js +0 -136
  976. package/bundled-test-harness/assets/serialization-test-bjdtVlZL.js +0 -8758
  977. package/bundled-test-harness/assets/set-user-system-card-test-BUv1vL08.js +0 -59
  978. package/bundled-test-harness/assets/setup-BW1mmC7C.js +0 -772
  979. package/bundled-test-harness/assets/setup-DsIcFT-T.js +0 -2
  980. package/bundled-test-harness/assets/shared-link-target-reuse-test-9NeJEjkb.js +0 -207
  981. package/bundled-test-harness/assets/show-card-test-mfyLwusD.js +0 -365
  982. package/bundled-test-harness/assets/signed-capture-link-test-BOtKNCAM.js +0 -132
  983. package/bundled-test-harness/assets/single-stack-test-B4MGjaLk.js +0 -652
  984. package/bundled-test-harness/assets/skills-test-BuP-Yzk1.js +0 -648
  985. package/bundled-test-harness/assets/skip-boot-index-guard-test-Cmrx2-K7.js +0 -46
  986. package/bundled-test-harness/assets/spec-test-BhZDdhVQ.js +0 -1077
  987. package/bundled-test-harness/assets/spinner-CpIBUG9m.js +0 -49
  988. package/bundled-test-harness/assets/src-DGHttmW-.js +0 -216
  989. package/bundled-test-harness/assets/src-DaNDSbp7.js +0 -5
  990. package/bundled-test-harness/assets/stick-to-bottom-resize-test-Dpy3OVum.js +0 -56
  991. package/bundled-test-harness/assets/store-add-test-_IYS8o74.js +0 -50
  992. package/bundled-test-harness/assets/store-module-rebuild-test-B5VMaICy.js +0 -454
  993. package/bundled-test-harness/assets/store-search-test-C2VZabrH.js +0 -175
  994. package/bundled-test-harness/assets/store-test-D6PObxoD.js +0 -3672
  995. package/bundled-test-harness/assets/structured-theme-test-BHjVeMf-.js +0 -377
  996. package/bundled-test-harness/assets/summarize-session-test-BFtTuhe0.js +0 -172
  997. package/bundled-test-harness/assets/svg-image-def-test-BL6lkWUX.js +0 -167
  998. package/bundled-test-harness/assets/switch-submode-test-6Uv3bZMl.js +0 -168
  999. package/bundled-test-harness/assets/sync-openrouter-models-test-Dp9E05tL.js +0 -97
  1000. package/bundled-test-harness/assets/test-support-DYm8XZ0E.js +0 -3
  1001. package/bundled-test-harness/assets/test-support-DfnhiIMV.js +0 -99
  1002. package/bundled-test-harness/assets/tests-CZk0Iag2.js +0 -3596
  1003. package/bundled-test-harness/assets/text-file-def-test-CHdC0yIU.js +0 -94
  1004. package/bundled-test-harness/assets/text-input-validator-test-B9ZR8XPU.js +0 -156
  1005. package/bundled-test-harness/assets/text-suggestion-test-CGLspKFQ.js +0 -340
  1006. package/bundled-test-harness/assets/theme-card-test-CXZvSEvG.js +0 -621
  1007. package/bundled-test-harness/assets/theme-dashboard-nav-test-CkEE0ILk.js +0 -196
  1008. package/bundled-test-harness/assets/theme-scheme-island-test-URXTjipF.js +0 -264
  1009. package/bundled-test-harness/assets/titles-C6enAdIv.js +0 -2
  1010. package/bundled-test-harness/assets/titles-Dft1HoUT.js +0 -52
  1011. package/bundled-test-harness/assets/to-device-streaming-test-D33ZOc9o.js +0 -163
  1012. package/bundled-test-harness/assets/token-usage-test-BHQlU4J4.js +0 -160
  1013. package/bundled-test-harness/assets/tools-CrudqfS3.js +0 -774
  1014. package/bundled-test-harness/assets/tools-calling-test-jo7IREau.js +0 -200
  1015. package/bundled-test-harness/assets/tools-test-D1wMfUa0.js +0 -1624
  1016. package/bundled-test-harness/assets/tools-test-Dn1LYsXp.js +0 -3204
  1017. package/bundled-test-harness/assets/tooltip-8Wyz4IIn.css +0 -68
  1018. package/bundled-test-harness/assets/tooltip-CqwLzRz5.js +0 -134
  1019. package/bundled-test-harness/assets/transform-cards-test-BPhwPFtp.js +0 -341
  1020. package/bundled-test-harness/assets/ts-file-def-preview-test-Bq3zTgw8.js +0 -95
  1021. package/bundled-test-harness/assets/ts-file-def-test-GLswMl7O.js +0 -92
  1022. package/bundled-test-harness/assets/ttf-font-def-test-DQulvUWs.js +0 -206
  1023. package/bundled-test-harness/assets/turn-settling-test-BspmOUQP.js +0 -160
  1024. package/bundled-test-harness/assets/turn-summary-9A8nvC0-.js +0 -1039
  1025. package/bundled-test-harness/assets/unpublish-realm-test-SkYPEhDz.js +0 -102
  1026. package/bundled-test-harness/assets/update-room-skills-test-cTxb-WU6.js +0 -240
  1027. package/bundled-test-harness/assets/use-ai-assistant-test-uaqW1T_A.js +0 -384
  1028. package/bundled-test-harness/assets/user-message-BudkIP-3.js +0 -262
  1029. package/bundled-test-harness/assets/validate-realm-test-DxrGgH9n.js +0 -67
  1030. package/bundled-test-harness/assets/video-metadata-extractor-test-B2pe-Iqa.js +0 -520
  1031. package/bundled-test-harness/assets/view-visually-test-PNon6fUo.js +0 -335
  1032. package/bundled-test-harness/assets/virtual-network-reset-test-uYJLaQHf.js +0 -96
  1033. package/bundled-test-harness/assets/wav-audio-def-test-F4OrFFR4.js +0 -160
  1034. package/bundled-test-harness/assets/webp-image-def-test-B0a_-Vya.js +0 -226
  1035. package/bundled-test-harness/assets/workspace-Cyftysy9.js +0 -440
  1036. package/bundled-test-harness/assets/workspace-a11y-test-sKiPDcbl.js +0 -197
  1037. package/bundled-test-harness/assets/workspace-actions-BuawjFmZ.js +0 -561
  1038. package/bundled-test-harness/assets/workspace-behavior-test-CKa-pb3T.js +0 -338
  1039. package/bundled-test-harness/assets/workspace-delete-multiple-test-Dt2weG5R.js +0 -212
  1040. package/bundled-test-harness/assets/workspace-delete-summary-test-CkqgFqZ8.js +0 -63
  1041. package/bundled-test-harness/assets/workspace-hosting-test-Ci7EEtHP.js +0 -138
  1042. package/bundled-test-harness/assets/workspace-indexing-test-BPVxxY6W.js +0 -71
  1043. package/bundled-test-harness/assets/workspace-test-CWr7vFbg.js +0 -385
  1044. package/bundled-test-harness/assets/workspace-test-INNpQovc.js +0 -51
  1045. package/bundled-test-harness/assets/workspace-timestamp-labels-test-CigQb5wr.js +0 -68
  1046. package/bundled-test-harness/assets/workspace-unit-test-BwVKpuXT.js +0 -122
  1047. package/bundled-test-harness/assets/write-binary-file-test-BKP3gv1k.js +0 -124
  1048. package/bundled-test-harness/assets/write-text-file-test-B6ijTKTa.js +0 -191
  1049. package/bundled-test-harness/assets/zip-archive-test-C-PBzkTn.js +0 -285
  1050. package/bundled-test-harness/assets/zip-file-def-test-FyCzJT-9.js +0 -164
@@ -1,2223 +0,0 @@
1
- import { s as __toESM } from "./chunk-Rp0pCe6z.js";
2
- import { r as initializeDeferredDecorator, t as decorateFieldV2 } from "./runtime--fcdnjmJ-BoCBNIsz.js";
3
- import { $n as APP_BOXEL_REASONING_CONTENT_KEY, Br as testRealmURL, Co as SupportedMimeType, Fn as APP_BOXEL_ACTIVE_LLM, Gn as APP_BOXEL_LLM_MODE, Kn as APP_BOXEL_MESSAGE_MSGTYPE, Ls as wrapper_default, Rc as Deferred } from "./runtime-common-BTaLJEw-.js";
4
- import { T as rri } from "./paths-C9-NYXnM.js";
5
- import { D as baseRRI, O as baseRealm, q as skillCardRef } from "./constants-Icc0nFW-.js";
6
- import { wt as setComponentTemplate } from "./cache-DtDz7X5V-Wn8jRDfL.js";
7
- import { H as templateFactory } from "./index-DaCZcoCY-CgzbilMy.js";
8
- import { n as src_default } from "./src-DPaAwa4H.js";
9
- import { t as AiAssistantMessageDrafts } from "./local-storage-keys-CS7XLz7J.js";
10
- import "./component-BJO47HTh.js";
11
- import "./template-factory-ds9s0u8l.js";
12
- import { k as GridContainer } from "./components-Ck24ubaT.js";
13
- import { o as skillsIndexId, s as skillsRealmURL, t as catalogRealmURL } from "./utils-DjDK6b6F.js";
14
- import { M as waitUntil, d as click, k as visit, l as triggerEvent, o as waitFor, s as fillIn } from "./dist-BOAdzfkP.js";
15
- import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
16
- import { D as realmConfigCardJSON, F as setupLocalIndexing, I as setupOnSave, L as setupRealmCacheTeardown, R as setupRealmServerEndpoints, S as getMonacoContent, Z as withCachedRealmSetup, a as SYSTEM_CARD_FIXTURE_CONTENTS, ct as setupApplicationTest, g as delay, i as getRoomIdForRealmAndUser, j as setupAcceptanceTestRealm, mt as setupAuthEndpoints, o as addSkillToAiAssistant, s as assertMessages, st as visitOperatorMode, t as setupMockMatrix, z as setupUserSubscription } from "./mock-matrix-Dd8k0DNa.js";
17
- import { r as getService } from "./dist-CPfIHBla.js";
18
- import { A as field, H as linksTo, U as linksToMany, a as CardDef, o as CardInfoField, s as Component, w as contains } from "./card-api-Cc8uZunB.js";
19
- import { t as string_default } from "./string-5IAMEUit.js";
20
- import { t as CardsGrid } from "./cards-grid-CbyLapaw.js";
21
- import { C as ModelConfiguration, R as SystemCard, vt as setupBaseRealm } from "./base-realm-B17zVqh6.js";
22
- //#region tests/acceptance/ai-assistant-test.gts
23
- var import_qunit = /* @__PURE__ */ __toESM(require_qunit());
24
- async function selectCardFromCatalog(cardId) {
25
- await click("[data-test-attach-button]");
26
- await click("[data-test-attach-card-btn]");
27
- await fillIn("[data-test-search-field]", cardId);
28
- await click(`[data-test-item-button="${cardId}"]`);
29
- await click("[data-test-card-chooser-go-button]");
30
- }
31
- async function waitForSessionPreparationToFinish(timeout = 3e4) {
32
- const aiAssistantPanelService = getService("ai-assistant-panel-service");
33
- await waitUntil(() => !aiAssistantPanelService.isPreparingSession, { timeout });
34
- }
35
- var countryDefinition = `import { field, contains, CardDef } from '@cardstack/base/card-api';
36
- import StringField from '@cardstack/base/string';
37
- export class Country extends CardDef {
38
- static displayName = 'Country';
39
- @field name = contains(StringField);
40
- }`;
41
- var matrixRoomId;
42
- var mockedFileContent = "Hello, world!";
43
- var TEST_MODEL_NAMES = {
44
- "openai/gpt-5": "OpenAI: GPT-5",
45
- "openai/gpt-5-extended": "OpenAI: GPT-5 Extended Thinking",
46
- "openai/gpt-4o-mini": "OpenAI: GPT-4o-mini",
47
- "anthropic/claude-sonnet-4.6": "Anthropic: Claude Sonnet 4.6",
48
- "anthropic/claude-sonnet-4.5": "Anthropic: Claude Sonnet 4.5",
49
- "anthropic/claude-3.7-sonnet": "Anthropic: Claude 3.7 Sonnet",
50
- "deepseek/deepseek-chat-v3-0324": "DeepSeek: DeepSeek V3 0324",
51
- "google/gemini-2.5-flash": "Google: Gemini 2.5 Flash"
52
- };
53
- var TEST_MODEL_CONFIG_IDS = {
54
- "openai/gpt-5": `${testRealmURL}ModelConfiguration/gpt-5`,
55
- "openai/gpt-5-extended": `${testRealmURL}ModelConfiguration/gpt-5-extended`,
56
- "openai/gpt-4o-mini": `${testRealmURL}ModelConfiguration/gpt-4o-mini`,
57
- "anthropic/claude-sonnet-4.6": `${testRealmURL}ModelConfiguration/claude-sonnet-4.6`,
58
- "anthropic/claude-sonnet-4.5": `${testRealmURL}ModelConfiguration/claude-sonnet-4.5`,
59
- "anthropic/claude-3.7-sonnet": `${testRealmURL}ModelConfiguration/claude-sonnet-3.7`,
60
- "deepseek/deepseek-chat-v3-0324": `${testRealmURL}ModelConfiguration/deepseek-chat-v3-0324`,
61
- "google/gemini-2.5-flash": `${testRealmURL}ModelConfiguration/gemini-2.5-flash`
62
- };
63
- function configIdFor(modelId) {
64
- return TEST_MODEL_CONFIG_IDS[modelId] ?? modelId;
65
- }
66
- function modelNameFor(llmId) {
67
- return TEST_MODEL_NAMES[llmId] ?? llmId;
68
- }
69
- function triggerName(name) {
70
- return name.replace(/^[^:]{1,24}:\s*/, "");
71
- }
72
- (0, import_qunit.module)("Acceptance | AI Assistant tests", function(hooks) {
73
- setupApplicationTest(hooks);
74
- setupLocalIndexing(hooks);
75
- setupRealmCacheTeardown(hooks);
76
- setupOnSave(hooks);
77
- let mockMatrixUtils = setupMockMatrix(hooks, {
78
- loggedInAs: "@testuser:localhost",
79
- activeRealms: [baseRealm.url, testRealmURL],
80
- directRooms: [
81
- getRoomIdForRealmAndUser(testRealmURL, "@testuser:localhost"),
82
- getRoomIdForRealmAndUser(baseRealm.url, "@testuser:localhost"),
83
- "test-auth-realm-server-session-room"
84
- ]
85
- });
86
- let { createAndJoinRoom, getRoomIds, getRoomState, simulateRemoteMessage } = mockMatrixUtils;
87
- setupRealmServerEndpoints(hooks, [{
88
- route: "_request-forward",
89
- getResponse: async (req) => {
90
- const body = await req.json();
91
- const contentText = (content) => {
92
- if (typeof content === "string") return content;
93
- if (Array.isArray(content)) return content.filter((part) => part.type === "text").map((part) => part.text ?? "").join("");
94
- return "";
95
- };
96
- if (body.url.includes("openrouter.ai/api/v1/chat/completions")) {
97
- const requestBody = JSON.parse(body.requestBody);
98
- if (requestBody.messages && requestBody.messages.some((msg) => contentText(msg.content).includes("Please provide a concise summary"))) {
99
- const conversationText = requestBody.messages.filter((msg) => msg.role === "user" && !contentText(msg.content).includes("Please provide a concise summary")).map((msg) => contentText(msg.content)).join(" ");
100
- let summary = "This conversation focused on general discussion.";
101
- if (conversationText.includes("project")) summary = "This conversation focused on project help, specifically creating a new card for a person with name and age fields. The user requested assistance with card creation and field definition.";
102
- else if (conversationText.includes("card") && conversationText.includes("file")) summary = "This conversation involved discussing a person card (Hassan) and a pet definition file. The user shared both a Person card and a pet.gts file, then asked for help understanding the structure.";
103
- else if (conversationText.includes("error")) throw new Error("OpenRouter API error");
104
- return new Response(JSON.stringify({ choices: [{ message: { content: summary } }] }), {
105
- status: 200,
106
- headers: { "Content-Type": "application/json" }
107
- });
108
- }
109
- }
110
- return new Response(JSON.stringify({
111
- success: true,
112
- data: {
113
- id: 123,
114
- name: "test"
115
- }
116
- }), {
117
- status: 200,
118
- headers: { "Content-Type": "application/json" }
119
- });
120
- }
121
- }]);
122
- setupBaseRealm(hooks);
123
- hooks.beforeEach(async function() {
124
- matrixRoomId = createAndJoinRoom({
125
- sender: "@testuser:localhost",
126
- name: "room-test"
127
- });
128
- setupUserSubscription();
129
- setupAuthEndpoints();
130
- class Pet extends CardDef {
131
- static displayName = "Pet";
132
- static {
133
- decorateFieldV2(this.prototype, "name", [field], function() {
134
- return contains(string_default);
135
- });
136
- }
137
- #name = (initializeDeferredDecorator(this, "name"), void 0);
138
- static {
139
- decorateFieldV2(this.prototype, "favoriteTreat", [field], function() {
140
- return contains(string_default);
141
- });
142
- }
143
- #favoriteTreat = (initializeDeferredDecorator(this, "favoriteTreat"), void 0);
144
- static {
145
- decorateFieldV2(this.prototype, "cardTitle", [field], function() {
146
- return contains(string_default, { computeVia: function() {
147
- return this.name;
148
- } });
149
- });
150
- }
151
- #cardTitle = (initializeDeferredDecorator(this, "cardTitle"), void 0);
152
- static embedded = class Embedded extends Component {
153
- static {
154
- setComponentTemplate(templateFactory({
155
- "id": "42cIT+kJ",
156
- "block": "[[[10,\"h3\"],[15,\"data-test-pet\",[30,1,[\"name\"]]],[12],[1,\"\\n \"],[8,[30,2,[\"name\"]],null,null,null],[1,\"\\n\"],[13]],[\"@model\",\"@fields\"],[]]",
157
- "moduleName": "/home/runner/work/boxel/boxel/packages/host/tests/acceptance/ai-assistant-test.gts",
158
- "isStrictMode": true
159
- }), this);
160
- }
161
- };
162
- static isolated = class Isolated extends Component {
163
- static {
164
- setComponentTemplate(templateFactory({
165
- "id": "Z8KhIcUS",
166
- "block": "[[[8,[32,0],[[24,0,\"container\"]],null,[[\"default\"],[[[[1,\"\\n \"],[10,\"h2\"],[12],[8,[30,1,[\"cardTitle\"]],null,null,null],[13],[1,\"\\n \"],[10,0],[12],[1,\"\\n \"],[10,0],[12],[1,\"Favorite Treat: \"],[8,[30,1,[\"favoriteTreat\"]],null,null,null],[13],[1,\"\\n \"],[10,0],[14,\"data-test-editable-meta\",\"\"],[12],[1,\"\\n\"],[41,[30,2],[[[1,\" \"],[8,[30,1,[\"cardTitle\"]],null,null,null],[1,\"\\n is editable.\\n\"]],[]],[[[1,\" \"],[8,[30,1,[\"cardTitle\"]],null,null,null],[1,\"\\n is NOT editable.\\n\"]],[]]],[1,\" \"],[13],[1,\"\\n \"],[13],[1,\"\\n\"]],[]]]]]],[\"@fields\",\"@canEdit\"],[\"if\"]]",
167
- "moduleName": "/home/runner/work/boxel/boxel/packages/host/tests/acceptance/ai-assistant-test.gts",
168
- "scope": () => [GridContainer],
169
- "isStrictMode": true
170
- }), this);
171
- }
172
- };
173
- }
174
- class Person extends CardDef {
175
- static displayName = "Person";
176
- static {
177
- decorateFieldV2(this.prototype, "firstName", [field], function() {
178
- return contains(string_default);
179
- });
180
- }
181
- #firstName = (initializeDeferredDecorator(this, "firstName"), void 0);
182
- static {
183
- decorateFieldV2(this.prototype, "lastName", [field], function() {
184
- return contains(string_default);
185
- });
186
- }
187
- #lastName = (initializeDeferredDecorator(this, "lastName"), void 0);
188
- static {
189
- decorateFieldV2(this.prototype, "pet", [field], function() {
190
- return linksTo(Pet);
191
- });
192
- }
193
- #pet = (initializeDeferredDecorator(this, "pet"), void 0);
194
- static {
195
- decorateFieldV2(this.prototype, "friends", [field], function() {
196
- return linksToMany(Pet);
197
- });
198
- }
199
- #friends = (initializeDeferredDecorator(this, "friends"), void 0);
200
- static {
201
- decorateFieldV2(this.prototype, "firstLetterOfTheName", [field], function() {
202
- return contains(string_default, { computeVia: function() {
203
- if (!this.firstName) return;
204
- return this.firstName[0];
205
- } });
206
- });
207
- }
208
- #firstLetterOfTheName = (initializeDeferredDecorator(this, "firstLetterOfTheName"), void 0);
209
- static {
210
- decorateFieldV2(this.prototype, "cardTitle", [field], function() {
211
- return contains(string_default, { computeVia: function() {
212
- return [this.firstName, this.lastName].filter(Boolean).join(" ");
213
- } });
214
- });
215
- }
216
- #cardTitle = (initializeDeferredDecorator(this, "cardTitle"), void 0);
217
- static isolated = class Isolated extends Component {
218
- static {
219
- setComponentTemplate(templateFactory({
220
- "id": "cygZodII",
221
- "block": "[[[10,\"h2\"],[15,\"data-test-person\",[30,1,[\"firstName\"]]],[12],[1,\"\\n \"],[8,[30,2,[\"firstName\"]],null,null,null],[1,\"\\n\"],[13],[1,\"\\n\"],[10,2],[15,\"data-test-first-letter-of-the-name\",[30,1,[\"firstLetterOfTheName\"]]],[12],[1,\"\\n \"],[8,[30,2,[\"firstLetterOfTheName\"]],null,null,null],[1,\"\\n\"],[13],[1,\"\\nPet:\\n\"],[8,[30,2,[\"pet\"]],null,null,null],[1,\"\\nFriends:\\n\"],[8,[30,2,[\"friends\"]],null,null,null]],[\"@model\",\"@fields\"],[]]",
222
- "moduleName": "/home/runner/work/boxel/boxel/packages/host/tests/acceptance/ai-assistant-test.gts",
223
- "isStrictMode": true
224
- }), this);
225
- }
226
- };
227
- }
228
- let mangoPet = new Pet({ name: "Mango" });
229
- let openAiGpt5Model = new ModelConfiguration({
230
- cardInfo: new CardInfoField({ name: modelNameFor("openai/gpt-5") }),
231
- modelId: "openai/gpt-5",
232
- toolsSupported: true,
233
- reasoningEffort: "minimal"
234
- });
235
- let openAiGpt5ExtendedModel = new ModelConfiguration({
236
- cardInfo: new CardInfoField({ name: modelNameFor("openai/gpt-5-extended") }),
237
- modelId: "openai/gpt-5",
238
- toolsSupported: true,
239
- reasoningEffort: "high"
240
- });
241
- let openAiGpt4oMiniModel = new ModelConfiguration({
242
- cardInfo: new CardInfoField({ name: modelNameFor("openai/gpt-4o-mini") }),
243
- modelId: "openai/gpt-4o-mini",
244
- toolsSupported: true
245
- });
246
- let anthropicClaudeSonnet46Model = new ModelConfiguration({
247
- cardInfo: new CardInfoField({ name: modelNameFor("anthropic/claude-sonnet-4.6") }),
248
- modelId: "anthropic/claude-sonnet-4.6",
249
- toolsSupported: true
250
- });
251
- let anthropicClaudeSonnet45Model = new ModelConfiguration({
252
- cardInfo: new CardInfoField({ name: modelNameFor("anthropic/claude-sonnet-4.5") }),
253
- modelId: "anthropic/claude-sonnet-4.5",
254
- toolsSupported: true
255
- });
256
- let anthropicClaudeSonnet37Model = new ModelConfiguration({
257
- cardInfo: new CardInfoField({ name: modelNameFor("anthropic/claude-3.7-sonnet") }),
258
- modelId: "anthropic/claude-3.7-sonnet",
259
- toolsSupported: true
260
- });
261
- let defaultSystemCard = new SystemCard({
262
- defaultModelConfiguration: anthropicClaudeSonnet46Model,
263
- modelConfigurations: [
264
- openAiGpt5Model,
265
- openAiGpt5ExtendedModel,
266
- openAiGpt4oMiniModel,
267
- anthropicClaudeSonnet46Model,
268
- anthropicClaudeSonnet45Model,
269
- anthropicClaudeSonnet37Model
270
- ]
271
- });
272
- let deepseekModel = new ModelConfiguration({
273
- cardInfo: new CardInfoField({ name: modelNameFor("deepseek/deepseek-chat-v3-0324") }),
274
- modelId: "deepseek/deepseek-chat-v3-0324",
275
- toolsSupported: true
276
- });
277
- let geminiFlashModel = new ModelConfiguration({
278
- cardInfo: new CardInfoField({ name: modelNameFor("google/gemini-2.5-flash") }),
279
- modelId: "google/gemini-2.5-flash",
280
- toolsSupported: true
281
- });
282
- let alternateSystemCard = new SystemCard({
283
- defaultModelConfiguration: deepseekModel,
284
- modelConfigurations: [
285
- deepseekModel,
286
- geminiFlashModel,
287
- openAiGpt5Model
288
- ]
289
- });
290
- await withCachedRealmSetup(async () => {
291
- await setupAcceptanceTestRealm({
292
- mockMatrixUtils,
293
- contents: {
294
- ...SYSTEM_CARD_FIXTURE_CONTENTS,
295
- "person.gts": { Person },
296
- "pet.gts": { Pet },
297
- "broken-card.gts": `
298
- import { CardDef, field, contains } from '@cardstack/base/card-api';
299
- import StringField from '@cardstack/base/string';
300
- import { BrokenField } from './does-not-exist';
301
- export class BrokenCard extends CardDef {
302
- static displayName = 'Broken Card';
303
- @field name = contains(StringField);
304
- @field broken = contains(BrokenField);
305
- }
306
- `,
307
- "BrokenCard/errored.json": { data: {
308
- attributes: { name: "Errored Instance" },
309
- meta: { adoptsFrom: {
310
- module: "../broken-card",
311
- name: "BrokenCard"
312
- } }
313
- } },
314
- "country.gts": countryDefinition,
315
- "Country/indonesia.json": { data: {
316
- attributes: { name: "Indonesia" },
317
- meta: { adoptsFrom: {
318
- module: `${testRealmURL}country`,
319
- name: "Country"
320
- } }
321
- } },
322
- "Pet/ringo.json": new Pet({ name: "Ringo" }),
323
- "Person/hassan.json": new Person({
324
- firstName: "Hassan",
325
- lastName: "Abdel-Rahman",
326
- pet: mangoPet,
327
- friends: [mangoPet]
328
- }),
329
- "Pet/mango.json": mangoPet,
330
- "Pet/vangogh.json": new Pet({ name: "Van Gogh" }),
331
- "Person/fadhlan.json": new Person({
332
- firstName: "Fadhlan",
333
- pet: mangoPet,
334
- friends: [mangoPet]
335
- }),
336
- "plant.gts": `
337
- import { CardDef, field, contains, StringField } from '@cardstack/base/card-api';
338
- export class Plant extends CardDef {
339
- static displayName = "Plant";
340
- @field commonName = contains(StringField);
341
- }
342
- `,
343
- "Plant/highbush-blueberry.json": { data: {
344
- attributes: { commonName: "Highbush Blueberry" },
345
- meta: { adoptsFrom: {
346
- module: `../plant`,
347
- name: "Plant"
348
- } }
349
- } },
350
- "Spec/plant-spec.json": { data: {
351
- type: "card",
352
- attributes: {
353
- ref: {
354
- name: "Plant",
355
- module: `${testRealmURL}plant`
356
- },
357
- specType: "card",
358
- cardTitle: "Plant spec"
359
- },
360
- meta: { adoptsFrom: {
361
- module: "@cardstack/base/spec",
362
- name: "Spec"
363
- } }
364
- } },
365
- "Skill/example.json": { data: {
366
- attributes: {
367
- cardTitle: "Example Skill",
368
- cardDescription: "This skill card is for testing purposes",
369
- instructions: "This is an example skill card",
370
- commands: []
371
- },
372
- meta: { adoptsFrom: skillCardRef }
373
- } },
374
- "Skill/example2.json": { data: {
375
- attributes: {
376
- cardTitle: "Example 2 Skill",
377
- cardDescription: "This skill card is also for testing purposes",
378
- instructions: "This is a second example skill card",
379
- commands: []
380
- },
381
- meta: { adoptsFrom: skillCardRef }
382
- } },
383
- "ModelConfiguration/gpt-4o-mini.json": openAiGpt4oMiniModel,
384
- "ModelConfiguration/gpt-5.json": openAiGpt5Model,
385
- "ModelConfiguration/gpt-5-extended.json": openAiGpt5ExtendedModel,
386
- "ModelConfiguration/claude-sonnet-4.6.json": anthropicClaudeSonnet46Model,
387
- "ModelConfiguration/claude-sonnet-4.5.json": anthropicClaudeSonnet45Model,
388
- "ModelConfiguration/claude-sonnet-3.7.json": anthropicClaudeSonnet37Model,
389
- "SystemCard/default.json": defaultSystemCard,
390
- "ModelConfiguration/deepseek-chat-v3-0324.json": deepseekModel,
391
- "ModelConfiguration/gemini-2.5-flash.json": geminiFlashModel,
392
- "SystemCard/productivity.json": alternateSystemCard,
393
- "index.json": new CardsGrid(),
394
- "realm.json": realmConfigCardJSON({
395
- name: "Test Workspace B",
396
- backgroundURL: "/test-fixtures/realm-images/pawel-czerwinski-Ly-ZLa-A5jti-Y-unsplash.jpg",
397
- iconURL: "/test-fixtures/realm-images/boxel-logo.png"
398
- })
399
- }
400
- });
401
- });
402
- getService("matrix-service").fetchMatrixHostedFile = async (_url) => {
403
- return new Response(mockedFileContent);
404
- };
405
- });
406
- (0, import_qunit.test)("attaches a card in a conversation multiple times", async function(assert) {
407
- await visitOperatorMode({ stacks: [[{
408
- id: `${testRealmURL}index`,
409
- format: "isolated"
410
- }]] });
411
- await click("[data-test-open-ai-assistant]");
412
- await waitFor(`[data-room-settled]`);
413
- const testCard = `${testRealmURL}Person/hassan`;
414
- for (let i = 1; i <= 3; i++) {
415
- await fillIn("[data-test-message-field]", `Message - ${i}`);
416
- await selectCardFromCatalog(testCard);
417
- await click("[data-test-send-message-btn]");
418
- }
419
- assertMessages(assert, [
420
- {
421
- from: "testuser",
422
- message: "Message - 1",
423
- cards: [{
424
- id: testCard,
425
- cardTitle: "Hassan"
426
- }]
427
- },
428
- {
429
- from: "testuser",
430
- message: "Message - 2",
431
- cards: [{
432
- id: testCard,
433
- cardTitle: "Hassan"
434
- }]
435
- },
436
- {
437
- from: "testuser",
438
- message: "Message - 3",
439
- cards: [{
440
- id: testCard,
441
- cardTitle: "Hassan"
442
- }]
443
- }
444
- ]);
445
- await click("[data-test-boxel-filter-list-button=\"All Cards\"]");
446
- await click(`[data-test-stack-card="${testRealmURL}index"] [data-test-cards-grid-item="${testCard}"] .field-component-card`);
447
- await waitFor(`[data-test-stack-card="${testCard}"]`);
448
- await click(`[data-test-stack-card="${testCard}"] [data-test-edit-button]`);
449
- await fillIn("[data-test-field=\"firstName\"] [data-test-boxel-input]", "Updated Name");
450
- await click(`[data-test-stack-card="${testCard}"] [data-test-edit-button]`);
451
- await fillIn("[data-test-message-field]", `Message with updated card`);
452
- await click("[data-test-send-message-btn]");
453
- assertMessages(assert, [
454
- {
455
- from: "testuser",
456
- message: "Message - 1",
457
- cards: [{
458
- id: testCard,
459
- cardTitle: "Updated Name Abdel-Rahman"
460
- }]
461
- },
462
- {
463
- from: "testuser",
464
- message: "Message - 2",
465
- cards: [{
466
- id: testCard,
467
- cardTitle: "Updated Name Abdel-Rahman"
468
- }]
469
- },
470
- {
471
- from: "testuser",
472
- message: "Message - 3",
473
- cards: [{
474
- id: testCard,
475
- cardTitle: "Updated Name Abdel-Rahman"
476
- }]
477
- },
478
- {
479
- from: "testuser",
480
- message: "Message with updated card",
481
- cards: [{
482
- id: testCard,
483
- cardTitle: "Updated Name Abdel-Rahman"
484
- }]
485
- }
486
- ]);
487
- });
488
- (0, import_qunit.test)("attached cards include computed fields", async function(assert) {
489
- await visitOperatorMode({ stacks: [[{
490
- id: `${testRealmURL}index`,
491
- format: "isolated"
492
- }]] });
493
- await click("[data-test-open-ai-assistant]");
494
- await waitFor(`[data-room-settled]`);
495
- const testCard = `${testRealmURL}Person/hassan`;
496
- await fillIn("[data-test-message-field]", `Message - 1`);
497
- await selectCardFromCatalog(testCard);
498
- await click("[data-test-send-message-btn]");
499
- assertMessages(assert, [{
500
- from: "testuser",
501
- message: "Message - 1",
502
- cards: [{
503
- id: testCard,
504
- cardTitle: "Hassan"
505
- }]
506
- }]);
507
- let roomEvents = mockMatrixUtils.getRoomEvents(matrixRoomId);
508
- let lastMessageEvent = roomEvents[roomEvents.length - 1];
509
- assert.ok(lastMessageEvent, "A message event was found");
510
- let messageDataString = lastMessageEvent.content?.data;
511
- assert.ok(messageDataString, "Message has data string");
512
- let messageData = JSON.parse(messageDataString);
513
- assert.ok(messageData, "Message data is parsable");
514
- let attachedCards = messageData.attachedCards;
515
- assert.ok(attachedCards, "Message has attachedCards");
516
- assert.strictEqual(attachedCards.length, 1, "One card is attached");
517
- let attachedCard = attachedCards[0];
518
- assert.ok(attachedCard, "Attached card is present");
519
- const mxcUrl = attachedCard.url;
520
- assert.ok(mxcUrl, "Attached card has a URL (mxc)");
521
- assert.ok(mxcUrl.startsWith("http://mock-server/_matrix/media/"), `Card URL "${mxcUrl}" should start with http://mock-server/_matrix/media/`);
522
- let cardContent = await getService("matrix-service").downloadCardFileDef(attachedCard);
523
- assert.strictEqual(cardContent.data.attributes.cardTitle, "Hassan Abdel-Rahman", "Computed card title is present in downloaded content");
524
- });
525
- (0, import_qunit.test)("displays active LLM in chat input", async function(assert) {
526
- await visitOperatorMode({ stacks: [[{
527
- id: `${testRealmURL}index`,
528
- format: "isolated"
529
- }]] });
530
- await click("[data-test-open-ai-assistant]");
531
- await waitFor(`[data-room-settled]`);
532
- let defaultModelName = modelNameFor("anthropic/claude-sonnet-4.6");
533
- assert.dom("[data-test-llm-select-selected]").hasText(triggerName(defaultModelName));
534
- await click("[data-test-llm-select-selected]");
535
- assert.dom("[data-test-llm-select-item]").exists({ count: 6 });
536
- let llmIdToChangeTo = "anthropic/claude-3.7-sonnet";
537
- let llmConfigId = configIdFor(llmIdToChangeTo);
538
- let llmNameToChangeTo = modelNameFor("anthropic/claude-3.7-sonnet");
539
- assert.dom(`[data-test-llm-select-item="${llmConfigId}"]`).hasText(llmNameToChangeTo);
540
- await click(`[data-test-llm-select-item="${llmConfigId}"] button`);
541
- assert.dom("[data-test-llm-select-selected]").hasText(triggerName(llmNameToChangeTo));
542
- let roomState = getRoomState(matrixRoomId, APP_BOXEL_ACTIVE_LLM, "");
543
- assert.strictEqual(roomState.model, llmIdToChangeTo);
544
- });
545
- (0, import_qunit.test)("model selector closes when a model is selected", async function(assert) {
546
- await visitOperatorMode({ stacks: [[{
547
- id: `${testRealmURL}index`,
548
- format: "isolated"
549
- }]] });
550
- await click("[data-test-open-ai-assistant]");
551
- await waitFor("[data-room-settled]");
552
- await click("[data-test-llm-select-selected]");
553
- assert.dom("[data-test-llm-select-item]").exists();
554
- let llmName = modelNameFor("openai/gpt-4o-mini");
555
- await click(`[data-test-llm-select-item="${configIdFor("openai/gpt-4o-mini")}"] button`);
556
- assert.dom("[data-test-llm-select-item]").doesNotExist("the model list closes after a selection");
557
- assert.dom("[data-test-llm-select-selected]").hasText(triggerName(llmName));
558
- });
559
- (0, import_qunit.test)("active LLM event includes metadata when switching models", async function(assert) {
560
- await visitOperatorMode({ stacks: [[{
561
- id: `${testRealmURL}index`,
562
- format: "isolated"
563
- }]] });
564
- await click("[data-test-open-ai-assistant]");
565
- await waitFor("[data-room-settled]");
566
- await click("[data-test-llm-select-selected]");
567
- await click(`[data-test-llm-select-item="${configIdFor("openai/gpt-4o-mini")}"] button`);
568
- await waitUntil(() => {
569
- return getRoomState(matrixRoomId, APP_BOXEL_ACTIVE_LLM, "").model === "openai/gpt-4o-mini";
570
- });
571
- let firstState = getRoomState(matrixRoomId, APP_BOXEL_ACTIVE_LLM, "");
572
- assert.strictEqual(firstState.model, "openai/gpt-4o-mini", "Switching to GPT-4o mini updates active LLM");
573
- assert.true(firstState.toolsSupported, "Active LLM event records tool support for GPT-4o mini");
574
- assert.strictEqual(firstState.reasoningEffort, null, "Reasoning effort is omitted when not configured");
575
- await click("[data-test-llm-select-selected]");
576
- await click(`[data-test-llm-select-item="${configIdFor("openai/gpt-5")}"] button`);
577
- await waitUntil(() => {
578
- return getRoomState(matrixRoomId, APP_BOXEL_ACTIVE_LLM, "").model === "openai/gpt-5";
579
- });
580
- let secondState = getRoomState(matrixRoomId, APP_BOXEL_ACTIVE_LLM, "");
581
- assert.strictEqual(secondState.model, "openai/gpt-5", "Switching back to GPT-5 updates active LLM");
582
- assert.true(secondState.toolsSupported, "Active LLM event records tool support for GPT-5");
583
- assert.strictEqual(secondState.reasoningEffort, "minimal", "Active LLM event records configured reasoning effort for GPT-5");
584
- });
585
- (0, import_qunit.test)("duplicate model IDs render as distinct menu items with correct state", async function(assert) {
586
- await visitOperatorMode({ stacks: [[{
587
- id: `${testRealmURL}index`,
588
- format: "isolated"
589
- }]] });
590
- await click("[data-test-open-ai-assistant]");
591
- await waitFor(`[data-room-settled]`);
592
- await click("[data-test-llm-select-selected]");
593
- let gpt5ConfigId = configIdFor("openai/gpt-5");
594
- let gpt5ExtendedConfigId = configIdFor("openai/gpt-5-extended");
595
- assert.dom(`[data-test-llm-select-item="${gpt5ConfigId}"]`).exists("GPT-5 (minimal) config appears in the menu");
596
- assert.dom(`[data-test-llm-select-item="${gpt5ExtendedConfigId}"]`).exists("GPT-5 Extended Thinking config appears in the menu");
597
- assert.dom(`[data-test-llm-select-item="${gpt5ConfigId}"]`).hasText(modelNameFor("openai/gpt-5"));
598
- assert.dom(`[data-test-llm-select-item="${gpt5ExtendedConfigId}"]`).hasText(modelNameFor("openai/gpt-5-extended"));
599
- await click(`[data-test-llm-select-item="${gpt5ExtendedConfigId}"] button`);
600
- await waitUntil(() => {
601
- let state = getRoomState(matrixRoomId, APP_BOXEL_ACTIVE_LLM, "");
602
- return state.model === "openai/gpt-5" && state.reasoningEffort === "high";
603
- });
604
- let extendedState = getRoomState(matrixRoomId, APP_BOXEL_ACTIVE_LLM, "");
605
- assert.strictEqual(extendedState.model, "openai/gpt-5", "Extended thinking variant sends the same modelId");
606
- assert.strictEqual(extendedState.reasoningEffort, "high", "Extended thinking variant sends its own reasoningEffort");
607
- await click("[data-test-llm-select-selected]");
608
- await click(`[data-test-llm-select-item="${gpt5ConfigId}"] button`);
609
- await waitUntil(() => {
610
- let state = getRoomState(matrixRoomId, APP_BOXEL_ACTIVE_LLM, "");
611
- return state.model === "openai/gpt-5" && state.reasoningEffort === "minimal";
612
- });
613
- let minimalState = getRoomState(matrixRoomId, APP_BOXEL_ACTIVE_LLM, "");
614
- assert.strictEqual(minimalState.model, "openai/gpt-5", "Minimal variant sends the same modelId");
615
- assert.strictEqual(minimalState.reasoningEffort, "minimal", "Minimal variant sends its own reasoningEffort");
616
- });
617
- (0, import_qunit.test)("defaults to the system card default regardless of submode", async function(assert) {
618
- await visitOperatorMode({ stacks: [[{
619
- id: `${testRealmURL}index`,
620
- format: "isolated"
621
- }]] });
622
- await click("[data-test-open-ai-assistant]");
623
- await waitFor(`[data-room-settled]`);
624
- let matrixService = getService("matrix-service");
625
- let defaultSystemModelId = matrixService.systemCard?.defaultModelConfiguration?.modelId ?? matrixService.systemCard?.modelConfigurations?.[0]?.modelId;
626
- assert.ok(defaultSystemModelId, "system card provides a default model");
627
- let expectedName = modelNameFor(defaultSystemModelId);
628
- assert.dom("[data-test-llm-select-selected]").hasText(triggerName(expectedName));
629
- await click("[data-test-submode-switcher-button]");
630
- await click("[data-test-boxel-menu-item-text=\"Code\"]");
631
- assert.dom("[data-test-llm-select-selected]").hasText(triggerName(expectedName));
632
- await click("[data-test-close-ai-assistant]");
633
- });
634
- (0, import_qunit.test)("selecting a new system card via menu updates available models", async function(assert) {
635
- await visitOperatorMode({ stacks: [[{
636
- id: `${testRealmURL}SystemCard/productivity`,
637
- format: "isolated"
638
- }]] });
639
- await click("[data-test-open-ai-assistant]");
640
- await waitFor(`[data-room-settled]`);
641
- await click("[data-test-llm-select-selected]");
642
- assert.dom(`[data-test-llm-select-item="${configIdFor("deepseek/deepseek-chat-v3-0324")}"]`).doesNotExist();
643
- await click("[data-test-llm-select-selected]");
644
- await click("[data-test-close-ai-assistant]");
645
- await click("[data-test-more-options-button]");
646
- await click("[data-test-boxel-menu-item-text=\"Set as My System Card\"]");
647
- let matrixService = getService("matrix-service");
648
- await waitUntil(() => matrixService.systemCard?.modelConfigurations?.[0]?.modelId === "deepseek/deepseek-chat-v3-0324");
649
- await click("[data-test-open-ai-assistant]");
650
- await waitFor(`[data-room-settled]`);
651
- assert.dom("[data-test-llm-select-selected]").hasText(triggerName(modelNameFor("deepseek/deepseek-chat-v3-0324")));
652
- await click("[data-test-llm-select-selected]");
653
- assert.dom(`[data-test-llm-select-item="${configIdFor("deepseek/deepseek-chat-v3-0324")}"]`).exists();
654
- assert.dom(`[data-test-llm-select-item="${configIdFor("deepseek/deepseek-chat-v3-0324")}"]`).hasText(modelNameFor("deepseek/deepseek-chat-v3-0324"));
655
- assert.dom(`[data-test-llm-select-item="${configIdFor("google/gemini-2.5-flash")}"]`).exists();
656
- await click("[data-test-pill-menu-button]");
657
- await click("[data-test-close-ai-assistant]");
658
- });
659
- (0, import_qunit.test)("LLM select footer shows \"Go to current system card\" action", async function(assert) {
660
- await visitOperatorMode({ stacks: [[{
661
- id: `${testRealmURL}index`,
662
- format: "isolated"
663
- }]] });
664
- await click("[data-test-open-ai-assistant]");
665
- await waitFor("[data-room-settled]");
666
- await click("[data-test-llm-select-selected]");
667
- assert.dom("[data-test-go-to-system-card]").exists("Go to system card action is visible");
668
- assert.dom("[data-test-go-to-system-card]").hasText("Go to Current System Card");
669
- await click("[data-test-pill-menu-button]");
670
- await click("[data-test-close-ai-assistant]");
671
- });
672
- (0, import_qunit.test)("\"Go to current system card\" closes the dashboard", async function(assert) {
673
- await visitOperatorMode({
674
- workspaceChooserOpened: true,
675
- stacks: [[{
676
- id: `${testRealmURL}index`,
677
- format: "isolated"
678
- }]]
679
- });
680
- assert.dom("[data-test-dashboard]").exists("dashboard is open");
681
- await click("[data-test-open-ai-assistant]");
682
- await waitFor("[data-room-settled]");
683
- await click("[data-test-llm-select-selected]");
684
- await click("[data-test-go-to-system-card]");
685
- assert.dom("[data-test-dashboard]").doesNotExist("dashboard is closed after going to system card");
686
- assert.dom(`[data-test-stack-card="${testRealmURL}SystemCard/default"]`).exists("the system card is shown on the stack");
687
- await click("[data-test-pill-menu-button]");
688
- await click("[data-test-close-ai-assistant]");
689
- });
690
- (0, import_qunit.test)("LLM select footer shows \"Restore default\" when non-default system card is active", async function(assert) {
691
- await visitOperatorMode({ stacks: [[{
692
- id: `${testRealmURL}SystemCard/productivity`,
693
- format: "isolated"
694
- }]] });
695
- await click("[data-test-more-options-button]");
696
- await click("[data-test-boxel-menu-item-text=\"Set as My System Card\"]");
697
- let matrixService = getService("matrix-service");
698
- await waitUntil(() => matrixService.systemCard?.modelConfigurations?.[0]?.modelId === "deepseek/deepseek-chat-v3-0324");
699
- await click("[data-test-open-ai-assistant]");
700
- await waitFor("[data-room-settled]");
701
- await click("[data-test-llm-select-selected]");
702
- assert.dom("[data-test-restore-default-system-card]").exists("Restore default action is visible for non-default system card");
703
- await click("[data-test-pill-menu-button]");
704
- await click("[data-test-close-ai-assistant]");
705
- });
706
- (0, import_qunit.test)("LLM select footer hides \"Restore default\" when default system card is active", async function(assert) {
707
- await visitOperatorMode({ stacks: [[{
708
- id: `${testRealmURL}index`,
709
- format: "isolated"
710
- }]] });
711
- await click("[data-test-open-ai-assistant]");
712
- await waitFor("[data-room-settled]");
713
- await click("[data-test-llm-select-selected]");
714
- assert.dom("[data-test-restore-default-system-card]").doesNotExist("Restore default action is hidden when default system card is active");
715
- await click("[data-test-pill-menu-button]");
716
- await click("[data-test-close-ai-assistant]");
717
- });
718
- (0, import_qunit.test)("auto-attached file is not displayed in interact mode", async function(assert) {
719
- await visitOperatorMode({
720
- submode: "interact",
721
- codePath: `${testRealmURL}index.json`,
722
- stacks: [[{
723
- id: `${testRealmURL}index`,
724
- format: "isolated"
725
- }]]
726
- });
727
- await click("[data-test-boxel-filter-list-button=\"All Cards\"]");
728
- await click("[data-test-cards-grid-item=\"http://test-realm/test/Person/fadhlan\"] .field-component-card");
729
- await click("[data-test-open-ai-assistant]");
730
- await waitFor(`[data-room-settled]`);
731
- assert.dom("[data-test-autoattached-file]").doesNotExist();
732
- assert.dom("[data-test-autoattached-card]").exists();
733
- await click("[data-test-submode-switcher-button]");
734
- await click("[data-test-boxel-menu-item-text=\"Code\"]");
735
- assert.dom("[data-test-autoattached-file]").exists();
736
- assert.dom("[data-test-autoattached-card]").exists();
737
- await click("[data-test-submode-switcher-button]");
738
- await click("[data-test-boxel-menu-item-text=\"Interact\"]");
739
- assert.dom("[data-test-autoattached-file]").doesNotExist();
740
- assert.dom("[data-test-autoattached-card]").exists();
741
- });
742
- (0, import_qunit.test)("cards are auto-attached in code mode", async function(assert) {
743
- await visitOperatorMode({
744
- submode: "interact",
745
- codePath: `${testRealmURL}index.json`,
746
- stacks: [[{
747
- id: `${testRealmURL}index`,
748
- format: "isolated"
749
- }]]
750
- });
751
- await click("[data-test-boxel-filter-list-button=\"All Cards\"]");
752
- await click("[data-test-cards-grid-item=\"http://test-realm/test/Person/fadhlan\"] .field-component-card");
753
- await click("[data-test-open-ai-assistant]");
754
- await waitFor(`[data-room-settled]`);
755
- await waitUntil(() => document.querySelector("[data-test-autoattached-card]") || document.querySelector("[data-test-autoattached-file]"));
756
- assert.dom("[data-test-autoattached-file]").doesNotExist();
757
- assert.dom("[data-test-autoattached-card]").exists();
758
- await click("[data-test-submode-switcher-button]");
759
- await click("[data-test-boxel-menu-item-text=\"Code\"]");
760
- assert.dom("[data-test-autoattached-file]").exists();
761
- assert.dom("[data-test-autoattached-card]").exists();
762
- await click(`[data-test-autoattached-card] [data-test-remove-card-btn]`);
763
- assert.dom("[data-test-autoattached-card]").doesNotExist();
764
- });
765
- (0, import_qunit.test)("auto-attaches the module of a card whose adoptsFrom is prefix-form", async function(assert) {
766
- await visitOperatorMode({
767
- submode: "code",
768
- codePath: `${testRealmURL}index.json`,
769
- stacks: [[]]
770
- });
771
- await click("[data-test-open-ai-assistant]");
772
- await waitFor(`[data-room-settled]`);
773
- let indexJSON = await (await getService("network").authedFetch(`${testRealmURL}index.json`, { headers: { Accept: SupportedMimeType.CardSource } })).json();
774
- assert.strictEqual(indexJSON.data.meta.adoptsFrom.module, "@cardstack/base/cards-grid", "the fixture adopts from a prefix-form module");
775
- let cardsGridModuleURL = getService("network").virtualNetwork.toURL(rri("@cardstack/base/cards-grid.gts")).href;
776
- assert.dom("[data-test-autoattached-file]").exists({ count: 2 });
777
- assert.dom(`[data-test-attached-file="${testRealmURL}index.json"][data-test-autoattached-file]`).exists();
778
- assert.dom(`[data-test-attached-file="${cardsGridModuleURL}"][data-test-autoattached-file]`).exists("the prefix-form module resolves to the base realm");
779
- });
780
- (0, import_qunit.test)("errored card instance is not auto-attached in code mode", async function(assert) {
781
- await visitOperatorMode({
782
- submode: "code",
783
- codePath: `${testRealmURL}BrokenCard/errored.json`,
784
- stacks: [[]]
785
- });
786
- await click("[data-test-open-ai-assistant]");
787
- await waitFor(`[data-room-settled]`);
788
- assert.dom("[data-test-autoattached-file]").exists("errored card JSON file should still be auto-attached as a file");
789
- assert.dom("[data-test-autoattached-card]").doesNotExist("errored card instance should not be auto-attached as a card");
790
- });
791
- (0, import_qunit.test)("can send a newly created auto-attached card", async function(assert) {
792
- await visitOperatorMode({
793
- submode: "interact",
794
- codePath: `${testRealmURL}index.json`,
795
- stacks: [[{
796
- id: `${testRealmURL}index`,
797
- format: "isolated"
798
- }]]
799
- });
800
- let id;
801
- this.onSave((url) => {
802
- id = url.href;
803
- });
804
- await click("[data-test-open-ai-assistant]");
805
- assert.dom("[data-test-attached-card]").doesNotExist();
806
- await click("[data-test-boxel-filter-list-button=\"All Cards\"]");
807
- await click("[data-test-create-new-card-button]");
808
- await click(`[data-test-item-button="${baseRealm.url}types/card"]`);
809
- await click(`[data-test-card-chooser-go-button]`);
810
- await waitUntil(() => id);
811
- id = id;
812
- await fillIn("[data-test-field=\"cardInfo-name\"] input", "new card");
813
- assert.dom(`[data-test-attached-card]`).containsText("new card");
814
- await fillIn("[data-test-message-field]", `Message with updated card`);
815
- await click("[data-test-send-message-btn]");
816
- assertMessages(assert, [{
817
- from: "testuser",
818
- message: "Message with updated card",
819
- cards: [{
820
- id,
821
- cardTitle: "new card"
822
- }]
823
- }]);
824
- });
825
- (0, import_qunit.test)("can open attached card dropdown menu", async function(assert) {
826
- await visitOperatorMode({
827
- submode: "interact",
828
- codePath: `${testRealmURL}index.json`,
829
- stacks: [[{
830
- id: `${testRealmURL}index`,
831
- format: "isolated"
832
- }]]
833
- });
834
- await click("[data-test-boxel-filter-list-button=\"All Cards\"]");
835
- await click("[data-test-cards-grid-item=\"http://test-realm/test/Person/fadhlan\"] .field-component-card");
836
- await click("[data-test-open-ai-assistant]");
837
- await waitFor(`[data-room-settled]`);
838
- await waitUntil(() => document.querySelector("[data-test-autoattached-card]") || document.querySelector("[data-test-autoattached-file]"));
839
- await fillIn("[data-test-message-field]", `Message with updated card`);
840
- await click("[data-test-send-message-btn]");
841
- mockedFileContent = "test card content";
842
- await click("[data-test-workspace-chooser-toggle]");
843
- await click("[data-test-attached-file-dropdown-button=\"Fadhlan\"]");
844
- assert.dom("[data-test-boxel-menu-item-text=\"Open in Code Mode\"]").exists();
845
- assert.dom("[data-test-boxel-menu-item-text=\"Copy Submitted Content\"]").exists();
846
- assert.dom("[data-test-boxel-menu-item-text=\"Restore Submitted Content\"]").exists();
847
- await waitFor("[data-test-copy-file-content=\"test card content\"]");
848
- await click("[data-test-boxel-menu-item-text=\"Open in Code Mode\"]");
849
- await waitUntil(() => getMonacoContent().startsWith("{\"data\":{\"type\":\"card\",\"id\":\"http://test-realm/test/Person/fadhlan\""), { timeout: 5e3 });
850
- });
851
- (0, import_qunit.test)("can open attach file modal", async function(assert) {
852
- await visitOperatorMode({
853
- submode: "code",
854
- stacks: [[{
855
- id: `${testRealmURL}index`,
856
- format: "isolated"
857
- }]]
858
- });
859
- await click("[data-test-open-ai-assistant]");
860
- await waitFor(`[data-room-settled]`);
861
- await getService("monaco-service").getMonacoContext();
862
- await click("[data-test-attach-button]");
863
- await click("[data-test-attach-file-btn]");
864
- assert.dom("[data-test-choose-file-modal]").exists();
865
- assert.dom("[data-test-file=\"pet.gts\"]").exists();
866
- await click("[data-test-realm-dropdown-trigger]");
867
- await waitFor("[data-test-boxel-menu-item-text=\"Base Workspace\"]");
868
- await click("[data-test-boxel-menu-item-text=\"Base Workspace\"]");
869
- assert.dom("[data-test-file=\"boolean.gts\"]").exists();
870
- await click("[data-test-realm-dropdown-trigger]");
871
- await waitFor("[data-test-boxel-menu-item-text=\"Test Workspace B\"]");
872
- await click("[data-test-boxel-menu-item-text=\"Test Workspace B\"]");
873
- await click("[data-test-file=\"person.gts\"]");
874
- await click("[data-test-choose-file-modal-add-button]");
875
- assert.dom("[data-test-attached-file]").exists({ count: 1 });
876
- assert.dom("[data-test-attached-file]").hasText("person.gts");
877
- await click("[data-test-attach-button]");
878
- await click("[data-test-attach-file-btn]");
879
- await click("[data-test-file=\"pet.gts\"]");
880
- await click("[data-test-choose-file-modal-add-button]");
881
- assert.dom("[data-test-attached-file]").exists({ count: 2 });
882
- assert.dom(`[data-test-attached-file="${testRealmURL}person.gts"]`).hasText("person.gts");
883
- assert.dom(`[data-test-attached-file="${testRealmURL}pet.gts"]`).hasText("pet.gts");
884
- await click(`[data-test-attached-file="${testRealmURL}person.gts"] [data-test-remove-file-btn]`);
885
- assert.dom("[data-test-attached-file]").hasText("pet.gts");
886
- await fillIn("[data-test-message-field]", `Message With File`);
887
- await click("[data-test-send-message-btn]");
888
- assertMessages(assert, [{
889
- from: "testuser",
890
- message: "Message With File",
891
- files: [{
892
- sourceUrl: `${testRealmURL}pet.gts`,
893
- name: "pet.gts"
894
- }]
895
- }]);
896
- });
897
- (0, import_qunit.test)("can display and remove auto attached file", async function(assert) {
898
- await visitOperatorMode({
899
- submode: "code",
900
- stacks: [[{
901
- id: `${testRealmURL}index`,
902
- format: "isolated"
903
- }]]
904
- });
905
- await click("[data-test-open-ai-assistant]");
906
- await waitFor(`[data-room-settled]`);
907
- await click("[data-test-file=\"person.gts\"]");
908
- assert.dom("[data-test-autoattached-file]").exists();
909
- assert.dom(`[data-test-autoattached-file]`).hasText("person.gts");
910
- await click("[data-test-file-browser-toggle]");
911
- await click(`[data-test-autoattached-file] [data-test-remove-file-btn]`);
912
- assert.dom("[data-test-autoattached-file]").doesNotExist();
913
- await click("[data-test-file-browser-toggle]");
914
- await click("[data-test-file=\"pet.gts\"]");
915
- assert.dom("[data-test-autoattached-file]").exists();
916
- assert.dom(`[data-test-autoattached-file]`).hasText("pet.gts");
917
- await click("[data-test-file-browser-toggle]");
918
- await click("[data-test-file=\"person.gts\"]");
919
- assert.dom("[data-test-autoattached-file]").exists();
920
- assert.dom(`[data-test-autoattached-file]`).hasText("person.gts");
921
- });
922
- (0, import_qunit.test)("loads more AI rooms when scrolling", async function(assert) {
923
- for (let i = 1; i <= 15; i++) createAndJoinRoom({
924
- sender: "@testuser:localhost",
925
- name: `AI Room ${i}`
926
- });
927
- await visitOperatorMode({ stacks: [[{
928
- id: `${testRealmURL}index`,
929
- format: "isolated"
930
- }]] });
931
- await click("[data-test-open-ai-assistant]");
932
- await waitFor(`[data-room-settled]`);
933
- await click("[data-test-past-sessions-button]");
934
- assert.dom("[data-test-past-sessions]").exists();
935
- await waitUntil(() => document.querySelectorAll("[data-test-joined-room]").length >= 10);
936
- let initialRoomCount = document.querySelectorAll("[data-test-joined-room]").length;
937
- assert.ok(initialRoomCount >= 10, `Expected at least 10 rooms, got ${initialRoomCount}`);
938
- let pastSessionsElement = await waitFor("[data-test-past-sessions] [data-test-panel-popover-body]");
939
- pastSessionsElement.scrollTop = pastSessionsElement.scrollHeight;
940
- await triggerEvent(pastSessionsElement, "scroll");
941
- await waitUntil(() => {
942
- return document.querySelectorAll("[data-test-joined-room]").length >= Math.min(initialRoomCount + 1, 16);
943
- });
944
- assert.dom("[data-test-joined-room]").exists({ count: 16 });
945
- });
946
- (0, import_qunit.test)("preserves ai assistant panel open/closed status", async function(assert) {
947
- let operatorModeStateParam = wrapper_default({
948
- stacks: [[{
949
- id: `${testRealmURL}index`,
950
- format: "isolated"
951
- }]],
952
- aiAssistantOpen: false
953
- });
954
- await visit(`/?operatorModeEnabled=true&operatorModeState=${encodeURIComponent(operatorModeStateParam)}`);
955
- assert.dom("[data-test-ai-assistant-panel]").doesNotExist();
956
- await click("[data-test-open-ai-assistant]");
957
- await waitFor(`[data-room-settled]`);
958
- assert.dom("[data-test-ai-assistant-panel]").exists();
959
- let operatorModeStateService = getService("operator-mode-state-service");
960
- assert.true(operatorModeStateService.aiAssistantOpen, "URL state should have aiAssistantOpen: true");
961
- await click("[data-test-close-ai-assistant]");
962
- assert.dom("[data-test-ai-assistant-panel]").doesNotExist();
963
- assert.false(operatorModeStateService.aiAssistantOpen, "URL state should have aiAssistantOpen: false");
964
- await visitOperatorMode({
965
- stacks: [[{
966
- id: `${testRealmURL}index`,
967
- format: "isolated"
968
- }]],
969
- aiAssistantOpen: true
970
- });
971
- assert.dom("[data-test-ai-assistant-panel]").exists();
972
- });
973
- (0, import_qunit.test)("ai assistant panel is closed by default when the URL omits aiAssistantOpen", async function(assert) {
974
- let operatorModeStateParam = wrapper_default({ stacks: [[{
975
- id: `${testRealmURL}index`,
976
- format: "isolated"
977
- }]] });
978
- await visit(`/?operatorModeEnabled=true&operatorModeState=${encodeURIComponent(operatorModeStateParam)}`);
979
- assert.dom("[data-test-ai-assistant-panel]").doesNotExist();
980
- assert.false(getService("operator-mode-state-service").aiAssistantOpen, "panel is closed by default with no URL param and no persisted preference");
981
- });
982
- (0, import_qunit.test)("auto-attached cards behaviour", async function(assert) {
983
- await visitOperatorMode({
984
- submode: "interact",
985
- codePath: `${testRealmURL}index.json`,
986
- stacks: [[{
987
- id: `${testRealmURL}index`,
988
- format: "isolated"
989
- }]]
990
- });
991
- await click("[data-test-boxel-filter-list-button=\"All Cards\"]");
992
- await click(`[data-test-cards-grid-item="${testRealmURL}Person/fadhlan"] .field-component-card`);
993
- await click("[data-test-open-ai-assistant]");
994
- await waitFor(`[data-room-settled]`);
995
- assert.dom("[data-test-autoattached-file]").doesNotExist();
996
- assert.dom("[data-test-autoattached-card]").exists({ count: 1 });
997
- assert.dom(`[data-test-attached-card="${testRealmURL}Person/fadhlan"][data-test-autoattached-card]`).exists();
998
- await click("[data-test-add-card-right-stack]");
999
- await fillIn("[data-test-search-field]", "Mango");
1000
- await click(`[data-test-search-result="${testRealmURL}Pet/mango"]`);
1001
- assert.dom("[data-test-autoattached-card]").exists({ count: 2 });
1002
- assert.dom(`[data-test-attached-card="${testRealmURL}Person/fadhlan"][data-test-autoattached-card]`).exists();
1003
- assert.dom(`[data-test-attached-card="${testRealmURL}Pet/mango"][data-test-autoattached-card]`).exists();
1004
- await click("[data-test-attach-button]");
1005
- await click("[data-test-attach-card-btn]");
1006
- await fillIn("[data-test-search-field]", "Mango");
1007
- await click(`[data-test-item-button="${testRealmURL}Pet/mango"]`);
1008
- await click("[data-test-card-chooser-go-button]");
1009
- assert.dom("[data-test-autoattached-card]").exists({ count: 1 });
1010
- assert.dom(`[data-test-attached-card="${testRealmURL}Person/fadhlan"][data-test-autoattached-card]`).exists();
1011
- assert.dom(`[data-test-attached-card="${testRealmURL}Pet/mango"][data-test-autoattached-card]`).doesNotExist();
1012
- assert.dom(`[data-test-attached-card="${testRealmURL}Pet/mango"]`).exists();
1013
- await click("[data-test-submode-switcher-button]");
1014
- await click("[data-test-boxel-menu-item-text=\"Code\"]");
1015
- assert.dom(`[data-test-attached-card="${testRealmURL}Person/fadhlan"][data-test-autoattached-card]`).doesNotExist();
1016
- assert.dom(`[data-test-attached-card="${testRealmURL}Pet/mango"][data-test-autoattached-card]`).doesNotExist();
1017
- assert.dom(`[data-test-attached-card="${testRealmURL}Pet/mango"]`).exists();
1018
- await click("[data-test-file-browser-toggle]");
1019
- await click("[data-test-directory=\"Person/\"]");
1020
- await click("[data-test-file=\"Person/fadhlan.json\"]");
1021
- assert.dom("[data-test-attached-card]").exists({ count: 2 });
1022
- assert.dom("[data-test-autoattached-card]").exists({ count: 1 });
1023
- assert.dom("[data-test-autoattached-file]").exists({ count: 2 });
1024
- assert.dom(`[data-test-attached-file="${testRealmURL}Person/fadhlan.json"][data-test-autoattached-file]`).exists();
1025
- assert.dom(`[data-test-attached-file="${testRealmURL}person.gts"][data-test-autoattached-file]`).exists();
1026
- assert.dom(`[data-test-attached-card="${testRealmURL}Pet/mango"]`).exists();
1027
- assert.dom(`[data-test-attached-card="${testRealmURL}Person/fadhlan"][data-test-autoattached-card]`).exists();
1028
- await click("[data-test-file=\"country.gts\"]");
1029
- await click("[data-test-module-inspector-view=\"preview\"]");
1030
- assert.dom("[data-test-attached-card]").exists({ count: 2 });
1031
- assert.dom("[data-test-autoattached-card]").exists({ count: 1 });
1032
- assert.dom("[data-test-autoattached-file]").exists({ count: 1 });
1033
- assert.dom(`[data-test-attached-card="${testRealmURL}Pet/mango"]`).exists();
1034
- assert.dom(`[data-test-attached-card="${testRealmURL}Country/indonesia"][data-test-autoattached-card]`).exists();
1035
- assert.dom(`[data-test-attached-file="${testRealmURL}country.gts"][data-test-autoattached-file]`).exists();
1036
- await click(`[data-test-attached-card="${testRealmURL}Country/indonesia"] [data-test-remove-card-btn]`);
1037
- assert.dom(`[data-test-attached-card="${testRealmURL}Country/indonesia"]`).doesNotExist();
1038
- });
1039
- (0, import_qunit.test)("displays \"Writing the answer\" when streaming", async function(assert) {
1040
- await visitOperatorMode({
1041
- submode: "interact",
1042
- codePath: `${testRealmURL}index.json`,
1043
- stacks: [[{
1044
- id: `${testRealmURL}index`,
1045
- format: "isolated"
1046
- }]]
1047
- });
1048
- await click("[data-test-boxel-filter-list-button=\"All Cards\"]");
1049
- await click(`[data-test-cards-grid-item="${testRealmURL}Person/fadhlan"] .field-component-card`);
1050
- await click("[data-test-open-ai-assistant]");
1051
- await waitFor(`[data-room-settled]`);
1052
- let eventId = simulateRemoteMessage(matrixRoomId, "@aibot:localhost", {
1053
- body: "Streaming...",
1054
- msgtype: APP_BOXEL_MESSAGE_MSGTYPE,
1055
- format: "org.matrix.custom.html",
1056
- isStreamingFinished: false
1057
- });
1058
- await waitFor("[data-test-ai-assistant-action-bar]", { timeout: 5e3 });
1059
- assert.dom("[data-test-ai-assistant-action-bar]").containsText("Writing the answer");
1060
- assert.dom("[data-test-stop-generating]").exists();
1061
- simulateRemoteMessage(matrixRoomId, "@aibot:localhost", {
1062
- body: "Streaming finished",
1063
- msgtype: APP_BOXEL_MESSAGE_MSGTYPE,
1064
- format: "org.matrix.custom.html",
1065
- isStreamingFinished: true,
1066
- "m.relates_to": {
1067
- event_id: eventId,
1068
- rel_type: "m.replace"
1069
- }
1070
- });
1071
- await waitUntil(() => !document.querySelector("[data-test-ai-assistant-action-bar]"), { timeout: 5e3 });
1072
- });
1073
- (0, import_qunit.test)("says a cancelled reply was stopped, and kept, at the bottom of the message", async function(assert) {
1074
- await visitOperatorMode({
1075
- submode: "interact",
1076
- codePath: `${testRealmURL}index.json`,
1077
- stacks: [[{
1078
- id: `${testRealmURL}index`,
1079
- format: "isolated"
1080
- }]]
1081
- });
1082
- await click("[data-test-boxel-filter-list-button=\"All Cards\"]");
1083
- await click(`[data-test-cards-grid-item="${testRealmURL}Person/fadhlan"] .field-component-card`);
1084
- await click("[data-test-open-ai-assistant]");
1085
- await waitFor(`[data-room-settled]`);
1086
- let eventId = simulateRemoteMessage(matrixRoomId, "@aibot:localhost", {
1087
- body: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
1088
- msgtype: APP_BOXEL_MESSAGE_MSGTYPE,
1089
- format: "org.matrix.custom.html",
1090
- isStreamingFinished: false,
1091
- isCanceled: false
1092
- });
1093
- await waitFor("[data-test-ai-assistant-message]");
1094
- assert.dom("[data-test-ai-assistant-action-bar]").exists();
1095
- assert.dom("[data-test-ai-assistant-action-bar]").containsText("Writing the answer");
1096
- assert.dom("[data-test-stop-generating]").exists();
1097
- assert.dom("[data-test-ai-message-content]").hasText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
1098
- simulateRemoteMessage(matrixRoomId, "@aibot:localhost", {
1099
- body: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
1100
- msgtype: APP_BOXEL_MESSAGE_MSGTYPE,
1101
- format: "org.matrix.custom.html",
1102
- isStreamingFinished: true,
1103
- isCanceled: true,
1104
- "m.relates_to": {
1105
- event_id: eventId,
1106
- rel_type: "m.replace"
1107
- }
1108
- });
1109
- await waitUntil(() => !document.querySelector("[data-test-ai-assistant-action-bar]"), { timeout: 5e3 });
1110
- assert.dom("[data-test-ai-message-content]").hasText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. ■ Stopped · partial answer kept");
1111
- });
1112
- (0, import_qunit.test)(`says a reply stopped during reasoning was stopped`, async function(assert) {
1113
- await visitOperatorMode({
1114
- submode: "interact",
1115
- codePath: `${testRealmURL}index.json`,
1116
- stacks: [[{
1117
- id: `${testRealmURL}index`,
1118
- format: "isolated"
1119
- }]]
1120
- });
1121
- await click("[data-test-boxel-filter-list-button=\"All Cards\"]");
1122
- await click(`[data-test-cards-grid-item="${testRealmURL}Person/fadhlan"] .field-component-card`);
1123
- await click("[data-test-open-ai-assistant]");
1124
- await waitFor(`[data-room-settled]`);
1125
- let eventId = simulateRemoteMessage(matrixRoomId, "@aibot:localhost", {
1126
- [APP_BOXEL_REASONING_CONTENT_KEY]: "This message will be cancelled before the reasoning is finished",
1127
- msgtype: APP_BOXEL_MESSAGE_MSGTYPE,
1128
- format: "org.matrix.custom.html",
1129
- isStreamingFinished: false,
1130
- isCanceled: false
1131
- });
1132
- await waitFor("[data-test-ai-assistant-message]");
1133
- assert.dom("[data-test-ai-assistant-action-bar]").exists();
1134
- assert.dom("[data-test-ai-assistant-action-bar]").containsText("Thinking");
1135
- assert.dom("[data-test-stop-generating]").exists();
1136
- assert.dom("[data-test-ai-message-content]").containsText("Thinking");
1137
- assert.dom("[data-test-ai-message-content]").doesNotContainText("■ Stopped");
1138
- assert.dom("[data-test-reasoning]").containsText("This message will be cancelled before the reasoning is finished");
1139
- simulateRemoteMessage(matrixRoomId, "@aibot:localhost", {
1140
- [APP_BOXEL_REASONING_CONTENT_KEY]: "This message will be cancelled before the reasoning is finished",
1141
- msgtype: APP_BOXEL_MESSAGE_MSGTYPE,
1142
- format: "org.matrix.custom.html",
1143
- isStreamingFinished: true,
1144
- isCanceled: true,
1145
- "m.relates_to": {
1146
- event_id: eventId,
1147
- rel_type: "m.replace"
1148
- }
1149
- });
1150
- await waitUntil(() => !document.querySelector("[data-test-ai-assistant-action-bar]"), { timeout: 5e3 });
1151
- assert.dom("[data-test-ai-message-content]").containsText("Thought");
1152
- assert.dom("[data-test-ai-message-content]").containsText("■ Stopped");
1153
- await click("[data-test-reasoning]");
1154
- assert.dom("[data-test-reasoning]").containsText("This message will be cancelled before the reasoning is finished");
1155
- });
1156
- (0, import_qunit.test)(`should not display action bar when there is no code patch block`, async function(assert) {
1157
- await visitOperatorMode({
1158
- submode: "interact",
1159
- codePath: `${testRealmURL}index.json`,
1160
- stacks: [[{
1161
- id: `${testRealmURL}index`,
1162
- format: "isolated"
1163
- }]]
1164
- });
1165
- await click("[data-test-boxel-filter-list-button=\"All Cards\"]");
1166
- await click(`[data-test-cards-grid-item="${testRealmURL}Person/fadhlan"] .field-component-card`);
1167
- await click("[data-test-open-ai-assistant]");
1168
- await waitFor(`[data-room-settled]`);
1169
- simulateRemoteMessage(matrixRoomId, "@aibot:localhost", {
1170
- body: `\`\`\`
1171
- { "name": "test" }
1172
- \`\`\``,
1173
- msgtype: APP_BOXEL_MESSAGE_MSGTYPE,
1174
- format: "org.matrix.custom.html",
1175
- isStreamingFinished: true
1176
- });
1177
- await waitFor("[data-test-ai-assistant-message]");
1178
- assert.dom("[data-test-ai-assistant-action-bar]").doesNotExist();
1179
- });
1180
- (0, import_qunit.test)("code mode context sent with message", async function(assert) {
1181
- await visitOperatorMode({
1182
- submode: "code",
1183
- codePath: `${testRealmURL}Plant/highbush-blueberry.json`,
1184
- stacks: [[{
1185
- id: `${testRealmURL}index`,
1186
- format: "isolated"
1187
- }, {
1188
- id: `${testRealmURL}Plant/highbush-blueberry`,
1189
- format: "isolated"
1190
- }]]
1191
- });
1192
- await click("[data-test-open-ai-assistant]");
1193
- await waitFor(`[data-room-settled]`);
1194
- assert.dom("[data-test-focus-pill-main]").containsText("Card");
1195
- assert.dom("[data-test-focus-pill-meta]").exists({ count: 1 }, "FocusPill shows one meta pill");
1196
- let metaEls = document.querySelectorAll("[data-test-focus-pill-meta]");
1197
- assert.dom(metaEls[0]).hasText("Isolated", "FocusPill shows item type \"Format\"");
1198
- await click("[data-test-format-chooser=\"embedded\"]");
1199
- assert.dom("[data-test-focus-pill-meta]").exists({ count: 1 }, "FocusPill shows one meta pill");
1200
- metaEls = document.querySelectorAll("[data-test-focus-pill-meta]");
1201
- assert.dom(metaEls[0]).hasText("Embedded", "FocusPill shows item type \"Format\"");
1202
- await fillIn("[data-test-message-field]", `Message - 1`);
1203
- await click("[data-test-send-message-btn]");
1204
- let roomEvents = mockMatrixUtils.getRoomEvents(matrixRoomId);
1205
- let lastMessageEvent = roomEvents[roomEvents.length - 1];
1206
- let contextSent = JSON.parse(lastMessageEvent.content.data).context;
1207
- assert.strictEqual(contextSent.realmUrl, testRealmURL, "Context sent with message contains correct realmUrl");
1208
- assert.strictEqual(contextSent.submode, "code", "Context sent with message contains correct submode");
1209
- assert.deepEqual(contextSent.openCardIds, [`${testRealmURL}Plant/highbush-blueberry`], "Context sent with message contains correct openCardIds");
1210
- assert.strictEqual(contextSent.codeMode.currentFile, `${testRealmURL}Plant/highbush-blueberry.json`, "Context sent with message contains correct currentFile");
1211
- assert.deepEqual(contextSent.codeMode.selectionRange, {
1212
- startLine: 1,
1213
- startColumn: 1,
1214
- endLine: 1,
1215
- endColumn: 1
1216
- }, "Context sent with message contains correct selectionRange");
1217
- assert.strictEqual(contextSent.codeMode.moduleInspectorPanel, "preview", "Context sent with message contains correct moduleInspectorPanel");
1218
- assert.deepEqual(contextSent.codeMode.previewPanelSelection, {
1219
- cardId: `${testRealmURL}Plant/highbush-blueberry`,
1220
- format: "embedded"
1221
- }, "Context sent with message contains correct previewPanelSelection");
1222
- assert.deepEqual(contextSent.codeMode.selectedCodeRef, void 0, "Context sent with message contains correct selectedCodeRef");
1223
- assert.deepEqual(contextSent.codeMode.inheritanceChain, void 0, "Context sent with message contains undefined inheritanceChain when no selectedCodeRef");
1224
- assert.strictEqual(contextSent.codeMode.activeSpecId, void 0, "Context sent with message contains undefined activeSpecId when spec panel is not active");
1225
- assert.deepEqual(contextSent.realmPermissions, {
1226
- canRead: true,
1227
- canWrite: true
1228
- }, "Context sent with message contains correct realmPermissions");
1229
- await click("[data-test-clickable-definition-container]");
1230
- await waitFor("[data-test-focus-pill-main]");
1231
- assert.dom("[data-test-focus-pill-main]").containsText("Plant", "FocusPill shows selected code label");
1232
- assert.dom("[data-test-focus-pill-meta]").exists({ count: 1 }, "FocusPill shows one meta pill");
1233
- metaEls = document.querySelectorAll("[data-test-focus-pill-meta]");
1234
- assert.dom(metaEls[0]).hasText("Schema", "FocusPill shows item type \"Schema\"");
1235
- await fillIn("[data-test-message-field]", `Message - 2`);
1236
- await click("[data-test-send-message-btn]");
1237
- roomEvents = mockMatrixUtils.getRoomEvents(matrixRoomId);
1238
- lastMessageEvent = roomEvents[roomEvents.length - 1];
1239
- contextSent = JSON.parse(lastMessageEvent.content.data).context;
1240
- assert.strictEqual(contextSent.realmUrl, testRealmURL, "Context sent with message contains correct realmUrl");
1241
- assert.strictEqual(contextSent.submode, "code", "Context sent with message contains correct submode");
1242
- assert.deepEqual(contextSent.openCardIds, [], "Context sent with message contains correct openCardIds");
1243
- assert.strictEqual(contextSent.codeMode.currentFile, `${testRealmURL}plant.gts`, "Context sent with message contains correct currentFile");
1244
- assert.deepEqual(contextSent.codeMode.selectionRange, {
1245
- startLine: 3,
1246
- startColumn: 45,
1247
- endLine: 3,
1248
- endColumn: 45
1249
- }, "Context sent with message contains correct selectionRange");
1250
- assert.strictEqual(contextSent.codeMode.moduleInspectorPanel, "schema", "Context sent with message contains correct moduleInspectorPanel");
1251
- assert.strictEqual(contextSent.codeMode.previewPanelSelection, void 0, "Context sent with message contains correct previewPanelSelection");
1252
- assert.deepEqual(contextSent.codeMode.selectedCodeRef, {
1253
- module: rri("http://test-realm/test/plant"),
1254
- name: "Plant"
1255
- }, "Context sent with message contains correct selectedCodeRef");
1256
- assert.ok(contextSent.codeMode.inheritanceChain, "Context sent with message contains inheritanceChain");
1257
- assert.deepEqual(contextSent.codeMode.inheritanceChain[0].codeRef, {
1258
- module: rri("http://test-realm/test/plant"),
1259
- name: "Plant"
1260
- }, "First item in inheritanceChain is the Plant card");
1261
- assert.ok(Array.isArray(contextSent.codeMode.inheritanceChain[0].fields), "Plant card has fields array");
1262
- assert.ok(contextSent.codeMode.inheritanceChain[0].fields.includes("commonName"), "Plant card includes commonName field");
1263
- let lastInheritanceItem = contextSent.codeMode.inheritanceChain[contextSent.codeMode.inheritanceChain.length - 1];
1264
- assert.strictEqual(lastInheritanceItem.codeRef.name, "CardDef", "Last item in inheritanceChain is CardDef");
1265
- contextSent.codeMode.inheritanceChain.forEach((item, index) => {
1266
- assert.ok(Array.isArray(item.fields), `Inheritance chain item ${index} has fields array`);
1267
- assert.ok("codeRef" in item, `Inheritance chain item ${index} has codeRef property`);
1268
- });
1269
- assert.ok(lastInheritanceItem.codeRef.module.includes("card-api"), "Last item in inheritanceChain comes from card-api module");
1270
- assert.deepEqual(contextSent.realmPermissions, {
1271
- canRead: true,
1272
- canWrite: true
1273
- }, "Context sent with message contains correct realmPermissions");
1274
- await click("[data-test-boxel-button][data-test-module-inspector-view=\"preview\"]");
1275
- let editor = getService("monaco-service").editor;
1276
- if (editor?.setSelection) editor.setSelection({
1277
- startLineNumber: 3,
1278
- startColumn: 45,
1279
- endLineNumber: 6,
1280
- endColumn: 1
1281
- });
1282
- await waitFor("[data-test-focus-pill-main]");
1283
- await delay(20);
1284
- assert.dom("[data-test-focus-pill-main]").containsText("Plant", "FocusPill still shows selected code label");
1285
- assert.dom("[data-test-focus-pill-meta]").exists({ count: 3 }, "FocusPill shows three meta pills");
1286
- metaEls = document.querySelectorAll("[data-test-focus-pill-meta]");
1287
- assert.dom(metaEls[0]).hasText("Preview", "FocusPill shows item type \"Preview\"");
1288
- assert.dom(metaEls[1]).hasText("Isolated", "FocusPill shows format \"Isolated\"");
1289
- assert.dom(metaEls[2]).hasText("Lines 3-6", "FocusPill shows multi-line selection range \"Lines 3-6\"");
1290
- await click("[data-test-format-chooser=\"fitted\"]");
1291
- metaEls = document.querySelectorAll("[data-test-focus-pill-meta]");
1292
- assert.dom(metaEls[1]).hasText("Fitted", "FocusPill shows format \"Fitted\"");
1293
- await fillIn("[data-test-message-field]", `Message - 3`);
1294
- await click("[data-test-send-message-btn]");
1295
- roomEvents = mockMatrixUtils.getRoomEvents(matrixRoomId);
1296
- lastMessageEvent = roomEvents[roomEvents.length - 1];
1297
- contextSent = JSON.parse(lastMessageEvent.content.data).context;
1298
- assert.strictEqual(contextSent.realmUrl, testRealmURL, "Context sent with message contains correct realmUrl");
1299
- assert.strictEqual(contextSent.submode, "code", "Context sent with message contains correct submode");
1300
- assert.deepEqual(contextSent.openCardIds, [`${testRealmURL}Plant/highbush-blueberry`], "Context sent with message contains correct openCardIds");
1301
- assert.strictEqual(contextSent.codeMode.currentFile, `${testRealmURL}plant.gts`, "Context sent with message contains correct currentFile");
1302
- assert.deepEqual(contextSent.codeMode.selectionRange, {
1303
- startLine: 3,
1304
- startColumn: 45,
1305
- endLine: 6,
1306
- endColumn: 1
1307
- }, "Context sent with message contains correct selectionRange");
1308
- assert.strictEqual(contextSent.codeMode.moduleInspectorPanel, "preview", "Context sent with message contains correct moduleInspectorPanel");
1309
- assert.deepEqual(contextSent.codeMode.previewPanelSelection, {
1310
- cardId: `${testRealmURL}Plant/highbush-blueberry`,
1311
- format: "fitted"
1312
- }, "Context sent with message contains correct previewPanelSelection");
1313
- assert.deepEqual(contextSent.codeMode.selectedCodeRef, {
1314
- module: rri("http://test-realm/test/plant"),
1315
- name: "Plant"
1316
- }, "Context sent with message contains correct selectedCodeRef");
1317
- assert.strictEqual(contextSent.codeMode.activeSpecId, void 0, "Context sent with message contains undefined activeSpecId when spec panel is not active");
1318
- assert.deepEqual(contextSent.realmPermissions, {
1319
- canRead: true,
1320
- canWrite: true
1321
- }, "Context sent with message contains correct realmPermissions");
1322
- await click("[data-test-boxel-button][data-test-module-inspector-view=\"spec\"]");
1323
- await waitFor("[data-test-focus-pill-main]");
1324
- {
1325
- const metaEls = document.querySelectorAll("[data-test-focus-pill-meta]");
1326
- assert.dom(metaEls[0]).hasText("Spec", "FocusPill shows item type \"Spec\"");
1327
- }
1328
- await fillIn("[data-test-message-field]", `Message - 4`);
1329
- await click("[data-test-send-message-btn]");
1330
- roomEvents = mockMatrixUtils.getRoomEvents(matrixRoomId);
1331
- lastMessageEvent = roomEvents[roomEvents.length - 1];
1332
- contextSent = JSON.parse(lastMessageEvent.content.data).context;
1333
- assert.strictEqual(contextSent.realmUrl, testRealmURL, "Context sent with message contains correct realmUrl");
1334
- assert.strictEqual(contextSent.submode, "code", "Context sent with message contains correct submode");
1335
- assert.deepEqual(contextSent.openCardIds, ["http://test-realm/test/Spec/plant-spec"], "Context sent with message contains correct openCardIds");
1336
- assert.strictEqual(contextSent.codeMode.currentFile, `${testRealmURL}plant.gts`, "Context sent with message contains correct currentFile");
1337
- assert.strictEqual(contextSent.codeMode.moduleInspectorPanel, "spec", "Context sent with message contains correct moduleInspectorPanel");
1338
- assert.strictEqual(contextSent.codeMode.previewPanelSelection, void 0, "Context sent with message contains correct previewPanelSelection");
1339
- assert.deepEqual(contextSent.codeMode.selectedCodeRef, {
1340
- module: rri("http://test-realm/test/plant"),
1341
- name: "Plant"
1342
- }, "Context sent with message contains correct selectedCodeRef");
1343
- assert.ok(contextSent.codeMode.activeSpecId, "Context sent with message contains activeSpecId when spec panel is active");
1344
- assert.true(contextSent.codeMode.activeSpecId.startsWith(testRealmURL), "activeSpecId should start with test realm URL");
1345
- assert.deepEqual(contextSent.realmPermissions, {
1346
- canRead: true,
1347
- canWrite: true
1348
- }, "Context sent with message contains correct realmPermissions");
1349
- });
1350
- (0, import_qunit.test)("code mode context names a base module by its prefix form", async function(assert) {
1351
- let { virtualNetwork } = getService("network");
1352
- await visitOperatorMode({
1353
- submode: "code",
1354
- codePath: virtualNetwork.toURLHref(baseRRI("card-api.gts")),
1355
- stacks: [[]]
1356
- });
1357
- await click("[data-test-open-ai-assistant]");
1358
- await waitFor(`[data-room-settled]`);
1359
- await fillIn("[data-test-message-field]", `Message`);
1360
- await click("[data-test-send-message-btn]");
1361
- let roomEvents = mockMatrixUtils.getRoomEvents(matrixRoomId);
1362
- let contextSent = JSON.parse(roomEvents[roomEvents.length - 1].content.data).context;
1363
- assert.strictEqual(contextSent.codeMode.currentFile, baseRRI("card-api.gts"), "currentFile is the prefix form");
1364
- assert.strictEqual(contextSent.realmPrefixes?.[baseRRI("")], virtualNetwork.toURLHref(baseRRI("")), "the context maps the base prefix to the URL it is served from");
1365
- });
1366
- (0, import_qunit.test)("dashboard context sent with message", async function(assert) {
1367
- await visitOperatorMode({
1368
- submode: "interact",
1369
- workspaceChooserOpened: true,
1370
- stacks: [[]]
1371
- });
1372
- await click("[data-test-open-ai-assistant]");
1373
- await waitFor(`[data-room-settled]`);
1374
- await fillIn("[data-test-message-field]", `Message - 1`);
1375
- await click("[data-test-send-message-btn]");
1376
- let roomEvents = mockMatrixUtils.getRoomEvents(matrixRoomId);
1377
- let lastMessageEvent = roomEvents[roomEvents.length - 1];
1378
- let contextSent = JSON.parse(lastMessageEvent.content.data).context;
1379
- assert.strictEqual(contextSent.realmUrl, void 0, "Context sent with message does not contain realmUrl");
1380
- assert.strictEqual(contextSent.submode, "workspace-chooser", "Context sent with message contains correct submode");
1381
- assert.deepEqual(contextSent.workspaces, [
1382
- {
1383
- name: "Test Workspace B",
1384
- type: "user-workspace",
1385
- url: testRealmURL
1386
- },
1387
- catalogRealmURL && {
1388
- name: "Cardstack Catalog",
1389
- type: "catalog-workspace",
1390
- url: catalogRealmURL
1391
- },
1392
- {
1393
- name: "Boxel Skills",
1394
- type: "catalog-workspace",
1395
- url: skillsRealmURL
1396
- }
1397
- ].filter(Boolean), "Context sent with message contains correct workspaces");
1398
- });
1399
- (0, import_qunit.test)("clicking auto-attached card makes it a chosen card", async function(assert) {
1400
- await visitOperatorMode({
1401
- submode: "interact",
1402
- stacks: [[{
1403
- id: `${testRealmURL}Person/fadhlan`,
1404
- format: "isolated"
1405
- }]]
1406
- });
1407
- await click("[data-test-open-ai-assistant]");
1408
- await waitFor(`[data-room-settled]`);
1409
- assert.dom("[data-test-autoattached-card]").exists({ count: 1 });
1410
- assert.dom(`[data-test-attached-card="${testRealmURL}Person/fadhlan"][data-test-autoattached-card]`).exists();
1411
- await click(`[data-test-attached-card="${testRealmURL}Person/fadhlan"][data-test-autoattached-card]`);
1412
- assert.dom("[data-test-autoattached-card]").doesNotExist();
1413
- assert.dom(`[data-test-attached-card="${testRealmURL}Person/fadhlan"]`).exists();
1414
- assert.dom(`[data-test-attached-card="${testRealmURL}Person/fadhlan"][data-test-autoattached-card]`).doesNotExist();
1415
- await click(`[data-test-attached-card="${testRealmURL}Person/fadhlan"] [data-test-remove-card-btn]`);
1416
- assert.dom(`[data-test-attached-card="${testRealmURL}Person/fadhlan"]`).doesNotExist();
1417
- });
1418
- (0, import_qunit.test)("clicking auto-attached file makes it a chosen file", async function(assert) {
1419
- await visitOperatorMode({
1420
- submode: "code",
1421
- codePath: `${testRealmURL}plant.gts`,
1422
- stacks: [[{
1423
- id: `${testRealmURL}index`,
1424
- format: "isolated"
1425
- }]]
1426
- });
1427
- await click("[data-test-open-ai-assistant]");
1428
- await waitFor(`[data-room-settled]`);
1429
- assert.dom("[data-test-autoattached-file]").exists({ count: 1 });
1430
- assert.dom(`[data-test-attached-file="${testRealmURL}plant.gts"][data-test-autoattached-file]`).exists();
1431
- await click(`[data-test-attached-file="${testRealmURL}plant.gts"][data-test-autoattached-file]`);
1432
- assert.dom("[data-test-autoattached-file]").doesNotExist();
1433
- assert.dom(`[data-test-attached-file="${testRealmURL}plant.gts"]`).exists();
1434
- assert.dom(`[data-test-attached-file="${testRealmURL}plant.gts"][data-test-autoattached-file]`).doesNotExist();
1435
- await click(`[data-test-attached-file="${testRealmURL}plant.gts"] [data-test-remove-file-btn]`);
1436
- assert.dom(`[data-test-attached-file="${testRealmURL}plant.gts"]`).doesNotExist();
1437
- await click("[data-test-module-inspector-view=\"spec\"]");
1438
- await waitFor("[data-test-spec-selector-item-path]");
1439
- assert.dom("[data-test-autoattached-card]").exists({ count: 1 });
1440
- let autoAttachedCards = document.querySelectorAll("[data-test-autoattached-card]");
1441
- let hasAutoAttachedSpec = Array.from(autoAttachedCards).some((card) => {
1442
- return card.getAttribute("data-test-attached-card")?.includes("Spec/plant-spec");
1443
- });
1444
- assert.ok(hasAutoAttachedSpec, "Auto-attached card should be the plant spec card");
1445
- });
1446
- (0, import_qunit.test)("auto-attaches spec card when spec panel is open and spec is selected", async function(assert) {
1447
- await visitOperatorMode({
1448
- submode: "code",
1449
- codePath: `${testRealmURL}plant.gts`,
1450
- stacks: [[{
1451
- id: `${testRealmURL}index`,
1452
- format: "isolated"
1453
- }]]
1454
- });
1455
- await click("[data-test-open-ai-assistant]");
1456
- await waitFor(`[data-room-settled]`);
1457
- await click("[data-test-module-inspector-view=\"spec\"]");
1458
- await waitFor("[data-test-spec-selector-item-path]");
1459
- assert.dom("[data-test-autoattached-card]").exists({ count: 1 });
1460
- let autoAttachedCards = document.querySelectorAll("[data-test-autoattached-card]");
1461
- let hasAutoAttachedSpec = Array.from(autoAttachedCards).some((card) => {
1462
- return card.getAttribute("data-test-attached-card")?.includes("Spec/plant-spec");
1463
- });
1464
- assert.ok(hasAutoAttachedSpec, "Auto-attached card should be the plant spec card");
1465
- });
1466
- (0, import_qunit.test)("does not auto-attach spec card when spec panel is closed", async function(assert) {
1467
- await visitOperatorMode({
1468
- submode: "code",
1469
- codePath: `${testRealmURL}plant.gts`,
1470
- stacks: [[{
1471
- id: `${testRealmURL}index`,
1472
- format: "isolated"
1473
- }]]
1474
- });
1475
- await click("[data-test-open-ai-assistant]");
1476
- await waitFor(`[data-room-settled]`);
1477
- await click("[data-test-module-inspector-view=\"spec\"]");
1478
- await waitFor("[data-test-spec-selector-item-path]");
1479
- await click("[data-test-module-inspector-view=\"schema\"]");
1480
- let autoAttachedCards = document.querySelectorAll("[data-test-autoattached-card]");
1481
- let hasAutoAttachedSpec = Array.from(autoAttachedCards).some((card) => {
1482
- return card.getAttribute("data-test-attached-card")?.includes("Spec/");
1483
- });
1484
- assert.false(hasAutoAttachedSpec, "No spec card should be auto-attached when spec panel is closed");
1485
- });
1486
- (0, import_qunit.test)("does not auto-attach spec card when no spec is selected", async function(assert) {
1487
- await visitOperatorMode({
1488
- submode: "code",
1489
- codePath: `${testRealmURL}country.gts`,
1490
- stacks: [[{
1491
- id: `${testRealmURL}index`,
1492
- format: "isolated"
1493
- }]]
1494
- });
1495
- await click("[data-test-open-ai-assistant]");
1496
- await waitFor(`[data-room-settled]`);
1497
- await click("[data-test-module-inspector-view=\"spec\"]");
1498
- assert.dom("[data-test-spec-selector-item-path]").doesNotExist();
1499
- let autoAttachedCards = document.querySelectorAll("[data-test-autoattached-card]");
1500
- let hasAutoAttachedSpec = Array.from(autoAttachedCards).some((card) => {
1501
- return card.getAttribute("data-test-attached-card")?.includes("Spec/");
1502
- });
1503
- assert.false(hasAutoAttachedSpec, "No spec card should be auto-attached when no spec is selected");
1504
- });
1505
- (0, import_qunit.test)("manually attached spec cards do not duplicate auto-attached ones", async function(assert) {
1506
- await visitOperatorMode({
1507
- submode: "code",
1508
- codePath: `${testRealmURL}plant.gts`,
1509
- stacks: [[{
1510
- id: `${testRealmURL}index`,
1511
- format: "isolated"
1512
- }]]
1513
- });
1514
- await click("[data-test-open-ai-assistant]");
1515
- await waitFor(`[data-room-settled]`);
1516
- await click("[data-test-module-inspector-view=\"spec\"]");
1517
- await waitFor("[data-test-spec-selector-item-path]");
1518
- await waitUntil(() => {
1519
- let autoAttachedCards = document.querySelectorAll("[data-test-autoattached-card]");
1520
- return Array.from(autoAttachedCards).some((card) => {
1521
- return card.getAttribute("data-test-attached-card")?.includes("Spec/plant-spec");
1522
- });
1523
- });
1524
- let autoAttachedCardsBefore = document.querySelectorAll("[data-test-autoattached-card]");
1525
- let autoAttachedSpecId = Array.from(autoAttachedCardsBefore).find((card) => {
1526
- return card.getAttribute("data-test-attached-card")?.includes("Spec/");
1527
- })?.getAttribute("data-test-attached-card");
1528
- if (autoAttachedSpecId) {
1529
- await click("[data-test-attach-button]");
1530
- await click("[data-test-attach-card-btn]");
1531
- await fillIn("[data-test-search-field]", "Plant spec");
1532
- await click(`[data-test-item-button="${autoAttachedSpecId}"]`);
1533
- await click("[data-test-card-chooser-go-button]");
1534
- let specCards = document.querySelectorAll(`[data-test-attached-card="${autoAttachedSpecId}"]`);
1535
- assert.strictEqual(specCards.length, 1, "Spec card should only appear once, not duplicated");
1536
- let remainingAutoAttachedCards = document.querySelectorAll("[data-test-autoattached-card]");
1537
- let hasAutoAttachedSpec = Array.from(remainingAutoAttachedCards).some((card) => {
1538
- return card.getAttribute("data-test-attached-card") === autoAttachedSpecId;
1539
- });
1540
- assert.false(hasAutoAttachedSpec, "Manually attached spec should no longer be auto-attached");
1541
- } else assert.ok(false, "Expected a spec card to be auto-attached, but none was found");
1542
- });
1543
- (0, import_qunit.test)("manually attached cards and files persist through reload without duplicating auto attachments", async function(assert) {
1544
- src_default.localStorage.removeItem(AiAssistantMessageDrafts);
1545
- await visitOperatorMode({
1546
- submode: "code",
1547
- codePath: `${testRealmURL}plant.gts`,
1548
- stacks: [[{
1549
- id: `${testRealmURL}index`,
1550
- format: "isolated"
1551
- }]],
1552
- aiAssistantOpen: true
1553
- });
1554
- await waitFor(`[data-room-settled]`);
1555
- await click("[data-test-module-inspector-view=\"spec\"]");
1556
- await waitFor("[data-test-spec-selector-item-path]");
1557
- let autoAttachedSpecId;
1558
- await waitUntil(() => {
1559
- let autoAttachedCards = document.querySelectorAll("[data-test-autoattached-card]");
1560
- let specCard = Array.from(autoAttachedCards).find((card) => {
1561
- return card.getAttribute("data-test-attached-card")?.includes("Spec/");
1562
- });
1563
- if (specCard) {
1564
- autoAttachedSpecId = specCard.getAttribute("data-test-attached-card");
1565
- return true;
1566
- }
1567
- return false;
1568
- });
1569
- assert.ok(autoAttachedSpecId, "expected a spec card to be auto-attached");
1570
- await click("[data-test-attach-button]");
1571
- await click("[data-test-attach-card-btn]");
1572
- await fillIn("[data-test-search-field]", "Plant spec");
1573
- await click(`[data-test-item-button="${autoAttachedSpecId}"]`);
1574
- await click("[data-test-card-chooser-go-button]");
1575
- await click("[data-test-attach-button]");
1576
- await click("[data-test-attach-file-btn]");
1577
- await click("[data-test-file=\"plant.gts\"]");
1578
- await click("[data-test-choose-file-modal-add-button]");
1579
- await fillIn("[data-test-message-field]", "Reload keeps my draft");
1580
- await visitOperatorMode({
1581
- submode: "code",
1582
- codePath: `${testRealmURL}plant.gts`,
1583
- stacks: [[{
1584
- id: `${testRealmURL}index`,
1585
- format: "isolated"
1586
- }]],
1587
- aiAssistantOpen: true
1588
- });
1589
- await waitFor(`[data-test-room-settled]`);
1590
- await click("[data-test-module-inspector-view=\"spec\"]");
1591
- await waitFor("[data-test-spec-selector-item-path]");
1592
- assert.dom("[data-test-message-field]").hasValue("Reload keeps my draft");
1593
- assert.dom(`[data-test-attached-card="${autoAttachedSpecId}"]`).exists({ count: 1 });
1594
- assert.dom(`[data-test-autoattached-card][data-test-attached-card="${autoAttachedSpecId}"]`).doesNotExist();
1595
- assert.dom(`[data-test-attached-file="${testRealmURL}plant.gts"]`).exists({ count: 1 });
1596
- assert.dom("[data-test-autoattached-file]").doesNotExist();
1597
- });
1598
- (0, import_qunit.test)("auto-attached spec card can be removed", async function(assert) {
1599
- await visitOperatorMode({
1600
- submode: "code",
1601
- codePath: `${testRealmURL}plant.gts`,
1602
- stacks: [[{
1603
- id: `${testRealmURL}index`,
1604
- format: "isolated"
1605
- }]]
1606
- });
1607
- await click("[data-test-open-ai-assistant]");
1608
- await waitFor(`[data-room-settled]`);
1609
- await click("[data-test-module-inspector-view=\"spec\"]");
1610
- await waitFor("[data-test-spec-selector-item-path]");
1611
- await waitUntil(() => {
1612
- let autoAttachedCards = document.querySelectorAll("[data-test-autoattached-card]");
1613
- return Array.from(autoAttachedCards).some((card) => {
1614
- return card.getAttribute("data-test-attached-card")?.includes("Spec/plant-spec");
1615
- });
1616
- });
1617
- let autoAttachedSpecCard = Array.from(document.querySelectorAll("[data-test-autoattached-card]")).find((card) => {
1618
- return card.getAttribute("data-test-attached-card")?.includes("Spec/");
1619
- });
1620
- if (autoAttachedSpecCard) {
1621
- let specCardId = autoAttachedSpecCard.getAttribute("data-test-attached-card");
1622
- await click(autoAttachedSpecCard.querySelector("[data-test-remove-card-btn]"));
1623
- assert.dom(`[data-test-attached-card="${specCardId}"]`).doesNotExist();
1624
- } else assert.ok(false, "Expected a spec card to be auto-attached, but none was found");
1625
- });
1626
- (0, import_qunit.test)("spec card re-auto-attaches when switching back to spec panel", async function(assert) {
1627
- await visitOperatorMode({
1628
- submode: "code",
1629
- codePath: `${testRealmURL}plant.gts`,
1630
- stacks: [[{
1631
- id: `${testRealmURL}index`,
1632
- format: "isolated"
1633
- }]]
1634
- });
1635
- await click("[data-test-open-ai-assistant]");
1636
- await waitFor(`[data-room-settled]`);
1637
- await click("[data-test-module-inspector-view=\"spec\"]");
1638
- await waitFor("[data-test-spec-selector-item-path]");
1639
- await waitUntil(() => {
1640
- let autoAttachedCards = document.querySelectorAll("[data-test-autoattached-card]");
1641
- return Array.from(autoAttachedCards).some((card) => {
1642
- return card.getAttribute("data-test-attached-card")?.includes("Spec/plant-spec");
1643
- });
1644
- });
1645
- let autoAttachedSpecCards = Array.from(document.querySelectorAll("[data-test-autoattached-card]")).filter((card) => {
1646
- return card.getAttribute("data-test-attached-card")?.includes("Spec/");
1647
- });
1648
- assert.ok(autoAttachedSpecCards.length > 0, "Spec card should be auto-attached when spec panel is open");
1649
- await click("[data-test-module-inspector-view=\"schema\"]");
1650
- let autoAttachedSpecCardsAfterSwitch = Array.from(document.querySelectorAll("[data-test-autoattached-card]")).filter((card) => {
1651
- return card.getAttribute("data-test-attached-card")?.includes("Spec/");
1652
- });
1653
- assert.strictEqual(autoAttachedSpecCardsAfterSwitch.length, 0, "Spec card should not be auto-attached when spec panel is closed");
1654
- await click("[data-test-module-inspector-view=\"spec\"]");
1655
- await waitUntil(() => {
1656
- let autoAttachedCards = document.querySelectorAll("[data-test-autoattached-card]");
1657
- return Array.from(autoAttachedCards).some((card) => {
1658
- return card.getAttribute("data-test-attached-card")?.includes("Spec/plant-spec");
1659
- });
1660
- });
1661
- let autoAttachedSpecCardsAfterReturn = Array.from(document.querySelectorAll("[data-test-autoattached-card]")).filter((card) => {
1662
- return card.getAttribute("data-test-attached-card")?.includes("Spec/");
1663
- });
1664
- assert.ok(autoAttachedSpecCardsAfterReturn.length > 0, "Spec card should be auto-attached again when returning to spec panel");
1665
- });
1666
- (0, import_qunit.test)("\"Add Same Skills\" copies skill configuration to new session", async function(assert) {
1667
- await visitOperatorMode({
1668
- stacks: [[{
1669
- id: `${testRealmURL}index`,
1670
- format: "isolated"
1671
- }]],
1672
- aiAssistantOpen: true
1673
- });
1674
- await waitFor(`[data-room-settled]`);
1675
- await addSkillToAiAssistant(`${testRealmURL}Skill/example`);
1676
- await addSkillToAiAssistant(`${testRealmURL}Skill/example2`);
1677
- await click("[data-test-skill-menu]");
1678
- await waitUntil(() => document.querySelectorAll("[data-test-skill-menu] [data-test-attached-card]")?.length === 2);
1679
- assert.dom(`[data-test-skill-menu] [data-test-attached-card="${testRealmURL}Skill/example"]`).exists();
1680
- assert.dom(`[data-test-skill-menu] [data-test-attached-card="${testRealmURL}Skill/example2"]`).exists();
1681
- assert.dom(`[data-test-skill-toggle="${testRealmURL}Skill/example-on"`).exists();
1682
- assert.dom(`[data-test-skill-toggle="${testRealmURL}Skill/example2-on"`).exists();
1683
- await click(`[data-test-skill-toggle="${testRealmURL}Skill/example2-on"`);
1684
- await waitFor(`[data-test-skill-toggle="${testRealmURL}Skill/example2-off"`);
1685
- assert.dom(`[data-test-skill-toggle="${testRealmURL}Skill/example2-off"`).exists();
1686
- await fillIn("[data-test-message-field]", "Enabling create new session button");
1687
- await click("[data-test-send-message-btn]");
1688
- let roomsBeforeSameSkills = getRoomIds();
1689
- await click("[data-test-create-room-btn]", { shiftKey: true });
1690
- await click("[data-test-new-session-settings-option=\"Add Same Skills\"]");
1691
- await click("[data-test-new-session-settings-create-button]");
1692
- await waitFor("[data-room-settled]");
1693
- let duplicatedSkillsRoomId = getRoomIds().find((roomId) => !roomsBeforeSameSkills.includes(roomId));
1694
- assert.ok(duplicatedSkillsRoomId, "Creating a new session with copied skills creates a new room");
1695
- if (duplicatedSkillsRoomId) {
1696
- let activeLLMState = getRoomState(duplicatedSkillsRoomId, APP_BOXEL_ACTIVE_LLM, "");
1697
- assert.strictEqual(typeof activeLLMState.toolsSupported, "boolean", "New room active LLM event includes toolsSupported metadata");
1698
- assert.true(Object.prototype.hasOwnProperty.call(activeLLMState, "reasoningEffort"), "New room active LLM event includes reasoningEffort metadata");
1699
- }
1700
- await click("[data-test-skill-menu][data-test-pill-menu-button]");
1701
- await waitFor("[data-test-skill-menu]");
1702
- await waitUntil(() => document.querySelectorAll("[data-test-skill-menu] [data-test-attached-card]")?.length === 2);
1703
- assert.dom(`[data-test-skill-menu] [data-test-attached-card="${testRealmURL}Skill/example"]`).exists();
1704
- assert.dom(`[data-test-skill-menu] [data-test-attached-card="${testRealmURL}Skill/example2"]`).exists();
1705
- assert.dom(`[data-test-skill-toggle="${testRealmURL}Skill/example-on"`).exists();
1706
- assert.dom(`[data-test-skill-toggle="${testRealmURL}Skill/example2-off"`).exists();
1707
- await fillIn("[data-test-message-field]", "Enabling create new session button");
1708
- await click("[data-test-send-message-btn]");
1709
- let roomsBeforeNewSession = getRoomIds();
1710
- await waitFor("[data-test-create-room-btn]:not([disabled])");
1711
- await click("[data-test-create-room-btn]");
1712
- await waitFor("[data-room-settled]");
1713
- let newlyCreatedRoomId = getRoomIds().find((roomId) => !roomsBeforeNewSession.includes(roomId));
1714
- assert.ok(newlyCreatedRoomId, "Creating a new session creates a new room");
1715
- if (newlyCreatedRoomId) {
1716
- let activeLLMState = getRoomState(newlyCreatedRoomId, APP_BOXEL_ACTIVE_LLM, "");
1717
- assert.strictEqual(typeof activeLLMState.toolsSupported, "boolean", "Newly created room includes toolsSupported metadata");
1718
- assert.true(Object.prototype.hasOwnProperty.call(activeLLMState, "reasoningEffort"), "Newly created room includes reasoningEffort metadata");
1719
- }
1720
- await click("[data-test-skill-menu][data-test-pill-menu-button]");
1721
- await waitFor("[data-test-skill-menu]");
1722
- try {
1723
- await waitUntil(() => document.querySelectorAll("[data-test-skill-menu] [data-test-attached-card]")?.length === 1);
1724
- } catch {
1725
- let attached = Array.from(document.querySelectorAll("[data-test-skill-menu] [data-test-attached-card]")).map((el) => el.getAttribute("data-test-attached-card"));
1726
- assert.ok(false, `Default skill never rendered on the new session's skill menu. Attached cards seen: ${JSON.stringify(attached)}; expected exactly [${skillsIndexId}].`);
1727
- return;
1728
- }
1729
- assert.dom("[data-test-skill-menu] [data-test-attached-card]").exists({ count: 1 });
1730
- assert.dom(`[data-test-skill-menu] [data-test-attached-card="${skillsIndexId}"]`).exists();
1731
- });
1732
- (0, import_qunit.test)("ask/act toggle defaults to ask on new session", async function(assert) {
1733
- await visitOperatorMode({ stacks: [[{
1734
- id: `${testRealmURL}index`,
1735
- format: "isolated"
1736
- }]] });
1737
- await click("[data-test-open-ai-assistant]");
1738
- await waitFor("[data-room-settled]");
1739
- assert.dom("[data-test-llm-mode-toggle] [data-test-pretui-segmented-option=\"ask\"]").isChecked("Ask is selected by default on new session");
1740
- assert.dom("[data-test-llm-mode-toggle] [data-test-pretui-segmented-option=\"act\"]").isNotChecked("Act is not selected by default");
1741
- });
1742
- (0, import_qunit.test)("new session inherits llm mode from current room", async function(assert) {
1743
- await visitOperatorMode({ stacks: [[{
1744
- id: `${testRealmURL}index`,
1745
- format: "isolated"
1746
- }]] });
1747
- await click("[data-test-open-ai-assistant]");
1748
- await waitFor("[data-room-settled]");
1749
- await click("[data-test-llm-mode-toggle] [data-test-pretui-segmented-option=\"act\"]");
1750
- assert.dom("[data-test-llm-mode-toggle] [data-test-pretui-segmented-option=\"act\"]").isChecked("LLM mode is set to act");
1751
- await fillIn("[data-test-message-field]", "Enable create new session button");
1752
- await click("[data-test-send-message-btn]");
1753
- let roomsBeforeNewSession = getRoomIds();
1754
- await waitFor("[data-test-create-room-btn]:not([disabled])");
1755
- await click("[data-test-create-room-btn]");
1756
- await waitFor("[data-room-settled]");
1757
- let newlyCreatedRoomId = getRoomIds().find((roomId) => !roomsBeforeNewSession.includes(roomId));
1758
- assert.ok(newlyCreatedRoomId, "Creating a new session creates a new room");
1759
- if (newlyCreatedRoomId) {
1760
- let llmModeState = getRoomState(newlyCreatedRoomId, APP_BOXEL_LLM_MODE, "");
1761
- assert.strictEqual(llmModeState?.mode, "act", "New session inherits LLM mode from current room");
1762
- }
1763
- });
1764
- (0, import_qunit.test)("copies file history when creating new session with option checked", async function(assert) {
1765
- await visitOperatorMode({
1766
- submode: "interact",
1767
- stacks: [[{
1768
- id: `${testRealmURL}index`,
1769
- format: "isolated"
1770
- }]]
1771
- });
1772
- await click("[data-test-open-ai-assistant]");
1773
- await waitFor(`[data-room-settled]`);
1774
- await fillIn("[data-test-message-field]", "Message with card");
1775
- await selectCardFromCatalog(`${testRealmURL}Person/hassan`);
1776
- await click("[data-test-send-message-btn]");
1777
- await fillIn("[data-test-message-field]", "Message with file");
1778
- await click("[data-test-attach-button]");
1779
- await click("[data-test-attach-file-btn]");
1780
- await click("[data-test-file=\"pet.gts\"]");
1781
- await click("[data-test-choose-file-modal-add-button]");
1782
- await click("[data-test-send-message-btn]");
1783
- await fillIn("[data-test-message-field]", "Message with another card");
1784
- await selectCardFromCatalog(`${testRealmURL}Pet/mango`);
1785
- await click("[data-test-send-message-btn]");
1786
- assertMessages(assert, [
1787
- {
1788
- from: "testuser",
1789
- message: "Message with card",
1790
- cards: [{
1791
- id: `${testRealmURL}Person/hassan`,
1792
- cardTitle: "Hassan"
1793
- }]
1794
- },
1795
- {
1796
- from: "testuser",
1797
- message: "Message with file",
1798
- files: [{
1799
- sourceUrl: `${testRealmURL}pet.gts`,
1800
- name: "pet.gts"
1801
- }]
1802
- },
1803
- {
1804
- from: "testuser",
1805
- message: "Message with another card",
1806
- cards: [{
1807
- id: `${testRealmURL}Pet/mango`,
1808
- cardTitle: "Mango"
1809
- }]
1810
- }
1811
- ]);
1812
- await click("[data-test-create-room-btn]", { shiftKey: true });
1813
- await click("[data-test-new-session-settings-option=\"Copy File History\"]");
1814
- await click("[data-test-new-session-settings-create-button]");
1815
- await waitFor(`[data-room-settled]`);
1816
- await waitForSessionPreparationToFinish();
1817
- await waitUntil(() => {
1818
- return document.querySelectorAll("[data-test-message-idx]").length === 1;
1819
- });
1820
- assertMessages(assert, [{
1821
- from: "testuser",
1822
- message: "This session includes files and cards from the previous conversation for context.",
1823
- cards: [{
1824
- id: `${testRealmURL}Person/hassan`,
1825
- cardTitle: "Hassan"
1826
- }, {
1827
- id: `${testRealmURL}Pet/mango`,
1828
- cardTitle: "Mango"
1829
- }],
1830
- files: [{
1831
- sourceUrl: `${testRealmURL}pet.gts`,
1832
- name: "pet.gts"
1833
- }]
1834
- }]);
1835
- });
1836
- (0, import_qunit.test)("summarizes current session when creating new session with option checked", async function(assert) {
1837
- await visitOperatorMode({
1838
- submode: "interact",
1839
- stacks: [[{
1840
- id: `${testRealmURL}index`,
1841
- format: "isolated"
1842
- }]]
1843
- });
1844
- await click("[data-test-open-ai-assistant]");
1845
- await waitFor(`[data-room-settled]`);
1846
- await fillIn("[data-test-message-field]", "Hello, I need help with my project");
1847
- await click("[data-test-send-message-btn]");
1848
- await fillIn("[data-test-message-field]", "I want to create a new card for a person");
1849
- await click("[data-test-send-message-btn]");
1850
- await fillIn("[data-test-message-field]", "The person should have a name and age field");
1851
- await click("[data-test-send-message-btn]");
1852
- assertMessages(assert, [
1853
- {
1854
- from: "testuser",
1855
- message: "Hello, I need help with my project"
1856
- },
1857
- {
1858
- from: "testuser",
1859
- message: "I want to create a new card for a person"
1860
- },
1861
- {
1862
- from: "testuser",
1863
- message: "The person should have a name and age field"
1864
- }
1865
- ]);
1866
- await click("[data-test-create-room-btn]", { shiftKey: true });
1867
- await click("[data-test-new-session-settings-option=\"Summarize Current Session\"]");
1868
- await click("[data-test-new-session-settings-create-button]");
1869
- await waitFor(`[data-room-settled]`);
1870
- await waitForSessionPreparationToFinish();
1871
- await waitUntil(() => document.querySelectorAll("[data-test-message-idx]").length >= 1, {
1872
- timeout: 5e3,
1873
- timeoutMessage: "timed out waiting for summary message to arrive in new session"
1874
- });
1875
- assertMessages(assert, [{
1876
- from: "testuser",
1877
- message: "This is a summary of the previous conversation that should be included as context for our discussion: This conversation focused on project help, specifically creating a new card for a person with name and age fields. The user requested assistance with card creation and field definition."
1878
- }]);
1879
- });
1880
- (0, import_qunit.test)("summarizes current session with cards and files when creating new session", async function(assert) {
1881
- await visitOperatorMode({
1882
- submode: "interact",
1883
- stacks: [[{
1884
- id: `${testRealmURL}index`,
1885
- format: "isolated"
1886
- }]]
1887
- });
1888
- await click("[data-test-open-ai-assistant]");
1889
- await waitFor(`[data-room-settled]`);
1890
- await fillIn("[data-test-message-field]", "I have a person card here");
1891
- await selectCardFromCatalog(`${testRealmURL}Person/hassan`);
1892
- await click("[data-test-send-message-btn]");
1893
- await fillIn("[data-test-message-field]", "And here is the pet definition file");
1894
- await click("[data-test-attach-button]");
1895
- await click("[data-test-attach-file-btn]");
1896
- await click("[data-test-file=\"pet.gts\"]");
1897
- await click("[data-test-choose-file-modal-add-button]");
1898
- await click("[data-test-send-message-btn]");
1899
- await fillIn("[data-test-message-field]", "Can you help me understand this structure?");
1900
- await click("[data-test-send-message-btn]");
1901
- await waitFor(`[data-room-settled]`);
1902
- assertMessages(assert, [
1903
- {
1904
- from: "testuser",
1905
- message: "I have a person card here",
1906
- cards: [{
1907
- id: `${testRealmURL}Person/hassan`,
1908
- cardTitle: "Hassan"
1909
- }]
1910
- },
1911
- {
1912
- from: "testuser",
1913
- message: "And here is the pet definition file",
1914
- files: [{
1915
- sourceUrl: `${testRealmURL}pet.gts`,
1916
- name: "pet.gts"
1917
- }]
1918
- },
1919
- {
1920
- from: "testuser",
1921
- message: "Can you help me understand this structure?"
1922
- }
1923
- ]);
1924
- await click("[data-test-create-room-btn]", { shiftKey: true });
1925
- await click("[data-test-new-session-settings-option=\"Summarize Current Session\"]");
1926
- await click("[data-test-new-session-settings-create-button]");
1927
- await waitFor(`[data-room-settled]`);
1928
- await waitForSessionPreparationToFinish();
1929
- await waitUntil(() => document.querySelectorAll("[data-test-message-idx]").length >= 1, { timeoutMessage: "timed out waiting for summary message to arrive in new session" });
1930
- assertMessages(assert, [{
1931
- from: "testuser",
1932
- message: "This is a summary of the previous conversation that should be included as context for our discussion: This conversation involved discussing a person card (Hassan) and a pet definition file. The user shared both a Person card and a pet.gts file, then asked for help understanding the structure."
1933
- }]);
1934
- });
1935
- (0, import_qunit.test)("handles summarization error gracefully when creating new session", async function(assert) {
1936
- await visitOperatorMode({
1937
- submode: "interact",
1938
- stacks: [[{
1939
- id: `${testRealmURL}index`,
1940
- format: "isolated"
1941
- }]]
1942
- });
1943
- await click("[data-test-open-ai-assistant]");
1944
- await waitFor(`[data-room-settled]`);
1945
- await fillIn("[data-test-message-field]", "Test message for summarization");
1946
- await click("[data-test-send-message-btn]");
1947
- const originalRequestForward = getService("realm-server").requestForward;
1948
- getService("realm-server").requestForward = async () => {
1949
- throw new Error("Summarization service unavailable");
1950
- };
1951
- await click("[data-test-create-room-btn]", { shiftKey: true });
1952
- await click("[data-test-new-session-settings-option=\"Summarize Current Session\"]");
1953
- await click("[data-test-new-session-settings-create-button]");
1954
- await waitFor(`[data-room-settled]`);
1955
- await waitForSessionPreparationToFinish();
1956
- assertMessages(assert, []);
1957
- getService("realm-server").requestForward = originalRequestForward;
1958
- });
1959
- (0, import_qunit.test)("skip button skips session preparation and shows correct wording", async function(assert) {
1960
- const matrixService = getService("matrix-service");
1961
- const originalGetPromptParts = matrixService.getPromptParts;
1962
- let summarizationDeferred = new Deferred();
1963
- matrixService.getPromptParts = async (roomId) => {
1964
- await summarizationDeferred.promise;
1965
- return originalGetPromptParts.call(matrixService, roomId);
1966
- };
1967
- await visitOperatorMode({
1968
- submode: "interact",
1969
- stacks: [[{
1970
- id: `${testRealmURL}index`,
1971
- format: "isolated"
1972
- }]]
1973
- });
1974
- await click("[data-test-open-ai-assistant]");
1975
- await waitFor(`[data-room-settled]`);
1976
- await fillIn("[data-test-message-field]", "Test message for summarization");
1977
- await click("[data-test-send-message-btn]");
1978
- await click("[data-test-create-room-btn]", { shiftKey: true });
1979
- await click("[data-test-new-session-settings-option=\"Summarize Current Session\"]");
1980
- await click("[data-test-new-session-settings-create-button]");
1981
- try {
1982
- await waitFor("[data-test-session-preparation]");
1983
- assert.dom("[data-test-session-preparation]").includesText("Summarizing previous session");
1984
- assert.dom("[data-test-session-preparation]").includesText("Takes 10-20 seconds");
1985
- await waitFor("[data-test-pretui-session-prep-skip]");
1986
- assert.dom("[data-test-pretui-session-prep-skip]").hasText("Skip");
1987
- await click("[data-test-pretui-session-prep-skip]");
1988
- await waitFor("[data-test-session-preparation]", { count: 0 });
1989
- await waitFor("[data-test-message-field]");
1990
- await waitUntil(() => {
1991
- let field = document.querySelector("[data-test-message-field]");
1992
- return Boolean(field && !field.hasAttribute("disabled"));
1993
- });
1994
- assert.dom("[data-test-message-field]").isNotDisabled();
1995
- assertMessages(assert, []);
1996
- } finally {
1997
- summarizationDeferred.fulfill();
1998
- matrixService.getPromptParts = originalGetPromptParts;
1999
- }
2000
- });
2001
- (0, import_qunit.test)("ai assistant panel width persists to localStorage", async function(assert) {
2002
- src_default.localStorage.removeItem("ai-assistant-panel-width");
2003
- const testWidth = 60;
2004
- src_default.localStorage.setItem("ai-assistant-panel-width", String(testWidth));
2005
- let operatorModeStateParam = wrapper_default({
2006
- stacks: [[{
2007
- id: `${testRealmURL}index`,
2008
- format: "isolated"
2009
- }]],
2010
- aiAssistantOpen: true
2011
- });
2012
- await visit(`/?operatorModeEnabled=true&operatorModeState=${encodeURIComponent(operatorModeStateParam)}`);
2013
- assert.dom("[data-test-ai-assistant-panel]").exists();
2014
- let aiAssistantPanel = document.querySelector("[data-test-ai-assistant-panel]");
2015
- assert.ok(aiAssistantPanel, "AI assistant panel should exist");
2016
- let initialWidth = aiAssistantPanel.getBoundingClientRect().width;
2017
- assert.ok(initialWidth > 0, "AI assistant panel should have a width");
2018
- let submodeLayout = document.querySelector("[data-test-submode-layout]");
2019
- assert.ok(submodeLayout, "submode layout should exist");
2020
- let actualPercentageWidth = initialWidth / submodeLayout.getBoundingClientRect().width * 100;
2021
- let storedWidth = src_default.localStorage.getItem("ai-assistant-panel-width");
2022
- assert.ok(storedWidth, "Width should be in localStorage");
2023
- assert.strictEqual(Number(storedWidth), testWidth, "Stored width should match the test width");
2024
- assert.ok(Math.abs(actualPercentageWidth - testWidth) < 5, `Actual panel width percentage (${actualPercentageWidth.toFixed(1)}%) should be close to stored width (${testWidth}%)`);
2025
- let resizeHandle = document.querySelector("[data-boxel-panel-resize-handle-id]");
2026
- assert.ok(resizeHandle, "Resize handle should exist");
2027
- let resizeHandleRect = resizeHandle.getBoundingClientRect();
2028
- await triggerEvent(resizeHandle, "pointerdown", {
2029
- clientX: resizeHandleRect.x,
2030
- clientY: resizeHandleRect.y
2031
- });
2032
- await triggerEvent(resizeHandle, "pointermove", {
2033
- clientX: resizeHandleRect.x + 20,
2034
- clientY: resizeHandleRect.y
2035
- });
2036
- await triggerEvent(resizeHandle, "pointerup");
2037
- await waitFor("[data-test-ai-assistant-panel]");
2038
- let updatedStoredWidth = src_default.localStorage.getItem("ai-assistant-panel-width");
2039
- assert.ok(updatedStoredWidth, "Width should still be in localStorage after resize");
2040
- let updatedParsedWidth = Number(updatedStoredWidth);
2041
- assert.ok(updatedParsedWidth > 0, "Updated width should be a positive number");
2042
- assert.ok(updatedParsedWidth <= 100, "Updated width should be a percentage (<= 100)");
2043
- assert.notStrictEqual(updatedParsedWidth, testWidth, "Width should have changed after resize");
2044
- let resizedWidth = aiAssistantPanel.getBoundingClientRect().width;
2045
- assert.ok(resizedWidth > 0, "AI assistant panel should still have a width after resize");
2046
- });
2047
- (0, import_qunit.test)("creates new session with settings even when empty new session exists", async function(assert) {
2048
- await visitOperatorMode({ stacks: [[{
2049
- id: `${testRealmURL}index`,
2050
- format: "isolated"
2051
- }]] });
2052
- await click("[data-test-open-ai-assistant]");
2053
- await waitFor(`[data-room-settled]`);
2054
- await fillIn("[data-test-message-field]", "First message with card");
2055
- await selectCardFromCatalog(`${testRealmURL}Person/hassan`);
2056
- await click("[data-test-send-message-btn]");
2057
- await fillIn("[data-test-message-field]", "Second message with file");
2058
- await click("[data-test-attach-button]");
2059
- await click("[data-test-attach-file-btn]");
2060
- await click("[data-test-file=\"pet.gts\"]");
2061
- await click("[data-test-choose-file-modal-add-button]");
2062
- await click("[data-test-send-message-btn]");
2063
- await fillIn("[data-test-message-field]", "Third message with another card");
2064
- await selectCardFromCatalog(`${testRealmURL}Pet/mango`);
2065
- await click("[data-test-send-message-btn]");
2066
- assertMessages(assert, [
2067
- {
2068
- from: "testuser",
2069
- message: "First message with card",
2070
- cards: [{
2071
- id: `${testRealmURL}Person/hassan`,
2072
- cardTitle: "Hassan"
2073
- }]
2074
- },
2075
- {
2076
- from: "testuser",
2077
- message: "Second message with file",
2078
- files: [{
2079
- sourceUrl: `${testRealmURL}pet.gts`,
2080
- name: "pet.gts"
2081
- }]
2082
- },
2083
- {
2084
- from: "testuser",
2085
- message: "Third message with another card",
2086
- cards: [{
2087
- id: `${testRealmURL}Pet/mango`,
2088
- cardTitle: "Mango"
2089
- }]
2090
- }
2091
- ]);
2092
- const matrixService = getService("matrix-service");
2093
- const firstRoomId = matrixService.currentRoomId;
2094
- assert.ok(firstRoomId, "Should have first room ID");
2095
- await click("[data-test-create-room-btn]");
2096
- await waitFor(`[data-room-settled]`);
2097
- const secondRoomId = matrixService.currentRoomId;
2098
- assert.ok(secondRoomId, "Should have second room ID");
2099
- assert.notStrictEqual(secondRoomId, firstRoomId, "Second room should be different from first room");
2100
- await click("[data-test-past-sessions-button]");
2101
- await waitFor(`[data-test-enter-room="${firstRoomId}"]`);
2102
- await click(`[data-test-enter-room="${firstRoomId}"]`);
2103
- await waitFor(`[data-room-settled]`);
2104
- assert.strictEqual(matrixService.currentRoomId, firstRoomId, "Should be back in the first room");
2105
- assertMessages(assert, [
2106
- {
2107
- from: "testuser",
2108
- message: "First message with card",
2109
- cards: [{
2110
- id: `${testRealmURL}Person/hassan`,
2111
- cardTitle: "Hassan"
2112
- }]
2113
- },
2114
- {
2115
- from: "testuser",
2116
- message: "Second message with file",
2117
- files: [{
2118
- sourceUrl: `${testRealmURL}pet.gts`,
2119
- name: "pet.gts"
2120
- }]
2121
- },
2122
- {
2123
- from: "testuser",
2124
- message: "Third message with another card",
2125
- cards: [{
2126
- id: `${testRealmURL}Pet/mango`,
2127
- cardTitle: "Mango"
2128
- }]
2129
- }
2130
- ]);
2131
- await click("[data-test-create-room-btn]", { shiftKey: true });
2132
- await click("[data-test-new-session-settings-option=\"Copy File History\"]");
2133
- await click("[data-test-new-session-settings-create-button]");
2134
- await waitFor(`[data-room-settled]`);
2135
- await waitForSessionPreparationToFinish();
2136
- await waitFor("[data-test-user-message]");
2137
- const thirdRoomId = matrixService.currentRoomId;
2138
- assert.ok(thirdRoomId, "Should have third room ID");
2139
- assert.notStrictEqual(thirdRoomId, firstRoomId, "Third room should be different from first room");
2140
- assert.notStrictEqual(thirdRoomId, secondRoomId, "Third room should be different from second room");
2141
- assertMessages(assert, [{
2142
- from: "testuser",
2143
- message: "This session includes files and cards from the previous conversation for context.",
2144
- cards: [{
2145
- id: `${testRealmURL}Person/hassan`,
2146
- cardTitle: "Hassan"
2147
- }, {
2148
- id: `${testRealmURL}Pet/mango`,
2149
- cardTitle: "Mango"
2150
- }],
2151
- files: [{
2152
- sourceUrl: `${testRealmURL}pet.gts`,
2153
- name: "pet.gts"
2154
- }]
2155
- }]);
2156
- });
2157
- (0, import_qunit.test)("restores chat input of unsent messages", async function(assert) {
2158
- await visitOperatorMode({ stacks: [[{
2159
- id: `${testRealmURL}index`,
2160
- format: "isolated"
2161
- }]] });
2162
- await click("[data-test-open-ai-assistant]");
2163
- await waitFor(`[data-room-settled]`);
2164
- const matrixService = getService("matrix-service");
2165
- await waitFor(`[data-room-settled]`);
2166
- let firstRoomId = matrixService.currentRoomId;
2167
- assert.ok(firstRoomId, "Should have an initial room ID");
2168
- if (!firstRoomId) throw new Error("Missing room ID for initial session");
2169
- await waitFor(`[data-test-message-field="${firstRoomId}"]`);
2170
- await fillIn(`[data-test-message-field="${firstRoomId}"]`, "hey, could you do something for me?");
2171
- await click("[data-test-send-message-btn]");
2172
- await fillIn(`[data-test-message-field="${firstRoomId}"]`, "how old is the sun?");
2173
- await click("[data-test-create-room-btn]");
2174
- await waitFor(`[data-room-settled]`);
2175
- let secondRoomId = matrixService.currentRoomId;
2176
- assert.ok(secondRoomId, "Should have a second room ID");
2177
- if (!secondRoomId) throw new Error("Missing room ID for new session");
2178
- assert.notStrictEqual(secondRoomId, firstRoomId, "Second room should be different from first room");
2179
- await waitFor(`[data-test-message-field="${secondRoomId}"]`);
2180
- assert.dom(`[data-test-message-field="${secondRoomId}"]`).hasValue("", "New room starts with an empty chat input");
2181
- await click("[data-test-past-sessions-button]");
2182
- await waitFor(`[data-test-enter-room="${firstRoomId}"]`);
2183
- await click(`[data-test-enter-room="${firstRoomId}"]`);
2184
- await waitFor(`[data-room-settled]`);
2185
- await waitUntil(() => matrixService.currentRoomId === firstRoomId);
2186
- await waitFor(`[data-test-message-field="${firstRoomId}"]`);
2187
- assert.dom(`[data-test-message-field="${firstRoomId}"]`).hasValue("how old is the sun?", "Draft message is restored when returning to the original room");
2188
- });
2189
- (0, import_qunit.test)("failed send leaves a failed bubble + retry alert; input clears at click-time", async function(assert) {
2190
- await visitOperatorMode({ stacks: [[{
2191
- id: `${testRealmURL}index`,
2192
- format: "isolated"
2193
- }]] });
2194
- await click("[data-test-open-ai-assistant]");
2195
- await waitFor(`[data-room-settled]`);
2196
- const matrixService = getService("matrix-service");
2197
- let roomId = matrixService.currentRoomId;
2198
- assert.ok(roomId, "Should have a room ID");
2199
- if (!roomId) throw new Error("Missing room ID for message failure test");
2200
- await waitFor(`[data-test-message-field="${roomId}"]`);
2201
- const originalSendMessage = matrixService.sendMessage;
2202
- let sendAttempts = 0;
2203
- matrixService.sendMessage = async function(..._args) {
2204
- sendAttempts++;
2205
- throw new Error("Intentional failure for test");
2206
- };
2207
- const failingMessage = "This message should trigger an error";
2208
- try {
2209
- await fillIn(`[data-test-message-field="${roomId}"]`, failingMessage);
2210
- await waitUntil(() => matrixService.getMessageToSend(roomId) === failingMessage);
2211
- await click("[data-test-send-message-btn]");
2212
- await waitFor("[data-test-boxel-alert=\"error\"]");
2213
- assert.strictEqual(sendAttempts, 1, "sendMessage was attempted once");
2214
- assert.dom("[data-test-user-message]").exists({ count: 1 });
2215
- assert.dom("[data-test-card-error]").containsText("Failed to send");
2216
- assert.dom("[data-test-alert-action-button=\"Retry\"]").exists();
2217
- assert.dom(`[data-test-message-field="${roomId}"]`).hasValue("", "input clears at click-time — the message lives in the bubble now");
2218
- } finally {
2219
- matrixService.sendMessage = originalSendMessage;
2220
- }
2221
- });
2222
- });
2223
- //#endregion