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

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 (1058) 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-C4zhhxaZ.js +151 -0
  24. package/bundled-test-harness/assets/aibot-message-BShcljQ9.js +1312 -0
  25. package/bundled-test-harness/assets/app-DiEYqT6T.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-C0RFmHma.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-CVfE1l1V.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-BN21sDpP.js +235 -0
  57. package/bundled-test-harness/assets/card-chooser-test-C9jDiIgM.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-D_30xak6.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-BlsD9Xw4.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-CZUXQKjf.js +1110 -0
  74. package/bundled-test-harness/assets/choreo-D8RcLuoq.js +2 -0
  75. package/bundled-test-harness/assets/choreo-feature-reel-test-DRGloCAJ.js +155 -0
  76. package/bundled-test-harness/assets/choreo-gallery-build-order-test-BR-r7gaw.js +436 -0
  77. package/bundled-test-harness/assets/choreo-gallery-compositor-test-CWRLfcNT.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-WJ7FmjYi.js +133 -0
  80. package/bundled-test-harness/assets/choreo-gallery-demos-alive-test-C-yxdVT_.js +42 -0
  81. package/bundled-test-harness/assets/choreo-gallery-drift-test-HX1mK3od.js +620 -0
  82. package/bundled-test-harness/assets/choreo-gallery-escort-test-jZEVk_V4.js +187 -0
  83. package/bundled-test-harness/assets/choreo-gallery-films-test-DLDQzsxb.js +140 -0
  84. package/bundled-test-harness/assets/choreo-gallery-filter-test-BJv8KEeP.js +46 -0
  85. package/bundled-test-harness/assets/choreo-gallery-fold-test-BssKC8A8.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-DTj7yEKp.js +321 -0
  88. package/bundled-test-harness/assets/choreo-gallery-hang-test-BqJLmeFF.js +426 -0
  89. package/bundled-test-harness/assets/choreo-gallery-highlight-test-B1Q7-ICm.js +60 -0
  90. package/bundled-test-harness/assets/choreo-gallery-inline-edit-test-7My9lVam.js +370 -0
  91. package/bundled-test-harness/assets/choreo-gallery-interruption-test-BlIAaGrw.js +176 -0
  92. package/bundled-test-harness/assets/choreo-gallery-lone-stack-test-C9NnYIP8.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-CwdiZWeI.js +111 -0
  95. package/bundled-test-harness/assets/choreo-gallery-poplayout-subtree-test-D55fxwTn.js +127 -0
  96. package/bundled-test-harness/assets/choreo-gallery-presence-modes-test-D8Wxv0lb.js +100 -0
  97. package/bundled-test-harness/assets/choreo-gallery-presentation-test-BLoWfp6G.js +157 -0
  98. package/bundled-test-harness/assets/choreo-gallery-reduced-motion-test-D5XxTBDS.js +145 -0
  99. package/bundled-test-harness/assets/choreo-gallery-sheet-standalone-test-DrHTTvss.js +89 -0
  100. package/bundled-test-harness/assets/choreo-gallery-sheet-test-BFVdnM_b.js +48 -0
  101. package/bundled-test-harness/assets/choreo-gallery-site-test-BhEBHdvI.js +237 -0
  102. package/bundled-test-harness/assets/choreo-gallery-stage-DcKKsdcu.js +256 -0
  103. package/bundled-test-harness/assets/choreo-gallery-stage-keyboard-test-Fcc6SC3F.js +102 -0
  104. package/bundled-test-harness/assets/choreo-gallery-stages-test-Cb-ADpxK.js +35 -0
  105. package/bundled-test-harness/assets/choreo-gallery-subdivision-test-DMJ6C9FW.js +138 -0
  106. package/bundled-test-harness/assets/choreo-gallery-table-plan-test-CAjSUdLJ.js +144 -0
  107. package/bundled-test-harness/assets/choreo-gallery-theater-test-B-3IZMj9.js +252 -0
  108. package/bundled-test-harness/assets/choreo-gallery-tuning-test-BVxK5Ry_.js +95 -0
  109. package/bundled-test-harness/assets/choreo-gallery-widget-room-test-uWBH1EKE.js +88 -0
  110. package/bundled-test-harness/assets/choreo-gallery-wires-test-Bo4Sd1Vn.js +148 -0
  111. package/bundled-test-harness/assets/client-telemetry-test-DFM4mML2.js +340 -0
  112. package/bundled-test-harness/assets/clip-DY6N6K67.js +92 -0
  113. package/bundled-test-harness/assets/clip-DzXoPdp-.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-D6ijVvEL.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-CjEsY0uG.js +150 -0
  123. package/bundled-test-harness/assets/computed-test-DtyZGgdc.js +1320 -0
  124. package/bundled-test-harness/assets/container-BYGZImLU.css +5101 -0
  125. package/bundled-test-harness/assets/container-CBZZ8uFw.js +10925 -0
  126. package/bundled-test-harness/assets/content-preview-components-test-BztI4fz-.js +462 -0
  127. package/bundled-test-harness/assets/copy-and-edit-test-Cqw7kcur.js +292 -0
  128. package/bundled-test-harness/assets/copy-card-test-D5m3eVEH.js +218 -0
  129. package/bundled-test-harness/assets/copy-file-to-realm-test-FPY-6Ddm.js +148 -0
  130. package/bundled-test-harness/assets/copy-source-test-9pJD-qey.js +56 -0
  131. package/bundled-test-harness/assets/create-file-test-DjMf88u_.js +1086 -0
  132. package/bundled-test-harness/assets/create-file-test-XbgOqg38.js +464 -0
  133. package/bundled-test-harness/assets/create-listing-modal-test-De7b4vu3.js +273 -0
  134. package/bundled-test-harness/assets/create-listing-pr-request-test-CBtIV0Z8.js +117 -0
  135. package/bundled-test-harness/assets/create-spec-test-4xR0gM7E.js +256 -0
  136. package/bundled-test-harness/assets/create-submission-workflow-test-DQpWrpGT.js +132 -0
  137. package/bundled-test-harness/assets/create-workspace-test-BQAudgpS.js +104 -0
  138. package/bundled-test-harness/assets/credential-fields-test-DXKBdbZD.js +200 -0
  139. package/bundled-test-harness/assets/csv-file-def-test-Cnp4y834.js +102 -0
  140. package/bundled-test-harness/assets/dashboard-CmuOhIYC.js +3628 -0
  141. package/bundled-test-harness/assets/dashboard-CzN49x74.css +2400 -0
  142. package/bundled-test-harness/assets/dashboard-add-workspace-test-T32hWB-g.js +50 -0
  143. package/bundled-test-harness/assets/dashboard-agents-test-BN5maCgQ.js +334 -0
  144. package/bundled-test-harness/assets/dashboard-archive-test-BzwUte_Z.js +128 -0
  145. package/bundled-test-harness/assets/dashboard-delete-test-D2Gcp81V.js +163 -0
  146. package/bundled-test-harness/assets/dashboard-duplicate-offer-test-BgKNIr35.js +71 -0
  147. package/bundled-test-harness/assets/dashboard-duplicate-test-D7JEWylc.js +222 -0
  148. package/bundled-test-harness/assets/dashboard-get-started-test-DOGPzGoA.js +374 -0
  149. package/bundled-test-harness/assets/dashboard-ir2bakJS.js +142 -0
  150. package/bundled-test-harness/assets/dashboard-pinned-cards-test-Bn_P9xJU.js +220 -0
  151. package/bundled-test-harness/assets/dashboard-publish-test-64sGQ0nG.js +70 -0
  152. package/bundled-test-harness/assets/dashboard-reindex-test-DJjYq1ct.js +115 -0
  153. package/bundled-test-harness/assets/dashboard-section-rail-test-ZkAhWu5V.js +169 -0
  154. package/bundled-test-harness/assets/dashboard-state-test-BbkpPB5L.js +162 -0
  155. package/bundled-test-harness/assets/dashboard-test-CBLdPrSt.js +545 -0
  156. package/bundled-test-harness/assets/dashboard-unreachable-notice-test-DFT3R1Zx.js +62 -0
  157. package/bundled-test-harness/assets/dashboard-workspace-test-DqBdCFo2.js +537 -0
  158. package/bundled-test-harness/assets/dashboard-workspaces-section-test-CH1HDfxR.js +410 -0
  159. package/bundled-test-harness/assets/data-file-def-preview-test-CNsZwQEJ.js +155 -0
  160. package/bundled-test-harness/assets/date-time-fields-test-CEFaZTnF.js +359 -0
  161. package/bundled-test-harness/assets/debug-message-test-Ck3BfFv3.js +117 -0
  162. package/bundled-test-harness/assets/declared-captures-test-C-0yPRU7.js +879 -0
  163. package/bundled-test-harness/assets/delete-workspace-test-CZOwGy78.js +102 -0
  164. package/bundled-test-harness/assets/diffing-test-BEKI905O.js +210 -0
  165. package/bundled-test-harness/assets/download-file-to-realm-test-C1kAGDll.js +119 -0
  166. package/bundled-test-harness/assets/editor-test-C9x5ZY6g.js +688 -0
  167. package/bundled-test-harness/assets/edits-D76-aanh.js +651 -0
  168. package/bundled-test-harness/assets/email-field-test-LGkrB_2B.js +75 -0
  169. package/bundled-test-harness/assets/enum-field-test-CPyV1J-m.js +935 -0
  170. package/bundled-test-harness/assets/error-display-test-bWuUtfIG.js +343 -0
  171. package/bundled-test-harness/assets/evaluate-module-test-CbS5h8t3.js +91 -0
  172. package/bundled-test-harness/assets/execute-atomic-operations-test-B4Kfco0k.js +113 -0
  173. package/bundled-test-harness/assets/externals-k-2ZBepK.js +4393 -0
  174. package/bundled-test-harness/assets/fallback-banner-live-delete-test-CuFiH1D8.js +207 -0
  175. package/bundled-test-harness/assets/fallback-banner-test-CqSRN7D8.js +225 -0
  176. package/bundled-test-harness/assets/fallback-banner-test-DQkrFE4-.js +53 -0
  177. package/bundled-test-harness/assets/fallback-models-test-BWekNxC0.js +161 -0
  178. package/bundled-test-harness/assets/fetch-card-json-test-DULUqUEu.js +61 -0
  179. package/bundled-test-harness/assets/field-configuration-test-BXZq28xa.js +551 -0
  180. package/bundled-test-harness/assets/field-markdown-domain-test-DdXCifs6.js +616 -0
  181. package/bundled-test-harness/assets/field-markdown-oversize-test-DouPPTHX.js +88 -0
  182. package/bundled-test-harness/assets/field-markdown-primitives-test-DSRGJeyl.js +365 -0
  183. package/bundled-test-harness/assets/field-markdown-specialized-test-DlTYLl_s.js +534 -0
  184. package/bundled-test-harness/assets/field-playground-test-NhS4VvoN.js +894 -0
  185. package/bundled-test-harness/assets/field-support-predicates-test-DWpyT1Qf.js +167 -0
  186. package/bundled-test-harness/assets/file-attachment-test-LwZf-BSY.js +796 -0
  187. package/bundled-test-harness/assets/file-chooser-panel-test-DuAqD9bn.js +153 -0
  188. package/bundled-test-harness/assets/file-chooser-test-CjaXXwpT.js +504 -0
  189. package/bundled-test-harness/assets/file-def-format-templates-test-BDs4OmHq.js +380 -0
  190. package/bundled-test-harness/assets/file-def-live-reload-test-BqTdnq-W.js +124 -0
  191. package/bundled-test-harness/assets/file-def-menu-items-test-DqdINXsD.js +138 -0
  192. package/bundled-test-harness/assets/file-def-navigation-test-BPGr0SQy.js +109 -0
  193. package/bundled-test-harness/assets/file-def-serialization-test-CvjW-FlC.js +89 -0
  194. package/bundled-test-harness/assets/file-def-test-C-Yv_NjS.js +216 -0
  195. package/bundled-test-harness/assets/file-preview-live-reload-test-MzwGwasU.js +310 -0
  196. package/bundled-test-harness/assets/file-resource-primitives-test-D3GmfqNs.js +255 -0
  197. package/bundled-test-harness/assets/file-tree-from-index-test-CfldnUgm.js +96 -0
  198. package/bundled-test-harness/assets/file-tree-test--0ZCPRe9.js +851 -0
  199. package/bundled-test-harness/assets/file-view-model-test-BDIAeBV8.js +346 -0
  200. package/bundled-test-harness/assets/filedef-export-shape-test-B2tgU404.js +61 -0
  201. package/bundled-test-harness/assets/film-Bf73ypzi.js +4074 -0
  202. package/bundled-test-harness/assets/film-C54lhaiU.js +2 -0
  203. package/bundled-test-harness/assets/film-DPcMEHYu.js +13 -0
  204. package/bundled-test-harness/assets/flac-audio-def-test-ByoXMoQ1.js +143 -0
  205. package/bundled-test-harness/assets/font-metadata-extractor-test-hawLTDTG.js +415 -0
  206. package/bundled-test-harness/assets/formatted-aibot-message-test-BahBj3x8.js +109 -0
  207. package/bundled-test-harness/assets/formatted-user-message-test-CodbrU3t.js +43 -0
  208. package/bundled-test-harness/assets/freestyle-test-faQhSciz.js +17 -0
  209. package/bundled-test-harness/assets/full-reindex-realm-test-CE5RJTIC.js +101 -0
  210. package/bundled-test-harness/assets/garbage-collection-test-v-3sev77.js +403 -0
  211. package/bundled-test-harness/assets/general-test-DKZPBtSb.js +923 -0
  212. package/bundled-test-harness/assets/generate-example-cards-one-shot-test-CucWyrkH.js +65 -0
  213. package/bundled-test-harness/assets/generic-file-def-preview-test-_EDRsebi.js +71 -0
  214. package/bundled-test-harness/assets/get-available-realm-identifiers-test-CV023yek.js +47 -0
  215. package/bundled-test-harness/assets/get-catalog-realm-identifiers-test--DOu3DyV.js +47 -0
  216. package/bundled-test-harness/assets/get-default-writable-realm-test-Bic8jl6R.js +54 -0
  217. package/bundled-test-harness/assets/get-published-realms-test-DrA5YcFN.js +71 -0
  218. package/bundled-test-harness/assets/get-realm-of-resource-identifier-test-jfU6SIWn.js +54 -0
  219. package/bundled-test-harness/assets/get-relationship-membership-state-test-Ccy2Z7MN.js +1308 -0
  220. package/bundled-test-harness/assets/get-user-system-card-test-Bmq2lmWv.js +67 -0
  221. package/bundled-test-harness/assets/gif-image-def-test-N1mMQC-X.js +188 -0
  222. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-BkUDjiTs.js +160 -0
  223. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-DsFWCzTs.js +74 -0
  224. package/bundled-test-harness/assets/gts-file-def-test-BL1jpQ9J.js +100 -0
  225. package/bundled-test-harness/assets/head-format-preview-test-BVCaPQqc.js +158 -0
  226. package/bundled-test-harness/assets/helpers-Ds68JxHe.js +5 -0
  227. package/bundled-test-harness/assets/host-mode-service-B4bisRdR.js +262 -0
  228. package/bundled-test-harness/assets/host-mode-test-BmkN2PCJ.js +831 -0
  229. package/bundled-test-harness/assets/host-submode-test-C6SxQ796.js +1392 -0
  230. package/bundled-test-harness/assets/html-component-test-CNQ9wF0Q.js +65 -0
  231. package/bundled-test-harness/assets/html-def-test-BcaCVVQq.js +160 -0
  232. package/bundled-test-harness/assets/html-meta-extractor-test-BU1hjkTp.js +60 -0
  233. package/bundled-test-harness/assets/hydratable-card-test-CX6MWiti.js +426 -0
  234. package/bundled-test-harness/assets/icon-button-C1zH38Nc.js +67 -0
  235. package/bundled-test-harness/assets/image-metadata-extractor-test-CakSBPZ_.js +1109 -0
  236. package/bundled-test-harness/assets/index-changes-test-D8RtgfyG.js +367 -0
  237. package/bundled-test-harness/assets/index-query-engine-test-BETfoYOK.js +2593 -0
  238. package/bundled-test-harness/assets/index-writer-test-B_bR2fjw.js +3040 -0
  239. package/bundled-test-harness/assets/inspector-test-BwPXJj1S.js +2058 -0
  240. package/bundled-test-harness/assets/instance-filter-matcher-test-BSVCg59b.js +788 -0
  241. package/bundled-test-harness/assets/instantiate-card-test-BVQhZjpq.js +164 -0
  242. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DzQLG41H.js +475 -0
  243. package/bundled-test-harness/assets/interact-submode-setup-C5bKXq73.js +566 -0
  244. package/bundled-test-harness/assets/invalidate-realm-identifiers-test-Cd3dpjhB.js +99 -0
  245. package/bundled-test-harness/assets/invite-user-to-room-test-Brabz1tt.js +142 -0
  246. package/bundled-test-harness/assets/invoke-card-operation-test-C1Q1FUf4.js +333 -0
  247. package/bundled-test-harness/assets/isolated-render-test-BLJfS7BU.js +51 -0
  248. package/bundled-test-harness/assets/job-scoped-doc-cache-test-Bgv5woaB.js +181 -0
  249. package/bundled-test-harness/assets/job-scoped-instance-residency-test-C_bB6KpR.js +103 -0
  250. package/bundled-test-harness/assets/jpg-image-def-test-gdLIKocD.js +697 -0
  251. package/bundled-test-harness/assets/json-file-def-test-CPYMRBY-.js +95 -0
  252. package/bundled-test-harness/assets/key-notices-badge-test-DemslfLw.js +155 -0
  253. package/bundled-test-harness/assets/key-readiness-test-5tq5JycL.js +190 -0
  254. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-BbhDZ2PH.js +398 -0
  255. package/bundled-test-harness/assets/linksto-error-sentinel-test-C2t7fFPi.js +238 -0
  256. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test--U_UvUty.js +354 -0
  257. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-Dj3Xy0ZF.js +303 -0
  258. package/bundled-test-harness/assets/linksto-sentinel-reload-test-D0dK4Jjs.js +197 -0
  259. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test---IYiXok.js +260 -0
  260. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-CT04MhES.js +196 -0
  261. package/bundled-test-harness/assets/lint-and-fix-test-aadgx7rX.js +51 -0
  262. package/bundled-test-harness/assets/live-test-BGij_vuc.js +100 -0
  263. package/bundled-test-harness/assets/live-test-CppvValf.js +2 -0
  264. package/bundled-test-harness/assets/load-default-skills-test-Cp2m_ebp.js +74 -0
  265. package/bundled-test-harness/assets/loader-parallel-prefetch-test-vU_26Jqu.js +257 -0
  266. package/bundled-test-harness/assets/loader-test-CTaw8K_B.js +482 -0
  267. package/bundled-test-harness/assets/loading-test-DGGt4qZZ.js +63 -0
  268. package/bundled-test-harness/assets/m4a-audio-def-test-DAiReOXH.js +190 -0
  269. package/bundled-test-harness/assets/main-bXHwJ0CN.js +5 -0
  270. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-CIXq9FqR.js +470 -0
  271. package/bundled-test-harness/assets/markdown-embed-chooser-test-zFGh9WfP.js +334 -0
  272. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-Byn_WFwY.js +447 -0
  273. package/bundled-test-harness/assets/markdown-embed-preview-test-Y3iFMttg.js +368 -0
  274. package/bundled-test-harness/assets/markdown-fallback-test-Br1TPkLZ.js +316 -0
  275. package/bundled-test-harness/assets/markdown-file-def-test-Crm2MAnq.js +380 -0
  276. package/bundled-test-harness/assets/markdown-helpers-test-CZ9Vvywc.js +188 -0
  277. package/bundled-test-harness/assets/markdown-highlighting-test-CFMkoVDl.js +244 -0
  278. package/bundled-test-harness/assets/markdown-preview-lOh-MyqF.js +72 -0
  279. package/bundled-test-harness/assets/markdown-preview-test-B8w0fFIy.js +238 -0
  280. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-aH6HQly1.js +146 -0
  281. package/bundled-test-harness/assets/markdown-skill-search-test-CiNLQs-5.js +80 -0
  282. package/bundled-test-harness/assets/matrix-service-account-switch-sessions-test-DaA8w1Jj.js +63 -0
  283. package/bundled-test-harness/assets/matrix-service-boot-assembly-test-21GIlf55.js +300 -0
  284. package/bundled-test-harness/assets/matrix-service-personal-realm-test-jn9DUENm.js +125 -0
  285. package/bundled-test-harness/assets/matrix-service-realm-servers-test-eNZVJakl.js +55 -0
  286. package/bundled-test-harness/assets/matrix-service-realms-list-updated-test-Cabm8_dY.js +132 -0
  287. package/bundled-test-harness/assets/matrix-service-relogin-test-C77EFgjc.js +59 -0
  288. package/bundled-test-harness/assets/matrix-service-sliding-sync-test-BgM0fPiO.js +35 -0
  289. package/bundled-test-harness/assets/menu-Cl50TSFe.js +3561 -0
  290. package/bundled-test-harness/assets/message-service-subscription-test-CfEqH2jP.js +110 -0
  291. package/bundled-test-harness/assets/message-service-test-DsTzH1In.js +144 -0
  292. package/bundled-test-harness/assets/message-tool-test-C5xVfTtj.js +33 -0
  293. package/bundled-test-harness/assets/midi-audio-def-test-goLRCNCZ.js +182 -0
  294. package/bundled-test-harness/assets/migrate-skill-test-yPCbVfxG.js +161 -0
  295. package/bundled-test-harness/assets/mini-YXjrY_tH.js +1404 -0
  296. package/bundled-test-harness/assets/mini-card-chooser-test-DrllikHB.js +272 -0
  297. package/bundled-test-harness/assets/mini-file-chooser-test-BfqayhmI.js +201 -0
  298. package/bundled-test-harness/assets/mock-matrix-C7BrPS6S.js +2 -0
  299. package/bundled-test-harness/assets/mock-matrix-FjsXmU7-.js +15107 -0
  300. package/bundled-test-harness/assets/modal-BgaZavcs.js +322 -0
  301. package/bundled-test-harness/assets/model-cost-tier-test-BGg-sJML.js +174 -0
  302. package/bundled-test-harness/assets/model-file-extract-test-CjEBupY5.js +206 -0
  303. package/bundled-test-harness/assets/module-transpile-cache-test-XW6DDsmz.js +67 -0
  304. package/bundled-test-harness/assets/monaco-test-DkoRuFiQ.js +100 -0
  305. package/bundled-test-harness/assets/mp3-audio-def-test-v369NNsQ.js +133 -0
  306. package/bundled-test-harness/assets/multiple-stacks-test-CJpYPWdM.js +208 -0
  307. package/bundled-test-harness/assets/nested-query-field-render-test-CfDrBcUN.js +249 -0
  308. package/bundled-test-harness/assets/no-stacks-test-MmsJeLpz.js +48 -0
  309. package/bundled-test-harness/assets/number-field-test-A7B2r0M5.js +184 -0
  310. package/bundled-test-harness/assets/office-file-def-test-BNRvFmCB.js +263 -0
  311. package/bundled-test-harness/assets/office-metadata-extractor-test-zlDoEIEp.js +218 -0
  312. package/bundled-test-harness/assets/office-poster-capture-test-DdFEaOxR.js +203 -0
  313. package/bundled-test-harness/assets/ogg-audio-def-test-kk91BzQY.js +196 -0
  314. package/bundled-test-harness/assets/open-create-listing-modal-test-D1Dl1pov.js +131 -0
  315. package/bundled-test-harness/assets/open-image-in-new-tab-test-DyCmdMyO.js +52 -0
  316. package/bundled-test-harness/assets/open-secure-window-test-dz1vPudF.js +253 -0
  317. package/bundled-test-harness/assets/open-workspace-test-BvTcskzP.js +46 -0
  318. package/bundled-test-harness/assets/operation-lowering-test-omU66bkJ.js +2957 -0
  319. package/bundled-test-harness/assets/operations-invocation-test-BMj42rQe.js +523 -0
  320. package/bundled-test-harness/assets/operations-optimistic-test-KJLyzT8v.js +203 -0
  321. package/bundled-test-harness/assets/operations-query-test-J3HcnaoK.js +459 -0
  322. package/bundled-test-harness/assets/operations-store-reconciliation-test-CkbGBMBQ.js +406 -0
  323. package/bundled-test-harness/assets/operations-test-C7zXXpRW.js +2518 -0
  324. package/bundled-test-harness/assets/operator-mode-acceptance-test-BPolI_RD.js +1195 -0
  325. package/bundled-test-harness/assets/operator-mode-card-chooser-test-DjTQgizt.js +1036 -0
  326. package/bundled-test-harness/assets/operator-mode-links-test-DSEqy5Db.js +797 -0
  327. package/bundled-test-harness/assets/operator-mode-test-CB7BNDNE.js +696 -0
  328. package/bundled-test-harness/assets/operator-mode-ui-test-C1OhF1il.js +1045 -0
  329. package/bundled-test-harness/assets/overlay-D2rQi8lJ.js +427 -0
  330. package/bundled-test-harness/assets/overlay-menu-items-test-CPN31yBJ.js +331 -0
  331. package/bundled-test-harness/assets/overlays-B-qMEPhY.js +2 -0
  332. package/bundled-test-harness/assets/overlays-DSf2je0c.js +75 -0
  333. package/bundled-test-harness/assets/overlays-detached-element-test-C73nMXes.js +56 -0
  334. package/bundled-test-harness/assets/panel-DjrC7DxA.js +15124 -0
  335. package/bundled-test-harness/assets/past-sessions-test-BSIS2Hlq.js +321 -0
  336. package/bundled-test-harness/assets/patch-fields-test-Bp2IE0Jw.js +1014 -0
  337. package/bundled-test-harness/assets/patch-instance-test-DssuRGKP.js +348 -0
  338. package/bundled-test-harness/assets/pdf-file-def-test-Barj9ffD.js +111 -0
  339. package/bundled-test-harness/assets/pdf-metadata-extractor-test-B7KnXcIm.js +130 -0
  340. package/bundled-test-harness/assets/permission-checking-realm-test-BD4O0nen.js +306 -0
  341. package/bundled-test-harness/assets/persist-module-inspector-view-test-BIdbkdPr.js +60 -0
  342. package/bundled-test-harness/assets/persist-scroll-position-test-Bhb7wJiy.js +254 -0
  343. package/bundled-test-harness/assets/phone-number-field-test-C2yuCrXY.js +73 -0
  344. package/bundled-test-harness/assets/pill-menu-test-BIp91YXi.js +60 -0
  345. package/bundled-test-harness/assets/plate-CJq1veVA.js +41 -0
  346. package/bundled-test-harness/assets/plate-CwAvOUfL.js +2 -0
  347. package/bundled-test-harness/assets/player-Digk7omr.js +2 -0
  348. package/bundled-test-harness/assets/player-vsjosoN_.js +82 -0
  349. package/bundled-test-harness/assets/playground-B02e8uqB.js +58 -0
  350. package/bundled-test-harness/assets/plural-field-components-test-C1acuN-A.js +198 -0
  351. package/bundled-test-harness/assets/png-image-def-test-B9QeVo1f.js +266 -0
  352. package/bundled-test-harness/assets/policy-audit-confirmation-test-CeVquvc_.js +155 -0
  353. package/bundled-test-harness/assets/policy-scoped-search-test-SFPiIqR3.js +339 -0
  354. package/bundled-test-harness/assets/prerender-file-extract-test-HSJKAHyO.js +346 -0
  355. package/bundled-test-harness/assets/prerender-html-test-BTAcFCme.js +670 -0
  356. package/bundled-test-harness/assets/prerender-meta-test-Csyz2b21.js +614 -0
  357. package/bundled-test-harness/assets/prerender-module-test-DpTYAbmI.js +409 -0
  358. package/bundled-test-harness/assets/prerender-persistence-block-test-BhIt-7kK.js +124 -0
  359. package/bundled-test-harness/assets/prerender-pre-model-error-test-DxKPQKqx.js +61 -0
  360. package/bundled-test-harness/assets/prerender-serialize-cycle-test-C8V5YWQO.js +134 -0
  361. package/bundled-test-harness/assets/prerendered-html-read-test-Cq7JVGwg.js +191 -0
  362. package/bundled-test-harness/assets/pretui-components-test-Ducr9fLT.css +743 -0
  363. package/bundled-test-harness/assets/pretui-components-test-Hs0uyIUQ.js +992 -0
  364. package/bundled-test-harness/assets/pretui-primitives-CRs8NRm0.js +69 -0
  365. package/bundled-test-harness/assets/preview-format-test-cCqLrfdY.js +103 -0
  366. package/bundled-test-harness/assets/preview-test-BMqJSoR1.js +474 -0
  367. package/bundled-test-harness/assets/process-card-test-578tfDvr.js +94 -0
  368. package/bundled-test-harness/assets/profile-settings-modal-CVnNl7Yu.js +990 -0
  369. package/bundled-test-harness/assets/publish-realm-COoeWexp.js +82 -0
  370. package/bundled-test-harness/assets/publish-realm-test-a5nkx0Ov.js +210 -0
  371. package/bundled-test-harness/assets/query-field-barrier-test-qX3xVPfk.js +113 -0
  372. package/bundled-test-harness/assets/query-field-error-sentinel-test-V6JDPFLX.js +201 -0
  373. package/bundled-test-harness/assets/query-field-membership-status-test-CK7eDf-K.js +323 -0
  374. package/bundled-test-harness/assets/query-field-page-optin-test-B5YBHUvU.js +126 -0
  375. package/bundled-test-harness/assets/query-field-schema-test-D4SjOGlK.js +231 -0
  376. package/bundled-test-harness/assets/query-field-search-throttle-test-BVkm1-D8.js +154 -0
  377. package/bundled-test-harness/assets/query-field-stale-prerender-test-9g7hcD91.js +152 -0
  378. package/bundled-test-harness/assets/query-fields-test-CQYqhzpN.js +535 -0
  379. package/bundled-test-harness/assets/quick-look-test-CE0o6lJ4.js +139 -0
  380. package/bundled-test-harness/assets/read-card-for-ai-assistant-test-D0mJorwH.js +91 -0
  381. package/bundled-test-harness/assets/read-file-for-ai-assistant-test-B_F_2GEB.js +45 -0
  382. package/bundled-test-harness/assets/read-source-test-BgJV4B4F.js +67 -0
  383. package/bundled-test-harness/assets/read-text-file-test-DaeLzg4u.js +124 -0
  384. package/bundled-test-harness/assets/realm-C_a9su1j.js +2858 -0
  385. package/bundled-test-harness/assets/realm-api-keys-D5USFOoS.js +2 -0
  386. package/bundled-test-harness/assets/realm-api-keys-m_VOcixC.js +578 -0
  387. package/bundled-test-harness/assets/realm-api-keys-test-BVs7f5Dz.js +109 -0
  388. package/bundled-test-harness/assets/realm-api-keys-test-C_uZnTmq.js +588 -0
  389. package/bundled-test-harness/assets/realm-config-m5eccPW8.js +833 -0
  390. package/bundled-test-harness/assets/realm-config-policy-standing-test-Ber-IXpc.js +290 -0
  391. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-3Xqt5VlM.js +274 -0
  392. package/bundled-test-harness/assets/realm-config-settings-test-CkalhbDF.js +187 -0
  393. package/bundled-test-harness/assets/realm-field-test-B_PUoqnk.js +100 -0
  394. package/bundled-test-harness/assets/realm-indexing-test-8iLjeV_e.js +4380 -0
  395. package/bundled-test-harness/assets/realm-policy-fitted-test-Bptvra0U.js +206 -0
  396. package/bundled-test-harness/assets/realm-policy-test-DwG0qqXE.js +1141 -0
  397. package/bundled-test-harness/assets/realm-querying-test-Dvw26A6Q.js +1067 -0
  398. package/bundled-test-harness/assets/realm-server-form-agnostic-test-DrXQH0UP.js +96 -0
  399. package/bundled-test-harness/assets/realm-server-subscriber-test-Dkj23vQK.js +46 -0
  400. package/bundled-test-harness/assets/realm-service-info-test-CdRlDhj-.js +67 -0
  401. package/bundled-test-harness/assets/realm-test-DGYN48Qx.js +2364 -0
  402. package/bundled-test-harness/assets/realm-token-refresh-test-CEWATL9h.js +153 -0
  403. package/bundled-test-harness/assets/realm-url-tooltip-test-8ZjTNPuy.js +78 -0
  404. package/bundled-test-harness/assets/reasoning-test-BV49AYg2.js +221 -0
  405. package/bundled-test-harness/assets/recent-files-test-Dc6L6Dm4.js +450 -0
  406. package/bundled-test-harness/assets/reindex-realm-test-CFRSt39u.js +117 -0
  407. package/bundled-test-harness/assets/relationship-loading-state-test-FKbtOFUr.js +290 -0
  408. package/bundled-test-harness/assets/remix-card-test-CKGC_Sgq.js +58 -0
  409. package/bundled-test-harness/assets/rendered-markdown-DXiDN91F.js +292 -0
  410. package/bundled-test-harness/assets/rendered-markdown-test-n3MlXmmu.js +587 -0
  411. package/bundled-test-harness/assets/resident-instance-reuse-test-BjdhE6CM.js +82 -0
  412. package/bundled-test-harness/assets/result-tile-o6dtjgX4.js +144 -0
  413. package/bundled-test-harness/assets/rich-markdown-field-test-VXr6l20h.js +1647 -0
  414. package/bundled-test-harness/assets/room-message-test-BrjJ2wMs.js +484 -0
  415. package/bundled-test-harness/assets/run-P_7TsreC.js +4017 -0
  416. package/bundled-test-harness/assets/run-realm-code-DsBUf1si.js +2964 -0
  417. package/bundled-test-harness/assets/run-realm-code-test-cS0DzaKo.js +3844 -0
  418. package/bundled-test-harness/assets/sanitize-module-list-test-CvuOOiUY.js +85 -0
  419. package/bundled-test-harness/assets/save-card-skip-index-wait-test-fpJ1eq32.js +89 -0
  420. package/bundled-test-harness/assets/schema-editor-test-NkKjCgyf.js +785 -0
  421. package/bundled-test-harness/assets/schema-generation-test-Dmg3lWl7.js +28 -0
  422. package/bundled-test-harness/assets/scrolling-test-B0GNYGYc.js +412 -0
  423. package/bundled-test-harness/assets/search-adorn-test-CZebk7_y.js +136 -0
  424. package/bundled-test-harness/assets/search-and-choose-test-Bd4NZUup.js +154 -0
  425. package/bundled-test-harness/assets/search-correlation-id-test-DXKlEO55.js +139 -0
  426. package/bundled-test-harness/assets/search-entries-result-test-QQawA8Fm.js +234 -0
  427. package/bundled-test-harness/assets/search-entries-test-3DlqGPQq.js +1486 -0
  428. package/bundled-test-harness/assets/search-entries-tool-test-D1TvDE9D.js +504 -0
  429. package/bundled-test-harness/assets/search-google-images-test-DqsoQGr1.js +166 -0
  430. package/bundled-test-harness/assets/search-results-DGrNaPxh.js +266 -0
  431. package/bundled-test-harness/assets/search-results-test-CqVHYNRt.js +578 -0
  432. package/bundled-test-harness/assets/search-selection-menu-test-D6bIjKiH.js +108 -0
  433. package/bundled-test-harness/assets/search-sheet-files-test-Bf37TQXo.js +126 -0
  434. package/bundled-test-harness/assets/search-sheet-persistence-test-CV4_XdxR.js +131 -0
  435. package/bundled-test-harness/assets/search-test-Dlb-wg3a.js +2249 -0
  436. package/bundled-test-harness/assets/search-tool-test-BJLgVMoL.js +156 -0
  437. package/bundled-test-harness/assets/searchable-option-test-CcbfMqIL.js +322 -0
  438. package/bundled-test-harness/assets/searchable-search-doc-test-yH9fLGNS.js +1271 -0
  439. package/bundled-test-harness/assets/section-rail-CNFCebtT.js +113 -0
  440. package/bundled-test-harness/assets/section-rail-test-KNJAWWl6.js +256 -0
  441. package/bundled-test-harness/assets/secure-sign-in-Dyljp0Th.js +174 -0
  442. package/bundled-test-harness/assets/secure-sign-in-test-QnqNuTP3.js +373 -0
  443. package/bundled-test-harness/assets/segmented-control-DxJdoJ4Z.js +173 -0
  444. package/bundled-test-harness/assets/select-BiQTg2ts.js +175 -0
  445. package/bundled-test-harness/assets/send-ai-assistant-message-test-CAn7M2dZ.js +52 -0
  446. package/bundled-test-harness/assets/send-bot-trigger-event-test-qBu5E_jy.js +56 -0
  447. package/bundled-test-harness/assets/send-request-via-proxy-test-CLuwLBq_.js +380 -0
  448. package/bundled-test-harness/assets/sending-test-H0AaBSgi.js +659 -0
  449. package/bundled-test-harness/assets/serialization-rri-form-audit-test-hMJukiKt.js +136 -0
  450. package/bundled-test-harness/assets/serialization-test-W5e3wKbz.js +8758 -0
  451. package/bundled-test-harness/assets/set-user-system-card-test-CjgWLkNV.js +59 -0
  452. package/bundled-test-harness/assets/setup-CssMNvui.js +772 -0
  453. package/bundled-test-harness/assets/setup-D8YXvK-p.js +2 -0
  454. package/bundled-test-harness/assets/shared-link-target-reuse-test-D42UO8DC.js +207 -0
  455. package/bundled-test-harness/assets/show-card-test-CHEaS514.js +365 -0
  456. package/bundled-test-harness/assets/signed-capture-link-test-BgEu0F-S.js +132 -0
  457. package/bundled-test-harness/assets/single-stack-test-DYcu_v7Z.js +652 -0
  458. package/bundled-test-harness/assets/skills-test-ChmKhADX.js +648 -0
  459. package/bundled-test-harness/assets/skip-boot-index-guard-test-BzRIncDN.js +46 -0
  460. package/bundled-test-harness/assets/spec-test-BYvFR6Xb.js +1077 -0
  461. package/bundled-test-harness/assets/spinner-Bx9x55NA.js +49 -0
  462. package/bundled-test-harness/assets/src-C1hYFgVl.js +216 -0
  463. package/bundled-test-harness/assets/src-CIlLx7Lu.js +5 -0
  464. package/bundled-test-harness/assets/stick-to-bottom-resize-test-DMHsAG0v.js +56 -0
  465. package/bundled-test-harness/assets/store-add-test-D_9IHQjZ.js +50 -0
  466. package/bundled-test-harness/assets/store-module-rebuild-test-BRGZoLRV.js +454 -0
  467. package/bundled-test-harness/assets/store-search-test-3G8JHuj2.js +175 -0
  468. package/bundled-test-harness/assets/store-test-BiKKDqqW.js +3672 -0
  469. package/bundled-test-harness/assets/structured-theme-test-11TNsgUW.js +377 -0
  470. package/bundled-test-harness/assets/summarize-session-test-CwzD_ZbD.js +172 -0
  471. package/bundled-test-harness/assets/svg-image-def-test-zV6aMK9q.js +167 -0
  472. package/bundled-test-harness/assets/switch-submode-test-DQU2cP5_.js +168 -0
  473. package/bundled-test-harness/assets/sync-openrouter-models-test-xrXVaC2H.js +97 -0
  474. package/bundled-test-harness/assets/test-support-BGl3rthw.js +3 -0
  475. package/bundled-test-harness/assets/test-support-BcBv__98.js +99 -0
  476. package/bundled-test-harness/assets/tests-CmM9imwB.js +3598 -0
  477. package/bundled-test-harness/assets/text-file-def-test-Cyq78UFY.js +94 -0
  478. package/bundled-test-harness/assets/text-input-validator-test-DBj7TaM_.js +156 -0
  479. package/bundled-test-harness/assets/text-suggestion-test-C4XAqWqY.js +340 -0
  480. package/bundled-test-harness/assets/theme-card-test-dVNz4tgU.js +621 -0
  481. package/bundled-test-harness/assets/theme-dashboard-nav-test-DYSn5pqo.js +196 -0
  482. package/bundled-test-harness/assets/theme-scheme-island-test-C1WpkfEP.js +264 -0
  483. package/bundled-test-harness/assets/theme-scoped-css-parity-test-BVluppsE.js +176 -0
  484. package/bundled-test-harness/assets/titles-DCvAhECF.js +52 -0
  485. package/bundled-test-harness/assets/titles-ZPeArtS1.js +2 -0
  486. package/bundled-test-harness/assets/to-device-streaming-test-BJ4J1cXe.js +163 -0
  487. package/bundled-test-harness/assets/token-usage-test-WUf4r4fQ.js +160 -0
  488. package/bundled-test-harness/assets/tools-J_Knr_W6.js +774 -0
  489. package/bundled-test-harness/assets/tools-calling-test-CfqZX0Ed.js +200 -0
  490. package/bundled-test-harness/assets/tools-test-B4x58ZmI.js +1624 -0
  491. package/bundled-test-harness/assets/tools-test-Cvau5219.js +3204 -0
  492. package/bundled-test-harness/assets/tooltip-B0rEgyMW.css +66 -0
  493. package/bundled-test-harness/assets/tooltip-DvUMUgVX.js +195 -0
  494. package/bundled-test-harness/assets/transform-cards-test-CYQbZeD9.js +341 -0
  495. package/bundled-test-harness/assets/ts-file-def-preview-test-m39f8Zio.js +95 -0
  496. package/bundled-test-harness/assets/ts-file-def-test-xIcL5xWe.js +92 -0
  497. package/bundled-test-harness/assets/ttf-font-def-test-ClQ2SzFF.js +206 -0
  498. package/bundled-test-harness/assets/turn-settling-test-DZoL2mRT.js +160 -0
  499. package/bundled-test-harness/assets/turn-summary-Bmt7ZxTS.js +1039 -0
  500. package/bundled-test-harness/assets/unpublish-realm-test-0ToTJczx.js +102 -0
  501. package/bundled-test-harness/assets/update-room-skills-test-o_j8NOUV.js +240 -0
  502. package/bundled-test-harness/assets/use-ai-assistant-test-D7HFpxKJ.js +384 -0
  503. package/bundled-test-harness/assets/user-message-BAOt1hS3.js +262 -0
  504. package/bundled-test-harness/assets/validate-realm-test-e3xIbNLB.js +67 -0
  505. package/bundled-test-harness/assets/video-metadata-extractor-test-D8naLSlg.js +520 -0
  506. package/bundled-test-harness/assets/view-visually-test-BuhGau5E.js +335 -0
  507. package/bundled-test-harness/assets/virtual-network-reset-test-CgaFNGPi.js +96 -0
  508. package/bundled-test-harness/assets/wav-audio-def-test-CWG_UdCh.js +160 -0
  509. package/bundled-test-harness/assets/webp-image-def-test-sN4yw8Zu.js +226 -0
  510. package/bundled-test-harness/assets/workspace-0LfPqbYB.js +445 -0
  511. package/bundled-test-harness/assets/workspace-a11y-test-DQxYDRAP.js +197 -0
  512. package/bundled-test-harness/assets/workspace-actions-jGJSfl8M.js +588 -0
  513. package/bundled-test-harness/assets/workspace-behavior-test-BnF-bmBN.js +338 -0
  514. package/bundled-test-harness/assets/workspace-delete-multiple-test-D-rxPDuT.js +212 -0
  515. package/bundled-test-harness/assets/workspace-delete-summary-test-C2-Mve5R.js +63 -0
  516. package/bundled-test-harness/assets/workspace-hosting-test-BvDKdlOb.js +138 -0
  517. package/bundled-test-harness/assets/workspace-indexing-test-B34T3kqD.js +71 -0
  518. package/bundled-test-harness/assets/workspace-test-CJivgv-m.js +51 -0
  519. package/bundled-test-harness/assets/workspace-test-CuSRpPnQ.js +385 -0
  520. package/bundled-test-harness/assets/workspace-timestamp-labels-test-aWgjdbCp.js +68 -0
  521. package/bundled-test-harness/assets/workspace-unit-test-DHMUf2KT.js +122 -0
  522. package/bundled-test-harness/assets/write-binary-file-test-P-hVQuin.js +124 -0
  523. package/bundled-test-harness/assets/write-text-file-test-fXvJueDd.js +191 -0
  524. package/bundled-test-harness/assets/zip-archive-test-C2P5CUSR.js +285 -0
  525. package/bundled-test-harness/assets/zip-file-def-test-BfJZAmGt.js +164 -0
  526. package/bundled-test-harness/boxel-ui-checksum.txt +1 -1
  527. package/bundled-test-harness/index.html +48 -48
  528. package/bundled-test-harness/tests/index.html +50 -50
  529. package/bundled-types/boxel-ui/helpers/theme-scoped-css.ts +4 -0
  530. package/bundled-types/choreo/choreo.gts +58 -2
  531. package/bundled-types/choreo/compile.ts +5 -0
  532. package/bundled-types/choreo/layout-probe.ts +100 -0
  533. package/bundled-types/choreo/run.ts +99 -4
  534. package/bundled-types/host-app/components/operator-mode/dashboard/get-started.gts +152 -7
  535. package/bundled-types/host-app/components/operator-mode/dashboard/index.gts +2 -0
  536. package/bundled-types/host-app/components/operator-mode/dashboard/workspace.gts +5 -3
  537. package/bundled-types/host-app/components/operator-mode/dashboard-modals/workspace-modals.gts +5 -22
  538. package/bundled-types/host-app/components/operator-mode/host-submode/publishing-realm-popover.gts +1 -1
  539. package/bundled-types/host-app/components/operator-mode/host-submode.gts +111 -37
  540. package/bundled-types/host-app/components/operator-mode/motion/stack-motion.gts +92 -33
  541. package/bundled-types/host-app/components/operator-mode/publish-realm-modal.gts +1 -0
  542. package/bundled-types/host-app/components/operator-mode/stack-item.gts +2 -2
  543. package/bundled-types/host-app/components/operator-mode/stack.gts +36 -25
  544. package/bundled-types/host-app/components/operator-mode/submode-layout.gts +2 -2
  545. package/bundled-types/host-app/lib/modal-focus-trap.ts +33 -0
  546. package/bundled-types/host-app/lib/workspace-actions.ts +21 -0
  547. package/bundled-types/host-app/services/host-mode-service.ts +39 -0
  548. package/bundled-types/host-app/services/realm.ts +14 -0
  549. package/bundled-types/host-tests/helpers/dashboard.ts +67 -0
  550. package/package.json +1 -1
  551. package/bundled-test-harness/assets/account-switch-failed-test-FytUFiPO.js +0 -45
  552. package/bundled-test-harness/assets/adapter-DvmPwSZv.js +0 -2
  553. package/bundled-test-harness/assets/add-field-to-card-definition-tool-test-DN525jiY.js +0 -112
  554. package/bundled-test-harness/assets/ai-assistant-create-workspace-test-q3tKqVJQ.js +0 -130
  555. package/bundled-test-harness/assets/ai-assistant-panel-relogin-test-DgeXcCyi.js +0 -46
  556. package/bundled-test-harness/assets/ai-assistant-test-lDIGPKFP.js +0 -2223
  557. package/bundled-test-harness/assets/ai-function-generation-test-D5GbLyvL.js +0 -1176
  558. package/bundled-test-harness/assets/ai-module-creation-test-I3-j2beD.js +0 -151
  559. package/bundled-test-harness/assets/aibot-message-Dmsjifs6.js +0 -1312
  560. package/bundled-test-harness/assets/app-BS9_-DhN.js +0 -14146
  561. package/bundled-test-harness/assets/apply-markdown-edit-test-4zlwt0Db.js +0 -230
  562. package/bundled-test-harness/assets/ask-user-picker-Dr-0qpNr.js +0 -370
  563. package/bundled-test-harness/assets/ask-user-picker-test-633AFdmS.js +0 -39
  564. package/bundled-test-harness/assets/assistant-transcript-test-BgRnLvMg.js +0 -57
  565. package/bundled-test-harness/assets/audio-metadata-extractor-test-4xsQqL-0.js +0 -1176
  566. package/bundled-test-harness/assets/authed-fetch-test-663mT5_N.js +0 -73
  567. package/bundled-test-harness/assets/avif-image-def-test-h01BPIJy.js +0 -187
  568. package/bundled-test-harness/assets/basic-test-DiD6T-8Q.js +0 -139
  569. package/bundled-test-harness/assets/binary-upload-dedupe-test-CkjMPO_e.js +0 -308
  570. package/bundled-test-harness/assets/bot-registration-test-CFZHpwdj.js +0 -97
  571. package/bundled-test-harness/assets/box-test-C3pSy5ED.js +0 -50
  572. package/bundled-test-harness/assets/brand-guide-attachments-test-EoC_u7Vc.js +0 -84
  573. package/bundled-test-harness/assets/brand-guide-custom-css-test-Dn3fvblr.js +0 -196
  574. package/bundled-test-harness/assets/brand-guide-edit-test-NeiT3MyK.js +0 -140
  575. package/bundled-test-harness/assets/brand-logo-mark-field-test-C2A1EnBB.js +0 -86
  576. package/bundled-test-harness/assets/broken-link-template-test-CWn6V5zZ.js +0 -192
  577. package/bundled-test-harness/assets/bundled-base-modules-test-D7mLzpsw.js +0 -54
  578. package/bundled-test-harness/assets/bundled-base-oracle-test-I7xCId_k.js +0 -37
  579. package/bundled-test-harness/assets/buried-stack-item-scroll-test-DFBev0h-.js +0 -236
  580. package/bundled-test-harness/assets/button-BeSuhveJ.js +0 -207
  581. package/bundled-test-harness/assets/bxl-cyclic-graph-test-DPykwvvx.js +0 -47
  582. package/bundled-test-harness/assets/bxl-expression-test-LBWJiFb9.js +0 -250
  583. package/bundled-test-harness/assets/bxl-indexing-test-BuZmLk7y.js +0 -212
  584. package/bundled-test-harness/assets/bxl-platform-module-test-BNIvlkCM.js +0 -71
  585. package/bundled-test-harness/assets/can-invoke-test-t-bFIIeX.js +0 -455
  586. package/bundled-test-harness/assets/can-read-realm-test-2Q_MzRT9.js +0 -56
  587. package/bundled-test-harness/assets/cancel-indexing-job-test-QeYxEukn.js +0 -69
  588. package/bundled-test-harness/assets/capture-test-CJmJG8YR.js +0 -360
  589. package/bundled-test-harness/assets/card-api-test-B43I510H.js +0 -198
  590. package/bundled-test-harness/assets/card-basics-test-CBClzP2y.js +0 -5364
  591. package/bundled-test-harness/assets/card-chooser-paging-test-HEVzf6pR.js +0 -235
  592. package/bundled-test-harness/assets/card-chooser-test-GfjBRPFI.js +0 -393
  593. package/bundled-test-harness/assets/card-context-search-results-CoSr4EdS.js +0 -30
  594. package/bundled-test-harness/assets/card-context-search-results-test-BLMlZu9t.js +0 -184
  595. package/bundled-test-harness/assets/card-def-field-def-relationships-test-DEBOzKan.js +0 -562
  596. package/bundled-test-harness/assets/card-def-menu-items-test-88_h8o0D.js +0 -228
  597. package/bundled-test-harness/assets/card-delete-test-DKom1phy.js +0 -466
  598. package/bundled-test-harness/assets/card-error-awaiting-index-test-DEwgFZMP.js +0 -53
  599. package/bundled-test-harness/assets/card-error-r6_cXst9.js +0 -72
  600. package/bundled-test-harness/assets/card-info-thumbnail-picker-test-B7LiY15e.js +0 -219
  601. package/bundled-test-harness/assets/card-playground-test-CgyIJHui.js +0 -1491
  602. package/bundled-test-harness/assets/card-prerender-rPfzpIOU.js +0 -12939
  603. package/bundled-test-harness/assets/card-thunk-error-test-L0pvg4Ce.js +0 -48
  604. package/bundled-test-harness/assets/card-type-service-test-B2dhqxSD.js +0 -161
  605. package/bundled-test-harness/assets/check-correctness-test-DgqaLlCW.js +0 -1093
  606. package/bundled-test-harness/assets/check-domain-availability-test-B0hJHY5l.js +0 -98
  607. package/bundled-test-harness/assets/chip-D01NW3WH.js +0 -44
  608. package/bundled-test-harness/assets/choreo-D2Jl79RU.js +0 -1019
  609. package/bundled-test-harness/assets/choreo-_E8SOEe-.js +0 -2
  610. package/bundled-test-harness/assets/choreo-feature-reel-test-WLjsZDmS.js +0 -155
  611. package/bundled-test-harness/assets/choreo-gallery-build-order-test-6jnS8PsS.js +0 -436
  612. package/bundled-test-harness/assets/choreo-gallery-compositor-test-CbUZsVB6.js +0 -399
  613. package/bundled-test-harness/assets/choreo-gallery-cover-test-CbvAStgk.js +0 -214
  614. package/bundled-test-harness/assets/choreo-gallery-crossing-stage-test-tdjvUSa6.js +0 -133
  615. package/bundled-test-harness/assets/choreo-gallery-demos-alive-test-CsnM3hQK.js +0 -42
  616. package/bundled-test-harness/assets/choreo-gallery-drift-test-DG2LQTa7.js +0 -620
  617. package/bundled-test-harness/assets/choreo-gallery-escort-test-mn3-qXP1.js +0 -187
  618. package/bundled-test-harness/assets/choreo-gallery-films-test-BuktaC0D.js +0 -140
  619. package/bundled-test-harness/assets/choreo-gallery-filter-test-Dd-zpps0.js +0 -46
  620. package/bundled-test-harness/assets/choreo-gallery-fold-test-CWc1ijGc.js +0 -180
  621. package/bundled-test-harness/assets/choreo-gallery-guide-pages-test-tk2QmYPU.js +0 -114
  622. package/bundled-test-harness/assets/choreo-gallery-guides-test-DVbf1zM4.js +0 -321
  623. package/bundled-test-harness/assets/choreo-gallery-hang-test-B7EFp2dx.js +0 -426
  624. package/bundled-test-harness/assets/choreo-gallery-highlight-test-BFgbdesP.js +0 -60
  625. package/bundled-test-harness/assets/choreo-gallery-inline-edit-test-DJb8FC5R.js +0 -370
  626. package/bundled-test-harness/assets/choreo-gallery-interruption-test-DWyMXo5D.js +0 -176
  627. package/bundled-test-harness/assets/choreo-gallery-lone-stack-test-D3b8LsJ6.js +0 -104
  628. package/bundled-test-harness/assets/choreo-gallery-navigation-test-CjjU6Rvn.js +0 -193
  629. package/bundled-test-harness/assets/choreo-gallery-playhead-transport-test-Le_h3QWU.js +0 -111
  630. package/bundled-test-harness/assets/choreo-gallery-poplayout-subtree-test-Cp-DlWj4.js +0 -127
  631. package/bundled-test-harness/assets/choreo-gallery-presence-modes-test-DayS4GCJ.js +0 -100
  632. package/bundled-test-harness/assets/choreo-gallery-presentation-test-DeAfuFS7.js +0 -157
  633. package/bundled-test-harness/assets/choreo-gallery-reduced-motion-test-BgPWpggq.js +0 -145
  634. package/bundled-test-harness/assets/choreo-gallery-sheet-standalone-test-PzyoMNYv.js +0 -89
  635. package/bundled-test-harness/assets/choreo-gallery-sheet-test-CxaiNBkL.js +0 -48
  636. package/bundled-test-harness/assets/choreo-gallery-site-test-6xtSntS5.js +0 -237
  637. package/bundled-test-harness/assets/choreo-gallery-stage-E6Q5r-zU.js +0 -256
  638. package/bundled-test-harness/assets/choreo-gallery-stage-keyboard-test-C7aWMr9a.js +0 -102
  639. package/bundled-test-harness/assets/choreo-gallery-stages-test-CDWWgC61.js +0 -35
  640. package/bundled-test-harness/assets/choreo-gallery-subdivision-test-Bkp15XJv.js +0 -138
  641. package/bundled-test-harness/assets/choreo-gallery-table-plan-test-CcGRi_3O.js +0 -144
  642. package/bundled-test-harness/assets/choreo-gallery-theater-test-Qph5pLT_.js +0 -252
  643. package/bundled-test-harness/assets/choreo-gallery-tuning-test-C4DhFLVA.js +0 -95
  644. package/bundled-test-harness/assets/choreo-gallery-widget-room-test-LK493r1M.js +0 -88
  645. package/bundled-test-harness/assets/choreo-gallery-wires-test-B7SeUCc8.js +0 -148
  646. package/bundled-test-harness/assets/client-telemetry-test-DGmHzAFx.js +0 -340
  647. package/bundled-test-harness/assets/clip-BpYQPVz_.js +0 -2
  648. package/bundled-test-harness/assets/clip-CNaYbIwL.js +0 -92
  649. package/bundled-test-harness/assets/code-block-Cp2CJo5-.js +0 -502
  650. package/bundled-test-harness/assets/code-ref-test-C8JBHDb-.js +0 -163
  651. package/bundled-test-harness/assets/code-submode-availability-test-CzG1Tv6L.js +0 -198
  652. package/bundled-test-harness/assets/code-submode-test-BclVWjm5.js +0 -1839
  653. package/bundled-test-harness/assets/codeblocks-test-CmQlyxN7.js +0 -418
  654. package/bundled-test-harness/assets/codemirror-editor-test-B74H_yn8.js +0 -1512
  655. package/bundled-test-harness/assets/codemirror-embed-toolbar-test-Bz6VEysU.js +0 -366
  656. package/bundled-test-harness/assets/color-field-test-DMCPQKIP.js +0 -212
  657. package/bundled-test-harness/assets/compaction-test-saQCLBrQ.js +0 -150
  658. package/bundled-test-harness/assets/computed-test-C05HliJC.js +0 -1320
  659. package/bundled-test-harness/assets/container-Cqcwrd-m.js +0 -10857
  660. package/bundled-test-harness/assets/container-h3Wc26qn.css +0 -5097
  661. package/bundled-test-harness/assets/content-preview-components-test-DZPj4_CU.js +0 -462
  662. package/bundled-test-harness/assets/copy-and-edit-test-DiXTQNTF.js +0 -292
  663. package/bundled-test-harness/assets/copy-card-test-ys7GquUY.js +0 -218
  664. package/bundled-test-harness/assets/copy-file-to-realm-test-Gn0Wn4vT.js +0 -148
  665. package/bundled-test-harness/assets/copy-source-test-BTLrOmPm.js +0 -56
  666. package/bundled-test-harness/assets/create-file-test-BCeIW-Rt.js +0 -464
  667. package/bundled-test-harness/assets/create-file-test-DbHQ5JsS.js +0 -1086
  668. package/bundled-test-harness/assets/create-listing-modal-test-CeHc4ter.js +0 -273
  669. package/bundled-test-harness/assets/create-listing-pr-request-test-DXbJNfMh.js +0 -117
  670. package/bundled-test-harness/assets/create-spec-test-BDIZoyHT.js +0 -256
  671. package/bundled-test-harness/assets/create-submission-workflow-test-Bix5J-3A.js +0 -132
  672. package/bundled-test-harness/assets/create-workspace-test-BmNnLHwC.js +0 -104
  673. package/bundled-test-harness/assets/credential-fields-test-NK1F4QWn.js +0 -200
  674. package/bundled-test-harness/assets/csv-file-def-test-BSfs4TTP.js +0 -102
  675. package/bundled-test-harness/assets/dashboard-C4T7ffKY.js +0 -3576
  676. package/bundled-test-harness/assets/dashboard-CFeHuP5-.js +0 -81
  677. package/bundled-test-harness/assets/dashboard-DQlpW-ux.css +0 -2392
  678. package/bundled-test-harness/assets/dashboard-add-workspace-test--rr6objf.js +0 -50
  679. package/bundled-test-harness/assets/dashboard-agents-test-D1y8H4xH.js +0 -334
  680. package/bundled-test-harness/assets/dashboard-archive-test-bN4EQaXv.js +0 -128
  681. package/bundled-test-harness/assets/dashboard-delete-test-BvsASb8B.js +0 -163
  682. package/bundled-test-harness/assets/dashboard-duplicate-offer-test-DEsd5ZzZ.js +0 -71
  683. package/bundled-test-harness/assets/dashboard-duplicate-test-BnR0sTgB.js +0 -222
  684. package/bundled-test-harness/assets/dashboard-get-started-test-DG4uUXLv.js +0 -246
  685. package/bundled-test-harness/assets/dashboard-pinned-cards-test-AoGGVRAS.js +0 -220
  686. package/bundled-test-harness/assets/dashboard-reindex-test-BN9a96Xp.js +0 -115
  687. package/bundled-test-harness/assets/dashboard-section-rail-test-B3OT9V2T.js +0 -169
  688. package/bundled-test-harness/assets/dashboard-state-test-BY0Zqrmj.js +0 -162
  689. package/bundled-test-harness/assets/dashboard-test-C13oNpWt.js +0 -545
  690. package/bundled-test-harness/assets/dashboard-unreachable-notice-test-DZIV4x5j.js +0 -62
  691. package/bundled-test-harness/assets/dashboard-workspace-test-CBnOQViI.js +0 -537
  692. package/bundled-test-harness/assets/dashboard-workspaces-section-test-KU8ZVOYp.js +0 -396
  693. package/bundled-test-harness/assets/data-file-def-preview-test-CI5gcdtK.js +0 -155
  694. package/bundled-test-harness/assets/date-time-fields-test-D2CpR_Pb.js +0 -359
  695. package/bundled-test-harness/assets/debug-message-test-Df1kHesw.js +0 -117
  696. package/bundled-test-harness/assets/declared-captures-test-hQ43zuox.js +0 -879
  697. package/bundled-test-harness/assets/delete-workspace-test-BhfMKsix.js +0 -102
  698. package/bundled-test-harness/assets/diffing-test-CHRh55mC.js +0 -210
  699. package/bundled-test-harness/assets/download-file-to-realm-test-CC1HURCi.js +0 -119
  700. package/bundled-test-harness/assets/editor-test-DkeCv28f.js +0 -688
  701. package/bundled-test-harness/assets/edits-BSJqtUXM.js +0 -651
  702. package/bundled-test-harness/assets/email-field-test-DihK0suO.js +0 -75
  703. package/bundled-test-harness/assets/enum-field-test-Gja3bzt5.js +0 -935
  704. package/bundled-test-harness/assets/error-display-test-GhYZu7cp.js +0 -343
  705. package/bundled-test-harness/assets/evaluate-module-test-D_t4CiUq.js +0 -91
  706. package/bundled-test-harness/assets/execute-atomic-operations-test-xtou8Zeg.js +0 -113
  707. package/bundled-test-harness/assets/externals-B02-sD_L.js +0 -4393
  708. package/bundled-test-harness/assets/fallback-banner-live-delete-test-DtxzNXdE.js +0 -207
  709. package/bundled-test-harness/assets/fallback-banner-test-BfmiQ_68.js +0 -53
  710. package/bundled-test-harness/assets/fallback-banner-test-DLtTdmvn.js +0 -225
  711. package/bundled-test-harness/assets/fallback-models-test-BxNJxhfd.js +0 -161
  712. package/bundled-test-harness/assets/fetch-card-json-test-DofKbzvC.js +0 -61
  713. package/bundled-test-harness/assets/field-configuration-test-SUoPaXWy.js +0 -551
  714. package/bundled-test-harness/assets/field-markdown-domain-test-BwtR0dPP.js +0 -616
  715. package/bundled-test-harness/assets/field-markdown-oversize-test-D8UJcBc3.js +0 -88
  716. package/bundled-test-harness/assets/field-markdown-primitives-test-D5_ZdoDO.js +0 -365
  717. package/bundled-test-harness/assets/field-markdown-specialized-test-Dpd5hs04.js +0 -534
  718. package/bundled-test-harness/assets/field-playground-test-CzhYzKGv.js +0 -894
  719. package/bundled-test-harness/assets/field-support-predicates-test-BSvVOFth.js +0 -167
  720. package/bundled-test-harness/assets/file-attachment-test-fM-yFedm.js +0 -796
  721. package/bundled-test-harness/assets/file-chooser-panel-test-CKj8YTdY.js +0 -153
  722. package/bundled-test-harness/assets/file-chooser-test-Bs8jFXqa.js +0 -504
  723. package/bundled-test-harness/assets/file-def-format-templates-test-CxrRoWoD.js +0 -380
  724. package/bundled-test-harness/assets/file-def-live-reload-test-X_8YEkve.js +0 -124
  725. package/bundled-test-harness/assets/file-def-menu-items-test-Dx879o_o.js +0 -138
  726. package/bundled-test-harness/assets/file-def-navigation-test-MMI_EEO1.js +0 -109
  727. package/bundled-test-harness/assets/file-def-serialization-test-B5lguBQD.js +0 -89
  728. package/bundled-test-harness/assets/file-def-test-Di9QWcrj.js +0 -216
  729. package/bundled-test-harness/assets/file-preview-live-reload-test-aqx93A7c.js +0 -310
  730. package/bundled-test-harness/assets/file-resource-primitives-test-a5abpcSB.js +0 -255
  731. package/bundled-test-harness/assets/file-tree-from-index-test-CnruGxJ8.js +0 -96
  732. package/bundled-test-harness/assets/file-tree-test-BCyWDdSE.js +0 -851
  733. package/bundled-test-harness/assets/file-view-model-test-BfpLa01Y.js +0 -346
  734. package/bundled-test-harness/assets/filedef-export-shape-test-CQ9XbrzS.js +0 -61
  735. package/bundled-test-harness/assets/film-CL1zj_bJ.js +0 -2
  736. package/bundled-test-harness/assets/film-Dq_quZ31.js +0 -13
  737. package/bundled-test-harness/assets/film-xbkQa060.js +0 -4074
  738. package/bundled-test-harness/assets/flac-audio-def-test-BmVp9dMx.js +0 -143
  739. package/bundled-test-harness/assets/focus-Dm4wkM72.js +0 -306
  740. package/bundled-test-harness/assets/font-metadata-extractor-test-OWEh9_MS.js +0 -415
  741. package/bundled-test-harness/assets/formatted-aibot-message-test-BpHsWpuV.js +0 -109
  742. package/bundled-test-harness/assets/formatted-user-message-test-DZW5TAr0.js +0 -43
  743. package/bundled-test-harness/assets/freestyle-test-D_uaPU_3.js +0 -17
  744. package/bundled-test-harness/assets/full-reindex-realm-test-C6vHL5kC.js +0 -101
  745. package/bundled-test-harness/assets/garbage-collection-test-D-Ao4t2n.js +0 -403
  746. package/bundled-test-harness/assets/general-test-PSGI8W0z.js +0 -923
  747. package/bundled-test-harness/assets/generate-example-cards-one-shot-test-J-m-0E6W.js +0 -65
  748. package/bundled-test-harness/assets/generic-file-def-preview-test-BAsOhTYU.js +0 -71
  749. package/bundled-test-harness/assets/get-available-realm-identifiers-test-D5PBOr97.js +0 -47
  750. package/bundled-test-harness/assets/get-catalog-realm-identifiers-test-NM9UURHE.js +0 -47
  751. package/bundled-test-harness/assets/get-default-writable-realm-test-BxXc9a3J.js +0 -54
  752. package/bundled-test-harness/assets/get-published-realms-test-C8TJEc4-.js +0 -71
  753. package/bundled-test-harness/assets/get-realm-of-resource-identifier-test-Dt8CB6lS.js +0 -54
  754. package/bundled-test-harness/assets/get-relationship-membership-state-test-9_8x3myJ.js +0 -1308
  755. package/bundled-test-harness/assets/get-user-system-card-test-k0UO-uba.js +0 -67
  756. package/bundled-test-harness/assets/gif-image-def-test-BWrqPGDX.js +0 -188
  757. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-BgG8QI9E.js +0 -160
  758. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-BKOvNyCN.js +0 -74
  759. package/bundled-test-harness/assets/gts-file-def-test-BCRHwDeZ.js +0 -100
  760. package/bundled-test-harness/assets/head-format-preview-test-DnfUhniI.js +0 -158
  761. package/bundled-test-harness/assets/helpers-DklkegO_.js +0 -5
  762. package/bundled-test-harness/assets/host-mode-service-vOfN0smp.js +0 -232
  763. package/bundled-test-harness/assets/host-mode-test-CCCJFz6_.js +0 -831
  764. package/bundled-test-harness/assets/host-submode-test-CtCfbuPA.js +0 -1342
  765. package/bundled-test-harness/assets/html-component-test-CWyhb5ZX.js +0 -65
  766. package/bundled-test-harness/assets/html-def-test-Cb8C2lUx.js +0 -160
  767. package/bundled-test-harness/assets/html-meta-extractor-test-BHT9Rtir.js +0 -60
  768. package/bundled-test-harness/assets/hydratable-card-test-DpgpdesD.js +0 -426
  769. package/bundled-test-harness/assets/icon-button-ABCGVF3C.js +0 -67
  770. package/bundled-test-harness/assets/image-metadata-extractor-test-ClhPTouq.js +0 -1109
  771. package/bundled-test-harness/assets/index-changes-test-CgnVr3LH.js +0 -367
  772. package/bundled-test-harness/assets/index-query-engine-test-CQTwju5_.js +0 -2593
  773. package/bundled-test-harness/assets/index-writer-test-IoVOoZT2.js +0 -3040
  774. package/bundled-test-harness/assets/inspector-test-BN2Ieb77.js +0 -2058
  775. package/bundled-test-harness/assets/instance-filter-matcher-test-Bq-_Sy89.js +0 -788
  776. package/bundled-test-harness/assets/instantiate-card-test-DEeDTzFV.js +0 -164
  777. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DP6kOyJS.js +0 -475
  778. package/bundled-test-harness/assets/interact-submode-setup-B0_cHqH-.js +0 -566
  779. package/bundled-test-harness/assets/invalidate-realm-identifiers-test-9uUD91Pw.js +0 -99
  780. package/bundled-test-harness/assets/invite-user-to-room-test-CcDA45Ac.js +0 -142
  781. package/bundled-test-harness/assets/invoke-card-operation-test-DmUtgueM.js +0 -333
  782. package/bundled-test-harness/assets/isolated-render-test-B2eXNHu6.js +0 -51
  783. package/bundled-test-harness/assets/job-scoped-doc-cache-test-DF9D7cOc.js +0 -181
  784. package/bundled-test-harness/assets/job-scoped-instance-residency-test-CSS8xUU5.js +0 -103
  785. package/bundled-test-harness/assets/jpg-image-def-test-voECMTht.js +0 -697
  786. package/bundled-test-harness/assets/json-file-def-test-8Y4KLjUC.js +0 -95
  787. package/bundled-test-harness/assets/key-notices-badge-test-d1mYqx0e.js +0 -155
  788. package/bundled-test-harness/assets/key-readiness-test-BtCg7PCk.js +0 -190
  789. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-CyCMbJnN.js +0 -398
  790. package/bundled-test-harness/assets/linksto-error-sentinel-test-BDW572-v.js +0 -238
  791. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test-B4wM97hD.js +0 -354
  792. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-BhJmtJ0_.js +0 -303
  793. package/bundled-test-harness/assets/linksto-sentinel-reload-test-BpBQ5V_i.js +0 -197
  794. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test-pkBBl4e9.js +0 -260
  795. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-Bb6wjUdD.js +0 -196
  796. package/bundled-test-harness/assets/lint-and-fix-test-CcMLn-co.js +0 -51
  797. package/bundled-test-harness/assets/live-test-AyBnq7BX.js +0 -2
  798. package/bundled-test-harness/assets/live-test-CgnAcIDw.js +0 -100
  799. package/bundled-test-harness/assets/load-default-skills-test-BIOwtx0Y.js +0 -74
  800. package/bundled-test-harness/assets/loader-parallel-prefetch-test-D5_oRSER.js +0 -257
  801. package/bundled-test-harness/assets/loader-test-DSc_jR1c.js +0 -482
  802. package/bundled-test-harness/assets/loading-test-8pldx7S-.js +0 -63
  803. package/bundled-test-harness/assets/m4a-audio-def-test-BDI5apzM.js +0 -190
  804. package/bundled-test-harness/assets/main-5kHyCkdm.js +0 -5
  805. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-Wud0s7WZ.js +0 -470
  806. package/bundled-test-harness/assets/markdown-embed-chooser-test-DVzzS-0C.js +0 -334
  807. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-B5W_iqsi.js +0 -447
  808. package/bundled-test-harness/assets/markdown-embed-preview-test-CZF_s0fB.js +0 -368
  809. package/bundled-test-harness/assets/markdown-fallback-test-fT6BS4W7.js +0 -316
  810. package/bundled-test-harness/assets/markdown-file-def-test-B1aTzazR.js +0 -380
  811. package/bundled-test-harness/assets/markdown-helpers-test-gNKZf7Mw.js +0 -188
  812. package/bundled-test-harness/assets/markdown-highlighting-test-Du5_CQmD.js +0 -244
  813. package/bundled-test-harness/assets/markdown-preview-h-_aJhRc.js +0 -72
  814. package/bundled-test-harness/assets/markdown-preview-test-DJvoVsXw.js +0 -238
  815. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-VwJi3Paj.js +0 -146
  816. package/bundled-test-harness/assets/markdown-skill-search-test-ysCdf0xM.js +0 -80
  817. package/bundled-test-harness/assets/matrix-service-account-switch-sessions-test-K2JuMy36.js +0 -63
  818. package/bundled-test-harness/assets/matrix-service-boot-assembly-test-CkdL_-os.js +0 -300
  819. package/bundled-test-harness/assets/matrix-service-personal-realm-test-Dy1DultK.js +0 -125
  820. package/bundled-test-harness/assets/matrix-service-realm-servers-test-DHDDKuEg.js +0 -55
  821. package/bundled-test-harness/assets/matrix-service-realms-list-updated-test-DcTbZpMl.js +0 -132
  822. package/bundled-test-harness/assets/matrix-service-relogin-test-D3NQktoa.js +0 -59
  823. package/bundled-test-harness/assets/matrix-service-sliding-sync-test-6CAflWOA.js +0 -35
  824. package/bundled-test-harness/assets/menu-kUSaJIPq.js +0 -3562
  825. package/bundled-test-harness/assets/message-service-subscription-test-DaQdgDWi.js +0 -110
  826. package/bundled-test-harness/assets/message-service-test-BsGEgM_m.js +0 -144
  827. package/bundled-test-harness/assets/message-tool-test-BB_4kw1V.js +0 -33
  828. package/bundled-test-harness/assets/midi-audio-def-test-BbbkFjqf.js +0 -182
  829. package/bundled-test-harness/assets/migrate-skill-test-X9xImDuq.js +0 -161
  830. package/bundled-test-harness/assets/mini-AwF31elJ.js +0 -1404
  831. package/bundled-test-harness/assets/mini-card-chooser-test-BZtrEiWu.js +0 -272
  832. package/bundled-test-harness/assets/mini-file-chooser-test-MIHW3kCI.js +0 -201
  833. package/bundled-test-harness/assets/mock-matrix-Dd8k0DNa.js +0 -15107
  834. package/bundled-test-harness/assets/mock-matrix-DhPN_34j.js +0 -2
  835. package/bundled-test-harness/assets/modal-LTh3_oHK.js +0 -322
  836. package/bundled-test-harness/assets/model-cost-tier-test-h1IkU9mp.js +0 -174
  837. package/bundled-test-harness/assets/model-file-extract-test-ntSo0wZF.js +0 -206
  838. package/bundled-test-harness/assets/module-transpile-cache-test-CDeRaaeP.js +0 -67
  839. package/bundled-test-harness/assets/monaco-test-C0Fa744D.js +0 -100
  840. package/bundled-test-harness/assets/mp3-audio-def-test-B4j4qR9H.js +0 -133
  841. package/bundled-test-harness/assets/multiple-stacks-test-BhA25ywL.js +0 -208
  842. package/bundled-test-harness/assets/nested-query-field-render-test-S9Y8YNKB.js +0 -249
  843. package/bundled-test-harness/assets/no-stacks-test-B7VciWyg.js +0 -48
  844. package/bundled-test-harness/assets/number-field-test-CS74lDPN.js +0 -184
  845. package/bundled-test-harness/assets/office-file-def-test-2cKc1pmd.js +0 -263
  846. package/bundled-test-harness/assets/office-metadata-extractor-test-DC8Fo-OW.js +0 -218
  847. package/bundled-test-harness/assets/office-poster-capture-test-Ba0_5UrT.js +0 -203
  848. package/bundled-test-harness/assets/ogg-audio-def-test-CIPQ1d4w.js +0 -196
  849. package/bundled-test-harness/assets/open-create-listing-modal-test-bmQkY5Zl.js +0 -131
  850. package/bundled-test-harness/assets/open-image-in-new-tab-test-DBD7_vMH.js +0 -52
  851. package/bundled-test-harness/assets/open-secure-window-test-BgeuYAqz.js +0 -253
  852. package/bundled-test-harness/assets/open-workspace-test-DRHGljV0.js +0 -46
  853. package/bundled-test-harness/assets/operation-lowering-test-CH1c0pSH.js +0 -2957
  854. package/bundled-test-harness/assets/operations-invocation-test-B1YkCLrv.js +0 -523
  855. package/bundled-test-harness/assets/operations-optimistic-test-DAbtOwsC.js +0 -203
  856. package/bundled-test-harness/assets/operations-query-test-9p1ZIDe-.js +0 -459
  857. package/bundled-test-harness/assets/operations-store-reconciliation-test-D0EQh3w2.js +0 -406
  858. package/bundled-test-harness/assets/operations-test-BQhlrfe3.js +0 -2518
  859. package/bundled-test-harness/assets/operator-mode-acceptance-test-DtHnonEb.js +0 -1195
  860. package/bundled-test-harness/assets/operator-mode-card-chooser-test-DQUxZxaq.js +0 -1036
  861. package/bundled-test-harness/assets/operator-mode-links-test-BJ26HllS.js +0 -797
  862. package/bundled-test-harness/assets/operator-mode-test-DIPDI0qt.js +0 -696
  863. package/bundled-test-harness/assets/operator-mode-ui-test-CfA-fAh4.js +0 -1045
  864. package/bundled-test-harness/assets/overlay-DecPh3nt.js +0 -123
  865. package/bundled-test-harness/assets/overlay-menu-items-test-C6XqjLtu.js +0 -331
  866. package/bundled-test-harness/assets/overlays-Ctp8ePzZ.js +0 -75
  867. package/bundled-test-harness/assets/overlays-CzWpSg5T.js +0 -2
  868. package/bundled-test-harness/assets/overlays-detached-element-test-DvL_8Bb5.js +0 -56
  869. package/bundled-test-harness/assets/panel-CImumikB.js +0 -15124
  870. package/bundled-test-harness/assets/past-sessions-test-N6riGN_I.js +0 -321
  871. package/bundled-test-harness/assets/patch-fields-test-D30_-KwQ.js +0 -1014
  872. package/bundled-test-harness/assets/patch-instance-test-C5rGscZq.js +0 -348
  873. package/bundled-test-harness/assets/pdf-file-def-test-DtiqGRvZ.js +0 -111
  874. package/bundled-test-harness/assets/pdf-metadata-extractor-test-FU02KmdV.js +0 -130
  875. package/bundled-test-harness/assets/permission-checking-realm-test-DqdNJDwU.js +0 -306
  876. package/bundled-test-harness/assets/persist-module-inspector-view-test-BHOAgPVy.js +0 -60
  877. package/bundled-test-harness/assets/persist-scroll-position-test-qtmS518r.js +0 -254
  878. package/bundled-test-harness/assets/phone-number-field-test-DhdaM7uL.js +0 -73
  879. package/bundled-test-harness/assets/pill-menu-test-C9Mrrepl.js +0 -60
  880. package/bundled-test-harness/assets/plate-9n-sXyCw.js +0 -41
  881. package/bundled-test-harness/assets/plate-BnZcAk-_.js +0 -2
  882. package/bundled-test-harness/assets/player-Cu5b4LEJ.js +0 -82
  883. package/bundled-test-harness/assets/player-unk2mkxV.js +0 -2
  884. package/bundled-test-harness/assets/playground-BwA8wFGK.js +0 -58
  885. package/bundled-test-harness/assets/plural-field-components-test-CFNQKETg.js +0 -198
  886. package/bundled-test-harness/assets/png-image-def-test-DG5Vhlqb.js +0 -266
  887. package/bundled-test-harness/assets/policy-audit-confirmation-test-yfKU47LR.js +0 -155
  888. package/bundled-test-harness/assets/policy-scoped-search-test-BjQRDYqR.js +0 -339
  889. package/bundled-test-harness/assets/prerender-file-extract-test-CEU4SaAZ.js +0 -346
  890. package/bundled-test-harness/assets/prerender-html-test-CGB3ClCS.js +0 -670
  891. package/bundled-test-harness/assets/prerender-meta-test-xqc4fW_0.js +0 -614
  892. package/bundled-test-harness/assets/prerender-module-test-CI1TmZw-.js +0 -409
  893. package/bundled-test-harness/assets/prerender-persistence-block-test-Da0dJO_N.js +0 -124
  894. package/bundled-test-harness/assets/prerender-pre-model-error-test-BVLyhk8R.js +0 -61
  895. package/bundled-test-harness/assets/prerender-serialize-cycle-test-glJFfxHU.js +0 -134
  896. package/bundled-test-harness/assets/prerendered-html-read-test-Mp4L0VHQ.js +0 -191
  897. package/bundled-test-harness/assets/pretui-components-test-BBpA9UnA.js +0 -991
  898. package/bundled-test-harness/assets/pretui-components-test-BqFq7rw_.css +0 -730
  899. package/bundled-test-harness/assets/preview-format-test-C55Bwcur.js +0 -103
  900. package/bundled-test-harness/assets/preview-test-CTAhRGU8.js +0 -474
  901. package/bundled-test-harness/assets/process-card-test-UjqpuxB7.js +0 -94
  902. package/bundled-test-harness/assets/profile-settings-modal-C8bCgTMK.js +0 -989
  903. package/bundled-test-harness/assets/publish-realm-ixUB4FPK.js +0 -82
  904. package/bundled-test-harness/assets/publish-realm-test-CrrsdL4W.js +0 -210
  905. package/bundled-test-harness/assets/query-field-barrier-test-DjivFE93.js +0 -113
  906. package/bundled-test-harness/assets/query-field-error-sentinel-test-0HwnV4Mw.js +0 -201
  907. package/bundled-test-harness/assets/query-field-membership-status-test-C8yTTBkc.js +0 -323
  908. package/bundled-test-harness/assets/query-field-page-optin-test-D4l_GcII.js +0 -126
  909. package/bundled-test-harness/assets/query-field-schema-test-DDbcNNm5.js +0 -231
  910. package/bundled-test-harness/assets/query-field-search-throttle-test-CXp50Ax0.js +0 -154
  911. package/bundled-test-harness/assets/query-field-stale-prerender-test-DErzt-Cv.js +0 -152
  912. package/bundled-test-harness/assets/query-fields-test-Dz67fdSl.js +0 -535
  913. package/bundled-test-harness/assets/quick-look-test-B1ijDsh_.js +0 -139
  914. package/bundled-test-harness/assets/read-card-for-ai-assistant-test-DJxZ16H_.js +0 -91
  915. package/bundled-test-harness/assets/read-file-for-ai-assistant-test-BoRQkZ8c.js +0 -45
  916. package/bundled-test-harness/assets/read-source-test-Bl-NjchO.js +0 -67
  917. package/bundled-test-harness/assets/read-text-file-test-CP37CZoo.js +0 -124
  918. package/bundled-test-harness/assets/realm-CaK5mkT-.js +0 -2852
  919. package/bundled-test-harness/assets/realm-api-keys-BNUFWbGR.js +0 -579
  920. package/bundled-test-harness/assets/realm-api-keys-CkshxhXC.js +0 -2
  921. package/bundled-test-harness/assets/realm-api-keys-test-BP8xifjn.js +0 -109
  922. package/bundled-test-harness/assets/realm-api-keys-test-CwdK9YXp.js +0 -588
  923. package/bundled-test-harness/assets/realm-config-iKwE3Htp.js +0 -833
  924. package/bundled-test-harness/assets/realm-config-policy-standing-test-BgVEIDnB.js +0 -290
  925. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-BoJoKzmX.js +0 -274
  926. package/bundled-test-harness/assets/realm-config-settings-test-Kxw-GHye.js +0 -187
  927. package/bundled-test-harness/assets/realm-field-test-CdGOxrFb.js +0 -100
  928. package/bundled-test-harness/assets/realm-indexing-test-CHtsBV2b.js +0 -4380
  929. package/bundled-test-harness/assets/realm-policy-fitted-test--DhNZSdC.js +0 -206
  930. package/bundled-test-harness/assets/realm-policy-test-D7714iVa.js +0 -1141
  931. package/bundled-test-harness/assets/realm-querying-test-Cj1ekZ0H.js +0 -1067
  932. package/bundled-test-harness/assets/realm-server-form-agnostic-test-CZFPNJfD.js +0 -96
  933. package/bundled-test-harness/assets/realm-server-subscriber-test-C86WmBp0.js +0 -46
  934. package/bundled-test-harness/assets/realm-service-info-test-CdgcwKDR.js +0 -67
  935. package/bundled-test-harness/assets/realm-test-DPoLsvKz.js +0 -2364
  936. package/bundled-test-harness/assets/realm-token-refresh-test-Ch35Siwi.js +0 -153
  937. package/bundled-test-harness/assets/realm-url-tooltip-test-x8xWOENK.js +0 -78
  938. package/bundled-test-harness/assets/reasoning-test-BxpE8Jvf.js +0 -221
  939. package/bundled-test-harness/assets/recent-files-test-DTmEzPLq.js +0 -450
  940. package/bundled-test-harness/assets/reindex-realm-test-BQ8KULn4.js +0 -117
  941. package/bundled-test-harness/assets/relationship-loading-state-test-BJoArPWf.js +0 -290
  942. package/bundled-test-harness/assets/remix-card-test-DsTA1KoG.js +0 -58
  943. package/bundled-test-harness/assets/rendered-markdown-DvukulDO.js +0 -292
  944. package/bundled-test-harness/assets/rendered-markdown-test-DxGptXSV.js +0 -587
  945. package/bundled-test-harness/assets/resident-instance-reuse-test-ZWnVu8uj.js +0 -82
  946. package/bundled-test-harness/assets/result-tile-CPyI6Vmv.js +0 -144
  947. package/bundled-test-harness/assets/rich-markdown-field-test-CdygoXIO.js +0 -1647
  948. package/bundled-test-harness/assets/room-message-test-D3NfMqH0.js +0 -484
  949. package/bundled-test-harness/assets/run-D_Px28eF.js +0 -3956
  950. package/bundled-test-harness/assets/run-realm-code-qWCZxmJ7.js +0 -2964
  951. package/bundled-test-harness/assets/run-realm-code-test-UzyeEJq6.js +0 -3844
  952. package/bundled-test-harness/assets/sanitize-module-list-test-Babq44bP.js +0 -85
  953. package/bundled-test-harness/assets/save-card-skip-index-wait-test-BcELXlQ_.js +0 -89
  954. package/bundled-test-harness/assets/schema-editor-test-CEvruZbt.js +0 -785
  955. package/bundled-test-harness/assets/schema-generation-test-hYAMdCrn.js +0 -28
  956. package/bundled-test-harness/assets/scrolling-test-DVIsh-_1.js +0 -412
  957. package/bundled-test-harness/assets/search-adorn-test-CkVhqFd0.js +0 -136
  958. package/bundled-test-harness/assets/search-and-choose-test-DUhOB3FV.js +0 -154
  959. package/bundled-test-harness/assets/search-correlation-id-test-Drn4r26N.js +0 -139
  960. package/bundled-test-harness/assets/search-entries-result-test-DTCRJ_wc.js +0 -234
  961. package/bundled-test-harness/assets/search-entries-test-CE0B47pw.js +0 -1486
  962. package/bundled-test-harness/assets/search-entries-tool-test-C4aG0ckM.js +0 -504
  963. package/bundled-test-harness/assets/search-google-images-test-LyhcB2f3.js +0 -166
  964. package/bundled-test-harness/assets/search-results-D4pSne0x.js +0 -266
  965. package/bundled-test-harness/assets/search-results-test-CRZHhqhn.js +0 -578
  966. package/bundled-test-harness/assets/search-selection-menu-test-B7Y3E_nj.js +0 -108
  967. package/bundled-test-harness/assets/search-sheet-files-test-C2y534g8.js +0 -126
  968. package/bundled-test-harness/assets/search-sheet-persistence-test-DePC59Bk.js +0 -131
  969. package/bundled-test-harness/assets/search-test-Dy8NxFkU.js +0 -2249
  970. package/bundled-test-harness/assets/search-tool-test-lctDaMH3.js +0 -156
  971. package/bundled-test-harness/assets/searchable-option-test-CE64M8oM.js +0 -322
  972. package/bundled-test-harness/assets/searchable-search-doc-test-C6u3mVvT.js +0 -1271
  973. package/bundled-test-harness/assets/section-rail-B_UQX00B.js +0 -113
  974. package/bundled-test-harness/assets/section-rail-test-DIda7MIw.js +0 -256
  975. package/bundled-test-harness/assets/secure-sign-in-CqqqfQG8.js +0 -174
  976. package/bundled-test-harness/assets/secure-sign-in-test-DimbVr_W.js +0 -373
  977. package/bundled-test-harness/assets/segmented-control-iePxSdTS.js +0 -173
  978. package/bundled-test-harness/assets/select-tNs6_xwW.js +0 -175
  979. package/bundled-test-harness/assets/send-ai-assistant-message-test-2GVrMF9Z.js +0 -52
  980. package/bundled-test-harness/assets/send-bot-trigger-event-test-B_3dKfGN.js +0 -56
  981. package/bundled-test-harness/assets/send-request-via-proxy-test-_clNWyYc.js +0 -380
  982. package/bundled-test-harness/assets/sending-test-DCPFXUVg.js +0 -659
  983. package/bundled-test-harness/assets/serialization-rri-form-audit-test-BI0zCs8Y.js +0 -136
  984. package/bundled-test-harness/assets/serialization-test-bjdtVlZL.js +0 -8758
  985. package/bundled-test-harness/assets/set-user-system-card-test-BUv1vL08.js +0 -59
  986. package/bundled-test-harness/assets/setup-BW1mmC7C.js +0 -772
  987. package/bundled-test-harness/assets/setup-DsIcFT-T.js +0 -2
  988. package/bundled-test-harness/assets/shared-link-target-reuse-test-9NeJEjkb.js +0 -207
  989. package/bundled-test-harness/assets/show-card-test-mfyLwusD.js +0 -365
  990. package/bundled-test-harness/assets/signed-capture-link-test-BOtKNCAM.js +0 -132
  991. package/bundled-test-harness/assets/single-stack-test-B4MGjaLk.js +0 -652
  992. package/bundled-test-harness/assets/skills-test-BuP-Yzk1.js +0 -648
  993. package/bundled-test-harness/assets/skip-boot-index-guard-test-Cmrx2-K7.js +0 -46
  994. package/bundled-test-harness/assets/spec-test-BhZDdhVQ.js +0 -1077
  995. package/bundled-test-harness/assets/spinner-CpIBUG9m.js +0 -49
  996. package/bundled-test-harness/assets/src-DGHttmW-.js +0 -216
  997. package/bundled-test-harness/assets/src-DaNDSbp7.js +0 -5
  998. package/bundled-test-harness/assets/stick-to-bottom-resize-test-Dpy3OVum.js +0 -56
  999. package/bundled-test-harness/assets/store-add-test-_IYS8o74.js +0 -50
  1000. package/bundled-test-harness/assets/store-module-rebuild-test-B5VMaICy.js +0 -454
  1001. package/bundled-test-harness/assets/store-search-test-C2VZabrH.js +0 -175
  1002. package/bundled-test-harness/assets/store-test-D6PObxoD.js +0 -3672
  1003. package/bundled-test-harness/assets/structured-theme-test-BHjVeMf-.js +0 -377
  1004. package/bundled-test-harness/assets/summarize-session-test-BFtTuhe0.js +0 -172
  1005. package/bundled-test-harness/assets/svg-image-def-test-BL6lkWUX.js +0 -167
  1006. package/bundled-test-harness/assets/switch-submode-test-6Uv3bZMl.js +0 -168
  1007. package/bundled-test-harness/assets/sync-openrouter-models-test-Dp9E05tL.js +0 -97
  1008. package/bundled-test-harness/assets/test-support-DYm8XZ0E.js +0 -3
  1009. package/bundled-test-harness/assets/test-support-DfnhiIMV.js +0 -99
  1010. package/bundled-test-harness/assets/tests-CZk0Iag2.js +0 -3596
  1011. package/bundled-test-harness/assets/text-file-def-test-CHdC0yIU.js +0 -94
  1012. package/bundled-test-harness/assets/text-input-validator-test-B9ZR8XPU.js +0 -156
  1013. package/bundled-test-harness/assets/text-suggestion-test-CGLspKFQ.js +0 -340
  1014. package/bundled-test-harness/assets/theme-card-test-CXZvSEvG.js +0 -621
  1015. package/bundled-test-harness/assets/theme-dashboard-nav-test-CkEE0ILk.js +0 -196
  1016. package/bundled-test-harness/assets/theme-scheme-island-test-URXTjipF.js +0 -264
  1017. package/bundled-test-harness/assets/titles-C6enAdIv.js +0 -2
  1018. package/bundled-test-harness/assets/titles-Dft1HoUT.js +0 -52
  1019. package/bundled-test-harness/assets/to-device-streaming-test-D33ZOc9o.js +0 -163
  1020. package/bundled-test-harness/assets/token-usage-test-BHQlU4J4.js +0 -160
  1021. package/bundled-test-harness/assets/tools-CrudqfS3.js +0 -774
  1022. package/bundled-test-harness/assets/tools-calling-test-jo7IREau.js +0 -200
  1023. package/bundled-test-harness/assets/tools-test-D1wMfUa0.js +0 -1624
  1024. package/bundled-test-harness/assets/tools-test-Dn1LYsXp.js +0 -3204
  1025. package/bundled-test-harness/assets/tooltip-8Wyz4IIn.css +0 -68
  1026. package/bundled-test-harness/assets/tooltip-CqwLzRz5.js +0 -134
  1027. package/bundled-test-harness/assets/transform-cards-test-BPhwPFtp.js +0 -341
  1028. package/bundled-test-harness/assets/ts-file-def-preview-test-Bq3zTgw8.js +0 -95
  1029. package/bundled-test-harness/assets/ts-file-def-test-GLswMl7O.js +0 -92
  1030. package/bundled-test-harness/assets/ttf-font-def-test-DQulvUWs.js +0 -206
  1031. package/bundled-test-harness/assets/turn-settling-test-BspmOUQP.js +0 -160
  1032. package/bundled-test-harness/assets/turn-summary-9A8nvC0-.js +0 -1039
  1033. package/bundled-test-harness/assets/unpublish-realm-test-SkYPEhDz.js +0 -102
  1034. package/bundled-test-harness/assets/update-room-skills-test-cTxb-WU6.js +0 -240
  1035. package/bundled-test-harness/assets/use-ai-assistant-test-uaqW1T_A.js +0 -384
  1036. package/bundled-test-harness/assets/user-message-BudkIP-3.js +0 -262
  1037. package/bundled-test-harness/assets/validate-realm-test-DxrGgH9n.js +0 -67
  1038. package/bundled-test-harness/assets/video-metadata-extractor-test-B2pe-Iqa.js +0 -520
  1039. package/bundled-test-harness/assets/view-visually-test-PNon6fUo.js +0 -335
  1040. package/bundled-test-harness/assets/virtual-network-reset-test-uYJLaQHf.js +0 -96
  1041. package/bundled-test-harness/assets/wav-audio-def-test-F4OrFFR4.js +0 -160
  1042. package/bundled-test-harness/assets/webp-image-def-test-B0a_-Vya.js +0 -226
  1043. package/bundled-test-harness/assets/workspace-Cyftysy9.js +0 -440
  1044. package/bundled-test-harness/assets/workspace-a11y-test-sKiPDcbl.js +0 -197
  1045. package/bundled-test-harness/assets/workspace-actions-BuawjFmZ.js +0 -561
  1046. package/bundled-test-harness/assets/workspace-behavior-test-CKa-pb3T.js +0 -338
  1047. package/bundled-test-harness/assets/workspace-delete-multiple-test-Dt2weG5R.js +0 -212
  1048. package/bundled-test-harness/assets/workspace-delete-summary-test-CkqgFqZ8.js +0 -63
  1049. package/bundled-test-harness/assets/workspace-hosting-test-Ci7EEtHP.js +0 -138
  1050. package/bundled-test-harness/assets/workspace-indexing-test-BPVxxY6W.js +0 -71
  1051. package/bundled-test-harness/assets/workspace-test-CWr7vFbg.js +0 -385
  1052. package/bundled-test-harness/assets/workspace-test-INNpQovc.js +0 -51
  1053. package/bundled-test-harness/assets/workspace-timestamp-labels-test-CigQb5wr.js +0 -68
  1054. package/bundled-test-harness/assets/workspace-unit-test-BwVKpuXT.js +0 -122
  1055. package/bundled-test-harness/assets/write-binary-file-test-BKP3gv1k.js +0 -124
  1056. package/bundled-test-harness/assets/write-text-file-test-B6ijTKTa.js +0 -191
  1057. package/bundled-test-harness/assets/zip-archive-test-C-PBzkTn.js +0 -285
  1058. 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