@myagentroam/server 0.13.6 → 0.13.8

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 (409) hide show
  1. package/node_modules/@myagentroam/protocol/dist/composer-tags.d.ts +431 -5
  2. package/node_modules/@myagentroam/protocol/dist/composer-tags.js +88 -5
  3. package/node_modules/@myagentroam/protocol/dist/direct-transfer.d.ts +52 -52
  4. package/node_modules/@myagentroam/protocol/dist/index.d.ts +1692 -1684
  5. package/node_modules/@myagentroam/protocol/dist/index.js +2 -0
  6. package/node_modules/@myagentroam/protocol/dist/mcp.d.ts +6 -6
  7. package/node_modules/@myagentroam/protocol/dist/model-usage.d.ts +12 -12
  8. package/node_modules/@myagentroam/protocol/dist/session-shares.d.ts +6 -6
  9. package/node_modules/@myagentroam/protocol/dist/skill.d.ts +2 -2
  10. package/node_modules/@myagentroam/protocol/dist/workbench-notification.d.ts +6 -6
  11. package/node_modules/@myagentroam/protocol/package.json +1 -1
  12. package/node_modules/@myagentroam/server-core/dist/model-usage-record.d.ts +1 -1
  13. package/node_modules/@myagentroam/server-core/dist/workbench-notification-service.d.ts +1 -1
  14. package/node_modules/@myagentroam/server-core/package.json +2 -2
  15. package/node_modules/@myagentroam-enterprise/server-implementation/package.json +3 -3
  16. package/package.json +6 -6
  17. package/web/assets/{AuditManagementPage-DdhzZJJz.js → AuditManagementPage-DHf_d3lr.js} +1 -1
  18. package/web/assets/{BusyIndicator-DJEYrwl2.js → BusyIndicator-CJepRD30.js} +1 -1
  19. package/web/assets/{CodeFileEditor-t-S2RxFj.js → CodeFileEditor-2B9V-ZHh.js} +14 -14
  20. package/web/assets/{CodeFileEditor-LbH8kxiW.css → CodeFileEditor-B8IGF27H.css} +1 -1
  21. package/web/assets/{ConversationTemplateManagementPage-DtnCxKPr.js → ConversationTemplateManagementPage-C2Fl5gpu.js} +1 -1
  22. package/web/assets/{ConversationTemplateManagementPage-8cWdT1rl.js → ConversationTemplateManagementPage-DhjVzYYH.js} +1 -1
  23. package/web/assets/{EnterpriseUserManagementPage-CVpJzsVL.js → EnterpriseUserManagementPage-D7UBm6rn.js} +1 -1
  24. package/web/assets/{EnvironmentSecretManager-DaMtII6x.js → EnvironmentSecretManager-6TsEyKME.js} +1 -1
  25. package/web/assets/{FilePreviewLoading-CqXCVUDH.js → FilePreviewLoading-xWmLA-hX.js} +2 -2
  26. package/web/assets/HtmlPreviewFrame-BWUJugCe.js +7 -0
  27. package/web/assets/{HtmlPreviewFrame-CXd4x0y-.css → HtmlPreviewFrame-D_Jf4aL-.css} +1 -1
  28. package/web/assets/{LicenseManagementPage-C-25sen8.js → LicenseManagementPage-mbLC76Sb.js} +1 -1
  29. package/web/assets/{ManagementPagination-BwZo73aV.js → ManagementPagination-COGUI_6N.js} +1 -1
  30. package/web/assets/{MarAgentModelManagementPage-DkncBptD.js → MarAgentModelManagementPage-C0NTB_eR.js} +1 -1
  31. package/web/assets/{MarAgentModelManagementPage-B9lHTQtV.js → MarAgentModelManagementPage-D_LEBwAO.js} +1 -1
  32. package/web/assets/{MarIcon-0cJTzTai.js → MarIcon-7ATHlb9_.js} +1 -1
  33. package/web/assets/{MarkdownFilePreview-CnWvYfKN.js → MarkdownFilePreview-CGEzm91C.js} +2 -2
  34. package/web/assets/{McpDetailsDialog-nt3by9E1.js → McpDetailsDialog-DKlmenK5.js} +1 -1
  35. package/web/assets/{McpSourceManagementPage-Bg2wxoSB.js → McpSourceManagementPage-BRSoTQJy.js} +1 -1
  36. package/web/assets/{McpSourceManagementPage-BVjVO0Tb.js → McpSourceManagementPage-DXrw10o-.js} +1 -1
  37. package/web/assets/{NodeDetailsDialogs-D4wBwUzA.js → NodeDetailsDialogs-BXghz6Vq.js} +1 -1
  38. package/web/assets/NodeManagementPage-B6sbUg2M.js +1 -0
  39. package/web/assets/NodeManagementPage-BywB3ak3.js +1 -0
  40. package/web/assets/{OAuthManagementPage-D9cBB-vX.js → OAuthManagementPage-BzDB8DRk.js} +1 -1
  41. package/web/assets/{OrganizationManagementPage-N8HwbTY5.js → OrganizationManagementPage-DIKK7Apz.js} +1 -1
  42. package/web/assets/{ResourceManagementPanel-D80V3ZdZ.js → ResourceManagementPanel-CAAVs5tS.js} +1 -1
  43. package/web/assets/{ResourceManagementPanel.vue_vue_type_script_setup_true_lang-DfCWa6fA.js → ResourceManagementPanel.vue_vue_type_script_setup_true_lang-SibtEfaZ.js} +1 -1
  44. package/web/assets/SecretManagementPage-BoxMy2kF.js +1 -0
  45. package/web/assets/{SecretManagementPage-tsgbjSvn.js → SecretManagementPage-NWQ8ilK9.js} +1 -1
  46. package/web/assets/{SecretManagementPage.vue_vue_type_script_setup_true_lang-CmSoYQ3n.js → SecretManagementPage.vue_vue_type_script_setup_true_lang-Dv-Lkrgj.js} +1 -1
  47. package/web/assets/SessionSharePage-B9Ig9miU.css +1 -0
  48. package/web/assets/SessionSharePage-PXCto604.js +2 -0
  49. package/web/assets/{SettingsContent-WLH3DkgW.js → SettingsContent-lmlrCtzr.js} +1 -1
  50. package/web/assets/{SettingsContent-Dsw7sGr4.js → SettingsContent-t4Hhk6bN.js} +1 -1
  51. package/web/assets/{SkillCenterPage-yDU-t2cT.js → SkillCenterPage-BGdx7_t-.js} +1 -1
  52. package/web/assets/SkillCenterPage-yUFJvXBZ.js +1 -0
  53. package/web/assets/{SkillDetailsDialog-BUfNxAjf.js → SkillDetailsDialog-Ck3sWYTZ.js} +1 -1
  54. package/web/assets/{SkillSourceManagementPage-BCHgTDXJ.js → SkillSourceManagementPage-DCzjgChL.js} +1 -1
  55. package/web/assets/{SkillSourceManagementPage-B7yjgXR8.js → SkillSourceManagementPage-MfPC03pb.js} +1 -1
  56. package/web/assets/{StandaloneFilePreviewPage-DRGcF74V.css → StandaloneFilePreviewPage-Bv_3Hwts.css} +1 -1
  57. package/web/assets/StandaloneFilePreviewPage-Bzrh7-zx.js +1 -0
  58. package/web/assets/SystemConfigurationPage-0EO7rEmk.js +1 -0
  59. package/web/assets/{SystemConfigurationPage-C2Ecb0Su.js → SystemConfigurationPage-C8ekLRUo.js} +1 -1
  60. package/web/assets/{SystemInformationPage-CBWjqG43.js → SystemInformationPage-O2QdJcSO.js} +1 -1
  61. package/web/assets/{TerminalTabView-CeX2SVcm.js → TerminalTabView-DvEnQt4Q.js} +1 -1
  62. package/web/assets/WorkbenchPage-BuXwAqL9.css +1 -0
  63. package/web/assets/WorkbenchPage-C03cutMf.js +22 -0
  64. package/web/assets/WorkspaceManagementPage-DeDYwU3j.js +1 -0
  65. package/web/assets/WorkspaceManagementPage-Ijsn-mPC.js +1 -0
  66. package/web/assets/{_baseIteratee-CnCgfzqY.js → _baseIteratee-eYBSuzub.js} +1 -1
  67. package/web/assets/{abnfDiagram-VCTEODGH-C8MLlCYr.js → abnfDiagram-VCTEODGH-b26cs6fq.js} +1 -1
  68. package/web/assets/{advancedFormat-tqE8I04X.js → advancedFormat-CSQIetpu.js} +1 -1
  69. package/web/assets/{arc-ChGPMlfM.js → arc-0gq-FCD-.js} +1 -1
  70. package/web/assets/{architectureDiagram-5GKGNRK7-UNKWS80q.js → architectureDiagram-5GKGNRK7-BkGnMYjk.js} +1 -1
  71. package/web/assets/{blockDiagram-OSKFZWR5-DaoKTWzi.js → blockDiagram-OSKFZWR5-Cxoqg89Y.js} +1 -1
  72. package/web/assets/{c4Diagram-7LVT6UL2-DeJ38tJ4.js → c4Diagram-7LVT6UL2-CAdK6Y96.js} +1 -1
  73. package/web/assets/{catalog-ownership-service-ppl9SdO8.js → catalog-ownership-service-PJaj-KyM.js} +1 -1
  74. package/web/assets/{catalog-page-service-CA6TP1Er.js → catalog-page-service-YyYk6Ggw.js} +1 -1
  75. package/web/assets/channel-C8Lmpt34.js +1 -0
  76. package/web/assets/{chunk-2Q5K7J3B-Cie4-T_4.js → chunk-2Q5K7J3B-BOp-yla_.js} +1 -1
  77. package/web/assets/{chunk-5VM5RSS4-C02e2HuJ.js → chunk-5VM5RSS4-BuyWVwKe.js} +1 -1
  78. package/web/assets/{chunk-F27PBJKO-CYE4axjh.js → chunk-F27PBJKO-Cx18VPfs.js} +1 -1
  79. package/web/assets/{chunk-HLEWEB6X-Qcd3DJvW.js → chunk-HLEWEB6X-C5g9_TfO.js} +1 -1
  80. package/web/assets/{chunk-JWPE2WC7-BIlv53mX.js → chunk-JWPE2WC7-Rjhz-D2X.js} +1 -1
  81. package/web/assets/{chunk-POPQ4Y6H-C1FzI22y.js → chunk-POPQ4Y6H--VZI-f_3.js} +1 -1
  82. package/web/assets/{chunk-SVP7TREG-B5A4JoXo.js → chunk-SVP7TREG-BEjnZUJI.js} +1 -1
  83. package/web/assets/{chunk-XXDRQBXY-FdosaHEW.js → chunk-XXDRQBXY-CKr0cjux.js} +1 -1
  84. package/web/assets/{chunk-ZLD2IHE6-BzhAoouo.js → chunk-ZLD2IHE6-L7hK5KvT.js} +1 -1
  85. package/web/assets/classDiagram-CYGNFDIV-DKDqMZKD.js +1 -0
  86. package/web/assets/classDiagram-v2-TLXNO2FR-DKDqMZKD.js +1 -0
  87. package/web/assets/{conversation-history-D9993EDO.js → conversation-history-Crx4ncHc.js} +1 -1
  88. package/web/assets/{cose-bilkent-JH36ORCC-C4ZjK8dC.js → cose-bilkent-JH36ORCC-CRvOV0K8.js} +1 -1
  89. package/web/assets/{cynefin-OW5HDTMX-D-6QhPjX.js → cynefin-OW5HDTMX-CF1dNtGE.js} +1 -1
  90. package/web/assets/{cynefinDiagram-5FMLGOSQ-Bwsk5LdU.js → cynefinDiagram-5FMLGOSQ-Dw7WCbhJ.js} +1 -1
  91. package/web/assets/{dagre-OS7QT2EB-DoA_-lbd.js → dagre-OS7QT2EB-DDQAautM.js} +1 -1
  92. package/web/assets/{diagram-S7CK7UJ4-sgObxZyi.js → diagram-S7CK7UJ4-CV9I70h1.js} +1 -1
  93. package/web/assets/{diagram-UQ7AKVKN-BdMjAaVk.js → diagram-UQ7AKVKN-C5yw9_lD.js} +1 -1
  94. package/web/assets/{diagram-VSXAHHWV-BCH9zwo1.js → diagram-VSXAHHWV-BEyCZDi6.js} +1 -1
  95. package/web/assets/{diagram-VX7I27RA-Z6LSJKeQ.js → diagram-VX7I27RA-4KzLfGxp.js} +1 -1
  96. package/web/assets/{diagram-Z3DM3KII-CcbM5hsL.js → diagram-Z3DM3KII-CaRUqcJa.js} +1 -1
  97. package/web/assets/{ebnfDiagram-PWID7BFC-CWP32uDq.js → ebnfDiagram-PWID7BFC-7yDVGhmX.js} +1 -1
  98. package/web/assets/{el-alert-8VKFJYUv.js → el-alert-DQS8ZePt.js} +1 -1
  99. package/web/assets/{el-cascader-CJR-DJLi.js → el-cascader-DQU5md40.js} +1 -1
  100. package/web/assets/{el-checkbox-D7CsqiQq.js → el-checkbox-D0efHW4S.js} +1 -1
  101. package/web/assets/{el-date-picker-Lb4E2Nje.js → el-date-picker-Bku-3B7K.js} +1 -1
  102. package/web/assets/{el-descriptions-B48GJeGA.js → el-descriptions-CBHVTmYh.js} +1 -1
  103. package/web/assets/{el-form-item-Fjp3w344.js → el-form-item-Dq_bK-Q9.js} +1 -1
  104. package/web/assets/{el-input-DRF3bOe1.js → el-input-C5zWHdoA.js} +1 -1
  105. package/web/assets/{el-input-number-e6T9QIje.js → el-input-number-BJUCiZru.js} +1 -1
  106. package/web/assets/{el-radio-DO8joult.js → el-radio-DKbfSkAS.js} +1 -1
  107. package/web/assets/{el-select-BSaB1c5h.js → el-select-pINM-mXh.js} +1 -1
  108. package/web/assets/{el-switch-Cpl2xxJc.js → el-switch-BBMCqiRH.js} +1 -1
  109. package/web/assets/{el-tab-pane-CQyfpTgD.js → el-tab-pane-y4NQADY5.js} +1 -1
  110. package/web/assets/{el-table-column-BRybrdLI.js → el-table-column-BcasE3gG.js} +1 -1
  111. package/web/assets/{enterprise-management-service-Qtmnf50C.js → enterprise-management-service-B0orfFAW.js} +1 -1
  112. package/web/assets/{erDiagram-2YWLMYGG-BOtd6Wuq.js → erDiagram-2YWLMYGG-o6dRiWdB.js} +1 -1
  113. package/web/assets/{error-presentation-CJfLHEK_.js → error-presentation-uG_Pz-4V.js} +1 -1
  114. package/web/assets/{flowDiagram-T62WH6J4-DGRqBn-8.js → flowDiagram-T62WH6J4-Dnjw8CC9.js} +1 -1
  115. package/web/assets/{ganttDiagram-EL5Y4UJY-D84r1V0Q.js → ganttDiagram-EL5Y4UJY-Crx3v_bM.js} +1 -1
  116. package/web/assets/{gitGraphDiagram-WWUBYQGX-FANv-qDA.js → gitGraphDiagram-WWUBYQGX-DdXK5-FC.js} +1 -1
  117. package/web/assets/{hosted-conversation-template-client-CeOnupVC.js → hosted-conversation-template-client-BBChWnuL.js} +1 -1
  118. package/web/assets/{index-C90_sIrz.js → index-B2ZMoChP.js} +1 -1
  119. package/web/assets/{index-C_F0LgDO.js → index-B8mI7i5P.js} +1 -1
  120. package/web/assets/{index-hP6Cb_NE.js → index-B9d9bEMV.js} +1 -1
  121. package/web/assets/{index-Bokwz5PA.js → index-BH4u84Zl.js} +1 -1
  122. package/web/assets/{index-Tv4HGgSj.js → index-BLbqv2VV.js} +1 -1
  123. package/web/assets/{index-CBs38naL.js → index-BOx63eOY.js} +1 -1
  124. package/web/assets/{index-zG9SJlS3.js → index-BX86S34Z.js} +1 -1
  125. package/web/assets/{index-NReuiFej.js → index-B_0I1pfq.js} +1 -1
  126. package/web/assets/{index-B8rWDVmR.js → index-Bxxnybu9.js} +1 -1
  127. package/web/assets/{index-BsG4OGs3.js → index-C2ailIoH.js} +1 -1
  128. package/web/assets/{index-sctirQW0.js → index-C6Xr9IrJ.js} +1 -1
  129. package/web/assets/{index-BeipYJv6.js → index-CL6leDY2.js} +1 -1
  130. package/web/assets/{index-9ks2AQTi.js → index-CRzIdYuU.js} +1 -1
  131. package/web/assets/{index-DsgwAvJA.js → index-CkdgQdyk.js} +18 -18
  132. package/web/assets/{index-D6945seh.js → index-Ckk9V4oe.js} +1 -1
  133. package/web/assets/{index-B7tnVSor.js → index-CyzAAgQ3.js} +1 -1
  134. package/web/assets/{index-DGlioDXJ.js → index-D0uXVWoS.js} +1 -1
  135. package/web/assets/{index-DwQqO2fH.js → index-D6oS93p2.js} +1 -1
  136. package/web/assets/{index-W6jp3JVA.js → index-D83C03lZ.js} +1 -1
  137. package/web/assets/{index-BkC7CnZA.js → index-DIal99Mw.js} +1 -1
  138. package/web/assets/{index-C8DbmG_l.js → index-DUAZ34cY.js} +1 -1
  139. package/web/assets/{index-C_EAvnDF.js → index-DWWBJN55.js} +1 -1
  140. package/web/assets/{index-x2OEXKrc.js → index-Da1hjESP.js} +1 -1
  141. package/web/assets/{index-BYYx_GrI.js → index-DhQ5ZiJY.js} +1 -1
  142. package/web/assets/{index-B0P8j1yb.js → index-DqicP4lu.js} +1 -1
  143. package/web/assets/{index-BOhe9vs1.js → index-DzNFJV2b.js} +1 -1
  144. package/web/assets/{index-DU209g6d.js → index-Q1-bojqH.js} +1 -1
  145. package/web/assets/{index-eU6FSd70.js → index-X_1JWEzD.js} +1 -1
  146. package/web/assets/{index-x9JuBH-H.js → index-gIbLvEUk.js} +1 -1
  147. package/web/assets/infoDiagram-FKFFQAWI-B-GXbxgz.js +2 -0
  148. package/web/assets/{isArrayLikeObject-Bg1E4S9y.js → isArrayLikeObject-gY0T7koT.js} +1 -1
  149. package/web/assets/{ishikawaDiagram-5VMMS53U-B0FDzCa4.js → ishikawaDiagram-5VMMS53U-Dm_z4AVs.js} +1 -1
  150. package/web/assets/{journeyDiagram-EYS64GPL-CIM_LxZU.js → journeyDiagram-EYS64GPL-u6PbiRAS.js} +1 -1
  151. package/web/assets/{kanban-definition-UXKFOSKX-DKxBi_r0.js → kanban-definition-UXKFOSKX-jt4qK-jA.js} +1 -1
  152. package/web/assets/{layout-DU0JsES_.js → layout-B0-7CKhq.js} +1 -1
  153. package/web/assets/{linear-C3UCzYem.js → linear-Cn3EJ6UG.js} +1 -1
  154. package/web/assets/{management-url-service-DsBUOSH4.js → management-url-service-CqDpOe_M.js} +1 -1
  155. package/web/assets/{mcp-center-service-BluNkyx-.js → mcp-center-service-CLyFS3Va.js} +1 -1
  156. package/web/assets/{merge-B-E3iBqN.js → merge-BEHLop1o.js} +1 -1
  157. package/web/assets/{mermaid.core-CMc9IFVw.js → mermaid.core-BYLr5KI5.js} +5 -5
  158. package/web/assets/{message-box-service-CszgyilP.js → message-box-service-p64-2ZLT.js} +1 -1
  159. package/web/assets/{mindmap-definition-THT77NOG-BJyPV49z.js → mindmap-definition-THT77NOG-D64kSxGe.js} +1 -1
  160. package/web/assets/{mobile-dialog-return-service-Csexw-by.js → mobile-dialog-return-service-CTr7uf3K.js} +1 -1
  161. package/web/assets/{oauth-callback-3M1eIOPT.js → oauth-callback-CM7WkzLQ.js} +1 -1
  162. package/web/assets/{pegDiagram-XKGWAZYB-jpfn2XMn.js → pegDiagram-XKGWAZYB-YIPunerp.js} +1 -1
  163. package/web/assets/{pieDiagram-E7YTZNPT-B2jQ3Egj.js → pieDiagram-E7YTZNPT-DBfAVvKg.js} +1 -1
  164. package/web/assets/{quadrantDiagram-AXDQQJYC-BXSOa8Vi.js → quadrantDiagram-AXDQQJYC-CkwhedA2.js} +1 -1
  165. package/web/assets/{railroadDiagram-O6MQD6OU-BTy8Z6ZL.js → railroadDiagram-O6MQD6OU-BZnG7UBR.js} +1 -1
  166. package/web/assets/{requirementDiagram-IS5BZ75X-eqVPnJ-z.js → requirementDiagram-IS5BZ75X-D5weBa8z.js} +1 -1
  167. package/web/assets/{runner-presentation-D66Z9p-O.js → runner-presentation-D4sxHhdR.js} +1 -1
  168. package/web/assets/{sankeyDiagram-P5KCCOFB-BI5fAwMJ.js → sankeyDiagram-P5KCCOFB-Dui8-H4S.js} +1 -1
  169. package/web/assets/{sequenceDiagram-WJ2MYXX4-CZ7Un31z.js → sequenceDiagram-WJ2MYXX4-Cwk3Et5G.js} +1 -1
  170. package/web/assets/{session-share-client-service-W0XDwceC.js → session-share-client-service-CsDa4v0N.js} +1 -1
  171. package/web/assets/{sizeCapture-INFHLROL-7gQRW3HD.js → sizeCapture-INFHLROL-Bnyq906w.js} +1 -1
  172. package/web/assets/{stateDiagram-XQSTLZYL-D23AlrmH.js → stateDiagram-XQSTLZYL-Cp8L5BzA.js} +1 -1
  173. package/web/assets/stateDiagram-v2-IH3M54BS-CSEcK-Jc.js +1 -0
  174. package/web/assets/{swimlanes-V6O3JKXN-By9JzeNC.js → swimlanes-V6O3JKXN-Bg9PykpX.js} +1 -1
  175. package/web/assets/swimlanesDiagram-JKAHXJPX-BDvzhxyu.js +8 -0
  176. package/web/assets/{time-presentation-BRvT6nTd.js → time-presentation-DoNuOMmH.js} +1 -1
  177. package/web/assets/{timeline-definition-24CTP7MA-CyydVD-f.js → timeline-definition-24CTP7MA-DpvHaXX2.js} +1 -1
  178. package/web/assets/{union-BSveQIrm.js → union-E1iOItEy.js} +1 -1
  179. package/web/assets/{use-form-common-props-BJ2vZd_0.js → use-form-common-props-BOlG14S9.js} +1 -1
  180. package/web/assets/{use-wheel-TWRoHAF5.js → use-wheel-C3KIpcYO.js} +1 -1
  181. package/web/assets/{vennDiagram-4TSXK5OY-3OEbunrh.js → vennDiagram-4TSXK5OY-QJMcXLBe.js} +1 -1
  182. package/web/assets/{wardleyDiagram-VM6X3IG4-BuZvJTn0.js → wardleyDiagram-VM6X3IG4-ByP28shL.js} +1 -1
  183. package/web/assets/workbench-composer-interaction-controller-BaGSbCxC.js +41 -0
  184. package/web/assets/workbench-composer-interaction-controller-DRyjmQHD.css +1 -0
  185. package/web/assets/{workbench-presentation-DblBOxzZ.js → workbench-presentation-DRcAJQ63.js} +1 -1
  186. package/web/assets/{xychartDiagram-S5SC5T6Z-CQzJStra.js → xychartDiagram-S5SC5T6Z-B-5cq3LN.js} +1 -1
  187. package/web/docs/404.html +2 -2
  188. package/web/docs/administration/account.html +4 -4
  189. package/web/docs/administration/audit.html +4 -4
  190. package/web/docs/administration/conversation-templates.html +4 -4
  191. package/web/docs/administration/email-notifications.html +4 -4
  192. package/web/docs/administration/license.html +5 -5
  193. package/web/docs/administration/nodes-workspaces.html +4 -4
  194. package/web/docs/administration/oauth.html +4 -4
  195. package/web/docs/administration/secrets.html +4 -4
  196. package/web/docs/administration/template-workspace-maintenance.html +4 -4
  197. package/web/docs/administration/users-organizations.html +4 -4
  198. package/web/docs/assets/administration_license.md.CVLEsGB6.js +1 -0
  199. package/web/docs/assets/{app.DFdypnML.js → app.DO5uKi5F.js} +1 -1
  200. package/web/docs/assets/chunks/@localSearchIndexen-US.BzVDCXSP.js +1 -0
  201. package/web/docs/assets/chunks/@localSearchIndexroot.XPo_yBWv.js +1 -0
  202. package/web/docs/assets/chunks/{VPLocalSearchBox.P9CapR4-.js → VPLocalSearchBox.YAT0tY5c.js} +1 -1
  203. package/web/docs/assets/chunks/{theme.DLnKtfGY.js → theme.D5hAjTv8.js} +2 -2
  204. package/web/docs/assets/deployment_network.md.Bbi7-zH2.js +1 -0
  205. package/web/docs/assets/deployment_network.md.Bbi7-zH2.lean.js +1 -0
  206. package/web/docs/assets/deployment_upgrade.md.CG_VFxvG.js +1 -0
  207. package/web/docs/assets/deployment_upgrade.md.CG_VFxvG.lean.js +1 -0
  208. package/web/docs/assets/en-US_administration_license.md.GCAYq1LT.js +1 -0
  209. package/web/docs/assets/en-US_deployment_network.md.770EzfaT.js +1 -0
  210. package/web/docs/assets/en-US_deployment_network.md.770EzfaT.lean.js +1 -0
  211. package/web/docs/assets/en-US_deployment_upgrade.md.DDevql7U.js +1 -0
  212. package/web/docs/assets/{en-US_deployment_upgrade.md.DZiDDiLn.lean.js → en-US_deployment_upgrade.md.DDevql7U.lean.js} +1 -1
  213. package/web/docs/assets/en-US_getting-started_npm-quick-start.md.D46Ec15e.js +3 -0
  214. package/web/docs/assets/en-US_getting-started_npm-quick-start.md.D46Ec15e.lean.js +1 -0
  215. package/web/docs/assets/{en-US_getting-started_overview.md.Bug5sh21.js → en-US_getting-started_overview.md.CB-43rGR.js} +1 -1
  216. package/web/docs/assets/{en-US_getting-started_overview.md.Bug5sh21.lean.js → en-US_getting-started_overview.md.CB-43rGR.lean.js} +1 -1
  217. package/web/docs/assets/en-US_getting-started_prerequisites.md.BFxGOlUy.js +1 -0
  218. package/web/docs/assets/en-US_getting-started_prerequisites.md.BFxGOlUy.lean.js +1 -0
  219. package/web/docs/assets/{en-US_getting-started_server-installation.md._k2XGM85.js → en-US_getting-started_server-installation.md.C7SjGDJt.js} +2 -2
  220. package/web/docs/assets/en-US_workbench_file-reference-and-attachment.md.DmGpnorE.js +1 -0
  221. package/web/docs/assets/en-US_workbench_file-reference-and-attachment.md.DmGpnorE.lean.js +1 -0
  222. package/web/docs/assets/en-US_workbench_files.md.C8TPSXY9.js +1 -0
  223. package/web/docs/assets/{en-US_workbench_files.md.C5byBZOZ.lean.js → en-US_workbench_files.md.C8TPSXY9.lean.js} +1 -1
  224. package/web/docs/assets/getting-started_npm-quick-start.md.CIYjFmiu.js +3 -0
  225. package/web/docs/assets/getting-started_npm-quick-start.md.CIYjFmiu.lean.js +1 -0
  226. package/web/docs/assets/{getting-started_overview.md.CA1CCOBc.js → getting-started_overview.md.Cv-HSfAh.js} +1 -1
  227. package/web/docs/assets/getting-started_prerequisites.md.DjWWTA7V.js +1 -0
  228. package/web/docs/assets/{getting-started_prerequisites.md.D26KU42D.lean.js → getting-started_prerequisites.md.DjWWTA7V.lean.js} +1 -1
  229. package/web/docs/assets/{getting-started_server-installation.md.D3P3Lmc2.js → getting-started_server-installation.md.BsEfVH6b.js} +2 -2
  230. package/web/docs/assets/workbench_file-reference-and-attachment.md.BiQVVks4.js +1 -0
  231. package/web/docs/assets/workbench_file-reference-and-attachment.md.BiQVVks4.lean.js +1 -0
  232. package/web/docs/assets/workbench_files.md.D1inV8ws.js +1 -0
  233. package/web/docs/assets/{workbench_files.md.B5xE7YGc.lean.js → workbench_files.md.D1inV8ws.lean.js} +1 -1
  234. package/web/docs/concepts/architecture.html +4 -4
  235. package/web/docs/concepts/data-and-security.html +4 -4
  236. package/web/docs/concepts/files-git-terminal.html +4 -4
  237. package/web/docs/concepts/node-and-workspace.html +4 -4
  238. package/web/docs/concepts/permissions-and-sharing.html +4 -4
  239. package/web/docs/concepts/runner-control.html +4 -4
  240. package/web/docs/concepts/secrets.html +4 -4
  241. package/web/docs/concepts/session-run-turn.html +4 -4
  242. package/web/docs/deployment/backup-restore.html +4 -4
  243. package/web/docs/deployment/network.html +5 -5
  244. package/web/docs/deployment/node-installation.html +4 -4
  245. package/web/docs/deployment/node-linux.html +4 -4
  246. package/web/docs/deployment/node-macos.html +4 -4
  247. package/web/docs/deployment/node-windows.html +4 -4
  248. package/web/docs/deployment/production.html +4 -4
  249. package/web/docs/deployment/security-checklist.html +4 -4
  250. package/web/docs/deployment/upgrade.html +5 -5
  251. package/web/docs/en-US/administration/account.html +4 -4
  252. package/web/docs/en-US/administration/audit.html +4 -4
  253. package/web/docs/en-US/administration/conversation-templates.html +4 -4
  254. package/web/docs/en-US/administration/email-notifications.html +4 -4
  255. package/web/docs/en-US/administration/license.html +5 -5
  256. package/web/docs/en-US/administration/nodes-workspaces.html +4 -4
  257. package/web/docs/en-US/administration/oauth.html +4 -4
  258. package/web/docs/en-US/administration/secrets.html +4 -4
  259. package/web/docs/en-US/administration/template-workspace-maintenance.html +4 -4
  260. package/web/docs/en-US/administration/users-organizations.html +4 -4
  261. package/web/docs/en-US/concepts/architecture.html +4 -4
  262. package/web/docs/en-US/concepts/data-and-security.html +4 -4
  263. package/web/docs/en-US/concepts/files-git-terminal.html +4 -4
  264. package/web/docs/en-US/concepts/node-and-workspace.html +4 -4
  265. package/web/docs/en-US/concepts/permissions-and-sharing.html +4 -4
  266. package/web/docs/en-US/concepts/runner-control.html +4 -4
  267. package/web/docs/en-US/concepts/secrets.html +4 -4
  268. package/web/docs/en-US/concepts/session-run-turn.html +4 -4
  269. package/web/docs/en-US/deployment/backup-restore.html +4 -4
  270. package/web/docs/en-US/deployment/network.html +5 -5
  271. package/web/docs/en-US/deployment/node-installation.html +4 -4
  272. package/web/docs/en-US/deployment/node-linux.html +4 -4
  273. package/web/docs/en-US/deployment/node-macos.html +4 -4
  274. package/web/docs/en-US/deployment/node-windows.html +4 -4
  275. package/web/docs/en-US/deployment/production.html +4 -4
  276. package/web/docs/en-US/deployment/security-checklist.html +4 -4
  277. package/web/docs/en-US/deployment/upgrade.html +5 -5
  278. package/web/docs/en-US/getting-started/connect-node.html +4 -4
  279. package/web/docs/en-US/getting-started/first-agent-session.html +4 -4
  280. package/web/docs/en-US/getting-started/first-login.html +4 -4
  281. package/web/docs/en-US/getting-started/next-steps.html +4 -4
  282. package/web/docs/en-US/getting-started/npm-quick-start.html +7 -7
  283. package/web/docs/en-US/getting-started/overview.html +5 -5
  284. package/web/docs/en-US/getting-started/prerequisites.html +5 -5
  285. package/web/docs/en-US/getting-started/register-workspace.html +4 -4
  286. package/web/docs/en-US/getting-started/server-installation.html +6 -6
  287. package/web/docs/en-US/operations/marctl.html +4 -4
  288. package/web/docs/en-US/reference/configuration.html +4 -4
  289. package/web/docs/en-US/reference/keyboard-shortcuts.html +4 -4
  290. package/web/docs/en-US/reference/limits.html +4 -4
  291. package/web/docs/en-US/reference/ports-paths-data.html +4 -4
  292. package/web/docs/en-US/reference/status-and-errors.html +4 -4
  293. package/web/docs/en-US/runners/claude-code.html +4 -4
  294. package/web/docs/en-US/runners/codex.html +4 -4
  295. package/web/docs/en-US/runners/mar-agent.html +4 -4
  296. package/web/docs/en-US/runners/opencode.html +4 -4
  297. package/web/docs/en-US/runners/overview.html +4 -4
  298. package/web/docs/en-US/runners/runner-troubleshooting.html +4 -4
  299. package/web/docs/en-US/troubleshooting/node-offline.html +4 -4
  300. package/web/docs/en-US/troubleshooting/quick-diagnosis.html +4 -4
  301. package/web/docs/en-US/troubleshooting/session-run.html +4 -4
  302. package/web/docs/en-US/troubleshooting/terminal.html +4 -4
  303. package/web/docs/en-US/troubleshooting/workspace-files.html +4 -4
  304. package/web/docs/en-US/workbench/composer.html +4 -4
  305. package/web/docs/en-US/workbench/context-and-plan.html +4 -4
  306. package/web/docs/en-US/workbench/conversation.html +4 -4
  307. package/web/docs/en-US/workbench/file-reference-and-attachment.html +5 -5
  308. package/web/docs/en-US/workbench/files.html +5 -5
  309. package/web/docs/en-US/workbench/git-changes.html +4 -4
  310. package/web/docs/en-US/workbench/git-history.html +4 -4
  311. package/web/docs/en-US/workbench/hosted-conversations.html +4 -4
  312. package/web/docs/en-US/workbench/mobile.html +4 -4
  313. package/web/docs/en-US/workbench/navigation.html +4 -4
  314. package/web/docs/en-US/workbench/sessions.html +4 -4
  315. package/web/docs/en-US/workbench/skills.html +4 -4
  316. package/web/docs/en-US/workbench/terminal.html +4 -4
  317. package/web/docs/getting-started/connect-node.html +4 -4
  318. package/web/docs/getting-started/first-agent-session.html +4 -4
  319. package/web/docs/getting-started/first-login.html +4 -4
  320. package/web/docs/getting-started/next-steps.html +4 -4
  321. package/web/docs/getting-started/npm-quick-start.html +7 -7
  322. package/web/docs/getting-started/overview.html +5 -5
  323. package/web/docs/getting-started/prerequisites.html +5 -5
  324. package/web/docs/getting-started/register-workspace.html +4 -4
  325. package/web/docs/getting-started/server-installation.html +6 -6
  326. package/web/docs/hashmap.json +1 -1
  327. package/web/docs/operations/marctl.html +4 -4
  328. package/web/docs/reference/configuration.html +4 -4
  329. package/web/docs/reference/keyboard-shortcuts.html +4 -4
  330. package/web/docs/reference/limits.html +4 -4
  331. package/web/docs/reference/ports-paths-data.html +4 -4
  332. package/web/docs/reference/status-and-errors.html +4 -4
  333. package/web/docs/runners/claude-code.html +4 -4
  334. package/web/docs/runners/codex.html +4 -4
  335. package/web/docs/runners/mar-agent.html +4 -4
  336. package/web/docs/runners/opencode.html +4 -4
  337. package/web/docs/runners/overview.html +4 -4
  338. package/web/docs/runners/runner-troubleshooting.html +4 -4
  339. package/web/docs/troubleshooting/node-offline.html +4 -4
  340. package/web/docs/troubleshooting/quick-diagnosis.html +4 -4
  341. package/web/docs/troubleshooting/session-run.html +4 -4
  342. package/web/docs/troubleshooting/terminal.html +4 -4
  343. package/web/docs/troubleshooting/workspace-files.html +4 -4
  344. package/web/docs/workbench/composer.html +4 -4
  345. package/web/docs/workbench/context-and-plan.html +4 -4
  346. package/web/docs/workbench/conversation.html +4 -4
  347. package/web/docs/workbench/file-reference-and-attachment.html +5 -5
  348. package/web/docs/workbench/files.html +5 -5
  349. package/web/docs/workbench/git-changes.html +4 -4
  350. package/web/docs/workbench/git-history.html +4 -4
  351. package/web/docs/workbench/hosted-conversations.html +4 -4
  352. package/web/docs/workbench/mobile.html +4 -4
  353. package/web/docs/workbench/navigation.html +4 -4
  354. package/web/docs/workbench/sessions.html +4 -4
  355. package/web/docs/workbench/skills.html +4 -4
  356. package/web/docs/workbench/terminal.html +4 -4
  357. package/web/index.html +1 -1
  358. package/web/service-worker.js +1 -1
  359. package/web/web-version.json +1 -1
  360. package/web/assets/HtmlPreviewFrame-xgqXo3bD.js +0 -5
  361. package/web/assets/NodeManagementPage-C1Cj7rex.js +0 -1
  362. package/web/assets/NodeManagementPage-DRBCipFy.js +0 -1
  363. package/web/assets/SecretManagementPage-BDo50Fo5.js +0 -1
  364. package/web/assets/SessionSharePage-1Iv_l9w_.css +0 -1
  365. package/web/assets/SessionSharePage-whJFT3cw.js +0 -2
  366. package/web/assets/SkillCenterPage-Dl-aKzxp.js +0 -1
  367. package/web/assets/StandaloneFilePreviewPage-b-piNuN1.js +0 -1
  368. package/web/assets/SystemConfigurationPage-CUI3Icws.js +0 -1
  369. package/web/assets/WorkbenchPage-C1l73Bo7.css +0 -1
  370. package/web/assets/WorkbenchPage-D4X4qerH.js +0 -21
  371. package/web/assets/WorkspaceManagementPage-0uM3HF3o.js +0 -1
  372. package/web/assets/WorkspaceManagementPage-DlcAgYsx.js +0 -1
  373. package/web/assets/channel-D5Au5X55.js +0 -1
  374. package/web/assets/classDiagram-CYGNFDIV-CplRLUOK.js +0 -1
  375. package/web/assets/classDiagram-v2-TLXNO2FR-CplRLUOK.js +0 -1
  376. package/web/assets/infoDiagram-FKFFQAWI-ZeaWiVDx.js +0 -2
  377. package/web/assets/stateDiagram-v2-IH3M54BS-D93lsHZ8.js +0 -1
  378. package/web/assets/swimlanesDiagram-JKAHXJPX-C3UEWonA.js +0 -8
  379. package/web/assets/workbench-composer-interaction-controller-BJZsGMk-.js +0 -41
  380. package/web/assets/workbench-composer-interaction-controller-C2fEVYPz.css +0 -1
  381. package/web/docs/assets/administration_license.md.Bf1iyuKG.js +0 -1
  382. package/web/docs/assets/chunks/@localSearchIndexen-US.BEf68FQA.js +0 -1
  383. package/web/docs/assets/chunks/@localSearchIndexroot.Dw4g7XXs.js +0 -1
  384. package/web/docs/assets/deployment_network.md.BarghfLt.js +0 -1
  385. package/web/docs/assets/deployment_network.md.BarghfLt.lean.js +0 -1
  386. package/web/docs/assets/deployment_upgrade.md.BESOToM5.js +0 -1
  387. package/web/docs/assets/deployment_upgrade.md.BESOToM5.lean.js +0 -1
  388. package/web/docs/assets/en-US_administration_license.md.Dmg8rNEl.js +0 -1
  389. package/web/docs/assets/en-US_deployment_network.md.DdOgOLns.js +0 -1
  390. package/web/docs/assets/en-US_deployment_network.md.DdOgOLns.lean.js +0 -1
  391. package/web/docs/assets/en-US_deployment_upgrade.md.DZiDDiLn.js +0 -1
  392. package/web/docs/assets/en-US_getting-started_npm-quick-start.md.Dwsi-ffA.js +0 -3
  393. package/web/docs/assets/en-US_getting-started_npm-quick-start.md.Dwsi-ffA.lean.js +0 -1
  394. package/web/docs/assets/en-US_getting-started_prerequisites.md.Bpx_AQD1.js +0 -1
  395. package/web/docs/assets/en-US_getting-started_prerequisites.md.Bpx_AQD1.lean.js +0 -1
  396. package/web/docs/assets/en-US_workbench_file-reference-and-attachment.md.Xzbr8MRS.js +0 -1
  397. package/web/docs/assets/en-US_workbench_file-reference-and-attachment.md.Xzbr8MRS.lean.js +0 -1
  398. package/web/docs/assets/en-US_workbench_files.md.C5byBZOZ.js +0 -1
  399. package/web/docs/assets/getting-started_npm-quick-start.md.CcxMwUgz.js +0 -3
  400. package/web/docs/assets/getting-started_npm-quick-start.md.CcxMwUgz.lean.js +0 -1
  401. package/web/docs/assets/getting-started_prerequisites.md.D26KU42D.js +0 -1
  402. package/web/docs/assets/workbench_file-reference-and-attachment.md.CSLMm-nL.js +0 -1
  403. package/web/docs/assets/workbench_file-reference-and-attachment.md.CSLMm-nL.lean.js +0 -1
  404. package/web/docs/assets/workbench_files.md.B5xE7YGc.js +0 -1
  405. /package/web/docs/assets/{administration_license.md.Bf1iyuKG.lean.js → administration_license.md.CVLEsGB6.lean.js} +0 -0
  406. /package/web/docs/assets/{en-US_administration_license.md.Dmg8rNEl.lean.js → en-US_administration_license.md.GCAYq1LT.lean.js} +0 -0
  407. /package/web/docs/assets/{en-US_getting-started_server-installation.md._k2XGM85.lean.js → en-US_getting-started_server-installation.md.C7SjGDJt.lean.js} +0 -0
  408. /package/web/docs/assets/{getting-started_overview.md.CA1CCOBc.lean.js → getting-started_overview.md.Cv-HSfAh.lean.js} +0 -0
  409. /package/web/docs/assets/{getting-started_server-installation.md.D3P3Lmc2.lean.js → getting-started_server-installation.md.BsEfVH6b.lean.js} +0 -0
@@ -0,0 +1 @@
1
+ import{_ as o,o as t,c as r,a3 as a}from"./chunks/framework.BHjrhdiC.js";const p=JSON.parse('{"title":"Before You Deploy","description":"","frontmatter":{"title":"Before You Deploy","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"en-US/getting-started/prerequisites.md","filePath":"en-US/getting-started/prerequisites.md"}'),n={name:"en-US/getting-started/prerequisites.md"};function i(s,e,l,c,d,u){return t(),r("div",null,[...e[0]||(e[0]=[a('<h1 id="before-you-deploy" tabindex="-1">Before You Deploy <a class="header-anchor" href="#before-you-deploy" aria-label="Permalink to &quot;Before You Deploy&quot;">​</a></h1><p>Choose your installation first. With the <a href="./npm-quick-start">npm Quick Start</a>, you do not need to deploy Docker or MySQL yourself, or manually register the local Node. Access is local by default; configure your own remote entry point and HTTPS when needed. It does not configure models or external Agents for you.</p><p>The checklist below covers Docker Compose or a separately managed Server/MySQL installation. Quick Start has different component preparation and UUID requirements; follow its dedicated guide. Remote access still requires a secure network entry point.</p><h2 id="requirements" tabindex="-1">Requirements <a class="header-anchor" href="#requirements" aria-label="Permalink to &quot;Requirements&quot;">​</a></h2><ul><li>A Server host that can run Docker Compose, or an environment where you manage MySQL 8.4, Server, and Web yourself.</li><li>An HTTPS hostname for browsers. Production deployments should terminate TLS at a reverse proxy.</li><li>Node.js <code>&gt;=22.13</code> on every Windows, Linux, or macOS work host, plus a Workspace writable by the Node service account. Hosted conversations require a Linux Node with Bubblewrap.</li><li>For built-in MAR Agent, no external Agent CLI is required. An administrator must <a href="./../runners/mar-agent">configure, enable, and authorize a model</a>, and the user must be within its bound credential scope.</li><li>For Codex, Claude Code, or OpenCode, install only the required Agent CLI and complete authentication or provider configuration under the same Node service account.</li></ul><h2 id="checklist" tabindex="-1">Checklist <a class="header-anchor" href="#checklist" aria-label="Permalink to &quot;Checklist&quot;">​</a></h2><ol><li>Choose <code>MAR_PUBLIC_ORIGIN</code>, such as <code>https://mar.example.com</code>. It must exactly match the browser-facing origin.</li><li>Prepare strong, separate passwords for the MySQL root and application accounts.</li><li>Confirm that Server can serve HTTPS and every Node can make outbound HTTPS/WSS connections to it.</li><li>Under the final Node service account, check <code>node --version</code> and <code>npm --version</code>. For MAR Agent, test the model in management; for external Agents, also check the corresponding CLI version.</li><li>Record the exact Workspace paths. Never use an entire disk as <code>allowedRoots</code>.</li></ol><p><strong>Success:</strong> every Node resolves and reaches the Server hostname, and its service account can enter the target Workspace.</p><p>If an Agent works in an interactive shell but not as a service, the service account likely has a different home directory or <code>PATH</code>. Follow <a href="./../deployment/node-installation">Install and Register a Node</a>.</p><p>Next: <a href="./server-installation">Deploy Server and Web</a>.</p><p>Formal deployments require a valid real host UUID in both Community and Enterprise states. Containers must mount <code>/sys/class/dmi/id/product_uuid</code> read-only at <code>/license-host/product_uuid</code>; the source must exist. Native formal deployments may use <code>MAR_LICENSE_HOST_PATH</code> to select the real UUID file. The <a href="./npm-quick-start">npm Quick Start</a> does not require a UUID and cannot be activated.</p>',11)])])}const m=o(n,[["render",i]]);export{p as __pageData,m as default};
@@ -0,0 +1 @@
1
+ import{_ as o,o as t,c as r,a3 as a}from"./chunks/framework.BHjrhdiC.js";const p=JSON.parse('{"title":"Before You Deploy","description":"","frontmatter":{"title":"Before You Deploy","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"en-US/getting-started/prerequisites.md","filePath":"en-US/getting-started/prerequisites.md"}'),n={name:"en-US/getting-started/prerequisites.md"};function i(s,e,l,c,d,u){return t(),r("div",null,[...e[0]||(e[0]=[a("",11)])])}const m=o(n,[["render",i]]);export{p as __pageData,m as default};
@@ -1,5 +1,5 @@
1
- import{_ as s,o as a,c as t,a3 as i}from"./chunks/framework.BHjrhdiC.js";const k=JSON.parse('{"title":"Deploy MyAgentRoam Server and Web","description":"","frontmatter":{"title":"Deploy MyAgentRoam Server and Web","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"en-US/getting-started/server-installation.md","filePath":"en-US/getting-started/server-installation.md"}'),n={name:"en-US/getting-started/server-installation.md"};function o(r,e,l,d,p,h){return a(),t("div",null,[...e[0]||(e[0]=[i(`<h1 id="deploy-myagentroam-server-and-web" tabindex="-1">Deploy MyAgentRoam Server and Web <a class="header-anchor" href="#deploy-myagentroam-server-and-web" aria-label="Permalink to &quot;Deploy MyAgentRoam Server and Web&quot;">​</a></h1><p>The public product repository&#39;s single root <code>compose.yaml</code> runs MySQL, SearXNG, and Server with its bundled Web application. Your reverse proxy provides the production HTTPS entry point.</p><h2 id="formal-deployment" tabindex="-1">Formal deployment <a class="header-anchor" href="#formal-deployment" aria-label="Permalink to &quot;Formal deployment&quot;">​</a></h2><p>The formal deployment uses the single product source and build, with <code>mar-server/</code>, <code>mar-web-console/</code>, and the root <code>compose.yaml</code>. Without activation it is Community, with Workspace sessions, files, Git, terminals, model and credential management, Skill/MCP configuration, personal templates, and hosted conversations. A valid Enterprise license enables organizations, users, sharing, SSO, and auditing in the same installation without replacing images. For local-only evaluation, see the separate <a href="./npm-quick-start">npm Quick Start</a>.</p><p>Both license states use <code>/console</code> for the workbench and <code>/docs/</code> for documentation. Existing links to <code>/</code> keep working: the browser opens the same product at <code>/console</code>, preserving query parameters and fragments. Verify sign-in and a Workspace operation rather than treating <code>/health</code> alone as proof that the full workbench is usable.</p><h2 id="procedure" tabindex="-1">Procedure <a class="header-anchor" href="#procedure" aria-label="Permalink to &quot;Procedure&quot;">​</a></h2><ol><li><p>In an administrator-only source deployment directory, copy the root template and protect it:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .env.example</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .env</span></span>
1
+ import{_ as s,o as a,c as t,a3 as i}from"./chunks/framework.BHjrhdiC.js";const k=JSON.parse('{"title":"Deploy MyAgentRoam Server and Web","description":"","frontmatter":{"title":"Deploy MyAgentRoam Server and Web","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"en-US/getting-started/server-installation.md","filePath":"en-US/getting-started/server-installation.md"}'),n={name:"en-US/getting-started/server-installation.md"};function o(r,e,l,d,p,h){return a(),t("div",null,[...e[0]||(e[0]=[i(`<h1 id="deploy-myagentroam-server-and-web" tabindex="-1">Deploy MyAgentRoam Server and Web <a class="header-anchor" href="#deploy-myagentroam-server-and-web" aria-label="Permalink to &quot;Deploy MyAgentRoam Server and Web&quot;">​</a></h1><p>The public product repository&#39;s single root <code>compose.yaml</code> runs MySQL, SearXNG, and Server with its bundled Web application. Your reverse proxy provides the production HTTPS entry point.</p><h2 id="formal-deployment" tabindex="-1">Formal deployment <a class="header-anchor" href="#formal-deployment" aria-label="Permalink to &quot;Formal deployment&quot;">​</a></h2><p>The formal deployment uses the single product source and build, with <code>mar-server/</code>, <code>mar-web-console/</code>, and the root <code>compose.yaml</code>. Without activation it is Community, with Workspace sessions, files, Git, terminals, model and credential management, Skill/MCP configuration, personal templates, and hosted conversations. A valid Enterprise license enables organizations, users, sharing, SSO, and auditing in the same installation without replacing images. For another installation option, see <a href="./npm-quick-start">npm Quick Start</a>.</p><p>Both license states use <code>/console</code> for the workbench and <code>/docs/</code> for documentation. Existing links to <code>/</code> keep working: the browser opens the same product at <code>/console</code>, preserving query parameters and fragments. Verify sign-in and a Workspace operation rather than treating <code>/health</code> alone as proof that the full workbench is usable.</p><h2 id="procedure" tabindex="-1">Procedure <a class="header-anchor" href="#procedure" aria-label="Permalink to &quot;Procedure&quot;">​</a></h2><ol><li><p>In an administrator-only source deployment directory, copy the root template and protect it:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .env.example</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .env</span></span>
2
2
  <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 600</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .env</span></span></code></pre></div><p>Edit every blank value before continuing. Set <code>MAR_PUBLIC_ORIGIN</code> to your external HTTPS origin, generate separate strong MySQL root/application passwords and a long random <code>MAR_SEARXNG_SECRET</code>, and set <code>MAR_SERVER_SSH_DIR</code> to an existing absolute directory. Use a URL-safe application password because Compose embeds <code>MAR_MYSQL_PASSWORD</code> in a database URL. The template intentionally has no working secrets; Compose rejects missing required values.</p><p><code>MAR_SERVER_SSH_DIR</code> must be the deployment account&#39;s absolute <code>.ssh</code> path. Compose mounts it read-only. Create a correctly protected empty directory even if SSH skill sources are not yet used.</p></li><li><p>Restrict the directory and private keys to the deployment account. If using an SSH Skill source, verify non-interactive access as that account on the deployment host, replacing the example with a repository you are authorized to access:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">GIT_SSH_COMMAND</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null&#39;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> \\</span></span>
3
3
  <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ls-remote</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">repository-hos</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">t</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">owne</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">r</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">repositor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">y</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">.git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> HEAD</span></span></code></pre></div><p>This command contacts an external repository and, like Server&#39;s SSH Skill source, skips host fingerprint verification. That permits server impersonation; use it only for trusted networks and repositories, and do not set this option as a global SSH default. In <code>.ssh/config</code>, use <code>~/.ssh/key-name</code> for <code>IdentityFile</code>. The host deployment UID should match the image <code>node</code> user UID (<code>1000</code> by default).</p></li><li><p>Start and inspect the services:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> up</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --build</span></span>
4
4
  <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ps</span></span>
5
- <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -fsS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://127.0.0.1:5190/health</span></span></code></pre></div></li><li><p>Proxy HTTPS traffic to the unified Server host port <code>5190</code>. Allow Upgrade/WebSocket requests and do not cache <code>/api/</code> or upgraded connections.</p></li><li><p>Open <code>MAR_PUBLIC_ORIGIN</code> in a browser.</p></li></ol><p><strong>Success:</strong> all three Compose services—MySQL, SearXNG, and Server—are healthy, and <code>/console</code> opens for sign-in through the HTTPS site.</p><p>For failures, inspect <code>docker compose logs mysql</code>, verify the external origin, certificate chain, <code>/api/</code> proxying, and outbound HTTPS/WSS from Nodes. The Node control connection does not require a public inbound HTTP API; see <a href="./../deployment/network">Network, TLS, and WebSocket</a> for optional LAN direct-transfer UDP requirements.</p><p>Keep <code>.env</code> out of Git, chats, and the Web root because it contains database credentials.</p><p>Next: <a href="./first-login">First Sign-in</a>. See also <a href="./../deployment/network">Network, TLS, and WebSocket</a>.</p><p>Formal deployments require a valid real host UUID in both Community and Enterprise states. Containers must mount <code>/sys/class/dmi/id/product_uuid</code> read-only at <code>/license-host/product_uuid</code>; the source must exist. Native formal deployments may use <code>MAR_LICENSE_HOST_PATH</code> to select the real UUID file. The local-only <a href="./npm-quick-start">npm Quick Start</a> does not require a UUID and cannot be activated.</p><h2 id="connect-an-independent-node" tabindex="-1">Connect an independent Node <a class="header-anchor" href="#connect-an-independent-node" aria-label="Permalink to &quot;Connect an independent Node&quot;">​</a></h2><p>In this formal deployment, Server hosts Web and API only; it does not include a Node executor. Before using Workspaces, Agents, files, terminals or hosted conversations, <a href="./../deployment/node-installation">install and register a separate Node</a>. Configure hosting and browser execution dependencies on the Node host, not in the Server image.</p>`,14)])])}const g=s(n,[["render",o]]);export{k as __pageData,g as default};
5
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -fsS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://127.0.0.1:5190/health</span></span></code></pre></div></li><li><p>Proxy HTTPS traffic to the unified Server host port <code>5190</code>. Allow Upgrade/WebSocket requests and do not cache <code>/api/</code> or upgraded connections.</p></li><li><p>Open <code>MAR_PUBLIC_ORIGIN</code> in a browser.</p></li></ol><p><strong>Success:</strong> all three Compose services—MySQL, SearXNG, and Server—are healthy, and <code>/console</code> opens for sign-in through the HTTPS site.</p><p>For failures, inspect <code>docker compose logs mysql</code>, verify the external origin, certificate chain, <code>/api/</code> proxying, and outbound HTTPS/WSS from Nodes. The Node control connection does not require a public inbound HTTP API; see <a href="./../deployment/network">Network, TLS, and WebSocket</a> for optional LAN direct-transfer UDP requirements.</p><p>Keep <code>.env</code> out of Git, chats, and the Web root because it contains database credentials.</p><p>Next: <a href="./first-login">First Sign-in</a>. See also <a href="./../deployment/network">Network, TLS, and WebSocket</a>.</p><p>Formal deployments require a valid real host UUID in both Community and Enterprise states. Containers must mount <code>/sys/class/dmi/id/product_uuid</code> read-only at <code>/license-host/product_uuid</code>; the source must exist. Native formal deployments may use <code>MAR_LICENSE_HOST_PATH</code> to select the real UUID file. The <a href="./npm-quick-start">npm Quick Start</a> does not require a UUID and cannot be activated.</p><h2 id="connect-an-independent-node" tabindex="-1">Connect an independent Node <a class="header-anchor" href="#connect-an-independent-node" aria-label="Permalink to &quot;Connect an independent Node&quot;">​</a></h2><p>In this formal deployment, Server hosts Web and API only; it does not include a Node executor. Before using Workspaces, Agents, files, terminals or hosted conversations, <a href="./../deployment/node-installation">install and register a separate Node</a>. Configure hosting and browser execution dependencies on the Node host, not in the Server image.</p>`,14)])])}const g=s(n,[["render",o]]);export{k as __pageData,g as default};
@@ -0,0 +1 @@
1
+ import{_ as t,o as a,c as s,a3 as n}from"./chunks/framework.BHjrhdiC.js";const u=JSON.parse('{"title":"References, Folders, and Attachments","description":"","frontmatter":{"title":"References, Folders, and Attachments","lastUpdated":"2026-11-11T00:00:00.000Z"},"headers":[],"relativePath":"en-US/workbench/file-reference-and-attachment.md","filePath":"en-US/workbench/file-reference-and-attachment.md"}'),o={name:"en-US/workbench/file-reference-and-attachment.md"};function r(i,e,c,l,d,h){return a(),s("div",null,[...e[0]||(e[0]=[n('<h1 id="references-folders-and-attachments" tabindex="-1">References, Folders, and Attachments <a class="header-anchor" href="#references-folders-and-attachments" aria-label="Permalink to &quot;References, Folders, and Attachments&quot;">​</a></h1><p>Type <code>@</code> to search Workspace files and folders. Selecting a result adds a removable Composer tag rather than inserting a path into the message body. References are sent to the Agent as resource inputs and shown as read-only tags in the sent message, without exposing XML. The Agent reads the original resources through its normal tools and permissions; references are not uploaded, copied, or subject to attachment cleanup.</p><p>In regular work mode, the same <code>@</code> picker also offers registered main Sessions in the current Node and Workspace. Matching Sessions appear before files, without type-switching tabs. Type <code>@session</code> or <code>@session keyword</code> to search only Sessions. A bare <code>@</code> shows the first Sessions; enter a path to search files. Each source shows only its first results, so refine the query when more are available. The current Session and child Sessions are excluded. Hosted conversations and shared-session entries do not expose the ordinary Session directory.</p><p>Selecting a Session works like selecting a file: it removes the query at the caret and adds a removable Session reference tag without inserting markup into the body. The tag retains the Session ID and its name at selection time. Session and file references are sent together as XML resource inputs and displayed as read-only tags without exposing XML. Selecting the same Session twice does not duplicate it; different Sessions with matching names remain distinct by ID. Up to 128 Session, file, and folder references can be selected together and restored with the current Workspace draft. Click a tag to remove it, or press Backspace with an empty body to remove the last reference. Editing a queued message&#39;s body preserves reference metadata. References do not import history, send collaboration messages, or automatically read the source Session. Any actual read still uses the Agent&#39;s existing tools and permissions.</p><p>Use the attachment action for files outside the Workspace. The first message accepts up to five files, each larger than zero and no larger than 5 MiB, with a combined limit of 10 MiB. Wait for every upload to complete before sending.</p><p>When pasted clipboard text reaches either 100 lines or 10,000 characters, Composer automatically creates a TXT attachment while preserving the existing draft.</p><p>In regular Workspaces and hosted conversations, BMP attachments are converted to PNG in the browser before upload, preserving their resolution. The attachment name changes to <code>.png</code>; your local source file is unchanged. Both the source and the converted file must fit within 5 MiB, and the image must not exceed 16 megapixels. Images are not automatically resized. If conversion fails or exceeds a limit, save a smaller PNG and add it again. PNG, JPEG, GIF, and WebP are not converted.</p><p>Sent image attachments appear as thumbnail cards without filename text or filename tooltips; other attachments appear as file icons and names. Click an image to enlarge it in a dialog, or Ctrl/Cmd+Click to open a separate window. If a thumbnail cannot load, it falls back to an image placeholder; clicking still checks whether the attachment is available. Other files use the normal Workspace preview. Supported images are also supplied through the Agent&#39;s native visual input, not just as paths.</p><h2 id="quote-a-selected-excerpt" tabindex="-1">Quote a selected excerpt <a class="header-anchor" href="#quote-a-selected-excerpt" aria-label="Permalink to &quot;Quote a selected excerpt&quot;">​</a></h2><p>Unlike <code>@file</code>, a quote saves the text you see as a snapshot. It does not require the Agent to read the current file again.</p><ul><li>Select text in a file or Diff, then choose <strong>Quote</strong> in its existing context menu. <strong>Select all</strong> selects only the loaded body of the current page, including text outside the viewport. It does not read other files, add a quote, or send a message. On mobile, open the same menu from the file&#39;s bottom action group.</li><li>Select text within one Agent reply in Chat. On desktop, a <strong>Quote</strong> button appears above the selection; right-clicking inside the selection also offers Copy and Quote. On mobile, the system text-selection menu remains available; add the selection with <strong>Quote</strong> in that message&#39;s existing action area. Links, images, and non-body content keep their normal menus.</li><li>Adding a quote creates only a removable tag. Your opinion, existing references, and open file remain unchanged. Write feedback and send when ready; a quote-only message is also allowed.</li><li>Quotes go to the draft associated with the source surface, not an unrelated Main or Aside conversation. If the target changes while a menu is open, reopen it in the current target. A companion file window does not deliver quotes into another window.</li><li>Unsaved edits, historical versions, and streaming replies retain their source descriptions. A captured quote does not update when the source changes. Each excerpt allows up to 8,000 characters; all references share a 128-item limit and an encoded-size limit. Reduce the selection or remove references when necessary; text is never silently truncated.</li><li>Sent quotes remain read-only tags without expanded excerpts or XML. Copying that user message retains the quote XML from its public input. Regular Workspace quotes follow the existing Workspace draft restoration rules; hosted and shared entries retain their own draft lifecycle and file-access boundaries.</li></ul><h2 id="attachment-retention" tabindex="-1">Attachment retention <a class="header-anchor" href="#attachment-retention" aria-label="Permalink to &quot;Attachment retention&quot;">​</a></h2><ul><li>Sent files remain available while the Session is preparing, queued, or executing work, then for 30 minutes after it becomes idle.</li><li>An accepted follow-up message pauses cleanup and starts a fresh interval when the Session becomes idle again. Viewing history, switching Sessions, or opening previews does not extend retention.</li><li>The message&#39;s file list remains after cleanup, but clicking reports &quot;File has expired&quot;. Upload the file again if needed. Normal Node shutdown also removes temporary attachments, so old preview URLs are not guaranteed across restarts. In regular Workspaces, MAR Agent <a href="./sessions#automatic-continuation-after-orderly-shutdown">orderly shutdown handoffs</a> retain unsent attachment content and prepare it again during recovery.</li><li>Completed uploads that have not been sent expire after one hour. Removing an attachment deletes its temporary upload early.</li></ul><p>References and attachments never grant additional access. Check the selected tags before sending, verify missing paths in the Workspace file tree, and do not upload credentials or secret files. Next: <a href="./files">Browse, search, and manage files</a>.</p><p>Attachments are stored under <code>temp-files/</code> in the Node private data directory, without creating a Workspace <code>.mar</code> directory or changing Git ignore rules. Message attachments remain available for preview and download while retained, but cannot be edited as Workspace files.</p>',15)])])}const m=t(o,[["render",r]]);export{u as __pageData,m as default};
@@ -0,0 +1 @@
1
+ import{_ as t,o as a,c as s,a3 as n}from"./chunks/framework.BHjrhdiC.js";const u=JSON.parse('{"title":"References, Folders, and Attachments","description":"","frontmatter":{"title":"References, Folders, and Attachments","lastUpdated":"2026-11-11T00:00:00.000Z"},"headers":[],"relativePath":"en-US/workbench/file-reference-and-attachment.md","filePath":"en-US/workbench/file-reference-and-attachment.md"}'),o={name:"en-US/workbench/file-reference-and-attachment.md"};function r(i,e,c,l,d,h){return a(),s("div",null,[...e[0]||(e[0]=[n("",15)])])}const m=t(o,[["render",r]]);export{u as __pageData,m as default};
@@ -0,0 +1 @@
1
+ import{_ as t,o as a,c as o,a3 as i}from"./chunks/framework.BHjrhdiC.js";const f=JSON.parse('{"title":"Browse, Search, and Manage Files","description":"","frontmatter":{"title":"Browse, Search, and Manage Files","lastUpdated":"2026-11-11T00:00:00.000Z"},"headers":[],"relativePath":"en-US/workbench/files.md","filePath":"en-US/workbench/files.md"}'),r={name:"en-US/workbench/files.md"};function n(s,e,l,d,c,h){return a(),o("div",null,[...e[0]||(e[0]=[i('<h1 id="browse-search-and-manage-files" tabindex="-1">Browse, Search, and Manage Files <a class="header-anchor" href="#browse-search-and-manage-files" aria-label="Permalink to &quot;Browse, Search, and Manage Files&quot;">​</a></h1><p>Files shows the selected Workspace as a lazily loaded tree. Files and folders are clickable, and more actions appear when you hover over a row.</p><h2 id="prerequisites" tabindex="-1">Prerequisites <a class="header-anchor" href="#prerequisites" aria-label="Permalink to &quot;Prerequisites&quot;">​</a></h2><p>The Workspace must be online and readable. Creating, renaming, moving, or deleting also requires file-system permission for the Node service account and run access to the resource.</p><h2 id="steps" tabindex="-1">Steps <a class="header-anchor" href="#steps" aria-label="Permalink to &quot;Steps&quot;">​</a></h2><ol><li>Select <strong>Files</strong>, expand a folder, and select a file. Text, Diff, images, PDF, Office, video, and audio open in one file-tab strip; every tab shows its file name with a full-path tooltip, while its content page keeps independent state. The × in a tab closes that file only. <strong>Close file window</strong> in the upper-right corner closes all file tabs and returns to the workbench, or closes the browser window in a companion file window. Unsaved edits require confirmation first; canceling any confirmation keeps all tabs open. <code>Ctrl+W</code> / <code>Alt+W</code> closes the active file tab; <code>Esc</code> / <code>Ctrl+Shift+W</code> / <code>Alt+Shift+W</code> closes the whole file window. Esc first dismisses the topmost find panel, menu, or settings dialog. Mobile browser Back also closes the whole window; canceling an unsaved-change confirmation keeps it open. Companion file pages and tab-free rendered previews use the same behavior. Ctrl combinations require the browser to deliver the key event; use Alt as an alternative. Additional entries load automatically near the bottom of an expanded directory; retry in place if loading fails. Use <strong>Filter displayed items</strong> to filter currently loaded files and folders by name or relative path; clear it to restore the tree. Filtering does not read folders that have not been expanded.</li><li>Use the <strong>All</strong>, <strong>Workspace</strong>, <strong>Session</strong>, <strong>File</strong>, and <strong>Symbol</strong> tabs in Quick Open. Workspaces match display names only, not paths or Node names; Sessions match the titles of loaded sessions in the current Workspace. All results are ranked by match strength first, with ties ordered as Workspace, Session, File, then Symbol; definitions precede references when Symbol scores tie. Enter a complete name to find a symbol: definitions can appear before references finish loading. Selecting a Session opens it in the current Workspace. Selecting a symbol or file immediately opens its preview without switching the Aside tool. The file tree expands its ancestors and selects the target in the background, then reveals it when Files is shown. Selecting a Workspace switches to or opens its tab. For duplicate file names, add space-separated terms to match the relative path, such as <code>app src</code> for <code>src/app.ts</code>; term order does not matter. You can enter <code>foo.ts:12</code> for a root-level file to jump to a line. The current Workspace&#39;s path index is built on demand; the first use may show “Preparing the index”. Each result type shows its own progress, failure, or timeout. If results are incomplete, refine the query; failure details and Retry are available. <strong>Search</strong> finds file contents and can open the matching line. It searches plain text by default; select <strong>Use Regular Expression</strong> above the search box before running a pattern search. Invalid patterns show an error.</li><li>Long file and folder names are abbreviated in the tree. Hover a row to see its complete relative path. The open file remains selected in the tree.</li><li>Hover over a row and select <code>…</code>. A file can be downloaded, copied as a relative or absolute path, renamed, or deleted. A folder also supports creating files or folders and uploading files. <strong>Copy absolute path</strong> copies the full path on the Node host; for the root, it copies the actual Workspace root path. This action is unavailable until the root path is known. When an authenticated loopback direct connection confirms that the browser and current Node are on the same device, <strong>Open in local file manager</strong> also appears. Windows opens a folder or selects a file, macOS opens a folder or reveals a file in Finder, and Linux opens the containing folder for a file. The Node must run in a session with access to the user&#39;s desktop; an unavailable desktop or file manager produces an error.</li><li>Drag a file or folder onto another folder to move it. Existing destinations cannot be overwritten, and a folder cannot be moved into itself.</li><li>A capable Node opens a complete UTF-8 text file in edit mode by default. Change the default to read-only under <strong>Settings &gt; Appearance</strong>, or switch the current preview from its title bar. Use <code>Ctrl/Cmd+S</code> or Save to write, <code>Ctrl/Cmd+F</code> to find, <code>Ctrl/Cmd+H</code> to find and replace in the same panel, and <code>Alt+M</code> to open symbols and jump to a class, function, or heading. Completion uses only the current document and basic language syntax; it is not a project language service. Text larger than 1 MiB remains editable and saveable, but uses plain-text mode without syntax parsing, symbols, or completion to keep browser memory bounded.</li><li>On a Node with code navigation, hold <code>Ctrl/Cmd</code> over a code symbol to identify a jump target. Candidates list definitions before references. Selecting a target opens a new tab at the top of the file preview, focuses and selects the target line. Within the file preview, use <code>Alt+Left</code> / <code>Alt+Right</code> to go back and forward through code jumps and manual file-tab switches, restoring the cursor position; closed tabs are removed from navigation history. The first source preview builds a local index in the background, and a jump waits for that same build if it is still running. TypeScript/JavaScript, Python, Java/Kotlin, Go, Rust, C/C++, and C# are formally supported; other Ctags parsers are best effort. If the symbol index reaches its size limit or code-navigation resources are unavailable on the Node, the navigation area shows a local notice instead of a global error or a misleading no-match result. File browsing, editing, and saving remain available.</li><li>Ctrl/Cmd-click a file to open it in one reusable companion Console window while keeping the conversation visible. The window automatically selects the target Workspace and uses the same full-screen file tabs, editing, saving, find, and code-navigation capabilities as the main window. Later opens accumulate or activate files in that Console without reloading it or creating more windows; <code>Ctrl+R</code> keeps it in file-window mode and opens the most recently opened file. Right-click text or Git Diff content for Copy, Paste, Select all, Quote, and Reload; Paste is unavailable for read-only content, and reloading unsaved edits requires confirmation. Rendered Markdown uses a separate page without file tabs, while ordinary Markdown opens as source text first.</li><li>For a Markdown file, use the preview icon in its title bar to open a rendered page. The independent page always uses a light appearance, regardless of the console theme, with a print-friendly A4 body; refresh the browser to update its content. Preview settings can enable a browser-wide text watermark; its enabled state and text are stored only in this browser. There is no theme selector. Mermaid diagrams are supported; relative links and images remain limited to the current Workspace, while <code>http</code>/<code>https</code> images load directly in the browser.</li><li>HTML/HTM files still open as source by default. Use <strong>Preview</strong> in the file menu, the source preview button, or <code>Ctrl/Cmd+Shift+V</code> to show the saved version in the Aside browser; this does not save drafts. The source window is temporarily hidden while its tabs and drafts remain available via <strong>Open source</strong>. Wait for any save to finish before previewing. A Workspace HTML link in a conversation opens in the browser; Ctrl/Cmd-click opens a rendered page in a new window. Ctrl/Cmd-click in Files still opens the source window. The first preview opens a closable Browser tab alongside sessions to the right of the fixed tools; no Browser tab appears before that. It shows one file at a time, replacing the previous page. The header keeps the file name, with icons to reload, open source, or open in an external browser. Close the tab with × without discarding source drafts; reopen the source from Files. Preview from a companion source window remains a separate page. HTML can run scripts, load resources in its directory and descendants, and send files externally. Preview trusted files only. An administrator can configure a separate HTTPS preview origin; otherwise the Console origin is used and <strong>HTML runs with your signed-in permissions, without isolation from the workbench</strong>. A separate origin requires DNS, TLS, and a reverse proxy to the Server preview route. Cross-origin content cannot deliver keyboard events to the Console; focus the preview header before using close shortcuts.</li></ol><p>Standalone rendered Markdown/HTML pages retain the browser&#39;s native context menu instead of the custom menu used by ordinary file pages.</p><p>File and Diff read failures show a short reason and <strong>Retry</strong> inside their content area, keeping the file title and close action without a duplicate global error message. Retry reads the same target without adding a file tab. Files and Git list failures likewise stay in their own lists with a retry action. Unsupported or failed previews offer download instead; a binary Diff or a Diff without displayable text can open the file preview when available.</p><p>The unified preview supports code and text, common images, PDF, DOCX, XLSX, PPTX, common video, and audio. The workbench renders PDF pages itself and does not depend on the browser&#39;s built-in PDF viewer. PDF and media are read on demand. Modern Office files are parsed locally in the browser and are not sent to an external preview service. PPTX previews are constrained by both available width and height, preserving the complete slide ratio in very wide or short windows. Legacy DOC, XLS, and PPT files and other unsupported formats keep a download action. A damaged or oversized Office file may also fall back to download.</p><p>Legacy text previews recognize BOM-marked UTF-16 and automatically try GB18030 for known text files when UTF-8 decoding fails. Damaged text can fall back to UTF-8 with replacement characters. The preview identifies fallback decoding and always remains read-only; it does not convert or overwrite the source file. Unknown binary formats still fall back to download. Git Diff displays the patch returned by Git rather than recomputing differences from decoded previews; a non-UTF-8 worktree does not suppress a text patch, but Git-reported binary differences remain unsupported for text comparison.</p><p>In ordinary Work mode, chat file and image links support absolute paths readable by the Node service account, including session image directories outside the Workspace. Relative paths still resolve within the current Workspace. Absolute paths are for read-only preview and download; they do not expand the file tree, search, or write scope and do not apply to hosted conversations. <strong>Users with Workspace access can read other host files available to the Node service account by their absolute paths; Workspaces and allowed roots are not file confidentiality boundaries.</strong> When sharing a Node, isolate sensitive data through the service account and operating-system file permissions.</p><p><strong>Success:</strong> The preview title matches the selected tree path, and refreshing the tree shows the real file-system state.</p><h2 id="troubleshooting" tabindex="-1">Troubleshooting <a class="header-anchor" href="#troubleshooting" aria-label="Permalink to &quot;Troubleshooting&quot;">​</a></h2><ul><li>If canceling or removing a task reports that temporary upload cleanup could not be confirmed, the task stays visible instead of silently disappearing. Retry or ask an administrator to check the Node&#39;s temporary uploads. Refreshing the page does not confirm cleanup.</li><li>Workspace direct uploads verify the complete file&#39;s SHA-256; a mismatch leaves the target unchanged. An interruption after upload starts reports an error, without automatic retry, reauthorization, or a new upload through the Server. Click Retry yourself; after refreshing the page, select the same unchanged source file with the same name and size. Fresh authorization then resumes from the continuous offset confirmed by the Node. Expired temporary uploads and Node restarts require a new upload. Server upload fallback remains available before direct upload starts; existing download and preview fallback behavior is unchanged.</li><li>Operation denied: check the Node service account permissions, Workspace boundary, and resource authorization.</li><li>Regular-expression search unavailable: regular-expression mode requires the Node-bundled <code>rg</code> resource. Reinstall or upgrade that Node, then try again; plain-text search can still fall back when the resource is missing.</li><li>Long file name: hover the tree row to confirm its full relative path before moving or deleting it.</li><li>Read-only preview: write-incompatible Nodes, truncated text, Diff, and Git History content remain read-only. Nodes below the business baseline must first be <a href="./../deployment/upgrade">upgraded</a>.</li><li>Save conflict: an Agent, terminal, or another window changed the file. Discard the local edit, reopen the file, review the latest content, and edit again; the workbench does not force an overwrite.</li><li>A Diff opens instead of a file: chat file changes and Git text changes open Diff by default. Supported images, audio, video, PDF, and Office formats in Git Changes / Git History open directly in a preview of the corresponding worktree or selected commit. Unknown binary files and unsupported formats retain fallback actions.</li><li>Office preview fails: verify that the file is DOCX, XLSX, or PPTX rather than a legacy file with a renamed extension, then use Download if needed.</li><li>Dragging has no effect: refresh the tree and confirm the destination is writable and inside the Workspace.</li><li>A new tab is blocked: allow pop-ups for MyAgentRoam. Executable HTML on the Console origin may use the current account&#39;s existing permissions.</li></ul><p>File operations act on the real Node directory. There is no hidden recycle bin. Check Git Changes or create a backup before renaming, moving, overwriting, or deleting. Next: <a href="./git-changes">Git Changes and Diff</a>.</p><p>After selecting file or Diff text, use that menu to <a href="./file-reference-and-attachment#quote-a-selected-excerpt">add a quote</a>. Select all covers only the currently loaded document; it does not quote automatically or read other files. On mobile, open the same menu from the existing bottom action group.</p>',16)])])}const u=t(r,[["render",n]]);export{f as __pageData,u as default};
@@ -1 +1 @@
1
- import{_ as t,o as a,c as o,a3 as i}from"./chunks/framework.BHjrhdiC.js";const f=JSON.parse('{"title":"Browse, Search, and Manage Files","description":"","frontmatter":{"title":"Browse, Search, and Manage Files","lastUpdated":"2026-11-05T00:00:00.000Z"},"headers":[],"relativePath":"en-US/workbench/files.md","filePath":"en-US/workbench/files.md"}'),r={name:"en-US/workbench/files.md"};function n(s,e,l,d,c,h){return a(),o("div",null,[...e[0]||(e[0]=[i("",15)])])}const u=t(r,[["render",n]]);export{f as __pageData,u as default};
1
+ import{_ as t,o as a,c as o,a3 as i}from"./chunks/framework.BHjrhdiC.js";const f=JSON.parse('{"title":"Browse, Search, and Manage Files","description":"","frontmatter":{"title":"Browse, Search, and Manage Files","lastUpdated":"2026-11-11T00:00:00.000Z"},"headers":[],"relativePath":"en-US/workbench/files.md","filePath":"en-US/workbench/files.md"}'),r={name:"en-US/workbench/files.md"};function n(s,e,l,d,c,h){return a(),o("div",null,[...e[0]||(e[0]=[i("",16)])])}const u=t(r,[["render",n]]);export{f as __pageData,u as default};
@@ -0,0 +1,3 @@
1
+ import{_ as o,o as a,c as d,a3 as t}from"./chunks/framework.BHjrhdiC.js";const u=JSON.parse('{"title":"npm 快速开始","description":"","frontmatter":{"title":"npm 快速开始","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"getting-started/npm-quick-start.md","filePath":"getting-started/npm-quick-start.md"}'),r={name:"getting-started/npm-quick-start.md"};function n(s,e,c,i,p,l){return a(),d("div",null,[...e[0]||(e[0]=[t(`<h1 id="npm-快速开始" tabindex="-1">npm 快速开始 <a class="header-anchor" href="#npm-快速开始" aria-label="Permalink to &quot;npm 快速开始&quot;">​</a></h1><p>Quick Start 一次准备固定社区版 Server、专用 MySQL 和本机 Node,并在支持受管搜索的平台准备 SearXNG。默认通过本机回环 HTTP 访问;远程访问的网络入口和安全配置由你自行管理。它不安装系统常驻服务,不要求主机 UUID,也不支持激活 License。另一种安装方式见 <a href="./server-installation">Docker Compose 部署</a>。</p><p>目前实际验证的安装目标是带 glibc 2.28 或更高版本、<code>tar</code> 和 <code>dpkg-deb</code> 的 Linux x64(例如受支持的 Debian 或 Ubuntu 系统),以及可使用 <code>tar</code> 的 Windows x64。需要 Node.js 24.12 或更高版本以及 npm。安装包时原生依赖可能要求系统已有可用的构建工具;安装和 setup 均不安装系统包,也不请求提权。浏览器和所选组件的准备需要网络。其他原生平台尚未完成此 Quick Start 的验证。</p><p>终端依赖固定为 <code>node-pty@1.2.0-beta.18</code>,随包提供 Linux x64/arm64、macOS x64/arm64 和 Windows x64/arm64 预编译文件;已验证的 Linux x64 默认安装无需为 node-pty 安装 GCC、make 或 Python,程序目录和 HOME 含空格也可使用。不要设置 <code>npm_config_build_from_source=true</code> 或全局跳过安装脚本;前者会强制源码编译,后者可能使其他依赖未正确准备。其他原生依赖或无匹配预编译文件的平台仍可能需要构建工具;包内有预编译文件不代表该平台的完整 Quick Start 已验证。</p><h2 id="安装与启动" tabindex="-1">安装与启动 <a class="header-anchor" href="#安装与启动" aria-label="Permalink to &quot;安装与启动&quot;">​</a></h2><p>当 npm Registry 中已有 Server 包及其所需依赖后,以普通用户运行:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> @myagentroam/server</span></span>
2
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --no-install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mar-server</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> setup</span></span>
3
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --no-install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mar-server</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span></span></code></pre></div><p>Server 以普通依赖使用同版本 Node;npm 安装会按 Node 原有生命周期安装原生依赖并准备 Chromium,即使之后使用 <code>--no-node</code>。安装或查看 <code>mar-server --help</code> 不配置、注册或启动本机 Node。setup 下载所选固定组件并初始化专用数据库,不使用已有 MySQL,也不接受 <code>MAR_DATABASE_URL</code>。跳过本地搜索使用 <code>--no-searxng</code>;两个参数可以组合。搜索准备是可选步骤,失败会报告但不会丢弃其他组件。</p><p><code>--no-node</code> 会持久保存禁用选择,但不会从 Server 包移除 Node 依赖。之后如需启用本机 Node,先停止 run,在 <code>server.json</code> 中将 <code>node.enabled</code> 设为 <code>true</code>,保留身份,再运行 setup。</p><p>run 在前台运行并打印本机浏览器地址。使用 Ctrl+C 停止并等待子进程退出;run 不会下载缺失组件。同一数据目录不能并发执行 setup 和 run。</p><p>Windows 本机 Quick Start 的受管 Node 使用 IPv4 直连;如果只能通过 IPv6 连接,文件和终端流量会回退到 Server 中继。</p><h2 id="远程访问" tabindex="-1">远程访问 <a class="header-anchor" href="#远程访问" aria-label="Permalink to &quot;远程访问&quot;">​</a></h2><p>默认本机访问不是使用场景限制。你可以自行配置安全隧道或对外入口;setup 不会配置域名、TLS、防火墙或访问控制。公网入口应使用 HTTPS,并支持 WebSocket;不要直接裸露 HTTP 端口。</p><p>当前 run 监听 <code>127.0.0.1</code>,应用 Origin 固定为打印出的 <code>http://127.0.0.1:&lt;端口&gt;</code>,不会采用 <code>MAR_PUBLIC_ORIGIN</code> 覆盖值。隧道访问应保留浏览器侧相同的回环地址和端口;使用自定义域名时,仅转发端口不足以保证登录、Origin 校验和 WebSocket 正常,还需匹配应用与网关的配置。不要关闭 Origin 校验来绕过问题。网络要求见<a href="./../deployment/network">网络、TLS 与 WebSocket</a>。</p><h2 id="更新-server-与受管-node" tabindex="-1">更新 Server 与受管 Node <a class="header-anchor" href="#更新-server-与受管-node" aria-label="Permalink to &quot;更新 Server 与受管 Node&quot;">​</a></h2><ol><li>正常停止 run,等待其管理的进程全部退出。</li><li>在原 npm 安装目录安装目标 Server 版本,例如 <code>npm install --save-exact @myagentroam/server@X.Y.Z</code>,将 <code>X.Y.Z</code> 替换为已发布且依赖齐全的目标版本。</li><li>用原配置重新执行 <code>npx --no-install mar-server run</code>;此前使用 <code>--config</code> 时继续传入同一路径。刷新浏览器并确认原 Node、工作区和终端可用。</li></ol><p>Node 随 Server 的精确依赖一起更新,不单独使用节点管理中的推送升级。不要删除部署目录、重建 Node 身份或修改 <code>allowedRoots</code> 来完成更新;重复 setup 不是更新 npm 程序的方式。独立 Node 的升级流程见<a href="./../deployment/upgrade">升级 MyAgentRoam</a>。</p><p>以上步骤更新 Server/Node 的 npm 程序,不会自动升级已有的受管 MySQL 或搜索组件。更新前核对目标版本的发行说明;若要求组件迁移,按该版本说明操作,不要手工删除安装记录来强制重装。</p><h2 id="登录并开始工作" tabindex="-1">登录并开始工作 <a class="header-anchor" href="#登录并开始工作" aria-label="Permalink to &quot;登录并开始工作&quot;">​</a></h2><p>按<a href="./first-login">首次登录与修改密码</a>立即修改初始管理员密码。等待本机 Node 显示在线,再在部署目录的 <code>workspace</code> 下<a href="./register-workspace">登记 Workspace</a>。本机 Node 默认只能访问该目录,不会自动启用托管对话。<a href="./first-agent-session">开始会话</a>前还需配置模型和凭据;Node 在线或 <code>/health</code> 成功并不代表 Agent 已能执行。</p><p>本机 Node 的默认允许目录仅为本部署的 <code>workspace/</code>。如需使用其他项目,先停止 run,只编辑部署数据目录内 <code>node-data/node.json</code> 的 <code>allowedRoots</code> 数组,填写一个或多个绝对路径,然后重新 run。例如 Unix 可用 <code>&quot;allowedRoots&quot;: [&quot;/home/alice/project&quot;, &quot;/srv/work&quot;]</code>,Windows 可用 <code>&quot;allowedRoots&quot;: [&quot;C:\\\\Projects&quot;, &quot;D:\\\\Work&quot;]</code>。不要覆盖整个文件或删除 <code>nodeId</code>、凭据及 <code>serverUrl</code> 等身份字段。允许目录不会提升操作系统账号权限;账号仍需有相应文件权限。npm 程序安装目录与部署数据目录不同,后者默认为 <code>~/.myagentroam/quick-start/</code>,也可由 <code>--config</code> 指定。</p><p>首次注册失败后,可停止并重新 <code>run</code>:若 <code>node.json</code> 只有注册令牌、尚无身份,系统会复用未使用的有效令牌,或替换已过期但未使用的令牌,保留允许目录和数据配置。若报告 <code>QUICK_START_NODE_BOOTSTRAP_RECOVERY_REQUIRED</code>,说明令牌已使用或状态无法确认,系统不会自动重复登记。请保留 <code>node-data/node.json</code>,从备份恢复已有身份,或先核对并处理管理页面中的上次登记;不要直接删除配置或数据目录。身份字段残缺会报告配置无效,不会自动重置身份。</p><h2 id="数据与可选搜索" tabindex="-1">数据与可选搜索 <a class="header-anchor" href="#数据与可选搜索" aria-label="Permalink to &quot;数据与可选搜索&quot;">​</a></h2><p>默认私有配置、凭据和组件数据位于 <code>~/.myagentroam/quick-start/</code>。如需其他私有位置,setup 和 run 均传入相同的 <code>--config /path/to/server.json</code>。请保护并备份该目录。重复 setup 保留凭据、Node 数据、Workspace 及其他组件版本。受管 Node 程序随 Server 依赖更新,不使用独立升级或活动入口。</p><p><code>server.json</code> 的 <code>search</code> 对象只有 <code>managed</code>、<code>disabled</code>、<code>external</code> 三种模式。Windows 不支持受管 SearXNG;如需搜索,可使用外部服务。如需使用已有 SearXNG,停止 run,只将 <code>search.mode</code> 改为 <code>&quot;external&quot;</code>、将 <code>search.url</code> 改为服务地址,保留已有的 <code>search.installation</code> 记录,再重新启动。该服务必须允许 JSON 搜索。JSON 检查失败时,本次运行不提供客户端搜索,也不会回退到其他地址;<code>web_fetch</code> 和模型托管搜索是独立能力。<code>--no-searxng</code> 不会清除外部地址。</p><p>禁用后如需重试本地搜索,停止 run,将搜索模式设为 <code>managed</code>,保留已有 <code>installation</code> 记录,再运行 setup。不受支持的平台请保持禁用并改用外部地址。独立管理 Node 参见 <a href="./../deployment/node-installation">Node 安装</a>,正式运维参见<a href="./../deployment/production">生产部署</a>。</p>`,26)])])}const k=o(r,[["render",n]]);export{u as __pageData,k as default};
@@ -0,0 +1 @@
1
+ import{_ as o,o as a,c as d,a3 as t}from"./chunks/framework.BHjrhdiC.js";const u=JSON.parse('{"title":"npm 快速开始","description":"","frontmatter":{"title":"npm 快速开始","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"getting-started/npm-quick-start.md","filePath":"getting-started/npm-quick-start.md"}'),r={name:"getting-started/npm-quick-start.md"};function n(s,e,c,i,p,l){return a(),d("div",null,[...e[0]||(e[0]=[t("",26)])])}const k=o(r,[["render",n]]);export{u as __pageData,k as default};
@@ -1 +1 @@
1
- import{_ as t,o as a,c as r,a3 as o}from"./chunks/framework.BHjrhdiC.js";const m=JSON.parse('{"title":"MyAgentRoam 是什么","description":"","frontmatter":{"title":"MyAgentRoam 是什么","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"getting-started/overview.md","filePath":"getting-started/overview.md"}'),d={name:"getting-started/overview.md"};function n(i,e,s,l,p,h){return a(),r("div",null,[...e[0]||(e[0]=[o('<h1 id="myagentroam-是什么" tabindex="-1">MyAgentRoam 是什么 <a class="header-anchor" href="#myagentroam-是什么" aria-label="Permalink to &quot;MyAgentRoam 是什么&quot;">​</a></h1><p>MyAgentRoam 是面向团队私有化部署、支持“工作 / 对话”两种模式的共享 Agent 工作台。团队只需在自己的 Windows、Linux 或 macOS 主机上配置一次 Agent、任意大模型、项目目录和工具链,就能把这个可直接工作的空间授权给成员。“工作”模式提供完整的 Node、Workspace、Agent 会话、文件、Git 和终端能力;“对话”模式让成员从管理员发布并授权的模板直接开始。无需在每台个人设备重复搭建环境。托管对话因依赖 Bubblewrap 沙箱,目前仅可由 Linux Node 承载。</p><p>工作区源码、外部 Agent 的本机凭据和终端留在团队自己的主机中;Server 管理的模型与凭据配置保存在 Server。MyAgentRoam 让获授权的成员共享工作环境并衔接进度,同时保留清晰的数据和权限边界。个人用户也可以用它统一管理自己的多台工作主机。</p><h2 id="四个组件" tabindex="-1">四个组件 <a class="header-anchor" href="#四个组件" aria-label="Permalink to &quot;四个组件&quot;">​</a></h2><table tabindex="0"><thead><tr><th>组件</th><th>放在哪里</th><th>负责什么</th></tr></thead><tbody><tr><td>Web</td><td>浏览器</td><td>工作台、对话、文件和终端界面</td></tr><tr><td>Server</td><td>你的服务器</td><td>登录、Node 登记、授权和浏览器连接</td></tr><tr><td>Node</td><td>每台工作主机</td><td>工作区、Agent、文件、Git 与终端</td></tr><tr><td>Agent</td><td>Node 本机</td><td>使用团队接入的 Agent 与大模型完成工作</td></tr></tbody></table><p>浏览器通过 Server 认证和授权,Node 主动向 Server 建立出站控制连接;普通工作区数据也可在授权后使用 WebRTC 直传。直传的网络条件和回退见<a href="./../deployment/network">网络、TLS 与 WebSocket</a>。每个 Workspace 属于一台 Node,不能跨 Node 混用文件、终端或会话。</p><h2 id="界面语言" tabindex="-1">界面语言 <a class="header-anchor" href="#界面语言" aria-label="Permalink to &quot;界面语言&quot;">​</a></h2><p>控制台和文档中心使用当前浏览器保存的语言选择;从控制台打开文档时会进入对应语言。登录或返回控制台时,当前浏览器语言会同步到账号并作为后续通知的生成语言;在设置中切换语言也会更新账号偏好。通知保存创建时的最终文案,切换语言不会改写已有通知。文档中心切换语言时会打开当前文档的对应语言版本;直接打开文档链接时,该链接的语言优先。</p><h2 id="安装、界面缓存与更新" tabindex="-1">安装、界面缓存与更新 <a class="header-anchor" href="#安装、界面缓存与更新" aria-label="Permalink to &quot;安装、界面缓存与更新&quot;">​</a></h2><p>控制台会在首次联网打开时缓存应用界面所需的静态资源,避免之后反复下载相同文件。“设置 → 关于”可查看当前运行方式(浏览器标签页或 PWA 独立窗口)和应用资源缓存状态;运行方式表示当前窗口的打开方式,不表示此设备是否安装过应用。缓存可用时,断网也能打开应用外壳,但登录、会话、文件和终端等功能仍需联网。帮助文档和搜索不进入应用缓存。普通浏览器标签页与已安装应用使用相同机制;浏览器存储可能隔离或被回收,缓存不可用时仍可在线使用。</p><p>如需安装为独立应用窗口,可使用浏览器地址栏或菜单中的“安装应用”入口;支持添加到主屏幕的移动浏览器也可从分享或浏览器菜单选择“添加到主屏幕”。入口名称和位置因浏览器与操作系统而异,无需安装也可使用静态资源缓存。</p><p>离线资源不包含登录状态、权限、会话、工作区文件或终端。冷启动时若无法联系 Server,界面会显示身份尚未确认,可在恢复连接后打开帮助或重试;恢复连接后才能确认身份和使用依赖 Server、Node 的功能。已打开的页面不会仅因断网而退出登录。</p><p>新版资源准备完成后会显示更新通知,不会立即打断当前页面。点击通知、在“设置 → 关于”应用更新,或在更新已准备好后主动刷新页面,都会切换到已准备的新版本,并自动刷新所有已打开的同源应用窗口和标签页;无需逐个关闭、额外确认或等待编辑和文件传输结束。如果刷新时新版尚未准备好,本次页面会继续使用旧版,准备完成后再提示更新。自动切换失败不会循环重试,仍可手动应用更新。浏览器标签页与已安装应用行为一致。刷新可能丢弃未保存内容并中断文件传输,请按需先保存。旧版迁移或缓存受损时,可能需要联网、关闭所有同源应用窗口和标签页后重新打开应用。</p><h2 id="最快成功路径" tabindex="-1">最快成功路径 <a class="header-anchor" href="#最快成功路径" aria-label="Permalink to &quot;最快成功路径&quot;">​</a></h2><p>仅在本机体验可选 <a href="./npm-quick-start">npm 快速开始</a>:默认准备本机 Node,也可禁用。正式部署请先完成<a href="./prerequisites">部署前准备</a>并<a href="./server-installation">部署 Server/Web</a>,再独立安装和注册 Node。</p><ol><li>按所选路径准备并启动 Server。</li><li>用 <code>admin</code> 首次登录并修改初始密码。</li><li>确认 Node 在线;正式部署需在工作主机独立安装并注册。</li><li>登记一个工作区,确认所选 Agent 已登录可用。</li><li>新建会话并发送第一条消息。</li></ol><p><strong>成功标志:</strong> “工作”模式的资源树显示 Node 在线;打开 Workspace 后能看到文件树,并能创建可发送消息的会话。</p><p>社区版适合单人使用,不限制登记 Node 数量;企业 License 启用组织、角色、共享、SSO 和审计。详情见<a href="./../concepts/permissions-and-sharing">用户、组织与资源权限</a>。</p><p>已有可用 Server 的用户可从<a href="./first-login">首次登录</a>、<a href="./connect-node">接入 Node</a>或<a href="./first-agent-session">开始第一次 Agent 对话</a>进入;管理员部署时从<a href="./prerequisites">部署前准备</a>开始。</p>',19)])])}const g=t(d,[["render",n]]);export{m as __pageData,g as default};
1
+ import{_ as t,o as a,c as r,a3 as o}from"./chunks/framework.BHjrhdiC.js";const m=JSON.parse('{"title":"MyAgentRoam 是什么","description":"","frontmatter":{"title":"MyAgentRoam 是什么","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"getting-started/overview.md","filePath":"getting-started/overview.md"}'),d={name:"getting-started/overview.md"};function n(i,e,s,l,p,h){return a(),r("div",null,[...e[0]||(e[0]=[o('<h1 id="myagentroam-是什么" tabindex="-1">MyAgentRoam 是什么 <a class="header-anchor" href="#myagentroam-是什么" aria-label="Permalink to &quot;MyAgentRoam 是什么&quot;">​</a></h1><p>MyAgentRoam 是面向团队私有化部署、支持“工作 / 对话”两种模式的共享 Agent 工作台。团队只需在自己的 Windows、Linux 或 macOS 主机上配置一次 Agent、任意大模型、项目目录和工具链,就能把这个可直接工作的空间授权给成员。“工作”模式提供完整的 Node、Workspace、Agent 会话、文件、Git 和终端能力;“对话”模式让成员从管理员发布并授权的模板直接开始。无需在每台个人设备重复搭建环境。托管对话因依赖 Bubblewrap 沙箱,目前仅可由 Linux Node 承载。</p><p>工作区源码、外部 Agent 的本机凭据和终端留在团队自己的主机中;Server 管理的模型与凭据配置保存在 Server。MyAgentRoam 让获授权的成员共享工作环境并衔接进度,同时保留清晰的数据和权限边界。个人用户也可以用它统一管理自己的多台工作主机。</p><h2 id="四个组件" tabindex="-1">四个组件 <a class="header-anchor" href="#四个组件" aria-label="Permalink to &quot;四个组件&quot;">​</a></h2><table tabindex="0"><thead><tr><th>组件</th><th>放在哪里</th><th>负责什么</th></tr></thead><tbody><tr><td>Web</td><td>浏览器</td><td>工作台、对话、文件和终端界面</td></tr><tr><td>Server</td><td>你的服务器</td><td>登录、Node 登记、授权和浏览器连接</td></tr><tr><td>Node</td><td>每台工作主机</td><td>工作区、Agent、文件、Git 与终端</td></tr><tr><td>Agent</td><td>Node 本机</td><td>使用团队接入的 Agent 与大模型完成工作</td></tr></tbody></table><p>浏览器通过 Server 认证和授权,Node 主动向 Server 建立出站控制连接;普通工作区数据也可在授权后使用 WebRTC 直传。直传的网络条件和回退见<a href="./../deployment/network">网络、TLS 与 WebSocket</a>。每个 Workspace 属于一台 Node,不能跨 Node 混用文件、终端或会话。</p><h2 id="界面语言" tabindex="-1">界面语言 <a class="header-anchor" href="#界面语言" aria-label="Permalink to &quot;界面语言&quot;">​</a></h2><p>控制台和文档中心使用当前浏览器保存的语言选择;从控制台打开文档时会进入对应语言。登录或返回控制台时,当前浏览器语言会同步到账号并作为后续通知的生成语言;在设置中切换语言也会更新账号偏好。通知保存创建时的最终文案,切换语言不会改写已有通知。文档中心切换语言时会打开当前文档的对应语言版本;直接打开文档链接时,该链接的语言优先。</p><h2 id="安装、界面缓存与更新" tabindex="-1">安装、界面缓存与更新 <a class="header-anchor" href="#安装、界面缓存与更新" aria-label="Permalink to &quot;安装、界面缓存与更新&quot;">​</a></h2><p>控制台会在首次联网打开时缓存应用界面所需的静态资源,避免之后反复下载相同文件。“设置 → 关于”可查看当前运行方式(浏览器标签页或 PWA 独立窗口)和应用资源缓存状态;运行方式表示当前窗口的打开方式,不表示此设备是否安装过应用。缓存可用时,断网也能打开应用外壳,但登录、会话、文件和终端等功能仍需联网。帮助文档和搜索不进入应用缓存。普通浏览器标签页与已安装应用使用相同机制;浏览器存储可能隔离或被回收,缓存不可用时仍可在线使用。</p><p>如需安装为独立应用窗口,可使用浏览器地址栏或菜单中的“安装应用”入口;支持添加到主屏幕的移动浏览器也可从分享或浏览器菜单选择“添加到主屏幕”。入口名称和位置因浏览器与操作系统而异,无需安装也可使用静态资源缓存。</p><p>离线资源不包含登录状态、权限、会话、工作区文件或终端。冷启动时若无法联系 Server,界面会显示身份尚未确认,可在恢复连接后打开帮助或重试;恢复连接后才能确认身份和使用依赖 Server、Node 的功能。已打开的页面不会仅因断网而退出登录。</p><p>新版资源准备完成后会显示更新通知,不会立即打断当前页面。点击通知、在“设置 → 关于”应用更新,或在更新已准备好后主动刷新页面,都会切换到已准备的新版本,并自动刷新所有已打开的同源应用窗口和标签页;无需逐个关闭、额外确认或等待编辑和文件传输结束。如果刷新时新版尚未准备好,本次页面会继续使用旧版,准备完成后再提示更新。自动切换失败不会循环重试,仍可手动应用更新。浏览器标签页与已安装应用行为一致。刷新可能丢弃未保存内容并中断文件传输,请按需先保存。旧版迁移或缓存受损时,可能需要联网、关闭所有同源应用窗口和标签页后重新打开应用。</p><h2 id="最快成功路径" tabindex="-1">最快成功路径 <a class="header-anchor" href="#最快成功路径" aria-label="Permalink to &quot;最快成功路径&quot;">​</a></h2><p>快速安装可选 <a href="./npm-quick-start">npm 快速开始</a>:默认准备本机 Node,也可禁用。选择 Docker Compose 时,先完成<a href="./prerequisites">部署前准备</a>并<a href="./server-installation">部署 Server/Web</a>,再独立安装和注册 Node。</p><ol><li>按所选路径准备并启动 Server。</li><li>用 <code>admin</code> 首次登录并修改初始密码。</li><li>确认 Node 在线;Docker Compose 部署需在工作主机独立安装并注册。</li><li>登记一个工作区,确认所选 Agent 已登录可用。</li><li>新建会话并发送第一条消息。</li></ol><p><strong>成功标志:</strong> “工作”模式的资源树显示 Node 在线;打开 Workspace 后能看到文件树,并能创建可发送消息的会话。</p><p>社区版适合单人使用,不限制登记 Node 数量;企业 License 启用组织、角色、共享、SSO 和审计。详情见<a href="./../concepts/permissions-and-sharing">用户、组织与资源权限</a>。</p><p>已有可用 Server 的用户可从<a href="./first-login">首次登录</a>、<a href="./connect-node">接入 Node</a>或<a href="./first-agent-session">开始第一次 Agent 对话</a>进入;管理员部署时从<a href="./prerequisites">部署前准备</a>开始。</p>',19)])])}const g=t(d,[["render",n]]);export{m as __pageData,g as default};
@@ -0,0 +1 @@
1
+ import{_ as o,o as a,c as t,a3 as r}from"./chunks/framework.BHjrhdiC.js";const _=JSON.parse('{"title":"部署前准备","description":"","frontmatter":{"title":"部署前准备","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"getting-started/prerequisites.md","filePath":"getting-started/prerequisites.md"}'),i={name:"getting-started/prerequisites.md"};function d(l,e,n,s,c,p){return a(),t("div",null,[...e[0]||(e[0]=[r('<h1 id="部署前准备" tabindex="-1">部署前准备 <a class="header-anchor" href="#部署前准备" aria-label="Permalink to &quot;部署前准备&quot;">​</a></h1><p>先选择安装方式:使用 <a href="./npm-quick-start">npm 快速开始</a>,无需自行部署 Docker 或 MySQL,也无需手工注册本机 Node;默认通过本机地址访问,远程入口与 HTTPS 由你自行配置。它不会自动配置模型或外部 Agent。</p><p>以下清单用于 Docker Compose 或自行管理 Server/MySQL 的安装。Quick Start 的组件准备和 UUID 规则不同,请按其专页操作;远程访问同样需要安全的网络入口。</p><h2 id="前置条件" tabindex="-1">前置条件 <a class="header-anchor" href="#前置条件" aria-label="Permalink to &quot;前置条件&quot;">​</a></h2><ul><li>一台可运行 Docker Compose 的 Server 主机,或能自行提供 MySQL 8.4、Server 和 Web 的运行环境。</li><li>一个供浏览器访问的 HTTPS 域名;生产环境应由反向代理终止 TLS。</li><li>每台 Windows、Linux 或 macOS 工作主机安装 Node.js <code>&gt;=22.13</code>,并为 Node 运行账号准备可读写的 Workspace;托管对话仅部署在具备 Bubblewrap 的 Linux Node。</li><li>使用内置 MAR Agent:不需要外部 Agent CLI,管理员须先<a href="./../runners/mar-agent">配置、启用并授权模型</a>,且当前用户处于所绑定凭据的作用域内。</li><li>使用 Codex、Claude Code 或 OpenCode:仅安装需要的 Agent CLI,并在同一 Node 服务账号下完成登录或模型服务配置。</li></ul><h2 id="检查清单" tabindex="-1">检查清单 <a class="header-anchor" href="#检查清单" aria-label="Permalink to &quot;检查清单&quot;">​</a></h2><ol><li>为 Server 准备 <code>MAR_PUBLIC_ORIGIN</code>,例如 <code>https://mar.example.com</code>;它必须与浏览器实际访问地址完全一致。</li><li>准备两个强密码:MySQL root 密码和 MySQL 应用账号密码。</li><li>确认 Server 可对外提供 HTTPS,Node 主机可向该地址发起 HTTPS/WSS 出站连接。</li><li>在每台 Node 主机用最终服务账号执行 <code>node --version</code>、<code>npm --version</code>。使用 MAR Agent 时,在管理页测试模型;使用外部 Agent 时再检查对应 CLI 版本。</li><li>记录需要登记的真实 Workspace 路径,不要将整个磁盘作为 <code>allowedRoots</code>。</li></ol><p><strong>成功标志:</strong> 所有 Node 主机都能解析并访问 Server 域名,且服务账号能进入目标 Workspace。</p><h2 id="常见问题" tabindex="-1">常见问题 <a class="header-anchor" href="#常见问题" aria-label="Permalink to &quot;常见问题&quot;">​</a></h2><ul><li>浏览器与 <code>MAR_PUBLIC_ORIGIN</code> 不一致:登录或 WebSocket 可能被 Origin 校验拒绝;先统一协议、域名和端口。</li><li>Agent 在交互终端可用、服务中不可用:通常是服务账号的用户目录或 <code>PATH</code> 不同,按<a href="./../deployment/node-installation">Node 安装与注册</a>配置。</li></ul><p>下一步:<a href="./server-installation">部署 Server 与 Web</a>。</p><p>正式部署的社区与企业状态都要求有效的真实主机 UUID。容器必须将宿主 <code>/sys/class/dmi/id/product_uuid</code> 只读挂载到 <code>/license-host/product_uuid</code>,源文件必须存在;原生正式部署可用 <code>MAR_LICENSE_HOST_PATH</code> 指定真实 UUID 文件。<a href="./npm-quick-start">npm 快速开始</a>无需 UUID,也不支持激活。</p>',12)])])}const h=o(i,[["render",d]]);export{_ as __pageData,h as default};
@@ -1 +1 @@
1
- import{_ as o,o as a,c as t,a3 as r}from"./chunks/framework.BHjrhdiC.js";const _=JSON.parse('{"title":"部署前准备","description":"","frontmatter":{"title":"部署前准备","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"getting-started/prerequisites.md","filePath":"getting-started/prerequisites.md"}'),i={name:"getting-started/prerequisites.md"};function d(l,e,n,s,c,p){return a(),t("div",null,[...e[0]||(e[0]=[r("",11)])])}const h=o(i,[["render",d]]);export{_ as __pageData,h as default};
1
+ import{_ as o,o as a,c as t,a3 as r}from"./chunks/framework.BHjrhdiC.js";const _=JSON.parse('{"title":"部署前准备","description":"","frontmatter":{"title":"部署前准备","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"getting-started/prerequisites.md","filePath":"getting-started/prerequisites.md"}'),i={name:"getting-started/prerequisites.md"};function d(l,e,n,s,c,p){return a(),t("div",null,[...e[0]||(e[0]=[r("",12)])])}const h=o(i,[["render",d]]);export{_ as __pageData,h as default};
@@ -1,4 +1,4 @@
1
- import{_ as s,o as i,c as a,a3 as t}from"./chunks/framework.BHjrhdiC.js";const k=JSON.parse('{"title":"部署 MyAgentRoam Server 与 Web","description":"","frontmatter":{"title":"部署 MyAgentRoam Server 与 Web","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"getting-started/server-installation.md","filePath":"getting-started/server-installation.md"}'),o={name:"getting-started/server-installation.md"};function l(d,e,n,h,p,r){return i(),a("div",null,[...e[0]||(e[0]=[t(`<h1 id="部署-myagentroam-server-与-web" tabindex="-1">部署 MyAgentRoam Server 与 Web <a class="header-anchor" href="#部署-myagentroam-server-与-web" aria-label="Permalink to &quot;部署 MyAgentRoam Server 与 Web&quot;">​</a></h1><p>本页以公开产品根目录的唯一 <code>compose.yaml</code> 部署 MySQL、SearXNG 和自带 Web 的 Server;生产入口由你的反向代理提供 HTTPS。</p><h2 id="正式部署" tabindex="-1">正式部署 <a class="header-anchor" href="#正式部署" aria-label="Permalink to &quot;正式部署&quot;">​</a></h2><p>正式部署使用同一套产品源码和构建,入口为 <code>mar-server/</code>、<code>mar-web-console/</code> 和根 <code>compose.yaml</code>。未激活时显示社区版,提供工作区会话、文件、Git、终端、模型与凭据管理、Skill/MCP,以及个人模板和托管对话;有效企业 License 在同一安装中启用组织、用户、共享授权、SSO 和审计,无需更换镜像。仅供本机体验的另一入口见 <a href="./npm-quick-start">npm 快速开始</a>。</p><p>两种授权状态都使用 <code>/console</code> 工作台和 <code>/docs/</code> 文档中心。原有指向 <code>/</code> 的链接继续可用,浏览器在产品内进入 <code>/console</code>,保留查询参数与片段。部署后应验证实际登录和一次工作区操作,不能仅凭 <code>/health</code> 成功判断完整工作台已可用。</p><h2 id="前置条件" tabindex="-1">前置条件 <a class="header-anchor" href="#前置条件" aria-label="Permalink to &quot;前置条件&quot;">​</a></h2><p>完成<a href="./prerequisites">部署前准备</a>,并取得当前发布版本的项目目录或镜像构建上下文。</p><h2 id="步骤" tabindex="-1">步骤 <a class="header-anchor" href="#步骤" aria-label="Permalink to &quot;步骤&quot;">​</a></h2><ol><li><p>在仅管理员可读的源码部署目录复制根模板并保护配置文件:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .env.example</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .env</span></span>
1
+ import{_ as s,o as i,c as a,a3 as t}from"./chunks/framework.BHjrhdiC.js";const k=JSON.parse('{"title":"部署 MyAgentRoam Server 与 Web","description":"","frontmatter":{"title":"部署 MyAgentRoam Server 与 Web","lastUpdated":"2026-11-10T00:00:00.000Z"},"headers":[],"relativePath":"getting-started/server-installation.md","filePath":"getting-started/server-installation.md"}'),o={name:"getting-started/server-installation.md"};function l(d,e,n,h,p,r){return i(),a("div",null,[...e[0]||(e[0]=[t(`<h1 id="部署-myagentroam-server-与-web" tabindex="-1">部署 MyAgentRoam Server 与 Web <a class="header-anchor" href="#部署-myagentroam-server-与-web" aria-label="Permalink to &quot;部署 MyAgentRoam Server 与 Web&quot;">​</a></h1><p>本页以公开产品根目录的唯一 <code>compose.yaml</code> 部署 MySQL、SearXNG 和自带 Web 的 Server;生产入口由你的反向代理提供 HTTPS。</p><h2 id="正式部署" tabindex="-1">正式部署 <a class="header-anchor" href="#正式部署" aria-label="Permalink to &quot;正式部署&quot;">​</a></h2><p>正式部署使用同一套产品源码和构建,入口为 <code>mar-server/</code>、<code>mar-web-console/</code> 和根 <code>compose.yaml</code>。未激活时显示社区版,提供工作区会话、文件、Git、终端、模型与凭据管理、Skill/MCP,以及个人模板和托管对话;有效企业 License 在同一安装中启用组织、用户、共享授权、SSO 和审计,无需更换镜像。另一种安装入口见 <a href="./npm-quick-start">npm 快速开始</a>。</p><p>两种授权状态都使用 <code>/console</code> 工作台和 <code>/docs/</code> 文档中心。原有指向 <code>/</code> 的链接继续可用,浏览器在产品内进入 <code>/console</code>,保留查询参数与片段。部署后应验证实际登录和一次工作区操作,不能仅凭 <code>/health</code> 成功判断完整工作台已可用。</p><h2 id="前置条件" tabindex="-1">前置条件 <a class="header-anchor" href="#前置条件" aria-label="Permalink to &quot;前置条件&quot;">​</a></h2><p>完成<a href="./prerequisites">部署前准备</a>,并取得当前发布版本的项目目录或镜像构建上下文。</p><h2 id="步骤" tabindex="-1">步骤 <a class="header-anchor" href="#步骤" aria-label="Permalink to &quot;步骤&quot;">​</a></h2><ol><li><p>在仅管理员可读的源码部署目录复制根模板并保护配置文件:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .env.example</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .env</span></span>
2
2
  <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 600</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .env</span></span></code></pre></div><p>继续前填写所有空值:<code>MAR_PUBLIC_ORIGIN</code> 为外部 HTTPS 地址;MySQL Root 与应用密码应分别生成高强度值,<code>MAR_SEARXNG_SECRET</code> 使用随机长字符串;<code>MAR_SERVER_SSH_DIR</code> 指向已存在目录的绝对路径。Compose 会把 <code>MAR_MYSQL_PASSWORD</code> 嵌入数据库 URL,因此应用密码应使用 URL 安全字符。模板故意不提供可用秘密值,缺少必填值时 Compose 会拒绝启动。</p><p><code>MAR_SERVER_SSH_DIR</code> 填写当前独立部署账号的 <code>.ssh</code> 绝对路径。Compose 会把整个目录只读挂载到 Server;即使暂不使用 SSH 技能源,也应创建权限正确的空目录。</p></li><li><p>检查该目录及私钥只允许部署账号访问。如果使用 SSH Skill 源,在部署主机以部署账号验证对目标仓库的非交互读取;将下例中的地址替换为你有权访问的仓库:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">GIT_SSH_COMMAND</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null&#39;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> \\</span></span>
3
3
  <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ls-remote</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">repository-hos</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">t</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">owne</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">r</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">repositor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">y</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">.git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> HEAD</span></span></code></pre></div><p>上例会连接外部仓库,且与 Server 的 SSH Skill 源一样跳过主机指纹校验,存在冒充服务器的风险;仅对可信网络和仓库使用,不要把该选项设为全局 SSH 默认值。<code>.ssh/config</code> 中的 <code>IdentityFile</code> 应写成 <code>~/.ssh/密钥名</code>,不要引用容器内不存在的宿主机绝对路径。宿主机部署账号 UID 应与镜像内 <code>node</code> 用户 UID 一致(默认 <code>1000</code>),否则 OpenSSH 可能因所有权不匹配拒绝私钥。</p></li><li><p>启动服务:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> up</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --build</span></span>
4
- <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ps</span></span></code></pre></div></li><li><p>将反向代理的 HTTPS 流量转发到统一 Server 的宿主机 <code>5190</code> 端口;同时允许 Upgrade/WebSocket 请求,不要把 <code>/api/</code> 或 WebSocket 升级请求缓存。</p></li><li><p>在 Server 主机检查健康状态:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -fsS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://127.0.0.1:5190/health</span></span></code></pre></div></li><li><p>用浏览器打开 <code>MAR_PUBLIC_ORIGIN</code>。</p></li></ol><p><strong>成功标志:</strong> <code>docker compose ps</code> 中 MySQL、SearXNG、Server 三个服务健康,打开 HTTPS 站点后可进入 <code>/console</code> 登录。</p><h2 id="失败排查" tabindex="-1">失败排查 <a class="header-anchor" href="#失败排查" aria-label="Permalink to &quot;失败排查&quot;">​</a></h2><ul><li>MySQL 未健康:执行 <code>docker compose logs mysql</code>,确认密码变量已填写且 <code>13006</code> 未被占用。</li><li>SSH 技能源不可读:确认 <code>MAR_SERVER_SSH_DIR</code> 是绝对路径、部署账号 UID 为 <code>1000</code>,并检查 <code>.ssh/config</code> 的 <code>IdentityFile</code> 在容器内仍指向 <code>~/.ssh/</code>。</li><li>登录页打开但请求失败:检查反向代理是否把 <code>/api/</code> 转到同一站点,以及 <code>MAR_PUBLIC_ORIGIN</code> 是否完全匹配外部地址。</li><li>Node 无法连接:Node 控制连接无需开放入站 HTTP API;检查 Node 到 <code>MAR_PUBLIC_ORIGIN</code> 的出站 HTTPS/WSS 与证书链。</li></ul><p>安全提示:<code>.env</code> 含数据库密码,不要提交 Git、贴入对话或放在 Web 根目录。</p><p>下一步:<a href="./first-login">首次登录与修改初始密码</a>;生产网络细节见<a href="./../deployment/network">网络、TLS 与 WebSocket</a>。</p><p>正式部署的社区与企业状态都要求有效的真实主机 UUID。容器必须将宿主 <code>/sys/class/dmi/id/product_uuid</code> 只读挂载到 <code>/license-host/product_uuid</code>,源文件必须存在;原生正式部署可用 <code>MAR_LICENSE_HOST_PATH</code> 指定真实 UUID 文件。仅供本机体验的 <a href="./npm-quick-start">npm 快速开始</a>无需 UUID,也不支持激活。</p><h2 id="连接独立-node" tabindex="-1">连接独立 Node <a class="header-anchor" href="#连接独立-node" aria-label="Permalink to &quot;连接独立 Node&quot;">​</a></h2><p>正式部署中,Server 只托管 Web 与 API,不包含 Node 执行器。使用工作区、Agent、文件、终端或托管对话前,请独立<a href="./../deployment/node-installation">安装并注册 Node</a>。托管与浏览器执行依赖配置在 Node 主机上,不在 Server 镜像中。</p>`,17)])])}const g=s(o,[["render",l]]);export{k as __pageData,g as default};
4
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ps</span></span></code></pre></div></li><li><p>将反向代理的 HTTPS 流量转发到统一 Server 的宿主机 <code>5190</code> 端口;同时允许 Upgrade/WebSocket 请求,不要把 <code>/api/</code> 或 WebSocket 升级请求缓存。</p></li><li><p>在 Server 主机检查健康状态:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -fsS</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> http://127.0.0.1:5190/health</span></span></code></pre></div></li><li><p>用浏览器打开 <code>MAR_PUBLIC_ORIGIN</code>。</p></li></ol><p><strong>成功标志:</strong> <code>docker compose ps</code> 中 MySQL、SearXNG、Server 三个服务健康,打开 HTTPS 站点后可进入 <code>/console</code> 登录。</p><h2 id="失败排查" tabindex="-1">失败排查 <a class="header-anchor" href="#失败排查" aria-label="Permalink to &quot;失败排查&quot;">​</a></h2><ul><li>MySQL 未健康:执行 <code>docker compose logs mysql</code>,确认密码变量已填写且 <code>13006</code> 未被占用。</li><li>SSH 技能源不可读:确认 <code>MAR_SERVER_SSH_DIR</code> 是绝对路径、部署账号 UID 为 <code>1000</code>,并检查 <code>.ssh/config</code> 的 <code>IdentityFile</code> 在容器内仍指向 <code>~/.ssh/</code>。</li><li>登录页打开但请求失败:检查反向代理是否把 <code>/api/</code> 转到同一站点,以及 <code>MAR_PUBLIC_ORIGIN</code> 是否完全匹配外部地址。</li><li>Node 无法连接:Node 控制连接无需开放入站 HTTP API;检查 Node 到 <code>MAR_PUBLIC_ORIGIN</code> 的出站 HTTPS/WSS 与证书链。</li></ul><p>安全提示:<code>.env</code> 含数据库密码,不要提交 Git、贴入对话或放在 Web 根目录。</p><p>下一步:<a href="./first-login">首次登录与修改初始密码</a>;生产网络细节见<a href="./../deployment/network">网络、TLS 与 WebSocket</a>。</p><p>正式部署的社区与企业状态都要求有效的真实主机 UUID。容器必须将宿主 <code>/sys/class/dmi/id/product_uuid</code> 只读挂载到 <code>/license-host/product_uuid</code>,源文件必须存在;原生正式部署可用 <code>MAR_LICENSE_HOST_PATH</code> 指定真实 UUID 文件。<a href="./npm-quick-start">npm 快速开始</a>无需 UUID,也不支持激活。</p><h2 id="连接独立-node" tabindex="-1">连接独立 Node <a class="header-anchor" href="#连接独立-node" aria-label="Permalink to &quot;连接独立 Node&quot;">​</a></h2><p>正式部署中,Server 只托管 Web 与 API,不包含 Node 执行器。使用工作区、Agent、文件、终端或托管对话前,请独立<a href="./../deployment/node-installation">安装并注册 Node</a>。托管与浏览器执行依赖配置在 Node 主机上,不在 Server 镜像中。</p>`,17)])])}const g=s(o,[["render",l]]);export{k as __pageData,g as default};
@@ -0,0 +1 @@
1
+ import{_ as a,o,c as t,a3 as l}from"./chunks/framework.BHjrhdiC.js";const f=JSON.parse('{"title":"@ 引用文件、文件夹与附件","description":"","frontmatter":{"title":"@ 引用文件、文件夹与附件","lastUpdated":"2026-11-11T00:00:00.000Z"},"headers":[],"relativePath":"workbench/file-reference-and-attachment.md","filePath":"workbench/file-reference-and-attachment.md"}'),i={name:"workbench/file-reference-and-attachment.md"};function r(c,e,n,d,s,p){return o(),t("div",null,[...e[0]||(e[0]=[l('<h1 id="引用文件、文件夹与附件" tabindex="-1">@ 引用文件、文件夹与附件 <a class="header-anchor" href="#引用文件、文件夹与附件" aria-label="Permalink to &quot;@ 引用文件、文件夹与附件&quot;">​</a></h1><p><code>@</code> 引用和附件不同:引用告诉 Agent 使用当前工作区中的文件或文件夹;附件随当前消息上传独立内容。</p><h2 id="步骤" tabindex="-1">步骤 <a class="header-anchor" href="#步骤" aria-label="Permalink to &quot;步骤&quot;">​</a></h2><ol><li>在 Composer 输入 <code>@</code>,从快速索引选择文件或文件夹;键盘上下选择时列表会保持当前定位。选中后显示可删除的文件标签,不把路径写入正文。</li><li>引用文件夹时确认它确实是本次任务所需范围,避免给 Agent 无关的大目录。</li><li>需要发送工作区外内容、图片或独立文本时使用附件按钮,而不是伪造路径引用。</li><li>发送前检查引用标签与附件列表;删除错误项后再发送。</li></ol><p>普通工作模式的同一 <code>@</code> 列表还可选择当前 Node 和 Workspace 中已登记的主会话,匹配会话排在文件之前,不设置类型切换 Tab;输入 <code>@session</code> 或 <code>@session 关键词</code> 可只查会话。裸 <code>@</code> 显示首批会话,文件搜索需要输入路径;每种来源只显示首批结果,结果过多时请细化关键词。当前会话与子会话不列入候选,托管对话和分享入口不提供普通会话目录。</p><p>选择会话与选择文件一样:移除光标处的查询词,显示可删除的会话引用标签,不把标记写入正文。标签保存会话 ID 和选择时的名称,发送时与文件引用统一作为 XML 资源输入交给 Agent,消息回显显示只读引用标签,不显示 XML。相同会话不会重复添加,同名会话按 ID 区分;会话、文件与文件夹引用合计最多 128 项,并随当前工作区草稿恢复。点击标签可以移除;正文为空时按 Backspace 移除最后一个引用。编辑排队消息的正文会保留引用元数据。引用不会导入历史、发送协作消息或自动读取来源会话;是否读取仍由 Agent 及其原有工具和权限决定。</p><p>从剪贴板粘贴达到 100 行或 10000 字符的长文本时,Composer 会自动生成 TXT 附件;输入框原有正文保持不变。</p><p>普通工作区和托管对话上传 BMP 图片时,浏览器会保持原分辨率转换为 PNG,附件名变为 <code>.png</code>,本地原文件不变。源文件及转换结果均不能超过 5 MiB,图片不能超过 1600 万像素;不会自动缩小。转换失败或超限时,请另存为较小的 PNG 后重新添加。PNG、JPEG、GIF、WebP 不受此转换影响。</p><p><strong>成功标志:</strong> Composer 显示文件引用标签或上传附件列表。发送后,<code>@</code> 引用以只读小标签回显;图片附件以不带文件名文字或文件名悬停提示的缩略图卡片回显,其他附件以文件类型图标和文件名列出。点击图片直接在弹窗中放大预览,Ctrl/Cmd+Click 可在独立窗口打开;缩略图加载失败时回退为图片占位提示,点击后仍会重新检查附件是否可用。其他文件使用普通文件预览。图片同时作为视觉输入交给支持图片的 Agent,不只是路径引用。</p><h2 id="引用选中的片段" tabindex="-1">引用选中的片段 <a class="header-anchor" href="#引用选中的片段" aria-label="Permalink to &quot;引用选中的片段&quot;">​</a></h2><p>选区引用与 <code>@文件</code> 不同:它把你此刻看到的文字保存为快照,不要求 Agent 重新读取当前文件。</p><ul><li>在文本文件或 Diff 中选择内容,再从原右键菜单选择<strong>引用</strong>。<strong>全选</strong>只选择当前页已加载的正文,包含滚动范围外的内容;不会读取其他文件、自动引用或发送。移动端从文件底部操作组打开同一菜单。</li><li>在 Chat 的同一条 Agent 回复正文中选中文字,桌面会在选区上方显示<strong>引用</strong>按钮;选区内右键也可复制或引用。移动端保留系统选字菜单,并从该消息已有操作区的<strong>引用</strong>按钮加入选区。链接、图片及非正文内容不被这个菜单接管。</li><li>加入后只出现一个可移除的小标签,正文和原有引用保持不变,文件窗口也不会自动关闭。可继续写意见后发送;只有引用、没有正文也能发送。</li><li>引用发送到来源工作面的草稿;主会话与侧会话不互相投递。菜单打开后切换了目标,请在当前目标重新打开菜单。独立文件窗口不向其他窗口投递引用。</li><li>未保存编辑、历史版本和生成中的回复保留来源说明;加入后的快照不会随文件或回复变化。每段最多 8,000 字符,所有引用共用 128 项及编码后大小限制;超限请缩小选区或移除引用,不会静默截断。</li><li>发送后仍只显示只读小标签,不展开片段或 XML。复制该用户消息会保留公开输入中的引用 XML。普通工作区的片段随原 Workspace 草稿恢复;托管和分享入口沿用各自草稿生命周期,不扩大文件权限。</li></ul><h2 id="附件保留" tabindex="-1">附件保留 <a class="header-anchor" href="#附件保留" aria-label="Permalink to &quot;附件保留&quot;">​</a></h2><ul><li>已发送附件按当前会话保留:准备、排队和执行期间不会清理;会话空闲后保留 30 分钟。</li><li>在期限内继续发送有效消息会暂停清理,再次空闲后重新计时。查看历史、切换会话或打开预览不会延长时间。</li><li>过期后消息中的文件列表保留,但点击提示“文件已过期”;需要继续使用时请重新上传。Node 正常停止也会清理临时附件,不保证原预览地址在重启后保留;普通 Workspace 的 MAR Agent 在<a href="./sessions#正常停止后的自动续作">正常停止交接</a>中会保留尚待发送的附件内容,恢复时重新准备。</li><li>未发送的已完成上传保留 1 小时,移除附件会提前删除暂存文件。<code>@</code> 引用不上传、不复制、不参与附件清理,仍指向工作区中的原文件。</li></ul><h2 id="失败排查" tabindex="-1">失败排查 <a class="header-anchor" href="#失败排查" aria-label="Permalink to &quot;失败排查&quot;">​</a></h2><ul><li>找不到文件:先在当前 Workspace 文件树确认路径;只能引用已授权目录内的内容。</li><li>附件上传失败:检查浏览器网络和提示,重新选择文件;不要把密钥文件作为附件发送。</li></ul><p>安全提示:<code>@</code> 引用不是权限提升,附件也不应包含凭据或应提交到 Git 的秘密。</p><p>下一步:<a href="./files">浏览、搜索与管理文件</a>。</p><p>附件保存在 Node 私有数据目录的 <code>temp-files/</code>,不会在 Workspace 中创建 <code>.mar</code> 或修改 Git 忽略规则。消息中的附件仍可预览和下载,但不能作为 Workspace 文件编辑;预览只在附件保留期间有效。</p>',19)])])}const m=a(i,[["render",r]]);export{f as __pageData,m as default};
@@ -0,0 +1 @@
1
+ import{_ as a,o,c as t,a3 as l}from"./chunks/framework.BHjrhdiC.js";const f=JSON.parse('{"title":"@ 引用文件、文件夹与附件","description":"","frontmatter":{"title":"@ 引用文件、文件夹与附件","lastUpdated":"2026-11-11T00:00:00.000Z"},"headers":[],"relativePath":"workbench/file-reference-and-attachment.md","filePath":"workbench/file-reference-and-attachment.md"}'),i={name:"workbench/file-reference-and-attachment.md"};function r(c,e,n,d,s,p){return o(),t("div",null,[...e[0]||(e[0]=[l("",19)])])}const m=a(i,[["render",r]]);export{f as __pageData,m as default};
@@ -0,0 +1 @@
1
+ import{_ as o,o as a,c as i,a3 as t}from"./chunks/framework.BHjrhdiC.js";const h=JSON.parse('{"title":"浏览、搜索与管理文件","description":"","frontmatter":{"title":"浏览、搜索与管理文件","lastUpdated":"2026-11-11T00:00:00.000Z"},"headers":[],"relativePath":"workbench/files.md","filePath":"workbench/files.md"}'),d={name:"workbench/files.md"};function l(r,e,c,s,n,f){return a(),i("div",null,[...e[0]||(e[0]=[t('<h1 id="浏览、搜索与管理文件" tabindex="-1">浏览、搜索与管理文件 <a class="header-anchor" href="#浏览、搜索与管理文件" aria-label="Permalink to &quot;浏览、搜索与管理文件&quot;">​</a></h1><p>文件面板以懒加载树展示当前 Workspace。文件和文件夹可点击,鼠标悬停可展开更多操作。</p><h2 id="前置条件" tabindex="-1">前置条件 <a class="header-anchor" href="#前置条件" aria-label="Permalink to &quot;前置条件&quot;">​</a></h2><p>当前 Workspace 在线可读;创建、重命名、移动和删除还需要 Node 服务账号文件权限及当前用户的资源运行权。</p><h2 id="步骤" tabindex="-1">步骤 <a class="header-anchor" href="#步骤" aria-label="Permalink to &quot;步骤&quot;">​</a></h2><ol><li>在右侧选择“文件”,展开文件夹并点击文件。文本、Diff、图片、PDF、Office、视频和音频都会在同一文件 Tab 条中打开;每个 Tab 显示文件名和完整路径提示,内容页可以独立切换并保留自己的状态。Tab 内的 × 只关闭对应文件,顶部右侧的“关闭文件窗口”会关闭全部文件 Tab 并返回工作台;在独立文件窗口中则关闭该浏览器窗口。存在未保存修改时会先确认,取消任一确认会保留全部 Tab。<code>Ctrl+W</code>/<code>Alt+W</code> 关闭当前文件 Tab,<code>Esc</code>/<code>Ctrl+Shift+W</code>/<code>Alt+Shift+W</code> 关闭整个文件窗口;Esc 优先关闭最上层查找、菜单或设置弹窗。移动端浏览器返回同样关闭整个文件窗口,取消未保存确认后保持当前窗口。独立文件页与无 Tab 的独立渲染预览沿用相同逻辑;Ctrl 组合只在浏览器交付按键时生效,可使用 Alt 替代。文件树按目录逐层加载;滚动接近已展开目录的底部时自动继续读取,失败可在原位重试。使用顶部“显示过滤”可按名称或相对路径筛选当前已加载的文件和目录,清空输入即可恢复原树;该过滤不会读取尚未展开的目录。</li><li>使用“快速打开”的“全部 / 工作区 / 会话 / 文件 / 符号”页签查找目标。工作区只按展示名称匹配,不匹配路径或 Node 名称;会话只匹配当前工作区已加载会话的标题。所有结果先按匹配度排序,仅在同分时按工作区、会话、文件、符号排列;同为符号时定义先于引用。符号需输入完整名称;定义可先出现,引用稍后补充。选择会话会在当前工作区打开该会话;选择符号或文件后会立即打开预览,不会切换右侧工具;文件树在后台展开上级目录并选中目标,显示“文件”时会定位到该位置。选择工作区会切换或打开对应标签。文件名重复时,可以输入空格分隔的词进一步匹配相对路径,例如 <code>app src</code> 定位 <code>src/app.ts</code>,词的顺序不限;根目录文件也可输入 <code>foo.ts:12</code> 跳到指定行。当前工作区的路径索引按需建立,第一次使用可能显示“正在准备索引”。不同结果类型独立显示进度、失败或超时;结果不完整时可缩小查询,有失败详情和重试入口。使用“搜索”页签可按文件内容查找,并从结果跳到命中行。默认按普通文本搜索;需要模式匹配时,勾选搜索框上方的“使用正则表达式”后再搜索。无效模式会提示错误。</li><li>文件或文件夹名称过长时,会在文件树中省略显示;将鼠标悬停在行上可查看完整相对路径。当前预览文件会在树中保持选中样式。</li><li>将鼠标移到文件或文件夹行上,点击 <code>…</code>:文件可下载、复制相对路径、复制绝对路径、重命名或删除;文件夹可新建文件、新建文件夹、上传、复制相对路径、复制绝对路径、重命名或递归删除。“复制绝对路径”复制 Node 主机上的完整路径,根目录复制 Workspace 的实际根路径;根路径尚未取得时该项不可用。当浏览器与当前 Node 通过已认证回环直连确认位于同一台设备时,菜单还会显示“在本机文件管理器中打开”:Windows 打开文件夹或选中文件,macOS 打开文件夹或在访达中显示文件,Linux 对文件打开其所在目录。此操作要求 Node 运行在可访问用户桌面的会话中,无桌面或系统文件管理器不可用时会显示错误。</li><li>把文件或文件夹拖到另一个文件夹可移动;不能覆盖同名目标,也不能把文件夹移动到自身或其下级目录。</li><li>支持写入的 Node 会让完整 UTF-8 文本默认以编辑模式打开;可在“设置 &gt; 外观”改为默认只读,也可在预览标题栏临时切换。按 <code>Ctrl/Cmd+S</code> 或保存按钮写入,按 <code>Ctrl/Cmd+F</code> 查找,按 <code>Ctrl/Cmd+H</code> 在相同工具栏中查找替换,按 <code>Alt+M</code> 打开符号表并跳到类、函数或章节。补全只使用当前文件和语言基础语法,不是项目级语言服务。超过 1 MiB 的文本仍可编辑和保存,但会使用纯文本模式并关闭语法解析、符号表和补全,以控制浏览器内存占用。</li><li>支持代码导航的 Node 中,按住 <code>Ctrl/Cmd</code> 悬停代码符号可识别可跳转项;单击后候选先显示定义,再显示引用。选择目标会在文件预览顶部新增标签页、定位并选中目标行。在文件预览内按 <code>Alt+Left</code> / <code>Alt+Right</code> 可在代码跳转位置及手动切换的文件 Tab 之间后退、前进,并恢复光标位置;关闭的 Tab 不再进入历史导航。首次打开源码会在后台建立本地索引,构建期间的跳转会等待同一次构建完成。正式支持 TypeScript/JavaScript、Python、Java/Kotlin、Go、Rust、C/C++ 和 C#;其他 Ctags 内置语言仅尽力支持。 符号索引达到容量上限或 Node 的代码导航资源不可用时,导航区域会显示轻量说明,不弹全局错误,也不会显示为“未找到定义”;文件浏览、编辑和保存仍可使用。</li><li>按 Ctrl/Cmd 点击文件可在同一个复用的独立 Console 窗口中打开文件,便于同时保留聊天窗口;窗口会自动选择对应 Workspace,并使用与主窗口完全相同的全屏文件 Tab、编辑、保存、查找和代码导航能力。后续打开直接在该 Console 的文件 Tab 条中累计或激活,不刷新窗口,也不会持续创建新窗口;在独立窗口按 <code>Ctrl+R</code> 刷新仍保持文件窗口并打开最近打开的文件。文本正文和 Git Diff 正文右键提供复制、粘贴、全选、引用、重新加载;只读内容不可粘贴,重新加载未保存的编辑内容需先确认。Markdown 的渲染预览使用另一个无文件 Tab 的独立页面,普通打开仍以源码文本页开始。</li><li>打开 Markdown 文件后,使用标题栏的预览图标在新页面查看渲染结果。独立页固定使用浅色,不跟随控制台主题,正文采用适合打印的 A4 排版,可通过浏览器刷新更新内容。预览设置可开启全浏览器共用的文本水印,启用状态和文本只保存在本浏览器,不提供主题选择。Markdown 支持 Mermaid 图表;相对链接和图片只能访问当前 Workspace 内的文件,<code>http</code>/<code>https</code> 外部图片会由浏览器直接加载。</li><li>HTML/HTM 文件普通打开仍显示源码;文件菜单“预览”、源码页预览图标或 <code>Ctrl/Cmd+Shift+V</code> 在侧栏浏览器显示已保存的版本,不会自动保存草稿。源码窗口暂时收起,文件 Tab 与草稿保留;使用“打开源码”返回。保存进行中请等待完成后再预览。会话中的工作区 HTML 链接直接在浏览器预览,Ctrl/Cmd 点击在新页面渲染;文件树的 Ctrl/Cmd 点击仍打开独立源码窗口。首次预览时,浏览器会与会话一样出现在固定工具右侧,未预览时不显示该标签。浏览器每次只显示一个文件,切换文件会替换页面;标题栏保留文件名,右侧图标可重新加载、打开源码或在外部浏览器中打开。点击标签的 × 关闭预览,不丢弃源码草稿;可从文件面板再次打开源码。独立源码窗口的预览仍在独立页面打开。页面可运行脚本、加载所在目录及下级资源,亦可向外网发送文件。仅预览信任的文件。管理员可配置独立 HTTPS 预览域名;未配置时使用控制台域名,<strong>HTML 脚本以当前登录权限运行,不与工作台隔离</strong>。独立域名需要 DNS、证书及指向 Server 预览路由的反向代理。跨域正文不能向控制台交付按键;预览页面关闭快捷键需先聚焦标题区。</li></ol><p>Markdown/HTML 独立渲染页保留浏览器原生右键菜单,不使用普通文件页的自定义菜单。</p><p>文件或 Diff 读取失败会在对应内容区内显示简短原因和“重试”,保留文件标题与关闭入口,不重复弹出全局错误消息。重试会重新读取同一个目标,不新增文件 Tab;Files 或 Git 列表读取失败也在各自列表内提示并重试。不支持预览或渲染失败时使用下载入口;二进制或没有可显示文本的 Diff 可在允许时打开文件预览。</p><p>统一预览窗口支持代码与文本、常见图片、PDF、DOCX、XLSX、PPTX、常见视频和音频。PDF 由工作台自身渲染,不依赖浏览器是否启用内置 PDF 阅读器;PDF 与媒体按需读取,现代 Office 文件在浏览器本地解析,不会发送到第三方预览服务。PPTX 会同时受可用宽度和高度约束,在超宽或较矮的窗口中保持完整幻灯片比例。旧版 DOC、XLS、PPT 及其他不支持的格式会保留下载入口。单个 Office 文件过大或内容损坏时也会提示改为下载。</p><p>旧编码文本预览会识别带 BOM 的 UTF-16;已知文本文件无法按 UTF-8 解码时,自动尝试 GB18030,损坏的文本可回退为带替换字符的 UTF-8 显示。预览会标明回退解码且始终只读,不转换或覆盖源文件;未知二进制格式仍降级为下载。Git Diff 展示 Git 实际返回的 patch,不根据解码后的预览重新计算差异;工作树不是 UTF-8 不会阻止已有文本 patch 展示,但 Git 判定为二进制的差异仍不做文本比较。</p><p>普通工作模式中的聊天文件链接和图片链接支持 Node 服务账号可读的绝对路径,包括 Workspace 外的会话图片目录;相对路径仍指向当前 Workspace。绝对路径仅用于只读预览和下载,不扩大文件树、搜索或写入范围,也不适用于托管对话。<strong>拥有 Workspace 访问权的用户可通过绝对路径读取 Node 服务账号可读的其他宿主文件;Workspace 和允许根目录不是文件保密边界。</strong> 共享 Node 时应使用合适的服务账号和操作系统文件权限隔离敏感数据。</p><p><strong>成功标志:</strong> 预览标题与树中选中路径一致,刷新树后仍显示真实文件系统结果。</p><h2 id="失败排查" tabindex="-1">失败排查 <a class="header-anchor" href="#失败排查" aria-label="Permalink to &quot;失败排查&quot;">​</a></h2><ul><li>若取消或移除时提示未能确认临时上传已清理,任务会保留而不是静默消失。请重试或联系管理员核查 Node 临时上传状态;刷新页面不会确认清理结果。</li><li>Workspace 文件直传会校验完整文件的 SHA-256,校验失败不会替换目标。已开始的上传中断会报错,不会自动重试、重新授权或改走 Server 从零重传。请主动点击重试;刷新页面后需重新选择同名、同大小且内容未变的源文件,再经新授权从 Node 确认的连续进度恢复。临时上传过期或 Node 重启后需重新上传。开始直传前不可用时仍可回退 Server 上传;下载与预览的既有回退行为不变。</li><li>操作被拒绝:检查 Node 服务账号权限、Workspace 边界和资源授权。不支持写入的 Node、截断文本、Diff 和 Git 历史内容会自动保持只读;低于业务基线的 Node 需先<a href="./../deployment/upgrade">升级</a>。</li><li>正则内容搜索不可用:正则模式依赖 Node 随包提供的 <code>rg</code> 资源。重新安装或升级该 Node 后重试;普通文本搜索仍可在资源缺失时回退执行。</li><li>保存冲突:文件已被 Agent、终端或另一窗口修改。关闭当前修改并重新打开文件,确认最新内容后再编辑;工作台不会强制覆盖。</li><li>预览是 Diff:聊天内文件更改和 Git 文本变更默认进入 Diff;Git Changes / Git History 中支持的图片、音视频、PDF 和 Office 格式直接预览对应工作树或选定提交中的文件。未知二进制及不支持的格式保留降级入口。</li></ul><p>删除和覆盖外的文件操作直接作用于 Node 上的真实目录,没有隐藏回收站;执行重命名、移动或删除前先确认 Git 状态或备份。下一步:<a href="./git-changes">查看 Git Changes 与 Diff</a>。</p><h2 id="常见失败" tabindex="-1">常见失败 <a class="header-anchor" href="#常见失败" aria-label="Permalink to &quot;常见失败&quot;">​</a></h2><ul><li>拖动后无变化:目标目录可能无写权限、属于边界外路径或在拖动过程中发生变更;刷新树后重新选择。</li><li>文件名很长:将鼠标悬停在树行上查看完整相对路径,再执行删除或移动。</li><li>新标签无法打开:允许浏览器弹出新标签。执行型 HTML 在当前域名运行时可能使用当前登录用户已有的权限。</li><li>Office 预览失败:确认文件是 DOCX、XLSX 或 PPTX,而不是仅修改了扩展名的旧格式;仍可使用下载按钮在本机应用中打开。</li></ul><p>选择文件或 Diff 正文后,可从上述菜单<a href="./file-reference-and-attachment#引用选中的片段">加入引用</a>。全选只覆盖当前已加载的正文,不自动引用或读取其他文件;移动端从文件底部操作组打开同一菜单。</p>',18)])])}const T=o(d,[["render",l]]);export{h as __pageData,T as default};
@@ -1 +1 @@
1
- import{_ as o,o as a,c as i,a3 as t}from"./chunks/framework.BHjrhdiC.js";const h=JSON.parse('{"title":"浏览、搜索与管理文件","description":"","frontmatter":{"title":"浏览、搜索与管理文件","lastUpdated":"2026-11-05T00:00:00.000Z"},"headers":[],"relativePath":"workbench/files.md","filePath":"workbench/files.md"}'),d={name:"workbench/files.md"};function l(r,e,c,s,n,p){return a(),i("div",null,[...e[0]||(e[0]=[t("",17)])])}const T=o(d,[["render",l]]);export{h as __pageData,T as default};
1
+ import{_ as o,o as a,c as i,a3 as t}from"./chunks/framework.BHjrhdiC.js";const h=JSON.parse('{"title":"浏览、搜索与管理文件","description":"","frontmatter":{"title":"浏览、搜索与管理文件","lastUpdated":"2026-11-11T00:00:00.000Z"},"headers":[],"relativePath":"workbench/files.md","filePath":"workbench/files.md"}'),d={name:"workbench/files.md"};function l(r,e,c,s,n,f){return a(),i("div",null,[...e[0]||(e[0]=[t("",18)])])}const T=o(d,[["render",l]]);export{h as __pageData,T as default};