@cardstack/boxel-cli 0.3.2-unstable.57 → 0.3.2-unstable.58

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 (379) hide show
  1. package/bundled-realms/base/Skill/catalog-listing.json +4 -4
  2. package/bundled-test-harness/assets/adapter-C8oDflNN.js +2 -0
  3. package/bundled-test-harness/assets/{add-field-to-card-definition-DfhKgXwU.js → add-field-to-card-definition-DIn1q610.js} +4 -4
  4. package/bundled-test-harness/assets/{add-field-to-card-definition-command-test-DZ5aHO5u.js → add-field-to-card-definition-command-test-Cs670972.js} +4 -4
  5. package/bundled-test-harness/assets/{add-workspace-CF8hudO-.js → add-workspace-2tmitSxr.js} +1 -1
  6. package/bundled-test-harness/assets/{add-workspace-test-Bsp2RzrC.js → add-workspace-test-BviDAUBK.js} +4 -4
  7. package/bundled-test-harness/assets/{ai-assistant-DhQ5Av3a.js → ai-assistant-B5fp2iOz.js} +6 -6
  8. package/bundled-test-harness/assets/{ai-assistant-test-B26Ldt2R.js → ai-assistant-test-jPV29jEw.js} +4 -4
  9. package/bundled-test-harness/assets/{ai-function-generation-test-DAs-k3E0.js → ai-function-generation-test-QRPcE9tQ.js} +2 -2
  10. package/bundled-test-harness/assets/{ai-module-creation-test-DCpXhgX9.js → ai-module-creation-test-DyuyfnkY.js} +4 -4
  11. package/bundled-test-harness/assets/{aibot-message-u1AS8TgO.js → aibot-message-Dwxp5hTW.js} +3 -3
  12. package/bundled-test-harness/assets/{app-DcsRpi3o.js → app-CgP2IpNG.js} +88 -95
  13. package/bundled-test-harness/assets/{apply-markdown-edit-EE9Dig7d.js → apply-markdown-edit-CT7UXlCm.js} +3 -3
  14. package/bundled-test-harness/assets/{apply-markdown-edit-test-CBS86j6J.js → apply-markdown-edit-test-C6bcaj3a.js} +4 -4
  15. package/bundled-test-harness/assets/{apply-search-replace-block--A0vAbcL.js → apply-search-replace-block-S2ZTkuTA.js} +2 -2
  16. package/bundled-test-harness/assets/{apply-search-replace-block-test-Dfl0NCGW.js → apply-search-replace-block-test-BSwC4J9g.js} +3 -3
  17. package/bundled-test-harness/assets/{auth-error-guard-D-J3k0XW.js → auth-error-guard-ChgYDxcf.js} +1 -1
  18. package/bundled-test-harness/assets/{auth-error-guard-test-BAniwx-L.js → auth-error-guard-test-Bvu8E7Wy.js} +2 -2
  19. package/bundled-test-harness/assets/{authed-fetch-BcnzoMtW.js → authed-fetch-D83Ohr_b.js} +1 -1
  20. package/bundled-test-harness/assets/{authed-fetch-test-MGmzZCvR.js → authed-fetch-test-CfF-IBHI.js} +5 -5
  21. package/bundled-test-harness/assets/{avif-image-def-test-DQpFGHxK.js → avif-image-def-test-B9L2z0nR.js} +2 -2
  22. package/bundled-test-harness/assets/{base-realm-DN9FnoVH.js → base-realm-43wjttN2.js} +1 -1
  23. package/bundled-test-harness/assets/{base-realm-BLFwclgP.js → base-realm-CJ5x9iyX.js} +1 -1
  24. package/bundled-test-harness/assets/{basic-test-DJafJYrR.js → basic-test-B64a5zCK.js} +2 -2
  25. package/bundled-test-harness/assets/{bfm-card-references-test-D8wgrXAi.js → bfm-card-references-test-cLQVLpth.js} +1 -1
  26. package/bundled-test-harness/assets/{binary-upload-dedupe-test-BxAvQQ_x.js → binary-upload-dedupe-test-By7Y1iQ3.js} +5 -5
  27. package/bundled-test-harness/assets/{bot-registration-test-qIW16T3W.js → bot-registration-test-DOjf0P1R.js} +5 -5
  28. package/bundled-test-harness/assets/{box-test-SQF1g3tI.js → box-test-Cd1-RcXg.js} +2 -2
  29. package/bundled-test-harness/assets/{brand-guide-attachments-test-E60jyMxm.js → brand-guide-attachments-test-DxRqP8fo.js} +4 -4
  30. package/bundled-test-harness/assets/{brand-guide-custom-css-test-jy-_JQ46.js → brand-guide-custom-css-test-DBpZiHzJ.js} +4 -4
  31. package/bundled-test-harness/assets/{brand-logo-mark-field-test-UOcZ4HQ7.js → brand-logo-mark-field-test-61k4e5Om.js} +4 -4
  32. package/bundled-test-harness/assets/{broken-link-template-test-gyzbZwiR.js → broken-link-template-test-A1P4flQ5.js} +2 -2
  33. package/bundled-test-harness/assets/{browser-queue-5NBIU7iB.js → browser-queue-CiAZHYMs.js} +2 -2
  34. package/bundled-test-harness/assets/{cached-fetch-test-Cw-5Vd4D.js → cached-fetch-test-ByQ-5OQI.js} +1 -1
  35. package/bundled-test-harness/assets/{can-read-realm-PLgMdr8o.js → can-read-realm-BTFZdy1x.js} +1 -1
  36. package/bundled-test-harness/assets/{can-read-realm-test-BreVMREJ.js → can-read-realm-test-VFLHJdEv.js} +5 -5
  37. package/bundled-test-harness/assets/{cancel-indexing-job-B5M2Ds06.js → cancel-indexing-job-kp_C8Xl-.js} +1 -1
  38. package/bundled-test-harness/assets/{cancel-indexing-job-test-BfE5StwQ.js → cancel-indexing-job-test-n3Os4ZaX.js} +5 -5
  39. package/bundled-test-harness/assets/{card-api-test-DyvKjxrW.js → card-api-test-DvNfLv3V.js} +4 -4
  40. package/bundled-test-harness/assets/{card-basics-test-CWfgRiAu.js → card-basics-test-CKzZuFdw.js} +5 -5
  41. package/bundled-test-harness/assets/{card-catalog-test-DYDlHFmr.js → card-catalog-test-JFvkVHED.js} +4 -4
  42. package/bundled-test-harness/assets/{card-copy-test-DVqpYVyy.js → card-copy-test-iwrFA72s.js} +4 -4
  43. package/bundled-test-harness/assets/{card-def-field-def-relationships-test-NhqiCH3n.js → card-def-field-def-relationships-test-D5s2RH5t.js} +5 -5
  44. package/bundled-test-harness/assets/{card-def-menu-items-test-CUMX4z7E.js → card-def-menu-items-test-XcmkT4NF.js} +2 -2
  45. package/bundled-test-harness/assets/{card-delete-test-B9uDbxXH.js → card-delete-test-jtAOHk1Y.js} +4 -4
  46. package/bundled-test-harness/assets/{card-directory-name-test-CrTvfxUK.js → card-directory-name-test-veQEp5FJ.js} +1 -1
  47. package/bundled-test-harness/assets/{card-error-detail-D5KZVMx1.js → card-error-detail-DHgMOVGe.js} +3 -3
  48. package/bundled-test-harness/assets/{card-playground-test-qw2VzkcC.js → card-playground-test-P7Ed0tO4.js} +3 -3
  49. package/bundled-test-harness/assets/{card-prerender-BLzXmZFI.js → card-prerender-DXG8cQEv.js} +5 -5
  50. package/bundled-test-harness/assets/{card-renderer-DYf5wKRG.js → card-renderer-D1areYZe.js} +1 -1
  51. package/bundled-test-harness/assets/{card-search-adorn-test-Zy3KLCXy.js → card-search-adorn-test-BX0-IJHB.js} +3 -3
  52. package/bundled-test-harness/assets/{card-search-query-builder-test-CFzY3Vo_.js → card-search-query-builder-test-D01uixke.js} +2 -2
  53. package/bundled-test-harness/assets/{card-search-selection-menu-test-BOUWbtSu.js → card-search-selection-menu-test-DMTeZFmW.js} +2 -2
  54. package/bundled-test-harness/assets/{card-service-DaexcI99.js → card-service-DSv98Ql7.js} +1 -1
  55. package/bundled-test-harness/assets/{check-correctness-DUitsZZH.js → check-correctness-BIfYUT39.js} +2 -2
  56. package/bundled-test-harness/assets/{check-correctness-test-DXILbQCc.js → check-correctness-test-D7QB1GTo.js} +6 -6
  57. package/bundled-test-harness/assets/{code-equality-assertion-2tVgNXpX.js → code-equality-assertion-C-2g5YGf.js} +2 -2
  58. package/bundled-test-harness/assets/{code-patches-test-Bo16nji_.js → code-patches-test-DaV4Mon_.js} +3 -3
  59. package/bundled-test-harness/assets/{code-patching-test-BAOMyP_X.js → code-patching-test-CcbWlImN.js} +2 -2
  60. package/bundled-test-harness/assets/{code-ref-test-DkH-Hg9w.js → code-ref-test-8Yj8gbww.js} +2 -2
  61. package/bundled-test-harness/assets/{code-semantics-service-test-DpPro60m.js → code-semantics-service-test-C3srTfDz.js} +1 -1
  62. package/bundled-test-harness/assets/{code-submode-test-BJKzfCnA.js → code-submode-test-BUhjvWtB.js} +3 -3
  63. package/bundled-test-harness/assets/{codeblocks-test-9HDQV8Tk.js → codeblocks-test-3zAp0_GA.js} +5 -5
  64. package/bundled-test-harness/assets/{codemirror-editor-test-CzGCCbkG.js → codemirror-editor-test-WojU4k2h.js} +1 -1
  65. package/bundled-test-harness/assets/{color-field-test-DNfSOpDL.js → color-field-test-yESUakoE.js} +3 -3
  66. package/bundled-test-harness/assets/{commands-K_bsu_Og.js → commands-CBDBujm_.js} +176 -986
  67. package/bundled-test-harness/assets/{commands-calling-test-BrbvuP2e.js → commands-calling-test-DJTl0EbL.js} +4 -4
  68. package/bundled-test-harness/assets/{commands-test-BTr6bsOn.js → commands-test-DW2gupNS.js} +9 -9
  69. package/bundled-test-harness/assets/{commands-test-JVW86un6.js → commands-test-DjLnuojW.js} +5 -5
  70. package/bundled-test-harness/assets/{computed-test-DRTA-65U.js → computed-test-0n5g8Ez5.js} +4 -4
  71. package/bundled-test-harness/assets/{container-CdKkJ4UR.js → container-D8y7fmir.js} +25 -25
  72. package/bundled-test-harness/assets/{convert-to-class-name-test-mNQiPfY2.js → convert-to-class-name-test-DSIflIV2.js} +1 -1
  73. package/bundled-test-harness/assets/{copy-and-edit-DjhRJze1.js → copy-and-edit-B8M2rwoL.js} +3 -3
  74. package/bundled-test-harness/assets/{copy-and-edit-test-C26Vx0mc.js → copy-and-edit-test-BuK1ZHr-.js} +4 -4
  75. package/bundled-test-harness/assets/{copy-card-VdjJuaCY.js → copy-card-JGCXNcjb.js} +1 -1
  76. package/bundled-test-harness/assets/{copy-card-test-DarxpxoR.js → copy-card-test-DnDC4_7J.js} +5 -5
  77. package/bundled-test-harness/assets/{copy-card-to-stack-DPflgmTL.js → copy-card-to-stack-Cnj8p8tc.js} +3 -3
  78. package/bundled-test-harness/assets/{copy-file-to-realm-test-Drd30dk6.js → copy-file-to-realm-test-CFd_3Iff.js} +3 -3
  79. package/bundled-test-harness/assets/{copy-source-BcR0va5z.js → copy-source-CSrG5lS7.js} +1 -1
  80. package/bundled-test-harness/assets/{copy-source-test-D0jFpi4w.js → copy-source-test-38yUGJor.js} +4 -4
  81. package/bundled-test-harness/assets/{create-ai-assistant-room-BP5kNTW7.js → create-ai-assistant-room-7LllE6Lq.js} +2 -2
  82. package/bundled-test-harness/assets/{create-file-modal-BjlBImt1.js → create-file-modal-_y7nscSl.js} +4 -4
  83. package/bundled-test-harness/assets/{create-file-test-DI43enJq.js → create-file-test-B2oem0-V.js} +2 -2
  84. package/bundled-test-harness/assets/{create-file-test-CoPnYED8.js → create-file-test-BHk00RtD.js} +2 -2
  85. package/bundled-test-harness/assets/{create-listing-modal-test-CAS43KMd.js → create-listing-modal-test-L-71-Uo2.js} +5 -5
  86. package/bundled-test-harness/assets/{create-listing-pr-request-BPLDcJgw.js → create-listing-pr-request-CZaLsHhE.js} +4 -4
  87. package/bundled-test-harness/assets/{create-listing-pr-request-test-CwIlzlfu.js → create-listing-pr-request-test-OGzk4Q2E.js} +5 -5
  88. package/bundled-test-harness/assets/{create-spec-test-CWtYAh8d.js → create-spec-test-BsM7VKuH.js} +4 -4
  89. package/bundled-test-harness/assets/{create-specs-HhFVojRg.js → create-specs-t7sWc_xt.js} +6 -6
  90. package/bundled-test-harness/assets/{csv-file-def-test-Di6EPsOu.js → csv-file-def-test-BhJalhE-.js} +2 -2
  91. package/bundled-test-harness/assets/{date-time-fields-test-Xl1mWopb.js → date-time-fields-test-Cs5T6Xk1.js} +3 -3
  92. package/bundled-test-harness/assets/{debounce-qj19N2vf.js → debounce-CwTDsmN-.js} +1 -1
  93. package/bundled-test-harness/assets/{debug-message-test-CvrpWGqM.js → debug-message-test-WlHe7pJF.js} +5 -5
  94. package/bundled-test-harness/assets/{diffing-test-BMMObLNW.js → diffing-test-DO54USSm.js} +1 -1
  95. package/bundled-test-harness/assets/{editor-test-C7G17Dk4.js → editor-test-DChC9LuR.js} +2 -2
  96. package/bundled-test-harness/assets/{email-field-test-CM8lBha1.js → email-field-test-DWIFSfZ-.js} +4 -4
  97. package/bundled-test-harness/assets/{enum-field-test-CHaO6N_F.js → enum-field-test-BUc6l4us.js} +4 -4
  98. package/bundled-test-harness/assets/{error-display-test-sO0QyguB.js → error-display-test-CHSE6h6Z.js} +2 -2
  99. package/bundled-test-harness/assets/{evaluate-module-bUPiIcDs.js → evaluate-module-C6_gzn5_.js} +1 -1
  100. package/bundled-test-harness/assets/{evaluate-module-test-DfnjIPLN.js → evaluate-module-test-Caa5n0B9.js} +3 -3
  101. package/bundled-test-harness/assets/{execute-atomic-operations-DwSarfVd.js → execute-atomic-operations-CC3N-5N4.js} +1 -1
  102. package/bundled-test-harness/assets/{execute-atomic-operations-test-BrkebMvJ.js → execute-atomic-operations-test-CT060oDk.js} +6 -6
  103. package/bundled-test-harness/assets/{externals-SS6OJwxu.js → externals-Do1fVZ4j.js} +2 -2
  104. package/bundled-test-harness/assets/{fallback-banner-test-CxswlAy1.js → fallback-banner-test-CmxysrDn.js} +5 -5
  105. package/bundled-test-harness/assets/{fallback-banner-test-BiQr1ZkY.js → fallback-banner-test-DJ4cO8PB.js} +1 -1
  106. package/bundled-test-harness/assets/{fallback-models-test-CnHb76im.js → fallback-models-test-r5upJFeA.js} +5 -5
  107. package/bundled-test-harness/assets/{fetch-card-json-DxiiGiFw.js → fetch-card-json-B-C1HlJO.js} +1 -1
  108. package/bundled-test-harness/assets/{fetch-card-json-test-B9s3ygQi.js → fetch-card-json-test-Di1wmvy5.js} +5 -5
  109. package/bundled-test-harness/assets/{fetcher-test-Byj1ySkx.js → fetcher-test-DjzNl_7F.js} +1 -1
  110. package/bundled-test-harness/assets/{field-configuration-test-98SGHHs3.js → field-configuration-test-C3vr-HhG.js} +4 -4
  111. package/bundled-test-harness/assets/{field-markdown-domain-test-cZLg8V4G.js → field-markdown-domain-test-DG2U4qIm.js} +4 -4
  112. package/bundled-test-harness/assets/{field-markdown-primitives-test-DNNlWeW2.js → field-markdown-primitives-test-Bay2v8nT.js} +3 -3
  113. package/bundled-test-harness/assets/{field-markdown-specialized-test-BNK65c-g.js → field-markdown-specialized-test-Bl0Sl4sc.js} +4 -4
  114. package/bundled-test-harness/assets/{field-playground-test-CzaQ2nm5.js → field-playground-test-Bcjfws4m.js} +3 -3
  115. package/bundled-test-harness/assets/{field-support-predicates-test-DCHJ4jVG.js → field-support-predicates-test-DYTqOGvv.js} +3 -3
  116. package/bundled-test-harness/assets/{field-test-helpers-BQf_mGjC.js → field-test-helpers-DYSfSGdh.js} +2 -2
  117. package/bundled-test-harness/assets/{file-CBX_fzjQ.js → file-Dkzzhwoy.js} +1 -1
  118. package/bundled-test-harness/assets/{file-attachment-test-8S_Am_sT.js → file-attachment-test-6ypDRDS7.js} +5 -5
  119. package/bundled-test-harness/assets/{file-chooser-test-DwyCe7A1.js → file-chooser-test-mtmcHTFP.js} +3 -3
  120. package/bundled-test-harness/assets/{file-def-attributes-extractor-KRDLPav1.js → file-def-attributes-extractor-DGMrcc_b.js} +1 -1
  121. package/bundled-test-harness/assets/{file-def-live-reload-test-Dy5nXWf8.js → file-def-live-reload-test-CX1-lOv6.js} +2 -2
  122. package/bundled-test-harness/assets/{file-def-manager-CC2L49rL.js → file-def-manager-DNHII2oj.js} +1 -1
  123. package/bundled-test-harness/assets/{file-def-manager-canonicalize-test-CDN4paGB.js → file-def-manager-canonicalize-test-i_7UVakF.js} +2 -2
  124. package/bundled-test-harness/assets/{file-def-menu-items-test-Cx-oynAB.js → file-def-menu-items-test-Dw458iku.js} +2 -2
  125. package/bundled-test-harness/assets/{file-def-navigation-test-hBA-P_K4.js → file-def-navigation-test-B3Ztr1Rd.js} +2 -2
  126. package/bundled-test-harness/assets/{file-def-serialization-test-CgzTp7-l.js → file-def-serialization-test-C_gV8AkU.js} +3 -3
  127. package/bundled-test-harness/assets/{file-def-test-1aOtf07s.js → file-def-test-vXXJmtxX.js} +2 -2
  128. package/bundled-test-harness/assets/{file-tree-test-By0I-LWa.js → file-tree-test-BJCiw9jm.js} +3 -3
  129. package/bundled-test-harness/assets/{flac-audio-def-test-B_U0BYqp.js → flac-audio-def-test-BX3SE1vW.js} +2 -2
  130. package/bundled-test-harness/assets/{formatted-aibot-message-test-DRggFVzN.js → formatted-aibot-message-test-DyqUz2nt.js} +4 -4
  131. package/bundled-test-harness/assets/{formatted-user-message-test-D0hCVV-p.js → formatted-user-message-test-aqAzqvBP.js} +1 -1
  132. package/bundled-test-harness/assets/{freestyle-test-BNWR5_tb.js → freestyle-test-CLRrZkAE.js} +1 -1
  133. package/bundled-test-harness/assets/{full-reindex-realm-jKZdNKYy.js → full-reindex-realm-DbD6GuJ5.js} +1 -1
  134. package/bundled-test-harness/assets/{full-reindex-realm-test-CvdTNv7H.js → full-reindex-realm-test-ClqPVQ0c.js} +5 -5
  135. package/bundled-test-harness/assets/{garbage-collection-test-BA_DevRy.js → garbage-collection-test-Ba2dD3qS.js} +4 -4
  136. package/bundled-test-harness/assets/{gc-card-store-CSykK7YD.js → gc-card-store-Cyaw1ZoD.js} +1 -1
  137. package/bundled-test-harness/assets/{general-test-DqXUp9Lj.js → general-test-D0zhs14K.js} +5 -5
  138. package/bundled-test-harness/assets/{generate-example-cards-VfsHLFeC.js → generate-example-cards-DSnMgnoE.js} +4 -4
  139. package/bundled-test-harness/assets/{generate-example-cards-one-shot-test-DICYWk96.js → generate-example-cards-one-shot-test-fSAdGJeT.js} +4 -4
  140. package/bundled-test-harness/assets/{get-available-realm-identifiers-DxAmtnsW.js → get-available-realm-identifiers-B_Bjav4V.js} +1 -1
  141. package/bundled-test-harness/assets/{get-available-realm-identifiers-test-D2fiOMAn.js → get-available-realm-identifiers-test-BXMUW65I.js} +5 -5
  142. package/bundled-test-harness/assets/{get-catalog-realm-identifiers-C4aO6u4l.js → get-catalog-realm-identifiers-Bd_kaIut.js} +1 -1
  143. package/bundled-test-harness/assets/{get-catalog-realm-identifiers-test-DuLrS_KE.js → get-catalog-realm-identifiers-test-DKEq6Zcq.js} +5 -5
  144. package/bundled-test-harness/assets/{get-default-writable-realm-2nH1mW2Y.js → get-default-writable-realm-DfHmEQ8g.js} +1 -1
  145. package/bundled-test-harness/assets/{get-default-writable-realm-test-B3Ab4veP.js → get-default-writable-realm-test-Dp4nBIRP.js} +5 -5
  146. package/bundled-test-harness/assets/{get-realm-of-resource-identifier-Bf7VL5Td.js → get-realm-of-resource-identifier-DR1Hzxmh.js} +2 -2
  147. package/bundled-test-harness/assets/{get-realm-of-resource-identifier-test-Db3KeI60.js → get-realm-of-resource-identifier-test-DYNnMgD-.js} +5 -5
  148. package/bundled-test-harness/assets/{get-relationship-membership-state-test-CnjYNJCL.js → get-relationship-membership-state-test-k9EUNWeq.js} +3 -3
  149. package/bundled-test-harness/assets/{get-type-refs-from-filter-test-BIHvwwfZ.js → get-type-refs-from-filter-test-BPuivF-v.js} +1 -1
  150. package/bundled-test-harness/assets/{get-user-system-card-BOOBnEqc.js → get-user-system-card-CSByuPXh.js} +1 -1
  151. package/bundled-test-harness/assets/{get-user-system-card-test-BDADm7_V.js → get-user-system-card-test-DSHv00O7.js} +5 -5
  152. package/bundled-test-harness/assets/{gif-image-def-test-n-mgX5hB.js → gif-image-def-test-LuDSr5Kz.js} +2 -2
  153. package/bundled-test-harness/assets/{gts-file-def-test-y7YGPABO.js → gts-file-def-test-bS3ML062.js} +2 -2
  154. package/bundled-test-harness/assets/{head-format-preview-test-DYvtL4hi.js → head-format-preview-test-B8IPh71E.js} +2 -2
  155. package/bundled-test-harness/assets/{helpers-CggYK0qv.js → helpers-D_JZYUOQ.js} +1 -1
  156. package/bundled-test-harness/assets/{helpers-DfbN22AQ.js → helpers-wSIq-bau.js} +4 -4
  157. package/bundled-test-harness/assets/{host-base-command-BGdgn4Q-.js → host-base-command-BMsZcn1D.js} +1 -1
  158. package/bundled-test-harness/assets/{host-mode-service-C_b8xNVT.js → host-mode-service-B4CEe5xJ.js} +1 -1
  159. package/bundled-test-harness/assets/{host-mode-test-DQvboQ87.js → host-mode-test-D44nXoQZ.js} +3 -3
  160. package/bundled-test-harness/assets/{host-submode-test-c1MsNS2b.js → host-submode-test-CefkXg9F.js} +3 -3
  161. package/bundled-test-harness/assets/{index-query-engine-test-eH_3mn90.js → index-query-engine-test-DJnDqmfK.js} +4 -4
  162. package/bundled-test-harness/assets/{index-writer-test-QByWRKMy.js → index-writer-test-BcrCMj37.js} +3 -3
  163. package/bundled-test-harness/assets/{inspector-test-B_Sm8pUM.js → inspector-test-D4iMBlbL.js} +2 -2
  164. package/bundled-test-harness/assets/{instance-filter-matcher-test-fzP4DEnI.js → instance-filter-matcher-test-CYT6N3hN.js} +4 -4
  165. package/bundled-test-harness/assets/{instantiate-card-B54BHVHk.js → instantiate-card-CJrMFAO_.js} +1 -1
  166. package/bundled-test-harness/assets/{instantiate-card-test-Db0XT9hX.js → instantiate-card-test-j1JS5lDe.js} +3 -3
  167. package/bundled-test-harness/assets/{interact-submode-creation-and-permissions-test-DL6Z036Q.js → interact-submode-creation-and-permissions-test-B-aXzOh6.js} +4 -4
  168. package/bundled-test-harness/assets/{interact-submode-setup-Duzpi-nO.js → interact-submode-setup-VMwOUl3u.js} +2 -2
  169. package/bundled-test-harness/assets/{interact-submode-test-D0XU9rs9.js → interact-submode-test-D5lNNXdq.js} +3 -3
  170. package/bundled-test-harness/assets/{invalidate-realm-identifiers-CYvEl7qB.js → invalidate-realm-identifiers-B_NYbRkp.js} +1 -1
  171. package/bundled-test-harness/assets/{invalidate-realm-identifiers-test-D8u2iQsm.js → invalidate-realm-identifiers-test-71Ze8eGV.js} +5 -5
  172. package/bundled-test-harness/assets/{invite-user-to-room-DIfcHmnZ.js → invite-user-to-room-By6L6O7g.js} +1 -1
  173. package/bundled-test-harness/assets/{invite-user-to-room-test-DAUx3CF_.js → invite-user-to-room-test-UfjsvwVp.js} +4 -4
  174. package/bundled-test-harness/assets/{isolated-render-BtFI3iLX.js → isolated-render-B0Uwpy0n.js} +1 -1
  175. package/bundled-test-harness/assets/{isolated-render-test-BKIY0Z-R.js → isolated-render-test-C2IL-Fz3.js} +2 -2
  176. package/bundled-test-harness/assets/{item-button-Cp_gpgDE.js → item-button-6g7XYj56.js} +3 -3
  177. package/bundled-test-harness/assets/{job-priority-header-test-DXH8n4cK.js → job-priority-header-test-C3FfKLPP.js} +2 -2
  178. package/bundled-test-harness/assets/{jpg-image-def-test-B9pYXUVH.js → jpg-image-def-test-BTBk9lk5.js} +2 -2
  179. package/bundled-test-harness/assets/{json-file-def-test-e--2bZ90.js → json-file-def-test-BpU_Eidn.js} +2 -2
  180. package/bundled-test-harness/assets/{linksto-broken-link-placeholder-test-DcxyxYLw.js → linksto-broken-link-placeholder-test-qZeqQ1gt.js} +4 -4
  181. package/bundled-test-harness/assets/{linksto-error-sentinel-test-CFHbZman.js → linksto-error-sentinel-test-BaV3I8Xx.js} +3 -3
  182. package/bundled-test-harness/assets/{linksto-many-broken-link-placeholder-test-DRUtCxRW.js → linksto-many-broken-link-placeholder-test-BvJi1vCb.js} +4 -4
  183. package/bundled-test-harness/assets/{linksto-many-per-slot-access-test-DmcpOYtI.js → linksto-many-per-slot-access-test-CK60Cugk.js} +3 -3
  184. package/bundled-test-harness/assets/{linksto-sentinel-roundtrip-test-De2WpcBM.js → linksto-sentinel-roundtrip-test-BWxdEO9D.js} +3 -3
  185. package/bundled-test-harness/assets/{linksto-singular-js-access-contract-test-BW2F4t11.js → linksto-singular-js-access-contract-test-CIsLhqR2.js} +3 -3
  186. package/bundled-test-harness/assets/{lint-and-fix-V56pAd1n.js → lint-and-fix-BMQ1syM6.js} +2 -2
  187. package/bundled-test-harness/assets/{live-prerendered-search-CJDEXx90.js → live-prerendered-search-jZe3I16p.js} +4 -4
  188. package/bundled-test-harness/assets/live-test-CF_R5WGr.js +2 -0
  189. package/bundled-test-harness/assets/{live-test-NY_7CFNs.js → live-test-jO7lXuyB.js} +7 -7
  190. package/bundled-test-harness/assets/{loader-icon-error-test-Ce84hpJz.js → loader-icon-error-test-N4JYZuTx.js} +1 -1
  191. package/bundled-test-harness/assets/{loader-parallel-prefetch-test-DpFZ_p-0.js → loader-parallel-prefetch-test-DteeG7mU.js} +2 -2
  192. package/bundled-test-harness/assets/{loader-retry-test-D0ED2P-U.js → loader-retry-test-DYVgpS_I.js} +1 -1
  193. package/bundled-test-harness/assets/{loader-test-D5fmU9Xr.js → loader-test-DLI8JIx-.js} +2 -2
  194. package/bundled-test-harness/assets/{loading-test-Bfsq9yyP.js → loading-test-D4ZBtRYf.js} +3 -3
  195. package/bundled-test-harness/assets/{m4a-audio-def-test-TwnddwIE.js → m4a-audio-def-test-BKqGO-CW.js} +2 -2
  196. package/bundled-test-harness/assets/{main-Bor2cxrd.js → main-BjBdsiQT.js} +1 -1
  197. package/bundled-test-harness/assets/{markdown-fallback-test-DGdixi-5.js → markdown-fallback-test-BBj80dZZ.js} +3 -3
  198. package/bundled-test-harness/assets/{markdown-file-def-test-BCuMd2tt.js → markdown-file-def-test-BnMF5rQF.js} +2 -2
  199. package/bundled-test-harness/assets/{markdown-helpers-test-Dn3M0V2T.js → markdown-helpers-test-DnuuSLfS.js} +2 -2
  200. package/bundled-test-harness/assets/{markdown-highlighting-test-CWvnSbdW.js → markdown-highlighting-test-CWRp2Rce.js} +3 -3
  201. package/bundled-test-harness/assets/{markdown-preview-test-DRhhjytd.js → markdown-preview-test-Bf5OqKGf.js} +4 -4
  202. package/bundled-test-harness/assets/{markdown-preview-EFDbxJUh.js → markdown-preview-yYHtwNeI.js} +2 -2
  203. package/bundled-test-harness/assets/{matrix-service-sliding-sync-test-BVXe_s0E.js → matrix-service-sliding-sync-test-CdEy3ASW.js} +3 -3
  204. package/bundled-test-harness/assets/{message-service-subscription-test-xk49SHWl.js → message-service-subscription-test-pGz_7rz3.js} +3 -3
  205. package/bundled-test-harness/assets/{mock-matrix-DNf0qi20.js → mock-matrix-D7JHfFtT.js} +1 -1
  206. package/bundled-test-harness/assets/{mock-matrix-B7-Yjk1q.js → mock-matrix-DqDbNhEj.js} +7 -7
  207. package/bundled-test-harness/assets/{module-syntax-Djv9Dl9A.js → module-syntax-nniSljxW.js} +1 -1
  208. package/bundled-test-harness/assets/{module-transpile-cache-test-BZucpTCB.js → module-transpile-cache-test-D0M-fPxs.js} +2 -2
  209. package/bundled-test-harness/assets/{mp3-audio-def-test-RK_LaVFM.js → mp3-audio-def-test-CxeRk1bl.js} +2 -2
  210. package/bundled-test-harness/assets/{number-field-test-DTBe27-g.js → number-field-test-gjAGDy6P.js} +3 -3
  211. package/bundled-test-harness/assets/{ogg-audio-def-test-MX84g6Gg.js → ogg-audio-def-test-B6Ww3Ixr.js} +2 -2
  212. package/bundled-test-harness/assets/{one-shot-llm-request-DygEVhwY.js → one-shot-llm-request-Cmtn_WRk.js} +5 -5
  213. package/bundled-test-harness/assets/{open-ai-assistant-room-DyI9Osk8.js → open-ai-assistant-room-DtydafHF.js} +1 -1
  214. package/bundled-test-harness/assets/{open-create-listing-modal-B_BmJftu.js → open-create-listing-modal-DFq_N8TO.js} +2 -2
  215. package/bundled-test-harness/assets/{open-create-listing-modal-test-6MyQhXSU.js → open-create-listing-modal-test-uN58T3rI.js} +4 -4
  216. package/bundled-test-harness/assets/{open-workspace-DkBqfXKN.js → open-workspace-DRfx-nzh.js} +1 -1
  217. package/bundled-test-harness/assets/{open-workspace-test-dsRMCj7i.js → open-workspace-test-DXVsvBFJ.js} +4 -4
  218. package/bundled-test-harness/assets/{operator-mode-acceptance-test-C5GXSsmz.js → operator-mode-acceptance-test-BxIq2xSS.js} +4 -4
  219. package/bundled-test-harness/assets/{operator-mode-card-catalog-test-DaKnyy41.js → operator-mode-card-catalog-test-xFYx9_ng.js} +5 -5
  220. package/bundled-test-harness/assets/{operator-mode-links-test-lnjsXbN1.js → operator-mode-links-test-qhXWmz-S.js} +5 -5
  221. package/bundled-test-harness/assets/{operator-mode-state-service-test-CEyCnXsp.js → operator-mode-state-service-test-BdA_uvaY.js} +2 -2
  222. package/bundled-test-harness/assets/{operator-mode-test-56NtKCnB.js → operator-mode-test-D3EyTwq3.js} +5 -5
  223. package/bundled-test-harness/assets/{operator-mode-ui-test-BrNtGTWI.js → operator-mode-ui-test-CSrk6Q0A.js} +5 -5
  224. package/bundled-test-harness/assets/{overlay-menu-items-test-B2xpBLe2.js → overlay-menu-items-test-CuqqLsQT.js} +4 -4
  225. package/bundled-test-harness/assets/{panel-FWXvJYHW.js → panel-C2rtbx32.js} +10 -10
  226. package/bundled-test-harness/assets/{past-sessions-test-C3owclyz.js → past-sessions-test-B9SCbbXz.js} +5 -5
  227. package/bundled-test-harness/assets/{patch-card-instance-DKSTQ2Eb.js → patch-card-instance-BgWqjUFi.js} +2 -2
  228. package/bundled-test-harness/assets/{patch-code-CSBFGIXZ.js → patch-code-BksUYDfB.js} +6 -6
  229. package/bundled-test-harness/assets/{patch-code-test-B2H2CGl2.js → patch-code-test-CcFr9pDb.js} +5 -5
  230. package/bundled-test-harness/assets/{patch-fields-M84xrupT.js → patch-fields-CnL9_mBJ.js} +2 -2
  231. package/bundled-test-harness/assets/{patch-fields-test-PSdSxQEB.js → patch-fields-test-BW1gzcJM.js} +4 -4
  232. package/bundled-test-harness/assets/{patch-instance-test-D6osmVEp.js → patch-instance-test-DKqA9gQ6.js} +4 -4
  233. package/bundled-test-harness/assets/{persist-module-inspector-view-C8j_zhAt.js → persist-module-inspector-view-DJJZQppZ.js} +1 -1
  234. package/bundled-test-harness/assets/{persist-module-inspector-view-test-CjOnNnXZ.js → persist-module-inspector-view-test-D1eKBUkt.js} +5 -5
  235. package/bundled-test-harness/assets/{phone-number-field-test-CydScvJz.js → phone-number-field-test-D1is5RWv.js} +4 -4
  236. package/bundled-test-harness/assets/{plan-install-test-BRHg4HjL.js → plan-install-test-DB-PrjPR.js} +1 -1
  237. package/bundled-test-harness/assets/{playground-Dx4gQbY3.js → playground-B0iQV7dU.js} +2 -2
  238. package/bundled-test-harness/assets/{png-image-def-test-Ddxb0URN.js → png-image-def-test-DnOsJGs6.js} +2 -2
  239. package/bundled-test-harness/assets/{prerender-fetch-headers-qvzyCKjm.js → prerender-fetch-headers-BIKTWBSv.js} +1 -1
  240. package/bundled-test-harness/assets/{prerender-file-extract-test-B1yHPkAJ.js → prerender-file-extract-test-DhOLozj2.js} +2 -2
  241. package/bundled-test-harness/assets/{prerender-html-test-CzH4x1kc.js → prerender-html-test-DKVhQZA9.js} +2 -2
  242. package/bundled-test-harness/assets/{prerender-meta-test-Ccw0DQlE.js → prerender-meta-test-CnRNyqSz.js} +2 -2
  243. package/bundled-test-harness/assets/{prerender-module-test-738ExYbY.js → prerender-module-test-D163QcrZ.js} +2 -2
  244. package/bundled-test-harness/assets/{prerendered-card-search-test-RYZzTGXj.js → prerendered-card-search-test-DX-8yabJ.js} +4 -4
  245. package/bundled-test-harness/assets/{preview-format-DsWxdEhq.js → preview-format-snitJHQF.js} +3 -3
  246. package/bundled-test-harness/assets/{preview-format-test-evn_uUJr.js → preview-format-test-H7bnpdlC.js} +4 -4
  247. package/bundled-test-harness/assets/{preview-test-BxdG0eHo.js → preview-test-B7u6uWJR.js} +4 -4
  248. package/bundled-test-harness/assets/{qs-test-DmA8Etoi.js → qs-test-COb0mre6.js} +1 -1
  249. package/bundled-test-harness/assets/{query-builder-CdZqyMwT.js → query-builder-QKqna_9C.js} +1 -1
  250. package/bundled-test-harness/assets/{query-field-barrier-test-DA1kcLR0.js → query-field-barrier-test-Cypj-MhK.js} +4 -4
  251. package/bundled-test-harness/assets/{query-field-error-sentinel-test-ByyEWqCo.js → query-field-error-sentinel-test-Dnqn8TdN.js} +4 -4
  252. package/bundled-test-harness/assets/{query-field-normalization-test-Bgbi_51u.js → query-field-normalization-test-B7D8SHBP.js} +1 -1
  253. package/bundled-test-harness/assets/{query-field-schema-test-Bsskmo54.js → query-field-schema-test-DIYY3-c8.js} +3 -3
  254. package/bundled-test-harness/assets/{query-fields-test-BE96Vi9g.js → query-fields-test-k-VBF9PE.js} +3 -3
  255. package/bundled-test-harness/assets/{queue-test-tiY1ywnP.js → queue-test-B_74vXZE.js} +3 -3
  256. package/bundled-test-harness/assets/{read-card-for-ai-assistant-CdcgayNl.js → read-card-for-ai-assistant-BfSsTYj2.js} +2 -2
  257. package/bundled-test-harness/assets/{read-card-for-ai-assistant-test-DqgidZgp.js → read-card-for-ai-assistant-test-SyL9F_La.js} +4 -4
  258. package/bundled-test-harness/assets/{read-file-for-ai-assistant-CRy_nsMY.js → read-file-for-ai-assistant-AEVCUknz.js} +1 -1
  259. package/bundled-test-harness/assets/{read-file-for-ai-assistant-test-2GNDAHYO.js → read-file-for-ai-assistant-test-nLPp49U2.js} +4 -4
  260. package/bundled-test-harness/assets/{read-source-BjarqWPc.js → read-source-C2sP8K8Z.js} +2 -2
  261. package/bundled-test-harness/assets/{read-source-test-J_0DA5-Z.js → read-source-test-DBELJkhN.js} +4 -4
  262. package/bundled-test-harness/assets/{read-text-file-DcNZ5WyP.js → read-text-file-CACAhnsS.js} +1 -1
  263. package/bundled-test-harness/assets/{read-text-file-test-DYXrQjjo.js → read-text-file-test-CP1JuWlX.js} +4 -4
  264. package/bundled-test-harness/assets/{realm-TrRQcvne.js → realm-Dr4iygv_.js} +2 -2
  265. package/bundled-test-harness/assets/{realm-field-test-DWk3eyM5.js → realm-field-test-Cice2mYk.js} +4 -4
  266. package/bundled-test-harness/assets/{realm-index-card-id-test-DGRfegwe.js → realm-index-card-id-test-BzpozdWc.js} +1 -1
  267. package/bundled-test-harness/assets/{realm-indexing-test-Dacd_v-o.js → realm-indexing-test-C0YSXziR.js} +4 -4
  268. package/bundled-test-harness/assets/{realm-paths-test-CmX-ohTC.js → realm-paths-test-DV_g07rF.js} +1 -1
  269. package/bundled-test-harness/assets/{realm-querying-test-PrFnam40.js → realm-querying-test-B526abM0.js} +2 -2
  270. package/bundled-test-harness/assets/{realm-test-BEC9kS2u.js → realm-test-D8UN5X-w.js} +4 -4
  271. package/bundled-test-harness/assets/{reasoning-test-CKUAM1PP.js → reasoning-test-ClIOvdkX.js} +5 -5
  272. package/bundled-test-harness/assets/{recent-files-test-BQnupf2h.js → recent-files-test-C2J_dJUD.js} +2 -2
  273. package/bundled-test-harness/assets/{reindex-realm-H_WSVV8S.js → reindex-realm-C6fVI3zx.js} +1 -1
  274. package/bundled-test-harness/assets/{reindex-realm-test-B_lAlgmN.js → reindex-realm-test-DMphy1g6.js} +5 -5
  275. package/bundled-test-harness/assets/{relationship-loading-state-test-KN_1YWsk.js → relationship-loading-state-test-BWrZdLlZ.js} +3 -3
  276. package/bundled-test-harness/assets/{render-component-D1hfd-Ye.js → render-component-BII_KnyK.js} +1 -1
  277. package/bundled-test-harness/assets/{render-component-UJivgB7-.js → render-component-g_fhz2dX.js} +1 -1
  278. package/bundled-test-harness/assets/{render-error-DhmbPkQe.js → render-error-BS8ObrlR.js} +1 -1
  279. package/bundled-test-harness/assets/{render-error-test-BFK0aacW.js → render-error-test-BUAJJlUi.js} +1 -1
  280. package/bundled-test-harness/assets/{render-service-DJTSpXwH.js → render-service-tD9jJXUM.js} +2 -2
  281. package/bundled-test-harness/assets/{render-service-test-DJ4-WSUt.js → render-service-test-BKkCjErY.js} +2 -2
  282. package/bundled-test-harness/assets/{rendered-markdown-CtDl90fb.js → rendered-markdown-ColekGTF.js} +2 -2
  283. package/bundled-test-harness/assets/{rendered-markdown-test-B6NIZ9CV.js → rendered-markdown-test-B4CWIo02.js} +4 -4
  284. package/bundled-test-harness/assets/{rich-markdown-field-test-1O22gpZe.js → rich-markdown-field-test-B5u6D3Nk.js} +4 -4
  285. package/bundled-test-harness/assets/{room-message-test-tTvTm3D2.js → room-message-test-0eJSqQfu.js} +4 -4
  286. package/bundled-test-harness/assets/{runtime-common-C4VFkqFL.js → runtime-common-C7uLt5dN.js} +1 -1
  287. package/bundled-test-harness/assets/{sanitize-module-list-B_rgb68b.js → sanitize-module-list-AEPGKeo5.js} +4 -4
  288. package/bundled-test-harness/assets/{sanitize-module-list-test-C7Lr24Go.js → sanitize-module-list-test-rH6OqjKh.js} +5 -5
  289. package/bundled-test-harness/assets/{save-card-BC8zB2ly.js → save-card-DTRPVUI4.js} +2 -2
  290. package/bundled-test-harness/assets/{schema-editor-test-Dptqev7u.js → schema-editor-test-DH4MLFCD.js} +3 -3
  291. package/bundled-test-harness/assets/{schema-generation-test-D2KWt7Pv.js → schema-generation-test-BZMkX7VA.js} +3 -3
  292. package/bundled-test-harness/assets/{scrolling-test-DLKscVU_.js → scrolling-test-CFTyLG8X.js} +6 -6
  293. package/bundled-test-harness/assets/{search-DWY9zh2s.js → search-CZA7dEFS.js} +1 -1
  294. package/bundled-test-harness/assets/{search-and-choose-DnPumZQn.js → search-and-choose-BeBlVt7F.js} +4 -4
  295. package/bundled-test-harness/assets/{search-and-choose-test-BN1veYUt.js → search-and-choose-test-CcbVyp4c.js} +5 -5
  296. package/bundled-test-harness/assets/{search-cache-key-CSNMyR3o.js → search-cache-key-DrGejP2z.js} +1 -1
  297. package/bundled-test-harness/assets/{search-cache-key-test-CiLIwrHc.js → search-cache-key-test-BYt46iNT.js} +1 -1
  298. package/bundled-test-harness/assets/search-cards-CJtCe5m9.js +2 -0
  299. package/bundled-test-harness/assets/{search-cards-9Q2YJt5w.js → search-cards-SZdPvkdH.js} +2 -2
  300. package/bundled-test-harness/assets/{search-command-test-CbgNNENx.js → search-command-test-BRIJPr54.js} +3 -3
  301. package/bundled-test-harness/assets/{search-correlation-id-test-D3kMjxyB.js → search-correlation-id-test-B298Tfux.js} +2 -2
  302. package/bundled-test-harness/assets/{search-data-tBubQy1V.js → search-data-DqLTfst9.js} +1 -1
  303. package/bundled-test-harness/assets/{search-data-test-CJPFgMgm.js → search-data-test-DHV2Fd4S.js} +5 -5
  304. package/bundled-test-harness/assets/{search-google-images--4TnEd5v.js → search-google-images-DNAUMy6E.js} +2 -2
  305. package/bundled-test-harness/assets/{search-google-images-test-Izl8K73I.js → search-google-images-test-CNrazllP.js} +4 -4
  306. package/bundled-test-harness/assets/{search-in-flight-key-mBwT-GaC.js → search-in-flight-key-CkNzMiOD.js} +1 -1
  307. package/bundled-test-harness/assets/{search-in-flight-key-test-hH6KJW_h.js → search-in-flight-key-test-Dy3bU2c1.js} +1 -1
  308. package/bundled-test-harness/assets/{search-replace-block-parsing-FmIF3zsm.js → search-replace-block-parsing-CNxbJ4s9.js} +1 -1
  309. package/bundled-test-harness/assets/{search-result-header-CqxT6aTO.js → search-result-header-UauOyqjs.js} +1 -1
  310. package/bundled-test-harness/assets/{search-test-DcrFvXwI.js → search-test-DL1-gD-G.js} +5 -5
  311. package/bundled-test-harness/assets/{send-ai-assistant-message-BuBd8Mx-.js → send-ai-assistant-message-DP_3ppA-.js} +2 -2
  312. package/bundled-test-harness/assets/{send-ai-assistant-message-test-DWXRa3Y-.js → send-ai-assistant-message-test-CyEkQ5pD.js} +4 -4
  313. package/bundled-test-harness/assets/{send-bot-trigger-event-Cg-bm0R3.js → send-bot-trigger-event-Bb1z75GO.js} +2 -2
  314. package/bundled-test-harness/assets/{send-bot-trigger-event-test-CYGIA6ym.js → send-bot-trigger-event-test-CAsK28m-.js} +4 -4
  315. package/bundled-test-harness/assets/{send-request-via-proxy-CYiIpEJW.js → send-request-via-proxy-BLX5A-HL.js} +1 -1
  316. package/bundled-test-harness/assets/{send-request-via-proxy-test-cpFVaT41.js → send-request-via-proxy-test-DpMlRvPv.js} +5 -5
  317. package/bundled-test-harness/assets/{sending-test-Buf-KS5F.js → sending-test-BOeGYcTU.js} +5 -5
  318. package/bundled-test-harness/assets/{serialization-test-DJAK7xTz.js → serialization-test-gY2QQVxS.js} +5 -5
  319. package/bundled-test-harness/assets/{set-user-system-card-pThrh9fY.js → set-user-system-card-Db6rI-Qt.js} +1 -1
  320. package/bundled-test-harness/assets/{set-user-system-card-test-CAlvXhB5.js → set-user-system-card-test-BE3y5GNK.js} +4 -4
  321. package/bundled-test-harness/assets/{setup-DWTRm6-M.js → setup-B8O9JQKq.js} +2 -2
  322. package/bundled-test-harness/assets/{setup-C1J8MUEX.js → setup-BMqGUBDK.js} +1 -1
  323. package/bundled-test-harness/assets/{show-card-BEv8y5hM.js → show-card-CVJLnzLa.js} +2 -2
  324. package/bundled-test-harness/assets/{show-card-test-Bl8Oe_gX.js → show-card-test-BfJNnWMy.js} +5 -5
  325. package/bundled-test-harness/assets/{show-file-BKi5V96q.js → show-file-CyRiY_6z.js} +2 -2
  326. package/bundled-test-harness/assets/{skills-test-CDEG5JeR.js → skills-test-CqhnZxBi.js} +6 -6
  327. package/bundled-test-harness/assets/{spec-test-jvPRUjMN.js → spec-test-BUKNn_1q.js} +4 -4
  328. package/bundled-test-harness/assets/{stack-item-D6iC0SmX.js → stack-item-Bn9IwoUX.js} +1 -1
  329. package/bundled-test-harness/assets/{store-Dxz_gmhp.js → store-Di6ANQV5.js} +8 -8
  330. package/bundled-test-harness/assets/{store-add-ByTnK3u8.js → store-add-DeDtbGwk.js} +1 -1
  331. package/bundled-test-harness/assets/{store-add-test-Bm4HrP9c.js → store-add-test-BR1M-IDR.js} +5 -5
  332. package/bundled-test-harness/assets/{store-test-Bj4IuwQu.js → store-test-DaqI-HRh.js} +6 -6
  333. package/bundled-test-harness/assets/{summarize-session-500WHol8.js → summarize-session-CqSvkuVZ.js} +2 -2
  334. package/bundled-test-harness/assets/{summarize-session-test-cRvpu5lJ.js → summarize-session-test-BMg54JGF.js} +5 -5
  335. package/bundled-test-harness/assets/{svg-image-def-test-DQ8Ql3EL.js → svg-image-def-test-xNyIKRPV.js} +2 -2
  336. package/bundled-test-harness/assets/{switch-submode-kOf_nFi3.js → switch-submode-BwkCfnCZ.js} +3 -3
  337. package/bundled-test-harness/assets/{switch-submode-test-C2Y4oqpm.js → switch-submode-test-BKvpODUD.js} +5 -5
  338. package/bundled-test-harness/assets/{tests-B6EJFQkW.js → tests-x4_eRjiT.js} +243 -243
  339. package/bundled-test-harness/assets/{text-file-def-test-B6-yCZvN.js → text-file-def-test-CsXiyVfI.js} +2 -2
  340. package/bundled-test-harness/assets/{text-input-validator-test-DLg_kvR2.js → text-input-validator-test-D4s_laO7.js} +5 -5
  341. package/bundled-test-harness/assets/{text-suggestion-BxrzygIw.js → text-suggestion-CFhIq7-u.js} +1 -1
  342. package/bundled-test-harness/assets/{text-suggestion-test-5KxZro39.js → text-suggestion-test-CkLf1xuS.js} +3 -3
  343. package/bundled-test-harness/assets/{theme-card-test-hb6jQ87w.js → theme-card-test-D-6L6OfD.js} +2 -2
  344. package/bundled-test-harness/assets/{transform-cards-CrMkw0yw.js → transform-cards-D-jCQJ4T.js} +5 -5
  345. package/bundled-test-harness/assets/{transform-cards-test-DkqQcVZp.js → transform-cards-test-CRZF2gqZ.js} +6 -6
  346. package/bundled-test-harness/assets/{ts-file-def-test-CI7L_bvT.js → ts-file-def-test-CDo6ojCf.js} +2 -2
  347. package/bundled-test-harness/assets/{unregister-bot-B2kj8JBx.js → unregister-bot-D7FI7Oro.js} +1 -1
  348. package/bundled-test-harness/assets/{update-room-skills-test-D9O4Kn29.js → update-room-skills-test-BnSgVFwT.js} +5 -5
  349. package/bundled-test-harness/assets/{url-test-BpgeOWil.js → url-test-CK-HB0qu.js} +1 -1
  350. package/bundled-test-harness/assets/{use-ai-assistant-test-BP46uIwZ.js → use-ai-assistant-test-BuJXEP8H.js} +5 -5
  351. package/bundled-test-harness/assets/{utils-Cy0QY7GC.js → utils-C7xS5xXC.js} +1 -1
  352. package/bundled-test-harness/assets/{validate-realm-BB87lhM0.js → validate-realm-BbA9USE1.js} +3 -3
  353. package/bundled-test-harness/assets/{validate-realm-test-BUqQjz2C.js → validate-realm-test-Cx7MOtS8.js} +5 -5
  354. package/bundled-test-harness/assets/{wav-audio-def-test-1TPCWe08.js → wav-audio-def-test-DIo2GzQL.js} +2 -2
  355. package/bundled-test-harness/assets/{webp-image-def-test-CVGCY-QM.js → webp-image-def-test-BQsV0_De.js} +2 -2
  356. package/bundled-test-harness/assets/{workspace-BryQJQE7.js → workspace-D0smc8vv.js} +1 -1
  357. package/bundled-test-harness/assets/{workspace-chooser-delete-test-CtyIvufo.js → workspace-chooser-delete-test-peDXmnQf.js} +2 -2
  358. package/bundled-test-harness/assets/{workspace-chooser-test-C49u0Z6H.js → workspace-chooser-test-DS2RtTEF.js} +3 -3
  359. package/bundled-test-harness/assets/{workspace-delete-multiple-test-SO2KO-Rz.js → workspace-delete-multiple-test-DTbjRSzN.js} +3 -3
  360. package/bundled-test-harness/assets/{workspace-delete-summary-test-DsHrKsgn.js → workspace-delete-summary-test-B--ink4m.js} +1 -1
  361. package/bundled-test-harness/assets/{write-binary-file-DU-i8suO.js → write-binary-file-B3j05J3o.js} +2 -2
  362. package/bundled-test-harness/assets/{write-binary-file-test-CFjBRsVy.js → write-binary-file-test-A3TQ5lFn.js} +4 -4
  363. package/bundled-test-harness/assets/{write-text-file-z03Li_VD.js → write-text-file-C5LYv8hi.js} +2 -2
  364. package/bundled-test-harness/assets/{write-text-file-test-D7wxiOYm.js → write-text-file-test-D_rjNDsT.js} +4 -4
  365. package/bundled-test-harness/index.html +108 -108
  366. package/bundled-test-harness/tests/index.html +111 -111
  367. package/bundled-types/host-app/commands/index.ts +0 -42
  368. package/bundled-types/host-app/commands/screenshot-card.ts +10 -5
  369. package/package.json +3 -1
  370. package/bundled-test-harness/assets/adapter-CYIVugqe.js +0 -2
  371. package/bundled-test-harness/assets/live-test-Ly6rXYrE.js +0 -2
  372. package/bundled-test-harness/assets/search-cards-CEkx06L6.js +0 -2
  373. package/bundled-types/host-app/commands/listing-action-init.ts +0 -105
  374. package/bundled-types/host-app/commands/listing-create.ts +0 -663
  375. package/bundled-types/host-app/commands/listing-generate-example.ts +0 -92
  376. package/bundled-types/host-app/commands/listing-install.ts +0 -241
  377. package/bundled-types/host-app/commands/listing-remix.ts +0 -149
  378. package/bundled-types/host-app/commands/listing-update-specs.ts +0 -116
  379. package/bundled-types/host-app/commands/listing-use.ts +0 -108
@@ -1,663 +0,0 @@
1
- import { service } from '@ember/service';
2
-
3
- import type {
4
- LooseSingleCardDocument,
5
- ResolvedCodeRef,
6
- } from '@cardstack/runtime-common';
7
- import {
8
- isCardInstance,
9
- rri,
10
- SupportedMimeType,
11
- isFieldDef,
12
- isResolvedCodeRef,
13
- trimExecutableExtension,
14
- } from '@cardstack/runtime-common';
15
- import {
16
- loadCardDef,
17
- getAncestor,
18
- identifyCard,
19
- } from '@cardstack/runtime-common/code-ref';
20
-
21
- import type * as CardAPI from 'https://cardstack.com/base/card-api';
22
- import type * as BaseCommandModule from 'https://cardstack.com/base/command';
23
-
24
- import type { Spec } from 'https://cardstack.com/base/spec';
25
-
26
- import HostBaseCommand from '../lib/host-base-command';
27
-
28
- import {
29
- findDeclarationByName,
30
- isComponentDeclaration,
31
- } from '../services/module-contents-service';
32
-
33
- import AuthedFetchCommand from './authed-fetch';
34
- import CreateSpecCommand from './create-specs';
35
- import GenerateThumbnailCommand from './generate-thumbnail';
36
- import GetCardCommand from './get-card';
37
- import GetCatalogRealmIdentifiersCommand from './get-catalog-realm-identifiers';
38
- import GetRealmOfResourceIdentifierCommand from './get-realm-of-resource-identifier';
39
- import OneShotLlmRequestCommand from './one-shot-llm-request';
40
- import SanitizeModuleListCommand from './sanitize-module-list';
41
- import SearchAndChooseCommand from './search-and-choose';
42
- import { SearchCardsByTypeAndTitleCommand } from './search-cards';
43
- import StoreAddCommand from './store-add';
44
-
45
- import type ModuleContentsService from '../services/module-contents-service';
46
-
47
- type ListingType = 'card' | 'skill' | 'theme' | 'field' | 'component';
48
-
49
- const BASE_CARD_API_MODULE = 'https://cardstack.com/base/card-api';
50
- const BASE_SKILL_MODULE = 'https://cardstack.com/base/skill';
51
-
52
- const listingSubClass: Record<ListingType, string> = {
53
- card: 'CardListing',
54
- skill: 'SkillListing',
55
- theme: 'ThemeListing',
56
- field: 'FieldListing',
57
- component: 'ComponentListing',
58
- };
59
-
60
- export default class ListingCreateCommand extends HostBaseCommand<
61
- typeof BaseCommandModule.ListingCreateInput,
62
- typeof BaseCommandModule.ListingCreateResult
63
- > {
64
- @service declare private moduleContentsService: ModuleContentsService;
65
-
66
- static actionVerb = 'Create';
67
- description =
68
- 'Create a catalog listing for a card, field, skill, theme, or component';
69
-
70
- private async getCatalogRealm(): Promise<string> {
71
- const { realmIdentifiers } = await new GetCatalogRealmIdentifiersCommand(
72
- this.commandContext,
73
- ).execute();
74
- let catalogRealm = realmIdentifiers.find((realm: string) =>
75
- realm.endsWith('/catalog/'),
76
- );
77
- if (!catalogRealm) {
78
- throw new Error(
79
- 'Catalog realm not found. No available realm URL ends with /catalog/',
80
- );
81
- }
82
- return catalogRealm;
83
- }
84
-
85
- async getInputType() {
86
- let commandModule = await this.loadCommandModule();
87
- const { ListingCreateInput } = commandModule;
88
- return ListingCreateInput;
89
- }
90
-
91
- requireInputFields = ['codeRef', 'targetRealm'];
92
-
93
- private async sanitizeModuleList(
94
- modulesToCreate: Iterable<string>,
95
- ): Promise<string[]> {
96
- const { moduleIdentifiers } = await new SanitizeModuleListCommand(
97
- this.commandContext,
98
- ).execute({ moduleIdentifiers: Array.from(modulesToCreate) });
99
- return moduleIdentifiers;
100
- }
101
-
102
- protected async run(
103
- input: BaseCommandModule.ListingCreateInput,
104
- ): Promise<BaseCommandModule.ListingCreateResult> {
105
- let { openCardIds, codeRef, targetRealm } = input;
106
-
107
- if (!codeRef) {
108
- throw new Error('codeRef is required');
109
- }
110
- if (!isResolvedCodeRef(codeRef)) {
111
- throw new Error('codeRef must be a ResolvedCodeRef with module and name');
112
- }
113
- if (!targetRealm) {
114
- throw new Error('Target Realm is required');
115
- }
116
-
117
- let listingType = await this.guessListingType(codeRef);
118
- const catalogRealm = await this.getCatalogRealm();
119
-
120
- let relationships: Record<string, { links: { self: string } }> = {};
121
- if (openCardIds && openCardIds.length > 0) {
122
- openCardIds.forEach((id, index) => {
123
- relationships[`examples.${index}`] = { links: { self: id } };
124
- });
125
- }
126
-
127
- const listingDoc: LooseSingleCardDocument = {
128
- data: {
129
- type: 'card',
130
- relationships,
131
- meta: {
132
- adoptsFrom: {
133
- module: rri(`${catalogRealm}catalog-app/listing/listing`),
134
- name: listingSubClass[listingType],
135
- },
136
- },
137
- },
138
- };
139
- const listing = await new StoreAddCommand(this.commandContext).execute({
140
- document: listingDoc,
141
- realm: targetRealm,
142
- });
143
-
144
- const commandModule = await this.loadCommandModule();
145
- const listingCard = listing as CardAPI.CardDef;
146
- const firstOpenCardId = openCardIds?.[0];
147
-
148
- const backgroundTasks = [
149
- {
150
- name: 'autoPatchName',
151
- promise: this.autoPatchName(listingCard, codeRef),
152
- },
153
- {
154
- name: 'autoPatchSummary',
155
- promise: this.autoPatchSummary(listingCard, codeRef),
156
- },
157
- { name: 'autoLinkTag', promise: this.autoLinkTag(listingCard, codeRef) },
158
- {
159
- name: 'autoLinkCategory',
160
- promise: this.autoLinkCategory(listingCard, codeRef),
161
- },
162
- { name: 'autoLinkLicense', promise: this.autoLinkLicense(listingCard) },
163
- {
164
- name: 'autoLinkExample',
165
- promise: this.autoLinkExample(listingCard, codeRef, openCardIds),
166
- },
167
- {
168
- name: 'linkSpecs',
169
- promise: this.linkSpecs(
170
- listingCard,
171
- targetRealm,
172
- firstOpenCardId ?? codeRef?.module,
173
- codeRef.module,
174
- codeRef,
175
- ),
176
- },
177
- ];
178
-
179
- const backgroundWork = Promise.allSettled(
180
- backgroundTasks.map((t) => t.promise),
181
- ).then((results) => {
182
- results.forEach((result, i) => {
183
- if (result.status === 'rejected') {
184
- console.warn(
185
- `Background autopatch failed [${backgroundTasks[i].name}]:`,
186
- result.reason,
187
- );
188
- }
189
- });
190
- });
191
-
192
- // Fire-and-forget thumbnail generation (external API call, should not block modal)
193
- this.autoGenerateThumbnail(listingCard, codeRef, targetRealm).catch((e) => {
194
- console.warn('Failed to auto-generate thumbnail:', e);
195
- });
196
-
197
- const { ListingCreateResult } = commandModule;
198
- const result = new ListingCreateResult({ listing });
199
- (result as any).backgroundWork = backgroundWork;
200
- return result;
201
- }
202
-
203
- private async guessListingType(
204
- codeRef: ResolvedCodeRef,
205
- ): Promise<ListingType> {
206
- // A Glimmer component isn't a card/field def, so loadCardDef can't classify
207
- // it — detect it from the module's declarations before falling through.
208
- if (await this.isComponentExport(codeRef)) {
209
- return 'component';
210
- }
211
-
212
- let cardDef;
213
- try {
214
- cardDef = await loadCardDef(codeRef, {
215
- loader: this.loaderService.loader,
216
- });
217
- } catch {
218
- return 'card';
219
- }
220
-
221
- if (isFieldDef(cardDef)) {
222
- return 'field';
223
- }
224
- if (this.isAncestor(cardDef, BASE_CARD_API_MODULE, 'Theme')) {
225
- return 'theme';
226
- }
227
- if (this.isAncestor(cardDef, BASE_SKILL_MODULE, 'Skill')) {
228
- return 'skill';
229
- }
230
- return 'card';
231
- }
232
-
233
- private async isComponentExport(codeRef: ResolvedCodeRef): Promise<boolean> {
234
- try {
235
- let declarations = await this.moduleContentsService.assemble(
236
- codeRef.module,
237
- );
238
- let declaration = findDeclarationByName(codeRef.name, declarations);
239
- return declaration ? isComponentDeclaration(declaration) : false;
240
- } catch {
241
- return false;
242
- }
243
- }
244
-
245
- private isAncestor(
246
- cardDef: CardAPI.BaseDefConstructor,
247
- targetModule: string,
248
- targetName: string,
249
- ): boolean {
250
- let current: CardAPI.BaseDefConstructor | undefined = cardDef;
251
- while (current) {
252
- const ref = identifyCard(current);
253
- if (
254
- ref &&
255
- !('type' in ref) &&
256
- ref.module === targetModule &&
257
- ref.name === targetName
258
- ) {
259
- return true;
260
- }
261
- current = getAncestor(current) ?? undefined;
262
- }
263
- return false;
264
- }
265
-
266
- private async linkSpecs(
267
- listing: CardAPI.CardDef,
268
- targetRealm: string,
269
- resourceUrl: string, // can be module or card instance id
270
- moduleUrl: string, // the module URL of the card type being listed
271
- codeRef: ResolvedCodeRef, // the specific export being listed
272
- ): Promise<Spec[]> {
273
- const { realmIdentifier: resourceRealmIdentifier } =
274
- await new GetRealmOfResourceIdentifierCommand(
275
- this.commandContext,
276
- ).execute({ resourceIdentifier: resourceUrl });
277
- const resourceRealm = resourceRealmIdentifier || targetRealm;
278
- const depUrl = `${resourceRealm}_dependencies?url=${encodeURIComponent(resourceUrl)}`;
279
- const { ok, body: jsonApiResponse } = await new AuthedFetchCommand(
280
- this.commandContext,
281
- ).execute({ url: depUrl, acceptHeader: SupportedMimeType.JSONAPI });
282
-
283
- if (!ok) {
284
- console.warn('Failed to fetch dependencies for specs');
285
- (listing as any).specs = [];
286
- return [];
287
- }
288
-
289
- // Collect all modules (main + dependencies). Deduplication happens in sanitizeModuleList().
290
- // The _dependencies endpoint excludes the queried resource itself, so we
291
- // explicitly include the module URL to ensure a spec is created for it.
292
- const modulesToCreate: string[] = [moduleUrl];
293
-
294
- (
295
- jsonApiResponse as {
296
- data?: Array<{
297
- attributes?: { dependencies?: string[] };
298
- }>;
299
- }
300
- ).data?.forEach((entry) => {
301
- if (entry.attributes?.dependencies) {
302
- modulesToCreate.push(...entry.attributes.dependencies);
303
- }
304
- });
305
-
306
- const sanitizedModules = await this.sanitizeModuleList(modulesToCreate);
307
-
308
- // Create specs for all unique modules
309
- const uniqueSpecsById = new Map<string, Spec>();
310
-
311
- if (sanitizedModules.length > 0) {
312
- const createSpecCommand = new CreateSpecCommand(this.commandContext);
313
- const normalizedModuleUrl = trimExecutableExtension(
314
- rri(new URL(moduleUrl).href),
315
- );
316
- const specResults = await Promise.all(
317
- sanitizedModules.map((module) => {
318
- // For the main module, use the specific codeRef (with export name) so
319
- // only the listed export gets a spec, not every export in the file.
320
- // Normalize both sides before comparing — _dependencies can return
321
- // URLs with executable extensions (e.g. .gts) while moduleUrl/codeRef.module
322
- // is often extensionless, so a bare string comparison would create
323
- // duplicate specs for the same source file.
324
- const normalizedModule = trimExecutableExtension(
325
- rri(new URL(module).href),
326
- );
327
- const input =
328
- normalizedModule === normalizedModuleUrl
329
- ? { codeRef, targetRealm, autoGenerateReadme: true }
330
- : { module, targetRealm, autoGenerateReadme: true };
331
- return createSpecCommand.execute(input).catch((e: unknown) => {
332
- console.warn('Failed to create spec(s) for', module, e);
333
- return undefined;
334
- });
335
- }),
336
- );
337
-
338
- specResults.forEach((result) => {
339
- result?.specs?.forEach((spec) => {
340
- if (spec?.id) {
341
- uniqueSpecsById.set(spec.id, spec);
342
- }
343
- });
344
- });
345
- }
346
-
347
- const specs = Array.from(uniqueSpecsById.values());
348
- (listing as any).specs = specs;
349
- return specs;
350
- }
351
-
352
- // --- Linking helpers now use SearchAndChooseCommand ---
353
- private async chooseCards(
354
- params: {
355
- candidateTypeCodeRef: ResolvedCodeRef;
356
- sourceContextCodeRef?: ResolvedCodeRef;
357
- },
358
- opts?: {
359
- max?: number;
360
- additionalSystemPrompt?: string;
361
- },
362
- ) {
363
- const command = new SearchAndChooseCommand(this.commandContext);
364
- const result = await command.execute({
365
- candidateTypeCodeRef: params.candidateTypeCodeRef,
366
- sourceContextCodeRef: params.sourceContextCodeRef,
367
- max: opts?.max,
368
- additionalSystemPrompt: opts?.additionalSystemPrompt,
369
- });
370
- return result.selectedCards ?? [];
371
- }
372
-
373
- private async autoPatchName(
374
- listing: CardAPI.CardDef,
375
- codeRef: ResolvedCodeRef,
376
- ) {
377
- const name = await this.getStringPatch({
378
- codeRef,
379
- systemPrompt:
380
- 'You are a concise and accurate summarization system. You read a Cardstack card/field definition source file and create a concise catalog listing title. Respond ONLY with the title text—no quotes, no JSON, no markdown, and no extra commentary.',
381
- userPrompt: [
382
- `Generate a catalog listing title for the definition referenced by:`,
383
- `- module: ${codeRef.module}`,
384
- `- exportName: ${codeRef.name}`,
385
- `Use ONLY the attached module source shown below (the file content).`,
386
- `Focus on the export named "${codeRef.name}" (ignore other exports).`,
387
- ].join('\n'),
388
- });
389
- if (name) {
390
- (listing as any).name = name;
391
- }
392
- }
393
-
394
- private async autoPatchSummary(
395
- listing: CardAPI.CardDef,
396
- codeRef: ResolvedCodeRef,
397
- ) {
398
- const summary = await this.getStringPatch({
399
- codeRef,
400
- systemPrompt:
401
- 'You are a concise and accurate summarization system. You read a Cardstack card/field definition source file and write a concise spec-style summary. Output ONLY the summary text—no quotes, no JSON, no markdown, and no extra commentary.',
402
- userPrompt: [
403
- `Generate a README-style catalog listing summary for the definition referenced by:`,
404
- `- module: ${codeRef.module}`,
405
- `- exportName: ${codeRef.name}`,
406
- `Use ONLY the attached module source shown below (the file content).`,
407
- `Focus on the export named "${codeRef.name}" (ignore other exports).`,
408
- `Focus on what this listing (app/card/field/skill/theme) does and its primary purpose. Avoid implementation details and marketing fluff.`,
409
- ].join('\n'),
410
- });
411
- if (summary) {
412
- (listing as any).summary = summary;
413
- }
414
- }
415
-
416
- private async autoLinkExample(
417
- listing: CardAPI.CardDef,
418
- codeRef: ResolvedCodeRef,
419
- openCardIds?: string[],
420
- ) {
421
- const existingExamples = Array.isArray((listing as any).examples)
422
- ? ((listing as any).examples as CardAPI.CardDef[])
423
- : [];
424
- const uniqueById = new Map<string, CardAPI.CardDef>();
425
- const addCard = (card?: CardAPI.CardDef) => {
426
- if (!card || typeof card.id !== 'string') {
427
- return;
428
- }
429
- if (uniqueById.has(card.id)) {
430
- return;
431
- }
432
- uniqueById.set(card.id, card);
433
- };
434
-
435
- for (const existing of existingExamples) {
436
- addCard(existing);
437
- }
438
-
439
- if (openCardIds && openCardIds.length > 0) {
440
- await Promise.all(
441
- openCardIds.map(async (openCardId) => {
442
- try {
443
- const instance = await new GetCardCommand(
444
- this.commandContext,
445
- ).execute({ cardId: openCardId });
446
- if (isCardInstance(instance)) {
447
- addCard(instance as CardAPI.CardDef);
448
- } else {
449
- console.warn(
450
- 'autoLinkExample: openCardId is not a card instance',
451
- { openCardId },
452
- );
453
- }
454
- } catch (error) {
455
- console.warn('autoLinkExample: failed to load openCardId', {
456
- openCardId,
457
- error,
458
- });
459
- }
460
- }),
461
- );
462
- } else {
463
- // If no openCardIds were provided, attempt to find any existing instance of this type.
464
- try {
465
- const search = new SearchCardsByTypeAndTitleCommand(
466
- this.commandContext,
467
- );
468
- const result = await search.execute({ type: codeRef });
469
- const instances = (result as any)?.instances as unknown;
470
- if (Array.isArray(instances)) {
471
- const first = instances.find(
472
- (c: any) => c && typeof c.id === 'string' && isCardInstance(c),
473
- );
474
- if (first) {
475
- addCard(first as CardAPI.CardDef);
476
- }
477
- }
478
- } catch (error) {
479
- console.warn(
480
- 'autoLinkExample: failed to search for an example instance',
481
- { codeRef, error },
482
- );
483
- }
484
- }
485
-
486
- // Only auto-fill additional examples when the user didn't explicitly choose
487
- const userExplicitlyChose = openCardIds && openCardIds.length > 0;
488
- const MAX_EXAMPLES = 4;
489
- if (
490
- !userExplicitlyChose &&
491
- codeRef &&
492
- uniqueById.size > 0 &&
493
- uniqueById.size < MAX_EXAMPLES
494
- ) {
495
- try {
496
- const existingIds = Array.from(uniqueById.keys());
497
- const additionalExamples = await this.chooseCards(
498
- {
499
- candidateTypeCodeRef: codeRef,
500
- },
501
- {
502
- max: Math.max(1, MAX_EXAMPLES - existingIds.length),
503
- additionalSystemPrompt: [
504
- 'Prefer examples that showcase common or high-impact use cases.',
505
- existingIds.length
506
- ? `Do not include any id already linked: ${existingIds.join(', ')}.`
507
- : '',
508
- 'Return [] if nothing relevant is found.',
509
- ]
510
- .filter(Boolean)
511
- .join(' '),
512
- },
513
- );
514
- for (const card of additionalExamples) {
515
- addCard(card as CardAPI.CardDef);
516
- }
517
- } catch (error) {
518
- console.warn('Failed to auto-link additional examples', {
519
- codeRef,
520
- error,
521
- });
522
- }
523
- }
524
- (listing as any).examples = Array.from(uniqueById.values());
525
- }
526
-
527
- private async autoLinkLicense(listing: CardAPI.CardDef) {
528
- const catalogRealm = await this.getCatalogRealm();
529
- const selected = await this.chooseCards({
530
- candidateTypeCodeRef: {
531
- module: `${catalogRealm}catalog-app/listing/license`,
532
- name: 'License',
533
- } as ResolvedCodeRef,
534
- });
535
- (listing as any).license = selected[0];
536
- }
537
-
538
- private async autoLinkTag(
539
- listing: CardAPI.CardDef,
540
- codeRef: ResolvedCodeRef,
541
- ) {
542
- const catalogRealm = await this.getCatalogRealm();
543
- const selected = await this.chooseCards(
544
- {
545
- candidateTypeCodeRef: {
546
- module: `${catalogRealm}catalog-app/listing/tag`,
547
- name: 'Tag',
548
- } as ResolvedCodeRef,
549
- sourceContextCodeRef: codeRef,
550
- },
551
- {
552
- max: 1,
553
- additionalSystemPrompt:
554
- 'You are selecting from an existing list of catalog tags. ' +
555
- "Choose the most specific descriptive tag that describes the card's subject matter, use case, or domain. " +
556
- 'If no tag clearly fits the subject matter, select a Source/Origin tag as a fallback (From tag pools). ' +
557
- 'Return [] only if no appropriate tag exists.',
558
- },
559
- );
560
- (listing as any).tags = selected;
561
- }
562
-
563
- private async autoLinkCategory(
564
- listing: CardAPI.CardDef,
565
- codeRef: ResolvedCodeRef,
566
- ) {
567
- const catalogRealm = await this.getCatalogRealm();
568
- const selected = await this.chooseCards(
569
- {
570
- candidateTypeCodeRef: {
571
- module: `${catalogRealm}catalog-app/listing/category`,
572
- name: 'Category',
573
- } as ResolvedCodeRef,
574
- sourceContextCodeRef: codeRef,
575
- },
576
- {
577
- max: 1,
578
- additionalSystemPrompt:
579
- 'You are selecting from an existing list of catalog categories. ' +
580
- "Choose the most specific descriptive category that matches the card's main purpose. " +
581
- 'Return [] if no category clearly fits.',
582
- },
583
- );
584
- (listing as any).categories = selected;
585
- }
586
-
587
- private async autoGenerateThumbnail(
588
- listing: CardAPI.CardDef,
589
- codeRef: ResolvedCodeRef,
590
- targetRealm: string,
591
- ) {
592
- if (!listing.id) {
593
- return;
594
- }
595
- const prompt = `Create a square thumbnail for "${codeRef.name}". Top 70%: large centered flat icon (simple, bold, minimal, slightly angled/layered if needed). Bottom 30%: "${codeRef.name}" in big, bold, uppercase sans-serif text. Style: flat vector, solid vivid background, 2–3 colors max. Icon should be white or light-colored, clean geometric shapes, highly recognizable. No gradients, no shadows, no borders, no clutter. Must be clear at small sizes.`;
596
-
597
- await new GenerateThumbnailCommand(this.commandContext).execute({
598
- prompt,
599
- targetRealmIdentifier: targetRealm,
600
- targetPath: 'ListingThumbnails', // Wrap all thumbnails in a "ListingThumbnails" folder to keep the realm tidy
601
- targetCardId: listing.id,
602
- cardName: codeRef.name,
603
- });
604
- }
605
-
606
- private async getStringPatch(opts: {
607
- systemPrompt: string;
608
- userPrompt: string;
609
- codeRef?: ResolvedCodeRef;
610
- }): Promise<string | undefined> {
611
- const { systemPrompt, userPrompt, codeRef } = opts;
612
- const oneShot = new OneShotLlmRequestCommand(this.commandContext);
613
- const result = await oneShot.execute({
614
- ...(codeRef ? { codeRef } : {}),
615
- systemPrompt,
616
- userPrompt,
617
- llmModel: 'openai/gpt-4.1-nano',
618
- });
619
- if (!result.output) return undefined;
620
- // We don't strictly need the key now; keep signature for compatibility.
621
- return parseResponseToString(result.output);
622
- }
623
- }
624
-
625
- // Parse an AI response into a concise string (e.g. title/summary first line)
626
- // - Strips markdown code fences
627
- // - If JSON with a single string property, returns that value
628
- // - Falls back to first non-empty line
629
- // - Truncates to maxLength
630
- function parseResponseToString(
631
- response?: string,
632
- maxLength: number = 1000,
633
- ): string | undefined {
634
- if (!response) return undefined;
635
- let text = response.trim();
636
- if (!text) return undefined;
637
- if (text.startsWith('{') || text.startsWith('[')) {
638
- try {
639
- const parsed = JSON.parse(text);
640
- if (typeof parsed === 'string') {
641
- return parsed.slice(0, maxLength);
642
- }
643
- if (Array.isArray(parsed)) {
644
- const first = parsed.find((v) => typeof v === 'string');
645
- if (first) return first.slice(0, maxLength);
646
- return undefined;
647
- }
648
- if (parsed && typeof parsed === 'object') {
649
- for (const v of Object.values(parsed as any)) {
650
- if (typeof v === 'string' && v.trim()) {
651
- return v.trim().slice(0, maxLength);
652
- }
653
- }
654
- return undefined;
655
- }
656
- } catch {
657
- // ignore parse errors and fall through
658
- }
659
- }
660
- const firstLine = text.split(/\s*\n\s*/)[0];
661
- if (!firstLine) return undefined;
662
- return firstLine.slice(0, maxLength);
663
- }