@cardstack/boxel-cli 0.3.2-unstable.61 → 0.4.0-unstable.1

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 (344) hide show
  1. package/bundled-realms/base/card-api.gts +2 -0
  2. package/bundled-realms/base/components/cards-grid-layout.gts +24 -2
  3. package/bundled-realms/base/field-component.gts +16 -4
  4. package/bundled-realms/base/links-to-editor.gts +27 -3
  5. package/bundled-realms/base/realm-config.gts +18 -1
  6. package/bundled-test-harness/assets/adapter-unm-Xq4g.js +2 -0
  7. package/bundled-test-harness/assets/{add-field-to-card-definition-command-test-DkxmkPH6.js → add-field-to-card-definition-command-test-CCaDu5uP.js} +2 -2
  8. package/bundled-test-harness/assets/{add-workspace-tMjv_Ar4.js → add-workspace-DBDTvtP2.js} +3 -3
  9. package/bundled-test-harness/assets/{add-workspace-test-BMKxSlaC.js → add-workspace-test-CE21v7jK.js} +3 -3
  10. package/bundled-test-harness/assets/{ai-assistant-test-C3LjW9Uz.js → ai-assistant-test-DSyMR0hY.js} +8 -7
  11. package/bundled-test-harness/assets/{ai-function-generation-test-WqD9vlzP.js → ai-function-generation-test-BkTvuCnq.js} +1 -1
  12. package/bundled-test-harness/assets/{ai-module-creation-test-CeP1V90-.js → ai-module-creation-test-zY83EN93.js} +3 -3
  13. package/bundled-test-harness/assets/{aibot-message-CiwsV-h8.js → aibot-message-BfRah4Lm.js} +2 -2
  14. package/bundled-test-harness/assets/{app-C8fZHSIY.js → app-CPRVydcd.js} +321 -33
  15. package/bundled-test-harness/assets/{apply-markdown-edit-test-VkN9mVg4.js → apply-markdown-edit-test-CpeCS12T.js} +2 -2
  16. package/bundled-test-harness/assets/{apply-search-replace-block-test-C4GiLUbz.js → apply-search-replace-block-test-Czoi47xr.js} +1 -1
  17. package/bundled-test-harness/assets/{auth-service-worker-registration-CGUqW_lr.js → auth-service-worker-registration-C3rAs9Yi.js} +1 -1
  18. package/bundled-test-harness/assets/{auth-service-worker-test-DjVH_n4v.js → auth-service-worker-test-DTHQyoUg.js} +3 -3
  19. package/bundled-test-harness/assets/{authed-fetch-test-PT9AWQEk.js → authed-fetch-test-BRqybmXe.js} +2 -2
  20. package/bundled-test-harness/assets/{avif-image-def-test-BMFnvMFY.js → avif-image-def-test-BVwv4Ahc.js} +1 -1
  21. package/bundled-test-harness/assets/{basic-test-B5EcLZRP.js → basic-test-Dbky79J2.js} +1 -1
  22. package/bundled-test-harness/assets/{binary-upload-dedupe-test-BvQVNF95.js → binary-upload-dedupe-test-nnaYqiTh.js} +3 -3
  23. package/bundled-test-harness/assets/{bot-registration-test-Cy1HY7PT.js → bot-registration-test-zrufhFTo.js} +2 -2
  24. package/bundled-test-harness/assets/{box-test-BTOPLQ3k.js → box-test-B85wfMJn.js} +1 -1
  25. package/bundled-test-harness/assets/{brand-guide-attachments-test-C4R_z8N5.js → brand-guide-attachments-test-C8-n-naq.js} +2 -2
  26. package/bundled-test-harness/assets/{brand-guide-custom-css-test-Me-k86li.js → brand-guide-custom-css-test-B2fmvFp4.js} +2 -2
  27. package/bundled-test-harness/assets/{brand-logo-mark-field-test-DcCSpYJq.js → brand-logo-mark-field-test-CJ4s6jjd.js} +2 -2
  28. package/bundled-test-harness/assets/{broken-link-template-test-BRD2BX45.js → broken-link-template-test-BHXrPxQ6.js} +2 -2
  29. package/bundled-test-harness/assets/{can-read-realm-test-_flXUfS4.js → can-read-realm-test-mHnz9-_s.js} +2 -2
  30. package/bundled-test-harness/assets/{cancel-indexing-job-test-0JyPszPo.js → cancel-indexing-job-test-Drx2ghoA.js} +2 -2
  31. package/bundled-test-harness/assets/{card-api-test-BpeMpeQ0.js → card-api-test-C0HrvAuC.js} +3 -3
  32. package/bundled-test-harness/assets/{card-basics-test-C-UCeun-.js → card-basics-test-CvITmKK-.js} +3 -3
  33. package/bundled-test-harness/assets/{card-catalog-test-4K3_LE47.js → card-catalog-test-CWkfBRuQ.js} +3 -3
  34. package/bundled-test-harness/assets/{card-copy-test-BFFsV3G-.js → card-copy-test-Co_MPCIJ.js} +3 -3
  35. package/bundled-test-harness/assets/{card-def-field-def-relationships-test-CRjFV5pq.js → card-def-field-def-relationships-test-7e-g4qJs.js} +3 -3
  36. package/bundled-test-harness/assets/{card-def-menu-items-test-DQNnU_0P.js → card-def-menu-items-test-DLO6TEhC.js} +1 -1
  37. package/bundled-test-harness/assets/{card-delete-test-DOyt5y-x.js → card-delete-test-BcOtJYm4.js} +3 -3
  38. package/bundled-test-harness/assets/{card-error-detail-DuFoktdn.js → card-error-detail-Q7wtuRcv.js} +2 -2
  39. package/bundled-test-harness/assets/{card-playground-test-CiESzD5-.js → card-playground-test-DxoIBbjx.js} +3 -3
  40. package/bundled-test-harness/assets/{card-search-adorn-test-DdTUl5RY.js → card-search-adorn-test-CbsnFvDF.js} +2 -2
  41. package/bundled-test-harness/assets/{card-search-selection-menu-test-BJFUbgA1.js → card-search-selection-menu-test-CY77b1kz.js} +2 -2
  42. package/bundled-test-harness/assets/{check-correctness-test-B4E7WXSZ.js → check-correctness-test-D0EYMlP7.js} +2 -2
  43. package/bundled-test-harness/assets/{check-domain-availability-test-BnmsW2P7.js → check-domain-availability-test-BYAkVLGj.js} +2 -2
  44. package/bundled-test-harness/assets/{code-patches-test-6Lvfhm1l.js → code-patches-test-BDg35i4X.js} +1 -1
  45. package/bundled-test-harness/assets/{code-ref-test-BWuTdZ2e.js → code-ref-test-BZGL3teK.js} +1 -1
  46. package/bundled-test-harness/assets/{code-submode-test-DPzE9tKe.js → code-submode-test-DIiXgCRB.js} +3 -3
  47. package/bundled-test-harness/assets/{codeblocks-test-MV1tHflj.js → codeblocks-test-CFR0u5-j.js} +3 -3
  48. package/bundled-test-harness/assets/{codemirror-editor-test-SD3gDmHw.js → codemirror-editor-test-e1Yn_b_1.js} +1 -1
  49. package/bundled-test-harness/assets/{color-field-test-C_7cf4Z2.js → color-field-test-okcvtdsF.js} +2 -2
  50. package/bundled-test-harness/assets/{commands-DoigkJc8.js → commands-BOwQjc8N.js} +3 -3
  51. package/bundled-test-harness/assets/{commands-calling-test-Br4sMoMf.js → commands-calling-test-BETL8EWm.js} +2 -2
  52. package/bundled-test-harness/assets/{commands-test-71b4Fun5.js → commands-test-BpFjXsiC.js} +3 -3
  53. package/bundled-test-harness/assets/{commands-test-COT9Ck-6.js → commands-test-QSW7zRvO.js} +2 -2
  54. package/bundled-test-harness/assets/{components-CBfd9MIo.js → components-DYC4nC4r.js} +184 -184
  55. package/bundled-test-harness/assets/{components-8vaKSlYm.css → components-DgK6vTbM.css} +17 -14
  56. package/bundled-test-harness/assets/{computed-test-BbCVTMkD.js → computed-test-C2j8r-e_.js} +2 -2
  57. package/bundled-test-harness/assets/{container-BVdtw4NT.js → container-DRblzvCW.js} +18 -18
  58. package/bundled-test-harness/assets/{convert-to-class-name-test-DmF3wUKb.js → convert-to-class-name-test-BiCrnGxA.js} +1 -1
  59. package/bundled-test-harness/assets/{copy-and-edit-test-1xrTe8p1.js → copy-and-edit-test-DqV_dpu_.js} +1 -1
  60. package/bundled-test-harness/assets/{copy-card-test-D0rXx03h.js → copy-card-test-B4dNP03f.js} +1 -1
  61. package/bundled-test-harness/assets/{copy-file-to-realm-test-DxW5PABL.js → copy-file-to-realm-test-oGK9EM0P.js} +1 -1
  62. package/bundled-test-harness/assets/{copy-source-test-Dy83btnV.js → copy-source-test-GtNFw5fv.js} +2 -2
  63. package/bundled-test-harness/assets/{create-file-modal-BNJHELMz.js → create-file-modal-Cfvn0u5s.js} +4 -4
  64. package/bundled-test-harness/assets/{create-file-test-DimDxpRl.js → create-file-test-2WPpTJ5F.js} +1 -1
  65. package/bundled-test-harness/assets/{create-file-test-COppMhde.js → create-file-test-HxkEMHWL.js} +2 -2
  66. package/bundled-test-harness/assets/{create-listing-modal-test-D57Altg2.js → create-listing-modal-test-W6LuCzaK.js} +4 -4
  67. package/bundled-test-harness/assets/{create-listing-pr-request-test-HJmFkx_x.js → create-listing-pr-request-test-2ZRF_IBk.js} +2 -2
  68. package/bundled-test-harness/assets/{create-spec-test-C-4bkoj3.js → create-spec-test-JVOisAUl.js} +1 -1
  69. package/bundled-test-harness/assets/{csv-file-def-test-GOmD6Ikx.js → csv-file-def-test-DIVp_7a6.js} +1 -1
  70. package/bundled-test-harness/assets/{date-time-fields-test-BYn57092.js → date-time-fields-test-BWdrrYdj.js} +2 -2
  71. package/bundled-test-harness/assets/{debug-message-test-CNzx_IFI.js → debug-message-test-CXVfUuec.js} +3 -3
  72. package/bundled-test-harness/assets/{diffing-test-PA40XPFB.js → diffing-test-JzXF051K.js} +1 -1
  73. package/bundled-test-harness/assets/{editor-test-Dg1fTno0.js → editor-test-j9znzFxy.js} +2 -2
  74. package/bundled-test-harness/assets/{email-field-test-rPWkRvgR.js → email-field-test-D4vZ2Qnc.js} +2 -2
  75. package/bundled-test-harness/assets/{enum-field-test-DjQ-sjAR.js → enum-field-test-DtZ_sOiA.js} +2 -2
  76. package/bundled-test-harness/assets/{error-display-test-Cp1vgWSg.js → error-display-test-B6I8CYXw.js} +2 -2
  77. package/bundled-test-harness/assets/{evaluate-module-test-Bm6adsJS.js → evaluate-module-test-C_F1Y9Az.js} +1 -1
  78. package/bundled-test-harness/assets/{execute-atomic-operations-test-BAB2vv15.js → execute-atomic-operations-test-D_z5eJ6K.js} +2 -2
  79. package/bundled-test-harness/assets/{externals-C65aJ_7H.js → externals-DiG6hYU9.js} +2 -2
  80. package/bundled-test-harness/assets/fallback-banner-live-delete-test-Bv_OBmzY.js +209 -0
  81. package/bundled-test-harness/assets/{fallback-banner-test-Md-3yTpX.js → fallback-banner-test-DSjH5ank.js} +1 -1
  82. package/bundled-test-harness/assets/{fallback-banner-test-DpCz2idU.js → fallback-banner-test-TL8jNe4f.js} +3 -3
  83. package/bundled-test-harness/assets/{fallback-models-test-DcB9u65l.js → fallback-models-test-DEhvKsfY.js} +3 -3
  84. package/bundled-test-harness/assets/{fetch-card-json-test-CPHdklsi.js → fetch-card-json-test-BPfTOr4N.js} +2 -2
  85. package/bundled-test-harness/assets/{field-configuration-test-Da5xu3ar.js → field-configuration-test-CH1Kc0iA.js} +2 -2
  86. package/bundled-test-harness/assets/{field-markdown-domain-test-7aY4gMQ3.js → field-markdown-domain-test-COaJBBzN.js} +2 -2
  87. package/bundled-test-harness/assets/{field-markdown-primitives-test-B8UurS_m.js → field-markdown-primitives-test-C52WikZw.js} +2 -2
  88. package/bundled-test-harness/assets/{field-markdown-specialized-test-CHiWEV2t.js → field-markdown-specialized-test-Cmq-3t4u.js} +2 -2
  89. package/bundled-test-harness/assets/{field-playground-test-DBVHB2_g.js → field-playground-test-DbXri11f.js} +3 -3
  90. package/bundled-test-harness/assets/{field-support-predicates-test-i8LXzh_P.js → field-support-predicates-test-ni5pZ9sU.js} +1 -1
  91. package/bundled-test-harness/assets/{field-test-helpers-F8iX3xAt.js → field-test-helpers-BLApZo43.js} +1 -1
  92. package/bundled-test-harness/assets/{file-DUbLArQi.js → file-D8hnXC1_.js} +8 -2
  93. package/bundled-test-harness/assets/{file-attachment-test-yfZsKhWQ.js → file-attachment-test-CkL6IaWf.js} +3 -3
  94. package/bundled-test-harness/assets/{file-chooser-test-JOvGg1N8.js → file-chooser-test-M1rOgltw.js} +2 -2
  95. package/bundled-test-harness/assets/{file-def-live-reload-test-B_XsrkaB.js → file-def-live-reload-test--L4MvUj5.js} +1 -1
  96. package/bundled-test-harness/assets/{file-def-menu-items-test-CkZrFXrK.js → file-def-menu-items-test-B_dVulF7.js} +1 -1
  97. package/bundled-test-harness/assets/{file-def-navigation-test-CyO27adK.js → file-def-navigation-test-B4_pzEXy.js} +1 -1
  98. package/bundled-test-harness/assets/{file-def-serialization-test-1XrP63F8.js → file-def-serialization-test-IoGIzKST.js} +1 -1
  99. package/bundled-test-harness/assets/{file-def-test-BJEhQN1c.js → file-def-test-CT8jTLQy.js} +1 -1
  100. package/bundled-test-harness/assets/{file-tree-test-DQSPDeb2.js → file-tree-test-DQNSRISM.js} +2 -2
  101. package/bundled-test-harness/assets/{flac-audio-def-test-CeyxsGOr.js → flac-audio-def-test-CEt7tShK.js} +1 -1
  102. package/bundled-test-harness/assets/{formatted-aibot-message-test-D09eSldQ.js → formatted-aibot-message-test-CNk1lVYO.js} +3 -3
  103. package/bundled-test-harness/assets/{formatted-user-message-test-DmX95kEo.js → formatted-user-message-test-By3DTUBk.js} +2 -2
  104. package/bundled-test-harness/assets/{freestyle-test-KaFCs8l2.js → freestyle-test-BOVAHn_7.js} +1 -1
  105. package/bundled-test-harness/assets/{full-reindex-realm-test-BCUSPZuX.js → full-reindex-realm-test-BQji9QK_.js} +2 -2
  106. package/bundled-test-harness/assets/{garbage-collection-test-BJmgY3IQ.js → garbage-collection-test-bPtmt69E.js} +1 -1
  107. package/bundled-test-harness/assets/{general-test-B5RcCakW.js → general-test-B_QwZC0y.js} +3 -3
  108. package/bundled-test-harness/assets/{generate-example-cards-one-shot-test-Bh9_GXLK.js → generate-example-cards-one-shot-test-DtYqN3qW.js} +1 -1
  109. package/bundled-test-harness/assets/{get-available-realm-identifiers-test-C18mJr3L.js → get-available-realm-identifiers-test-BiHIbpFc.js} +2 -2
  110. package/bundled-test-harness/assets/{get-catalog-realm-identifiers-test-vDnl-arI.js → get-catalog-realm-identifiers-test-B4EVfXvp.js} +2 -2
  111. package/bundled-test-harness/assets/{get-default-writable-realm-test-Co4F_EH-.js → get-default-writable-realm-test-C2izRfTp.js} +2 -2
  112. package/bundled-test-harness/assets/{get-published-realms-test-D6auThJu.js → get-published-realms-test-CJlYS6SA.js} +1 -1
  113. package/bundled-test-harness/assets/{get-realm-of-resource-identifier-test-BeVoQztL.js → get-realm-of-resource-identifier-test-DZG0gROs.js} +2 -2
  114. package/bundled-test-harness/assets/{get-relationship-membership-state-test-Cm_VeTXw.js → get-relationship-membership-state-test-wOVStpnA.js} +1 -1
  115. package/bundled-test-harness/assets/{get-user-system-card-test-CAc-Ainy.js → get-user-system-card-test-Bf_il1b_.js} +2 -2
  116. package/bundled-test-harness/assets/{gif-image-def-test-Co2Woq8R.js → gif-image-def-test-DD4BOFUq.js} +1 -1
  117. package/bundled-test-harness/assets/{gts-file-def-test-DMhWqyxZ.js → gts-file-def-test-KrlOMcTY.js} +1 -1
  118. package/bundled-test-harness/assets/{head-format-preview-test-DPOjt1cu.js → head-format-preview-test-CGzx-i_Q.js} +2 -2
  119. package/bundled-test-harness/assets/{helpers-BIQP26gX.js → helpers-CR-27yCL.js} +1 -1
  120. package/bundled-test-harness/assets/{host-mode-service-BYjO5JXT.js → host-mode-service-BPYfmILw.js} +1 -1
  121. package/bundled-test-harness/assets/{host-mode-test-D9kRy5kW.js → host-mode-test-sjKqSasU.js} +3 -3
  122. package/bundled-test-harness/assets/{host-submode-test-Zy7-q9vh.js → host-submode-test-CvezMbrv.js} +1 -1
  123. package/bundled-test-harness/assets/{hydratable-card-test-DvgHojHD.js → hydratable-card-test-Ds6x3mv5.js} +1 -1
  124. package/bundled-test-harness/assets/{index-query-engine-test-Bk52a889.js → index-query-engine-test-x77vbwML.js} +2 -2
  125. package/bundled-test-harness/assets/{index-writer-test-DNeo1Uod.js → index-writer-test-BMajX3Mj.js} +1 -1
  126. package/bundled-test-harness/assets/{inspector-test-OaFEP4S0.js → inspector-test-CtCAKlpG.js} +42 -5
  127. package/bundled-test-harness/assets/{instance-filter-matcher-test-PeeLVGMO.js → instance-filter-matcher-test-YKzjZAa3.js} +2 -2
  128. package/bundled-test-harness/assets/{instantiate-card-test-C0Y8FG7w.js → instantiate-card-test-Ba3rd5Zn.js} +1 -1
  129. package/bundled-test-harness/assets/{interact-submode-creation-and-permissions-test-Cp3YiIQG.js → interact-submode-creation-and-permissions-test-2_4tHla6.js} +4 -4
  130. package/bundled-test-harness/assets/{interact-submode-setup-CtFp9kvB.js → interact-submode-setup-DI2HM3S-.js} +2 -2
  131. package/bundled-test-harness/assets/{interact-submode-test-B_JqGk2t.js → interact-submode-test-BUKZnm-y.js} +2 -2
  132. package/bundled-test-harness/assets/{invalidate-realm-identifiers-test-Dpa0TzwS.js → invalidate-realm-identifiers-test-Bl1RP3Kp.js} +2 -2
  133. package/bundled-test-harness/assets/{invite-user-to-room-test-DXzTeCgP.js → invite-user-to-room-test-Q26QQwvj.js} +2 -2
  134. package/bundled-test-harness/assets/{isolated-render-test-DVzQEdsY.js → isolated-render-test-Bc2ASFB1.js} +1 -1
  135. package/bundled-test-harness/assets/{item-button-CAhhwhRh.js → item-button-CepLHUN-.js} +1 -1
  136. package/bundled-test-harness/assets/{job-priority-header-test-J8emfVrj.js → job-priority-header-test-CDDfX3mF.js} +1 -1
  137. package/bundled-test-harness/assets/{jpg-image-def-test-D7txmQ4U.js → jpg-image-def-test-DGjpMEj5.js} +1 -1
  138. package/bundled-test-harness/assets/{json-file-def-test-C3W6amHE.js → json-file-def-test-8NlQ7NyF.js} +1 -1
  139. package/bundled-test-harness/assets/{linksto-broken-link-placeholder-test-nZIKEYDd.js → linksto-broken-link-placeholder-test-OPR5aao3.js} +2 -2
  140. package/bundled-test-harness/assets/{linksto-error-sentinel-test-E5UdAPkR.js → linksto-error-sentinel-test-DNEi2-4f.js} +1 -1
  141. package/bundled-test-harness/assets/{linksto-many-broken-link-placeholder-test-D5lhE5y-.js → linksto-many-broken-link-placeholder-test-Bl3-UMZt.js} +2 -2
  142. package/bundled-test-harness/assets/{linksto-many-per-slot-access-test-uONh3sy8.js → linksto-many-per-slot-access-test-Cv88sT3k.js} +1 -1
  143. package/bundled-test-harness/assets/{linksto-sentinel-roundtrip-test-CUbMHhoz.js → linksto-sentinel-roundtrip-test-DDrNtJgY.js} +1 -1
  144. package/bundled-test-harness/assets/{linksto-singular-js-access-contract-test-Doycge43.js → linksto-singular-js-access-contract-test-CMOxHvSS.js} +1 -1
  145. package/bundled-test-harness/assets/{live-prerendered-search-kxxMxyHS.js → live-prerendered-search-DiFs_MHd.js} +1 -1
  146. package/bundled-test-harness/assets/{live-test-pbHzyWf7.js → live-test-BfSJ7dPf.js} +6 -6
  147. package/bundled-test-harness/assets/live-test-CfcRApCW.js +2 -0
  148. package/bundled-test-harness/assets/{loader-parallel-prefetch-test-cfEJV65W.js → loader-parallel-prefetch-test-DchEbilk.js} +1 -1
  149. package/bundled-test-harness/assets/{loader-test-DZX-dw3F.js → loader-test-LyM1F2ON.js} +1 -1
  150. package/bundled-test-harness/assets/{loading-test-PwEVbSuF.js → loading-test-DrK02DRI.js} +2 -2
  151. package/bundled-test-harness/assets/{local-storage-keys-Do9I1BSV.js → local-storage-keys-C0jyxDKn.js} +4 -1
  152. package/bundled-test-harness/assets/{login-ou9E1DG9.js → login-DWNfbapF.js} +1 -1
  153. package/bundled-test-harness/assets/{login-error-text-test-BGvtn9op.js → login-error-text-test-3lQ69Gme.js} +1 -1
  154. package/bundled-test-harness/assets/{m4a-audio-def-test-Dkbh40DD.js → m4a-audio-def-test-B1PZDu-M.js} +1 -1
  155. package/bundled-test-harness/assets/{main-CE7KR5Ht.js → main-CDat3XsY.js} +1 -1
  156. package/bundled-test-harness/assets/{markdown-fallback-test-BHejXXnE.js → markdown-fallback-test-D32xPo5m.js} +2 -2
  157. package/bundled-test-harness/assets/{markdown-file-def-test-BOvu8beB.js → markdown-file-def-test-2_0tc-pT.js} +1 -1
  158. package/bundled-test-harness/assets/{markdown-helpers-test-Be9UUlnA.js → markdown-helpers-test-D6Ty5K6K.js} +1 -1
  159. package/bundled-test-harness/assets/{markdown-highlighting-test-D-jxOaxc.js → markdown-highlighting-test-CD22pEyx.js} +2 -2
  160. package/bundled-test-harness/assets/{markdown-preview-CKlpPkbc.js → markdown-preview-o2AI98EN.js} +1 -1
  161. package/bundled-test-harness/assets/{markdown-preview-test-D2kl56R1.js → markdown-preview-test-D2YoXqUY.js} +3 -3
  162. package/bundled-test-harness/assets/{matrix-service-sliding-sync-test-Cl1D6ID4.js → matrix-service-sliding-sync-test-Co9EhDYF.js} +1 -1
  163. package/bundled-test-harness/assets/{message-service-subscription-test-OvYUTr8V.js → message-service-subscription-test-BK3W9wng.js} +2 -2
  164. package/bundled-test-harness/assets/{mock-matrix-CD6YHaHR.js → mock-matrix-Bkfl9ACG.js} +6 -2
  165. package/bundled-test-harness/assets/{mock-matrix-Dt4s2hUe.js → mock-matrix-DbxVPkSl.js} +1 -1
  166. package/bundled-test-harness/assets/{modal-container-wzIBYeE_.js → modal-container-BzEkpeIx.js} +1 -1
  167. package/bundled-test-harness/assets/{module-transpile-cache-test-Bj11UbQJ.js → module-transpile-cache-test-BFmN6_si.js} +1 -1
  168. package/bundled-test-harness/assets/{mp3-audio-def-test-C6tzxO6X.js → mp3-audio-def-test-DorbFtva.js} +1 -1
  169. package/bundled-test-harness/assets/{number-field-test-l5WRd3N9.js → number-field-test-C9F_sOf8.js} +2 -2
  170. package/bundled-test-harness/assets/{ogg-audio-def-test-CQ04xrfS.js → ogg-audio-def-test-DRXLSBVQ.js} +1 -1
  171. package/bundled-test-harness/assets/{on-key-CpWVcRaS.js → on-key-C8yMINOQ.js} +1 -1
  172. package/bundled-test-harness/assets/{open-create-listing-modal-test-VxITHH84.js → open-create-listing-modal-test-Yp6EOMGK.js} +1 -1
  173. package/bundled-test-harness/assets/open-image-in-new-tab-test-3iRCTOjd.js +52 -0
  174. package/bundled-test-harness/assets/{open-workspace-test-goAg_TVx.js → open-workspace-test-DrkNS6zm.js} +1 -1
  175. package/bundled-test-harness/assets/{operator-mode-acceptance-test-DO3lt95I.js → operator-mode-acceptance-test-DoQ5Klyi.js} +7 -7
  176. package/bundled-test-harness/assets/{operator-mode-card-catalog-test-C3e1--M7.js → operator-mode-card-catalog-test-Came_pKy.js} +4 -4
  177. package/bundled-test-harness/assets/{operator-mode-links-test-AWhMhHM2.js → operator-mode-links-test-DoTvJvpI.js} +4 -4
  178. package/bundled-test-harness/assets/{operator-mode-state-service-test-BICXMa5O.js → operator-mode-state-service-test-cwdudDwm.js} +2 -2
  179. package/bundled-test-harness/assets/{operator-mode-test-DMyFaXHK.js → operator-mode-test-DeUtV1XR.js} +4 -4
  180. package/bundled-test-harness/assets/{operator-mode-ui-test-z2SU5ozt.js → operator-mode-ui-test-DTUMZBlw.js} +4 -4
  181. package/bundled-test-harness/assets/{overlay-menu-items-test-Dkulmtpn.js → overlay-menu-items-test-DhPIUwmz.js} +3 -3
  182. package/bundled-test-harness/assets/{panel-BXXk_P7h.js → panel-DcMU_CGT.js} +55 -31
  183. package/bundled-test-harness/assets/{past-sessions-test-gKLwZO61.js → past-sessions-test-BrdqlYxe.js} +3 -3
  184. package/bundled-test-harness/assets/{patch-code-ClPL6B_d.js → patch-code-F_7JKtTQ.js} +1 -1
  185. package/bundled-test-harness/assets/{patch-code-test-CIdB45Nv.js → patch-code-test-O5_p8vp4.js} +4 -4
  186. package/bundled-test-harness/assets/{patch-fields-test-CBGnqUme.js → patch-fields-test-D1aSP1q_.js} +1 -1
  187. package/bundled-test-harness/assets/{patch-instance-test-DmDpfS3p.js → patch-instance-test-DHBeFzYI.js} +1 -1
  188. package/bundled-test-harness/assets/{persist-module-inspector-view-test-D6vpSfX4.js → persist-module-inspector-view-test-DDYttEKD.js} +2 -2
  189. package/bundled-test-harness/assets/{phone-number-field-test-DogtMkDx.js → phone-number-field-test-CUY1miSH.js} +2 -2
  190. package/bundled-test-harness/assets/{playground-CMnQXTzR.js → playground-DFwsIC-9.js} +2 -2
  191. package/bundled-test-harness/assets/{png-image-def-test-BzfrYGhY.js → png-image-def-test-C9COAyWm.js} +1 -1
  192. package/bundled-test-harness/assets/{prerender-file-extract-test-C-1R1B32.js → prerender-file-extract-test-B76NnPJt.js} +1 -1
  193. package/bundled-test-harness/assets/{prerender-html-test-1XGnbGuQ.js → prerender-html-test-ImXJjrpR.js} +1 -1
  194. package/bundled-test-harness/assets/{prerender-meta-test-B02oGS-5.js → prerender-meta-test-xIFFdF1X.js} +1 -1
  195. package/bundled-test-harness/assets/{prerender-module-test-CSKywVQA.js → prerender-module-test-CoxYOMro.js} +1 -1
  196. package/bundled-test-harness/assets/{prerendered-card-search-test-Cf_Hvr4P.js → prerendered-card-search-test-DLYUamOp.js} +2 -2
  197. package/bundled-test-harness/assets/{preview-format-Bb5FIkOY.js → preview-format-BqY_j3zZ.js} +1 -1
  198. package/bundled-test-harness/assets/{preview-format-test-DBKtwgvo.js → preview-format-test-CublqRWy.js} +4 -4
  199. package/bundled-test-harness/assets/{preview-test-dgbtaeLg.js → preview-test-CcGZEu6Y.js} +2 -2
  200. package/bundled-test-harness/assets/{publish-realm-test-B4c6TqTI.js → publish-realm-test-Cqq_X3L4.js} +2 -2
  201. package/bundled-test-harness/assets/{query-field-barrier-test-DytVxOcd.js → query-field-barrier-test-CeDBxTwq.js} +2 -2
  202. package/bundled-test-harness/assets/{query-field-error-sentinel-test-Cs2wXQuL.js → query-field-error-sentinel-test-CwOzGgRw.js} +2 -2
  203. package/bundled-test-harness/assets/{query-field-schema-test-ByfKD-mO.js → query-field-schema-test-CXt4ktVo.js} +1 -1
  204. package/bundled-test-harness/assets/{query-fields-test-SlJNtzM3.js → query-fields-test-CrsGkXWE.js} +1 -1
  205. package/bundled-test-harness/assets/{read-card-for-ai-assistant-test-BzThkf4s.js → read-card-for-ai-assistant-test-DORLxJXd.js} +2 -2
  206. package/bundled-test-harness/assets/{read-file-for-ai-assistant-test-CV5PoqSP.js → read-file-for-ai-assistant-test-DyyCSmMv.js} +2 -2
  207. package/bundled-test-harness/assets/{read-source-test-jfWyZkQO.js → read-source-test-hAUdteMO.js} +2 -2
  208. package/bundled-test-harness/assets/{read-text-file-test-Kg6tx07O.js → read-text-file-test-juQ-OJET.js} +2 -2
  209. package/bundled-test-harness/assets/{realm-oWsFVfdH.js → realm-CxU8jc8l.js} +2 -2
  210. package/bundled-test-harness/assets/{realm-config-routing-rule-edit-test-VyMT__jT.js → realm-config-routing-rule-edit-test-T8S_2Lwq.js} +47 -4
  211. package/bundled-test-harness/assets/{realm-field-test-CBmQY3Va.js → realm-field-test-wqNbmdgM.js} +2 -2
  212. package/bundled-test-harness/assets/{realm-indexing-test-CQ29IEno.js → realm-indexing-test-DTuwfnZZ.js} +1 -1
  213. package/bundled-test-harness/assets/{realm-querying-test-PR_91CCq.js → realm-querying-test-ojIOXC3n.js} +1 -1
  214. package/bundled-test-harness/assets/{realm-test-C6Kw7gWx.js → realm-test-MgXPmHwc.js} +1 -1
  215. package/bundled-test-harness/assets/{reasoning-test-M4JuH0RZ.js → reasoning-test-DcQkF04r.js} +3 -3
  216. package/bundled-test-harness/assets/{recent-files-cards-D845sggD.js → recent-files-cards-BICbCMhW.js} +1 -1
  217. package/bundled-test-harness/assets/{recent-files-test-Du5oiGDf.js → recent-files-test-Df_1aE3G.js} +2 -2
  218. package/bundled-test-harness/assets/{reindex-realm-test-BrgFBbOc.js → reindex-realm-test-DDYvNGWh.js} +2 -2
  219. package/bundled-test-harness/assets/{relationship-loading-state-test-CnCYYtmY.js → relationship-loading-state-test-C2EialRQ.js} +1 -1
  220. package/bundled-test-harness/assets/{render-component-BJwKMGDa.js → render-component-DLXpC-Bc.js} +1 -1
  221. package/bundled-test-harness/assets/{rendered-markdown-test-BvQ96-0V.js → rendered-markdown-test-DblOECt_.js} +2 -2
  222. package/bundled-test-harness/assets/{rich-markdown-field-test-neZFxfcc.js → rich-markdown-field-test-B34TJAq8.js} +2 -2
  223. package/bundled-test-harness/assets/{room-message-test-DWEcr5le.js → room-message-test-DuSkABnU.js} +3 -3
  224. package/bundled-test-harness/assets/{sanitize-module-list-test-B4VjLVx_.js → sanitize-module-list-test-BTFw8-Do.js} +2 -2
  225. package/bundled-test-harness/assets/{schema-editor-test-CHeST1JD.js → schema-editor-test-w7ANspy0.js} +1 -1
  226. package/bundled-test-harness/assets/{schema-generation-test-G4ZL90Sn.js → schema-generation-test-z90uBA7r.js} +3 -3
  227. package/bundled-test-harness/assets/{scrolling-test-D3Asc3Yr.js → scrolling-test-jCKormjp.js} +4 -4
  228. package/bundled-test-harness/assets/{search-and-choose-test-DMB-Nv1z.js → search-and-choose-test-BhIWdkFp.js} +2 -2
  229. package/bundled-test-harness/assets/{search-command-test-BNZzENdS.js → search-command-test-BlTBufTS.js} +1 -1
  230. package/bundled-test-harness/assets/{search-correlation-id-test-tM-SfbrA.js → search-correlation-id-test-BR7bFNCy.js} +1 -1
  231. package/bundled-test-harness/assets/{search-data-test-CYrjasBZ.js → search-data-test-bc2foKLa.js} +2 -2
  232. package/bundled-test-harness/assets/{search-google-images-test-DzFbLWZE.js → search-google-images-test-C96iDOxU.js} +1 -1
  233. package/bundled-test-harness/assets/{search-result-header-5VQHm_Ev.js → search-result-header-Ch7TKEzn.js} +1 -1
  234. package/bundled-test-harness/assets/{search-test-CBH8l5JD.js → search-test-iR0wammw.js} +2 -2
  235. package/bundled-test-harness/assets/{send-ai-assistant-message-test-CAlK3x0a.js → send-ai-assistant-message-test-BmJdWdzI.js} +2 -2
  236. package/bundled-test-harness/assets/{send-bot-trigger-event-test-CwI4Rkf8.js → send-bot-trigger-event-test-CJCAf2db.js} +2 -2
  237. package/bundled-test-harness/assets/{send-request-via-proxy-test-BRuk6sv0.js → send-request-via-proxy-test-DSdZppno.js} +2 -2
  238. package/bundled-test-harness/assets/{sending-test-BA2F7Hfk.js → sending-test-Bocu5vf9.js} +270 -12
  239. package/bundled-test-harness/assets/{serialization-test-DHTHfzsn.js → serialization-test-CE3TeQ4Z.js} +2 -2
  240. package/bundled-test-harness/assets/{set-user-system-card-test-Ct8xegEY.js → set-user-system-card-test-JZW2LcIA.js} +2 -2
  241. package/bundled-test-harness/assets/{setup-v4v1a2Qc.js → setup-C5QslpqI.js} +1 -1
  242. package/bundled-test-harness/assets/{setup-BfvQ1zfD.js → setup-CN-HHlT_.js} +2 -2
  243. package/bundled-test-harness/assets/{show-card-test-7VGIdTJh.js → show-card-test-B41I3EWZ.js} +3 -3
  244. package/bundled-test-harness/assets/{skills-test-NKDA1G9S.js → skills-test-Cut0gpNU.js} +3 -3
  245. package/bundled-test-harness/assets/{spec-test-61E0gdIB.js → spec-test-DytzFxZb.js} +3 -3
  246. package/bundled-test-harness/assets/{store-BM5pUF94.js → store-CbIxTljQ.js} +30 -0
  247. package/bundled-test-harness/assets/{store-add-test-mRtjroP0.js → store-add-test-ulvv9A3X.js} +2 -2
  248. package/bundled-test-harness/assets/{store-test-CVHw6LMN.js → store-test-C747NJ3O.js} +77 -4
  249. package/bundled-test-harness/assets/{submode-switcher-Popj4iN5.js → submode-switcher-iR4m0GzD.js} +1 -1
  250. package/bundled-test-harness/assets/{summarize-session-test-UZOGVM_F.js → summarize-session-test-BcXrj1r3.js} +2 -2
  251. package/bundled-test-harness/assets/{svg-image-def-test-Dqjy84jw.js → svg-image-def-test-DW1rtFSA.js} +1 -1
  252. package/bundled-test-harness/assets/{switch-submode-DOdRs5QD.js → switch-submode--ZVbWG3S.js} +1 -1
  253. package/bundled-test-harness/assets/{switch-submode-test-MWnyo759.js → switch-submode-test--Ncx8g_l.js} +3 -3
  254. package/bundled-test-harness/assets/{test-support-BfonQA4V.js → test-support-CCargU9V.js} +1 -1
  255. package/bundled-test-harness/assets/{tests-DQLSvmHe.js → tests-Dw_agY8k.js} +265 -263
  256. package/bundled-test-harness/assets/{text-file-def-test-DlyCDiM4.js → text-file-def-test-Bl2R6NO8.js} +1 -1
  257. package/bundled-test-harness/assets/{text-input-validator-test-Ccx-4gLo.js → text-input-validator-test-CAlDivoV.js} +3 -3
  258. package/bundled-test-harness/assets/{text-suggestion-test-mIvJOTS7.js → text-suggestion-test-CbJWk97Q.js} +1 -1
  259. package/bundled-test-harness/assets/{theme-card-test-Bs3Q034n.js → theme-card-test-Q5eP-lEF.js} +3 -3
  260. package/bundled-test-harness/assets/{transform-cards-test-BsTtRP0g.js → transform-cards-test-3PsuM2Sv.js} +2 -2
  261. package/bundled-test-harness/assets/{ts-file-def-test-DtWzgXkt.js → ts-file-def-test-BoXA3RgL.js} +1 -1
  262. package/bundled-test-harness/assets/{unpublish-realm-test-BFJEMQL7.js → unpublish-realm-test-CgiIcZ6j.js} +2 -2
  263. package/bundled-test-harness/assets/{update-room-skills-test-BrFhA3El.js → update-room-skills-test-B-BI7daL.js} +3 -3
  264. package/bundled-test-harness/assets/{use-ai-assistant-test-BsyBY6-a.js → use-ai-assistant-test-BEiEjFOH.js} +2 -2
  265. package/bundled-test-harness/assets/user-message-Bbw4pQmd.css +22 -0
  266. package/bundled-test-harness/assets/{user-message-BFN7dtqK.js → user-message-CVG3cgJq.js} +2 -2
  267. package/bundled-test-harness/assets/{validate-realm-test-DQlQ-pWZ.js → validate-realm-test-DBx-3YG9.js} +2 -2
  268. package/bundled-test-harness/assets/{wav-audio-def-test-BZ0oLTT1.js → wav-audio-def-test-CPJl6Hpr.js} +1 -1
  269. package/bundled-test-harness/assets/{webp-image-def-test-tuOTQeTt.js → webp-image-def-test-Bh3SOpDa.js} +1 -1
  270. package/bundled-test-harness/assets/{workspace-DvhB0Ltb.js → workspace-PBphyb9N.js} +2 -2
  271. package/bundled-test-harness/assets/{workspace-chooser-delete-test-D_Gp78-R.js → workspace-chooser-delete-test-1n1lqK_X.js} +3 -3
  272. package/bundled-test-harness/assets/{workspace-chooser-test-CuJ4pgJh.js → workspace-chooser-test-wcKYsTgx.js} +1 -1
  273. package/bundled-test-harness/assets/{workspace-delete-multiple-test-BUmKPHGp.js → workspace-delete-multiple-test-DlXWFVK1.js} +1 -1
  274. package/bundled-test-harness/assets/{workspace-delete-summary-test-B8qyNd7w.js → workspace-delete-summary-test-iqD1ae55.js} +1 -1
  275. package/bundled-test-harness/assets/{write-binary-file-test-D1h4TED_.js → write-binary-file-test-BkADCn85.js} +2 -2
  276. package/bundled-test-harness/assets/{write-text-file-test-DKA9TpIm.js → write-text-file-test-C9K0doTU.js} +2 -2
  277. package/bundled-test-harness/boxel-ui-checksum.txt +1 -1
  278. package/bundled-test-harness/index.html +33 -33
  279. package/bundled-test-harness/tests/index.html +36 -36
  280. package/bundled-types/base/field-component.d.ts +15 -4
  281. package/bundled-types/base/links-to-editor.d.ts +9 -0
  282. package/bundled-types/boxel-ui/components/filter-list/index.gts +4 -1
  283. package/bundled-types/host-app/components/ai-assistant/chat-input/index.gts +2 -1
  284. package/bundled-types/host-app/components/ai-assistant/message/user-message.gts +6 -2
  285. package/bundled-types/host-app/components/matrix/room.gts +115 -44
  286. package/bundled-types/host-app/lib/matrix-classes/message-builder.ts +13 -0
  287. package/bundled-types/host-app/services/local-persistence-service.ts +179 -0
  288. package/bundled-types/host-app/services/matrix-service.ts +372 -1
  289. package/bundled-types/host-app/services/store.ts +70 -0
  290. package/bundled-types/host-app/utils/local-storage-keys.ts +2 -0
  291. package/bundled-types/host-tests/helpers/mock-matrix/_client.ts +3 -0
  292. package/bundled-types/host-tests/helpers/mock-matrix/_utils.ts +3 -0
  293. package/bundled-types/host-tests/helpers/mock-matrix.ts +1 -0
  294. package/dist/index.js +257 -253
  295. package/package.json +3 -3
  296. package/src/commands/realm/index.ts +2 -0
  297. package/src/commands/realm/ingest-card.ts +567 -0
  298. package/src/commands/realm/publish.ts +87 -16
  299. package/src/commands/realm/pull.ts +9 -13
  300. package/src/commands/realm/push.ts +10 -14
  301. package/src/commands/realm/status.ts +14 -18
  302. package/src/commands/realm/sync.ts +9 -13
  303. package/src/commands/realm/unpublish.ts +11 -0
  304. package/src/lib/auth-resolver.ts +15 -2
  305. package/bundled-test-harness/assets/adapter-Dk9jvNQb.js +0 -2
  306. package/bundled-test-harness/assets/live-test-B7uB4aVp.js +0 -2
  307. package/bundled-test-harness/assets/user-message-B8olA3Ml.css +0 -18
  308. /package/bundled-test-harness/assets/{ai-assistant-panel-service-test-B2pqk_1r.js → ai-assistant-panel-service-test-DEeul-zv.js} +0 -0
  309. /package/bundled-test-harness/assets/{amd-transpile-test-ftXbwnFz.js → amd-transpile-test-DmEkMdCo.js} +0 -0
  310. /package/bundled-test-harness/assets/{apply-boxel-formatting-test-BSzr4sNI.js → apply-boxel-formatting-test-RixVcq5N.js} +0 -0
  311. /package/bundled-test-harness/assets/{auth-error-guard-test-BxIq12aN.js → auth-error-guard-test-beazl6s5.js} +0 -0
  312. /package/bundled-test-harness/assets/{bfm-card-references-test-6aAhfBzH.js → bfm-card-references-test-IEbg0jo-.js} +0 -0
  313. /package/bundled-test-harness/assets/{cached-fetch-test-CPr-eiq_.js → cached-fetch-test-DlnnpQGz.js} +0 -0
  314. /package/bundled-test-harness/assets/{card-directory-name-test-BS8WD3oH.js → card-directory-name-test-QKl1Ykz6.js} +0 -0
  315. /package/bundled-test-harness/assets/{card-search-query-builder-test-zp6muUB1.js → card-search-query-builder-test-BWc5lDv3.js} +0 -0
  316. /package/bundled-test-harness/assets/{code-patching-test-BZPvPsMr.js → code-patching-test-BRNMumI6.js} +0 -0
  317. /package/bundled-test-harness/assets/{code-semantics-service-test-BBjJ3EF3.js → code-semantics-service-test-CJOSUAQH.js} +0 -0
  318. /package/bundled-test-harness/assets/{command-definitions-test-BcMJzIBM.js → command-definitions-test-De0BMqHI.js} +0 -0
  319. /package/bundled-test-harness/assets/{extract-css-variables-test-FIZxFxaL.js → extract-css-variables-test-Di5CFXG-.js} +0 -0
  320. /package/bundled-test-harness/assets/{fetcher-test-g2cjjXxV.js → fetcher-test-Cb8cS9JN.js} +0 -0
  321. /package/bundled-test-harness/assets/{field-path-parser-test-DkY-DFQN.js → field-path-parser-test-Db4kG7EB.js} +0 -0
  322. /package/bundled-test-harness/assets/{file-def-manager-canonicalize-test-Dlf4HlLX.js → file-def-manager-canonicalize-test-Cq5B5KN4.js} +0 -0
  323. /package/bundled-test-harness/assets/{generate-css-variables-test-De4LPdBt.js → generate-css-variables-test-BahavIHR.js} +0 -0
  324. /package/bundled-test-harness/assets/{get-type-refs-from-filter-test-DmDF_dTY.js → get-type-refs-from-filter-test-CH5flf8B.js} +0 -0
  325. /package/bundled-test-harness/assets/{last-modified-date-test-C2hEJ3xU.js → last-modified-date-test-C_jV0b05.js} +0 -0
  326. /package/bundled-test-harness/assets/{limited-set-test-SLbA1cwS.js → limited-set-test-CcpIJCrn.js} +0 -0
  327. /package/bundled-test-harness/assets/{loader-icon-error-test-DTo5t1OQ.js → loader-icon-error-test-Bc_L-0Zb.js} +0 -0
  328. /package/bundled-test-harness/assets/{loader-retry-test-CPFmHSUN.js → loader-retry-test-DQ0E0a0N.js} +0 -0
  329. /package/bundled-test-harness/assets/{marked-sync-test-CaZYJo4x.js → marked-sync-test-JSqOc6hu.js} +0 -0
  330. /package/bundled-test-harness/assets/{mutex-test-p2qp1xRj.js → mutex-test-BDkeJutn.js} +0 -0
  331. /package/bundled-test-harness/assets/{plan-install-test-CrYUs1-G.js → plan-install-test-fUZIttPZ.js} +0 -0
  332. /package/bundled-test-harness/assets/{qs-test-DEH8SHFS.js → qs-test-CminVD53.js} +0 -0
  333. /package/bundled-test-harness/assets/{query-field-normalization-test-DrqBkUxD.js → query-field-normalization-test-B9alzE_u.js} +0 -0
  334. /package/bundled-test-harness/assets/{queue-test-CS3aOeHM.js → queue-test-BvWT6K7Z.js} +0 -0
  335. /package/bundled-test-harness/assets/{realm-index-card-id-test-FV_gOG_K.js → realm-index-card-id-test-hvCyEpGZ.js} +0 -0
  336. /package/bundled-test-harness/assets/{realm-paths-test-CvXB4BUZ.js → realm-paths-test-DrwpPXyh.js} +0 -0
  337. /package/bundled-test-harness/assets/{render-component-BabSF5nE.js → render-component-DY19erxA.js} +0 -0
  338. /package/bundled-test-harness/assets/{render-error-test-CvMDARjN.js → render-error-test-BC4QmstW.js} +0 -0
  339. /package/bundled-test-harness/assets/{render-service-test-DRCvv7lo.js → render-service-test-BkCkB3a2.js} +0 -0
  340. /package/bundled-test-harness/assets/{render-timer-stub-test-CVa_rjXp.js → render-timer-stub-test-cnMPidgA.js} +0 -0
  341. /package/bundled-test-harness/assets/{search-cache-key-test-r83Xl6Io.js → search-cache-key-test-DI0DKzU5.js} +0 -0
  342. /package/bundled-test-harness/assets/{search-in-flight-key-test-BmqFzX6o.js → search-in-flight-key-test-DyRDbEX1.js} +0 -0
  343. /package/bundled-test-harness/assets/{unified-search-results-test-D9v-CCog.js → unified-search-results-test-BF8Dps_j.js} +0 -0
  344. /package/bundled-test-harness/assets/{url-test-DtekKUme.js → url-test-DkEL_mbR.js} +0 -0
@@ -1,17 +1,20 @@
1
1
  import type { Command } from 'commander';
2
2
  import { ensureTrailingSlash } from '@cardstack/runtime-common/paths';
3
3
  import {
4
+ fetchPublishabilityReport,
4
5
  publishRealm as publishRealmOperation,
5
6
  type PublishRealmOutput,
6
7
  RealmOperationError,
7
8
  waitForReady,
8
9
  } from '@cardstack/runtime-common/realm-operations';
10
+ import type { PublishabilityViolation } from '@cardstack/runtime-common/publishability';
9
11
  import { buildCliRealmClient } from '../../lib/realm-client.ts';
10
12
  import {
11
13
  getProfileManager,
12
14
  type ProfileManager,
13
15
  } from '../../lib/profile-manager.ts';
14
16
  import { unpublishRealm } from './unpublish.ts';
17
+ import { cliLog } from '../../lib/cli-log.ts';
15
18
  import { FG_CYAN, FG_GREEN, FG_RED, RESET } from '../../lib/colors.ts';
16
19
 
17
20
  const DEFAULT_TIMEOUT_MS = 300_000;
@@ -26,6 +29,11 @@ export interface PublishOptions {
26
29
  * unpublish the target URL first and retry once. Default: true.
27
30
  */
28
31
  republish?: boolean;
32
+ /**
33
+ * Skip the publishability gate (private-dependency / error-document check).
34
+ * Default: false — the gate runs and blocks publishing on violations.
35
+ */
36
+ force?: boolean;
29
37
  profileManager?: ProfileManager;
30
38
  }
31
39
 
@@ -39,7 +47,9 @@ export interface PublishRealmResult {
39
47
  /**
40
48
  * Publish a source realm to a published-realm URL.
41
49
  *
42
- * Speaks the contract documented at
50
+ * Before publishing, runs the publishability gate (private-dependency /
51
+ * error-document check) and refuses to publish on violations unless `force`
52
+ * is set. Then speaks the contract documented at
43
53
  * `packages/realm-server/handlers/handle-publish-realm.ts`: the server
44
54
  * accepts the publish, returns `202 Accepted` with `status: "pending"`,
45
55
  * and the client polls `/<publishedRealmURL>/_readiness-check` until
@@ -57,6 +67,18 @@ export async function publishRealm(
57
67
  let normalizedSource = ensureTrailingSlash(sourceRealmURL);
58
68
  let normalizedPublished = ensureTrailingSlash(publishedRealmURL);
59
69
 
70
+ // Pre-publish gate: refuse to publish a realm with private-dependency or
71
+ // error-document violations (which would break the published site) unless
72
+ // the caller forces it.
73
+ if (!options.force) {
74
+ let report = await fetchPublishabilityReport(client, {
75
+ realmURL: normalizedSource,
76
+ });
77
+ if (!report.publishable) {
78
+ throw new Error(describeViolations(report.violations));
79
+ }
80
+ }
81
+
60
82
  let output: PublishRealmOutput;
61
83
  try {
62
84
  output = await publishRealmOperation(client, {
@@ -71,7 +93,9 @@ export async function publishRealm(
71
93
  (err.status === 400 || err.status === 409) &&
72
94
  options.republish !== false
73
95
  ) {
74
- console.log(
96
+ // Progress, not payload: route to stderr via cliLog.info so it never
97
+ // corrupts stdout when the caller passed --json (stdout is JSON-only).
98
+ cliLog.info(
75
99
  `Publish returned ${err.status} (${(err.body ?? '').slice(0, 200)}). Unpublishing and retrying.`,
76
100
  );
77
101
  let unpublishResult = await unpublishRealm(normalizedPublished, {
@@ -118,6 +142,8 @@ export interface PublishCliOptions {
118
142
  wait?: boolean;
119
143
  timeout?: number;
120
144
  republish?: boolean;
145
+ force?: boolean;
146
+ json?: boolean;
121
147
  }
122
148
 
123
149
  export function publishCliOptsToOptions(
@@ -127,6 +153,7 @@ export function publishCliOptsToOptions(
127
153
  waitForReady: opts.wait !== false,
128
154
  timeoutMs: opts.timeout,
129
155
  republish: opts.republish !== false,
156
+ force: opts.force === true,
130
157
  };
131
158
  }
132
159
 
@@ -134,7 +161,7 @@ export function registerPublishCommand(realm: Command): void {
134
161
  realm
135
162
  .command('publish')
136
163
  .description(
137
- 'Publish a source realm to a published-realm URL, polling readiness until ready',
164
+ 'Publish a source realm to a published-realm URL: runs the publishability gate (use --force to skip), then polls readiness until ready',
138
165
  )
139
166
  .argument('<source-realm-url>', 'URL of the source realm to publish')
140
167
  .argument(
@@ -151,6 +178,11 @@ export function registerPublishCommand(realm: Command): void {
151
178
  '--no-republish',
152
179
  'Do not auto-unpublish + retry when the server returns 400/409',
153
180
  )
181
+ .option(
182
+ '--force',
183
+ 'Publish even if the realm has publishability violations (skips the gate)',
184
+ )
185
+ .option('--json', 'Output the result as JSON')
154
186
  .action(
155
187
  async (
156
188
  sourceRealmURL: string,
@@ -163,20 +195,27 @@ export function registerPublishCommand(realm: Command): void {
163
195
  publishedRealmURL,
164
196
  publishCliOptsToOptions(opts),
165
197
  );
166
- console.log(
167
- `${FG_GREEN}Published:${RESET} ${FG_CYAN}${result.publishedRealmURL}${RESET}`,
168
- );
198
+ if (opts.json) {
199
+ cliLog.output(JSON.stringify(result, null, 2));
200
+ } else {
201
+ console.log(
202
+ `${FG_GREEN}Published:${RESET} ${FG_CYAN}${result.publishedRealmURL}${RESET}`,
203
+ );
204
+ }
169
205
  } catch (err) {
170
- console.error(
171
- `${FG_RED}Error:${RESET} ${err instanceof Error ? err.message : String(err)}`,
172
- );
173
- // Node's fetch surfaces the actual transport error (ECONNRESET,
174
- // TLS failure, undici socket error, etc.) on `error.cause`. Print
175
- // it so opaque "fetch failed" messages don't strand the caller.
176
- // `!= null` rather than a truthy check so we don't drop
177
- // falsy-but-defined causes (`''`, `0`, `false`, `NaN`).
178
- if (err instanceof Error && err.cause != null) {
179
- console.error(`${FG_RED}Caused by:${RESET}`, err.cause);
206
+ let message = err instanceof Error ? err.message : String(err);
207
+ if (opts.json) {
208
+ cliLog.output(JSON.stringify({ error: message }, null, 2));
209
+ } else {
210
+ console.error(`${FG_RED}Error:${RESET} ${message}`);
211
+ // Node's fetch surfaces the actual transport error (ECONNRESET,
212
+ // TLS failure, undici socket error, etc.) on `error.cause`. Print
213
+ // it so opaque "fetch failed" messages don't strand the caller.
214
+ // `!= null` rather than a truthy check so we don't drop
215
+ // falsy-but-defined causes (`''`, `0`, `false`, `NaN`).
216
+ if (err instanceof Error && err.cause != null) {
217
+ console.error(`${FG_RED}Caused by:${RESET}`, err.cause);
218
+ }
180
219
  }
181
220
  process.exit(1);
182
221
  }
@@ -184,6 +223,38 @@ export function registerPublishCommand(realm: Command): void {
184
223
  );
185
224
  }
186
225
 
226
+ // Summarizes publishability violations into a single actionable error message.
227
+ // Mirrors the host PublishRealmCommand's gate messaging.
228
+ export function describeViolations(
229
+ violations: PublishabilityViolation[],
230
+ ): string {
231
+ let privateCount = violations.filter(
232
+ (v) => v.kind === 'private-dependency',
233
+ ).length;
234
+ let errorCount = violations.filter((v) => v.kind === 'error-document').length;
235
+
236
+ let parts: string[] = [];
237
+ if (privateCount) {
238
+ parts.push(`${privateCount} private-dependency violation(s)`);
239
+ }
240
+ if (errorCount) {
241
+ parts.push(`${errorCount} error-document violation(s)`);
242
+ }
243
+ let summary = parts.length
244
+ ? parts.join(', ')
245
+ : `${violations.length} violation(s)`;
246
+
247
+ let resources = violations
248
+ .map((v) => v.resource)
249
+ .filter(Boolean)
250
+ .slice(0, 5)
251
+ .join(', ');
252
+
253
+ return `Realm is not publishable (${summary}). Resolve them or pass --force to override.${
254
+ resources ? ` Affected: ${resources}` : ''
255
+ }`;
256
+ }
257
+
187
258
  function parseTimeoutOption(value: string): number {
188
259
  let n = Number.parseInt(value, 10);
189
260
  if (!Number.isFinite(n) || n < 0 || String(n) !== value.trim()) {
@@ -232,20 +232,16 @@ export async function pull(
232
232
  localDir: string,
233
233
  options: PullCommandOptions,
234
234
  ): Promise<{ files: string[]; error?: string }> {
235
- let authenticator: RealmAuthenticator;
236
- if (options.authenticator) {
237
- authenticator = options.authenticator;
238
- } else {
239
- const resolution = resolveRealmAuthenticator({
240
- realmUrl,
241
- realmSecretSeed: options.realmSecretSeed,
242
- profileManager: options.profileManager,
243
- });
244
- if (!resolution.ok) {
245
- return { files: [], error: resolution.error };
246
- }
247
- authenticator = resolution.authenticator;
235
+ const resolution = resolveRealmAuthenticator({
236
+ realmUrl,
237
+ realmSecretSeed: options.realmSecretSeed,
238
+ profileManager: options.profileManager,
239
+ authenticator: options.authenticator,
240
+ });
241
+ if (!resolution.ok) {
242
+ return { files: [], error: resolution.error };
248
243
  }
244
+ const authenticator = resolution.authenticator;
249
245
 
250
246
  try {
251
247
  const puller = new RealmPuller(
@@ -393,21 +393,17 @@ export async function pushCommand(
393
393
  realmUrl: string,
394
394
  options: PushCommandOptions,
395
395
  ): Promise<void> {
396
- let authenticator: RealmAuthenticator;
397
- if (options.authenticator) {
398
- authenticator = options.authenticator;
399
- } else {
400
- const resolution = resolveRealmAuthenticator({
401
- realmUrl,
402
- realmSecretSeed: options.realmSecretSeed,
403
- profileManager: options.profileManager,
404
- });
405
- if (!resolution.ok) {
406
- console.error(`Error: ${resolution.error}`);
407
- process.exit(1);
408
- }
409
- authenticator = resolution.authenticator;
396
+ const resolution = resolveRealmAuthenticator({
397
+ realmUrl,
398
+ realmSecretSeed: options.realmSecretSeed,
399
+ profileManager: options.profileManager,
400
+ authenticator: options.authenticator,
401
+ });
402
+ if (!resolution.ok) {
403
+ console.error(`Error: ${resolution.error}`);
404
+ process.exit(1);
410
405
  }
406
+ const authenticator = resolution.authenticator;
411
407
 
412
408
  if (!(await pathExists(localDir))) {
413
409
  console.error(`Local directory does not exist: ${localDir}`);
@@ -303,26 +303,22 @@ export async function status(
303
303
  // best-effort only
304
304
  }
305
305
 
306
- let authenticator: RealmAuthenticator;
307
- if (options.authenticator) {
308
- authenticator = options.authenticator;
309
- } else {
310
- const resolution = resolveRealmAuthenticator({
306
+ const resolution = resolveRealmAuthenticator({
307
+ realmUrl: manifest.realmUrl,
308
+ realmSecretSeed: options.realmSecretSeed,
309
+ profileManager: options.profileManager,
310
+ authenticator: options.authenticator,
311
+ });
312
+ if (!resolution.ok) {
313
+ return {
314
+ ...baseResult,
311
315
  realmUrl: manifest.realmUrl,
312
- realmSecretSeed: options.realmSecretSeed,
313
- profileManager: options.profileManager,
314
- });
315
- if (!resolution.ok) {
316
- return {
317
- ...baseResult,
318
- realmUrl: manifest.realmUrl,
319
- manifestMtime,
320
- hasError: true,
321
- error: resolution.error,
322
- };
323
- }
324
- authenticator = resolution.authenticator;
316
+ manifestMtime,
317
+ hasError: true,
318
+ error: resolution.error,
319
+ };
325
320
  }
321
+ const authenticator = resolution.authenticator;
326
322
 
327
323
  const inspector = new RealmStatusInspector(
328
324
  {
@@ -619,20 +619,16 @@ export async function sync(
619
619
  realmUrl: string,
620
620
  options: SyncCommandOptions,
621
621
  ): Promise<SyncResult> {
622
- let authenticator: RealmAuthenticator;
623
- if (options.authenticator) {
624
- authenticator = options.authenticator;
625
- } else {
626
- const resolution = resolveRealmAuthenticator({
627
- realmUrl,
628
- realmSecretSeed: options.realmSecretSeed,
629
- profileManager: options.profileManager,
630
- });
631
- if (!resolution.ok) {
632
- return emptyResult({ error: resolution.error });
633
- }
634
- authenticator = resolution.authenticator;
622
+ const resolution = resolveRealmAuthenticator({
623
+ realmUrl,
624
+ realmSecretSeed: options.realmSecretSeed,
625
+ profileManager: options.profileManager,
626
+ authenticator: options.authenticator,
627
+ });
628
+ if (!resolution.ok) {
629
+ return emptyResult({ error: resolution.error });
635
630
  }
631
+ const authenticator = resolution.authenticator;
636
632
 
637
633
  const strategies = [
638
634
  options.preferLocal,
@@ -10,6 +10,7 @@ import {
10
10
  NO_ACTIVE_PROFILE_ERROR,
11
11
  type ProfileManager,
12
12
  } from '../../lib/profile-manager.ts';
13
+ import { cliLog } from '../../lib/cli-log.ts';
13
14
  import { FG_CYAN, FG_GREEN, FG_RED, RESET } from '../../lib/colors.ts';
14
15
  import { describeFetchError } from '../../lib/describe-fetch-error.ts';
15
16
 
@@ -99,6 +100,7 @@ export async function unpublishRealm(
99
100
 
100
101
  interface UnpublishCliOptions {
101
102
  tolerateMissing?: boolean;
103
+ json?: boolean;
102
104
  }
103
105
 
104
106
  export function registerUnpublishCommand(realm: Command): void {
@@ -110,11 +112,20 @@ export function registerUnpublishCommand(realm: Command): void {
110
112
  '--tolerate-missing',
111
113
  'Exit successfully when the realm is already unpublished',
112
114
  )
115
+ .option('--json', 'Output the result as JSON')
113
116
  .action(async (publishedRealmURL: string, opts: UnpublishCliOptions) => {
114
117
  let result = await unpublishRealm(publishedRealmURL, {
115
118
  tolerateMissing: opts.tolerateMissing === true,
116
119
  });
117
120
 
121
+ if (opts.json) {
122
+ cliLog.output(JSON.stringify(result, null, 2));
123
+ if (result.error) {
124
+ process.exit(1);
125
+ }
126
+ return;
127
+ }
128
+
118
129
  if (result.error) {
119
130
  console.error(`${FG_RED}Error:${RESET} ${result.error}`);
120
131
  process.exit(1);
@@ -16,15 +16,25 @@ export interface AuthResolverOptions {
16
16
  realmSecretSeed?: string;
17
17
  /** Override the ProfileManager (tests). When seed mode is active we won't touch it. */
18
18
  profileManager?: ProfileManager;
19
+ /**
20
+ * Already-constructed authenticator (the commands' `@internal` test hook).
21
+ * Takes precedence over both seed and profile resolution.
22
+ */
23
+ authenticator?: RealmAuthenticator;
19
24
  }
20
25
 
21
26
  export type AuthResolution =
22
- | { ok: true; authenticator: RealmAuthenticator; mode: 'seed' | 'profile' }
27
+ | {
28
+ ok: true;
29
+ authenticator: RealmAuthenticator;
30
+ mode: 'injected' | 'seed' | 'profile';
31
+ }
23
32
  | { ok: false; error: string };
24
33
 
25
34
  /**
26
- * Pick between seed-based auth and profile-based auth.
35
+ * Pick the authenticator for a realm command.
27
36
  *
37
+ * - If `authenticator` is supplied (test hook), use it as-is.
28
38
  * - If `realmSecretSeed` is present, use `SeedAuthenticator`. We do NOT
29
39
  * require a profile in this mode — operators using the seed typically
30
40
  * don't have a Matrix account configured.
@@ -33,6 +43,9 @@ export type AuthResolution =
33
43
  export function resolveRealmAuthenticator(
34
44
  options: AuthResolverOptions,
35
45
  ): AuthResolution {
46
+ if (options.authenticator) {
47
+ return { ok: true, authenticator: options.authenticator, mode: 'injected' };
48
+ }
36
49
  if (options.realmSecretSeed) {
37
50
  // registerRealmUrl throws on a malformed realm URL; surface that as a
38
51
  // resolver error so pull/push/sync keep their friendly CLI error path.
@@ -1,2 +0,0 @@
1
- import { mt as TestRealmAdapter } from "./mock-matrix-CD6YHaHR.js";
2
- export { TestRealmAdapter };
@@ -1,2 +0,0 @@
1
- import { t as loadRealmTests } from "./live-test-pbHzyWf7.js";
2
- export { loadRealmTests };
@@ -1,18 +0,0 @@
1
-
2
- .user-message-bubble[data-scopedcss-7eb12e1519-cac362804b] {
3
- padding: var(--boxel-sp-sm);
4
- background-color: var(--boxel-light);
5
- color: var(--boxel-dark);
6
- border-radius: var(--boxel-border-radius-xxl);
7
- border-top-left-radius: var(--boxel-border-radius-xs);
8
- }
9
- .is-pending[data-scopedcss-7eb12e1519-cac362804b] {
10
- --pill-background-color: var(--boxel-200);
11
- --pill-font-color: var(--boxel-500);
12
- background-color: var(--boxel-200);
13
- color: var(--boxel-500);
14
- }
15
- [data-scopedcss-7eb12e1519-cac362804b] a:hover {
16
- /* use this highlight text color on light-background */
17
- color: var(--boxel-highlight-hover);
18
- }