@forsion/unit 2.13.4 → 2.13.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/main.mjs +129 -10
- package/package.json +1 -1
- package/release.json +6 -5
- package/web/assets/ArtificialView-DHqb9CTL.js +1 -0
- package/web/assets/AutomationBuilder-CzBKmOiw.js +1 -0
- package/web/assets/CalendarConfigView-Blw47NCs.js +1 -0
- package/web/assets/CalendarSide-CFSzme3H.js +1 -0
- package/web/assets/CalendarView-B8sQfgZt.js +3 -0
- package/web/assets/CalendarView-t91KpUG7.css +1 -0
- package/web/assets/CapabilityMenu-Dzn6RbB1.js +1 -0
- package/web/assets/Chrome-owLewFu4.js +1 -0
- package/web/assets/{CodeView-GZ0BAgoW.js → CodeView-E18NDilX.js} +3 -3
- package/web/assets/CtxMenuButtons-CAiwQkOK.js +1 -0
- package/web/assets/DashboardGridView-CBbYKcCo.js +25 -0
- package/web/assets/DashboardGridView-RoVFSkNO.css +1 -0
- package/web/assets/EventCard-D9uQe7g4.js +1 -0
- package/web/assets/ExcalidrawCanvas-BSOERegJ.js +1 -0
- package/web/assets/ExcalidrawCanvas-BgcFPMpU.css +1 -0
- package/web/assets/FloatingToc-iK08Qpjc.js +1 -0
- package/web/assets/{GitCloneDialog-Bj9G3o-n.css → GitCloneDialog-DOxZk2K0.css} +1 -1
- package/web/assets/GitCloneDialog-DfY0kqhP.js +1 -0
- package/web/assets/HomepageView-BCqFe1Ym.js +4 -0
- package/web/assets/HomepageView-Bx8FbWlY.css +1 -0
- package/web/assets/ImageStudioPanels-DdwihAkT.js +3 -0
- package/web/assets/ImageStudioView-gJSYrmu1.js +1 -0
- package/web/assets/InlineAiPanel-CjYOW0_0.js +1 -0
- package/web/assets/InlineFiles-3g2jMUeA.js +1 -0
- package/web/assets/{MarkdownBlock-DQTuoen3.css → MarkdownBlock-Cqfk5DhC.css} +1 -1
- package/web/assets/MarkdownBlock-DjsGkPZ_.js +58 -0
- package/web/assets/{ModelPill-CzdNh7Mt.css → ModelPill-BiUsuhy3.css} +1 -1
- package/web/assets/ModelPill-DgyXBsL9.js +2 -0
- package/web/assets/MuseLibraryView-D_HBijmU.js +2 -0
- package/web/assets/MuseView-BVDlmM6i.js +7 -0
- package/web/assets/{PageHistoryPanel-Bn4-XmdK.js → PageHistoryPanel-B1EAPZeX.js} +2 -2
- package/web/assets/{PdfAnnotator-Cq8cklTz.js → PdfAnnotator-bdB9evsY.js} +3 -3
- package/web/assets/PenRow-DCOIGlfY.js +1 -0
- package/web/assets/PluginToolCard-BXE5vA1h.js +2 -0
- package/web/assets/PluginToolCard-BmTRr5JT.css +1 -0
- package/web/assets/ProductView-l5Q7uBy6.js +1 -0
- package/web/assets/SettingsPage-fjxfS_Mt.js +3 -0
- package/web/assets/StudioGuestSurface-360CWUwf.js +1 -0
- package/web/assets/TodoListView-BsPt2GUU.js +1 -0
- package/web/assets/Tooltip-CuXpWtdJ.js +1 -0
- package/web/assets/UnifiedPage-6xbFLtXT.js +712 -0
- package/web/assets/UnifiedPage-CTmQpf2T.css +1 -0
- package/web/assets/{ViewSelectionBar-35x8TiLA.js → ViewSelectionBar-C5FDh7fO.js} +2 -2
- package/web/assets/appStore-BskcSDl6.js +455 -0
- package/web/assets/appStore-iy8_Tmac.css +1 -0
- package/web/assets/arrow-up-right-DEykpgsH.js +1 -0
- package/web/assets/{artificial-BzLFkChP.css → artificial-BubVxExB.css} +1 -1
- package/web/assets/astryxBridge-B2IZdPvo.js +69 -0
- package/web/assets/astryxBridge-djzCiy4v.css +1 -0
- package/web/assets/automationListSource-Cm09JKkK.js +1 -0
- package/web/assets/boardSurface-Dv-aVaUJ.js +1 -0
- package/web/assets/calendarNavStore-FKStA7Hh.js +1 -0
- package/web/assets/canvasPrefs-CMulOS0k.js +1 -0
- package/web/assets/chatBoxSurface-BR_G6cxG.js +1 -0
- package/web/assets/chevron-up-C_EDOZzI.js +1 -0
- package/web/assets/{client-CaivGZFR.js → client-DD5czSuF.js} +5 -5
- package/web/assets/code-xml-vTB4LtTf.js +1 -0
- package/web/assets/{codeStudioStore-DhyMazGT.js → codeStudioStore-OswE1_s0.js} +8 -8
- package/web/assets/codingNavigation-BrkLENBZ.css +1 -0
- package/web/assets/contextMenuSurface-DqdYEGuH.js +1 -0
- package/web/assets/copy-plus-CVHqDNny.js +1 -0
- package/web/assets/create-DZWy4zBR.js +14 -0
- package/web/assets/dashboardSurface-Co4byEQm.js +1 -0
- package/web/assets/dbStore-Bc2lC8ZI.js +2 -0
- package/web/assets/deskCapture-BfTzH2aO.js +1 -0
- package/web/assets/{diff2html-Daje9Kkm.js → diff2html-0MkNy2ws.js} +2 -2
- package/web/assets/{docx-preview-CABR7n30.js → docx-preview-CwNWZegI.js} +1 -1
- package/web/assets/draft-DTzuTatQ.js +2 -0
- package/web/assets/drawingStore-BD5m2eqn.js +7 -0
- package/web/assets/file-down-Cjo_T6By.js +1 -0
- package/web/assets/floatingTocSurface-D3IIVNnq.js +1 -0
- package/web/assets/foldActions-utwZpRrA.js +1 -0
- package/web/assets/folder-DiaFWdCg.js +1 -0
- package/web/assets/folder-minus-DUEOcs12.js +1 -0
- package/web/assets/folder-plus-Cmhq0GcR.js +1 -0
- package/web/assets/gestures-Bx9M0le5.js +1 -0
- package/web/assets/git-branch-DzGWffyD.js +1 -0
- package/web/assets/homeCardStatus-NAk4A77P.js +1 -0
- package/web/assets/i18n-CAf4PT1o.css +1 -0
- package/web/assets/i18n.generated-D4-Wu9Wh.js +15 -0
- package/web/assets/imageStudio-CwG21Bat.css +1 -0
- package/web/assets/imageStudio-D67oElIb.js +4 -0
- package/web/assets/index-3VWZ1rsL.js +13 -0
- package/web/assets/index-58wBjkHy.js +3 -0
- package/web/assets/index-B9_zH7f5.js +1 -0
- package/web/assets/index-BQrMYjou.js +1 -0
- package/web/assets/index-BWrWMYua.js +1 -0
- package/web/assets/index-BdLJBf4-.js +1 -0
- package/web/assets/index-Bf3W92Hb.js +1 -0
- package/web/assets/index-BjmPaLFA.js +1 -0
- package/web/assets/index-Bv-vJTzF.js +7 -0
- package/web/assets/index-C7yb62gg.js +1 -0
- package/web/assets/index-C9gBBMYv.js +1 -0
- package/web/assets/index-CiQ59Kib.js +1 -0
- package/web/assets/{index-gt5JBIFf.js → index-CzTUjEMt.js} +2 -2
- package/web/assets/index-D4Qx6o3E.js +1 -0
- package/web/assets/index-DDBcn3UD.js +1 -0
- package/web/assets/index-DEADY94l.js +1 -0
- package/web/assets/index-DGTKsPAQ.js +1 -0
- package/web/assets/index-DRwDqvjf.js +1 -0
- package/web/assets/{index-BGfvNj7R.js → index-DexVkoxH.js} +2 -2
- package/web/assets/{index-O05r2Ty6.js → index-IMOhRWY8.js} +1 -1
- package/web/assets/index-XjvpYHIo.js +1 -0
- package/web/assets/index-YuejkHoJ.js +3412 -0
- package/web/assets/index-pH0266gX.js +1 -0
- package/web/assets/index-sQl_bGM_.js +1 -0
- package/web/assets/index-vbNFy5lS.js +1 -0
- package/web/assets/{invitePage-Bgveo6Hj.js → invitePage-BT_rFfab.js} +1 -1
- package/web/assets/{ipc-B6hkgxQL.js → ipc-8cxXGSZK.js} +1 -1
- package/web/assets/{jszip.min-eU-k-vEy.js → jszip.min-By4OI3XR.js} +1 -1
- package/web/assets/launchpad-BX4jQyF4.js +2 -0
- package/web/assets/launchpad-C9U9hpWJ.css +1 -0
- package/web/assets/layout-grid-CzxXbCDa.js +1 -0
- package/web/assets/linkFollow-J2c0wSgB.js +8 -0
- package/web/assets/{listFold-M8s5JYEC.js → listFold-B_2Xqxn_.js} +1 -1
- package/web/assets/lock-open-DVWCLSZm.js +1 -0
- package/web/assets/log-out-CdKTS7HC.js +1 -0
- package/web/assets/magnet-BmVcZ9U4.js +1 -0
- package/web/assets/main-BlVApHpj.css +1 -0
- package/web/assets/main-CForzSFD.js +15 -0
- package/web/assets/markdownEditorSurface-BiDH0__r.css +1 -0
- package/web/assets/markdownEditorSurface-Bs8FJNHu.js +3 -0
- package/web/assets/mediaPlayer-O9pVRl_k.js +1 -0
- package/web/assets/message-square-plus-CspBv9iG.js +1 -0
- package/web/assets/{messages-CKtabOqy.js → messages-CG7ywZ-K.js} +1 -1
- package/web/assets/minimize-2-Bq4vUin-.js +1 -0
- package/web/assets/mobileEntry-6u7TYC4s.css +1 -0
- package/web/assets/mobileEntry-CptXQ4Ov.js +13 -0
- package/web/assets/modelPickerSurface-C0SkjaPL.js +1 -0
- package/web/assets/nativeDownload-DlnT8U-y.js +1 -0
- package/web/assets/nativeSheetMenu-CVC51DzC.js +1 -0
- package/web/assets/pageStore-BC6Z18n7.css +1 -0
- package/web/assets/pageStore-D_fKLv-o.js +13 -0
- package/web/assets/{pageTree-BYYPgZm_.js → pageTree-DtDKozTg.js} +3 -3
- package/web/assets/pen-line-ho1GgAe2.js +1 -0
- package/web/assets/pen-tool-CV-FKFEZ.js +1 -0
- package/web/assets/pencil-BgF4Kiqp.js +1 -0
- package/web/assets/phoneList-BLVdQcXY.js +1 -0
- package/web/assets/phoneList-BpLxxdq6.css +1 -0
- package/web/assets/pluginChat-C6t6DWhY.js +2 -0
- package/web/assets/react-DOzedx9n.js +1 -0
- package/web/assets/recordSurface-C9SRNjy4.js +1 -0
- package/web/assets/redo-2-DWZTaEz-.js +1 -0
- package/web/assets/rotate-ccw-CyZpL7MX.js +1 -0
- package/web/assets/selectionActions-C2a8ImJm.js +2 -0
- package/web/assets/selectionBarSurface-DaXlyy1s.js +1 -0
- package/web/assets/sessionTitle-BtZ1BteL.js +1 -0
- package/web/assets/settingsPageSurface-Cg8FNZq3.js +1 -0
- package/web/assets/sharePage-vnghra3Q.js +2 -0
- package/web/assets/{shareViewer-BiMqIBxP.js → shareViewer-CWJQHiV-.js} +2 -2
- package/web/assets/star-ZEpUQwnX.js +1 -0
- package/web/assets/tableSurface-DfEdzVDn.js +1 -0
- package/web/assets/tanguProbe-BboOas-a.js +6 -0
- package/web/assets/{terminalView-lbcBgG0c.js → terminalView-xp8ARBLi.js} +3 -3
- package/web/assets/type-CMyP4cKt.js +1 -0
- package/web/assets/undo-2-C4ZCsMsx.js +1 -0
- package/web/assets/{unitAccount-DGwGsmC3.js → unitAccount-DNxfGo3c.js} +1 -1
- package/web/assets/{unitBridge-CE2yAvm0.js → unitBridge-Bq0n1ZM6.js} +1 -1
- package/web/assets/{unitCloudTransport-BGFwkaDM.js → unitCloudTransport-CErylgEO.js} +1 -1
- package/web/assets/unitOwnerAccess-7s-3dfNM.js +1 -0
- package/web/assets/unitShim-BfheyIG8.js +5 -0
- package/web/assets/upload-VtCrluEO.js +1 -0
- package/web/assets/userSpaces-BpeYjLni.js +1 -0
- package/web/assets/viewportLock-B0l1GU_k.css +1 -0
- package/web/assets/viewportLock-cVUalJAI.js +738 -0
- package/web/assets/zoom-in-C7R8s9x-.js +1 -0
- package/web/excalidraw/excalidraw.js +4 -2
- package/web/index.html +12 -13
- package/web/assets/ArtificialView-DLh75dAI.js +0 -1
- package/web/assets/AutomationBuilder-DNWWGnFr.js +0 -1
- package/web/assets/CalendarConfigView-G7je7k9-.js +0 -1
- package/web/assets/CalendarView-B2MtaOJk.js +0 -1
- package/web/assets/CapabilityMenu-DJaZ_Cyt.js +0 -1
- package/web/assets/CheckboxInput-FYXLaZke.js +0 -1
- package/web/assets/Chrome-CFonajM4.js +0 -1
- package/web/assets/DashboardGridView-D9s9pez_.css +0 -1
- package/web/assets/DashboardGridView-Xgw4wa0_.js +0 -17
- package/web/assets/EventCard-_39F_I5M.js +0 -1
- package/web/assets/ExcalidrawCanvas-4uYrLYin.css +0 -1
- package/web/assets/ExcalidrawCanvas-rXujil36.js +0 -1
- package/web/assets/FloatingToc-DNqAkkI0.js +0 -1
- package/web/assets/GitCloneDialog-CQx-O4j1.js +0 -1
- package/web/assets/HomepageView-DcWmTPQO.css +0 -1
- package/web/assets/HomepageView-MYEk3RCs.js +0 -3
- package/web/assets/ImageStudioPanels-4wnb2XF4.js +0 -3
- package/web/assets/ImageStudioView-qrmW8pfx.js +0 -1
- package/web/assets/InlineAiPanel-B3kd1ob2.js +0 -1
- package/web/assets/InlineFiles-Clnqh9jD.js +0 -1
- package/web/assets/MarkdownBlock-DT_wsaja.js +0 -58
- package/web/assets/ModelPill-JaIH3ffZ.js +0 -2
- package/web/assets/MuseLibraryView-DOJVVeU6.js +0 -2
- package/web/assets/MuseView-uxTmjVQa.js +0 -6
- package/web/assets/PenRow-COOYAaxx.js +0 -1
- package/web/assets/ProductView-DPTveulg.js +0 -1
- package/web/assets/RightPanel-BJUacrsf.js +0 -4
- package/web/assets/RightPanel-D0zk1g3I.css +0 -1
- package/web/assets/SketchCard-B_UU5sxV.js +0 -641
- package/web/assets/StudioGuestSurface-yBa4QKfX.js +0 -1
- package/web/assets/TargetHealthNotice-BLzDB-Xl.css +0 -1
- package/web/assets/TargetHealthNotice-CgkdTdhB.js +0 -47
- package/web/assets/TodoListView-CricdCfW.js +0 -1
- package/web/assets/Tooltip-o8ZqIb3L.js +0 -1
- package/web/assets/UnifiedPage-BWAyqj65.js +0 -69
- package/web/assets/UnifiedPage-CWXc_mo1.css +0 -1
- package/web/assets/appStore-CI1_L5OS.js +0 -3357
- package/web/assets/appStore-DQc2marq.css +0 -1
- package/web/assets/approvalText-Cy2UAUAQ.js +0 -2
- package/web/assets/arrow-up-right-BDsMFoNQ.js +0 -1
- package/web/assets/astryxBridge-CF_hpqC2.css +0 -1
- package/web/assets/astryxBridge-CH_c5xjo.js +0 -70
- package/web/assets/automationListSource-CB6AWkL_.js +0 -1
- package/web/assets/boardSurface-CLvEUjbF.js +0 -1
- package/web/assets/book-open-BLzEdGfu.js +0 -1
- package/web/assets/calendarNavStore-BHUNxDx8.js +0 -1
- package/web/assets/canvasPrefs-CvE7mgyq.js +0 -1
- package/web/assets/chatBoxSurface-CuuHLzs5.js +0 -1
- package/web/assets/circle-question-mark-BM4ZRxQS.js +0 -1
- package/web/assets/circle-x-DTcNGZDT.js +0 -1
- package/web/assets/code-xml-AE3mT4T5.js +0 -1
- package/web/assets/codingNavigation-B0kVsy4x.js +0 -53
- package/web/assets/codingNavigation-DHCidM4N.css +0 -1
- package/web/assets/create-1JI2I47p.js +0 -14
- package/web/assets/dashboardSurface-CIE5HybN.js +0 -1
- package/web/assets/deskCapture-COW7aG5Y.js +0 -1
- package/web/assets/emoji-DZ9CA_3l.css +0 -1
- package/web/assets/emoji-DphwSxPx.js +0 -1
- package/web/assets/floatingTocSurface-BOm2QYBK.js +0 -1
- package/web/assets/foldActions-DNbJPlPl.js +0 -1
- package/web/assets/folder-DotgUhYD.js +0 -1
- package/web/assets/folder-plus-aJgL9NeP.js +0 -1
- package/web/assets/gestures-dqncPOwo.js +0 -1
- package/web/assets/git-branch-CwR2qic6.js +0 -1
- package/web/assets/hack2gate-dark-Dx2RtDRI.jpg +0 -0
- package/web/assets/hack2gate-light-DRKq9tyS.jpg +0 -0
- package/web/assets/hand-XNkzNiW2.js +0 -1
- package/web/assets/hard-drive-CfWKRoAE.js +0 -1
- package/web/assets/i18n-CykmULlm.css +0 -1
- package/web/assets/i18n.generated-BwynSSMk.js +0 -15
- package/web/assets/imageStudio-CWgLpC_d.js +0 -2
- package/web/assets/imageStudio-DZ0qGU2s.css +0 -1
- package/web/assets/index-B65ULikK.js +0 -1
- package/web/assets/index-BIIeiIap.js +0 -1
- package/web/assets/index-BOzsniE1.js +0 -297
- package/web/assets/index-BfrjVzia.js +0 -13
- package/web/assets/index-Bi9UtjVz.js +0 -1
- package/web/assets/index-C1uilc9i.js +0 -1
- package/web/assets/index-C3Dc3Ivz.js +0 -1
- package/web/assets/index-CJF_Ld1Y.js +0 -1
- package/web/assets/index-CMARP4oV.js +0 -1
- package/web/assets/index-C_RsQVNm.js +0 -7
- package/web/assets/index-ChyxZMm8.js +0 -1
- package/web/assets/index-CoKcOaZg.js +0 -1
- package/web/assets/index-CuviSCbk.js +0 -1
- package/web/assets/index-Cw43kua8.js +0 -1
- package/web/assets/index-D1fu6XQN.js +0 -3
- package/web/assets/index-DG-hXb63.js +0 -1
- package/web/assets/index-DjnTfJpN.js +0 -1
- package/web/assets/index-Dtw0abst.js +0 -1
- package/web/assets/index-W3ErfZiX.js +0 -1
- package/web/assets/index-Yc56b3XX.js +0 -1
- package/web/assets/index-d4jCdYJH.js +0 -1
- package/web/assets/index-siHtlYTM.js +0 -1
- package/web/assets/launchpad-C2c1MSVX.css +0 -1
- package/web/assets/layout-grid-CraV7nhh.js +0 -1
- package/web/assets/linkFollow-BpvDWzUx.js +0 -8
- package/web/assets/list-tree-cLJw-jYQ.js +0 -1
- package/web/assets/lock-DBkXXwaI.js +0 -1
- package/web/assets/lock-open-C-9-AWct.js +0 -1
- package/web/assets/log-out-C8bDXj9P.js +0 -1
- package/web/assets/main-BiS_5wrB.css +0 -1
- package/web/assets/main-CMk6twzA.js +0 -20
- package/web/assets/markdownEditorSurface-Bql20IAf.css +0 -1
- package/web/assets/markdownEditorSurface-DgQ0TUWH.js +0 -3
- package/web/assets/message-square-plus-8pfimvem.js +0 -1
- package/web/assets/minus-CfA9fAN3.js +0 -1
- package/web/assets/mobileEntry-DS1vohuL.css +0 -1
- package/web/assets/mobileEntry-NcMcK0LV.js +0 -13
- package/web/assets/nativeDownload-CNtwSCy0.js +0 -1
- package/web/assets/pageChrome-BR4cfIaA.js +0 -1
- package/web/assets/pageChrome-BbUhILy0.css +0 -1
- package/web/assets/pen-tool-C5ftHCnm.js +0 -1
- package/web/assets/pencil-ehhM9_9k.js +0 -1
- package/web/assets/phoneList-B6gwUJZF.js +0 -9
- package/web/assets/phoneList-iRdfiKA8.css +0 -1
- package/web/assets/pluginChat-DTTWWiUS.js +0 -2
- package/web/assets/redo-2-DCEAgQlN.js +0 -1
- package/web/assets/rotate-ccw-DdkrbRAB.js +0 -1
- package/web/assets/selectionActions-BQD2kox1.js +0 -2
- package/web/assets/selectionBarSurface-CzUZmJDJ.js +0 -1
- package/web/assets/server-Ddu9f1k3.js +0 -1
- package/web/assets/sharePage-CNrm2xTC.js +0 -2
- package/web/assets/star-Dxv7XANS.js +0 -1
- package/web/assets/tableSurface-Bly1iCXc.js +0 -1
- package/web/assets/terminal-CAmmC9cV.js +0 -1
- package/web/assets/type-Dz6rnTvG.js +0 -1
- package/web/assets/undo-2-B7izWNb_.js +0 -1
- package/web/assets/unitOwnerAccess-D4nKS6Gg.js +0 -1
- package/web/assets/unitShim-2_2hhGxS.js +0 -5
- package/web/assets/upload-DqpRRAhG.js +0 -1
- package/web/assets/userSpaces-VFu4s05v.js +0 -1
- package/web/assets/viewportLock-3AOdDmwi.js +0 -631
- package/web/assets/viewportLock-djvL8fUQ.css +0 -1
- package/web/assets/zoom-in-Bf-eKTnH.js +0 -1
package/README.md
CHANGED
|
@@ -20,9 +20,9 @@ node unit/check-sync.mjs
|
|
|
20
20
|
|
|
21
21
|
When a new stable release is available, merge its tag, resolve conflicts, and run type, plugin, account and local installation checks before building. Verify that fixes in extracted shared handlers are carried forward. The pre-build check refuses exactly one situation: a newer stable tag exists in the repository but not in HEAD's history (packaging from a stale checkout). Any build that is not exactly the tagged commit (later commits, or a package version already bumped past the tag) is recorded in `release.json` as a pre-release rather than refused; a package version behind the baseline tag is refused. It checks fetched tags and does not fetch or merge automatically.
|
|
22
22
|
|
|
23
|
-
`.github/workflows/check-unit.yml` 提供分支检查和手动构建;发行包中的 `release.json` 记录 Desktop
|
|
23
|
+
`.github/workflows/check-unit.yml` 提供分支检查和手动构建;发行包中的 `release.json` 记录 Desktop 基线标签与提交、独立的 `engineVersion`、Unit 修订号、是否预发布及源码提交。桌面与引擎不要求同号,Unit npm 版本仍跟随桌面。检查本身不发布版本。
|
|
24
24
|
|
|
25
|
-
`.github/workflows/check-unit.yml` provides branch validation and manual builds. Each distribution contains `release.json` with its Desktop baseline tag and commit, Unit revision, pre-release flag and source commit. Validation does not publish a release.
|
|
25
|
+
`.github/workflows/check-unit.yml` provides branch validation and manual builds. Each distribution contains `release.json` with its Desktop baseline tag and commit, independent `engineVersion`, Unit revision, pre-release flag and source commit. Desktop and engine need not share a version; the Unit npm version still follows Desktop. Validation does not publish a release.
|
|
26
26
|
|
|
27
27
|
## 构建与安装 / Build and install
|
|
28
28
|
|
package/main.mjs
CHANGED
|
@@ -42,6 +42,15 @@ var init_nativeFeatures = __esm({
|
|
|
42
42
|
}
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
+
// desktop/shared/corePlugins.ts
|
|
46
|
+
var CORE_BUNDLE_IDS;
|
|
47
|
+
var init_corePlugins = __esm({
|
|
48
|
+
"desktop/shared/corePlugins.ts"() {
|
|
49
|
+
"use strict";
|
|
50
|
+
CORE_BUNDLE_IDS = ["forsion-extend", "tangu-computer-use", "forsion-calendar"];
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
45
54
|
// unit/packages.ts
|
|
46
55
|
import { readFile as readFile2, readdir, realpath as realpath2, stat } from "node:fs/promises";
|
|
47
56
|
import { isAbsolute, resolve, sep as sep2 } from "node:path";
|
|
@@ -90,7 +99,10 @@ async function readPackage(dir, appVersion) {
|
|
|
90
99
|
descriptionEn: manifest.descriptionEn,
|
|
91
100
|
onboarding: manifest.onboarding,
|
|
92
101
|
fileExtensions: Array.isArray(manifest.fileExtensions) ? manifest.fileExtensions.filter(isSafePluginExt).map((v) => v.trim().toLowerCase()).slice(0, 8) : [],
|
|
93
|
-
code
|
|
102
|
+
code,
|
|
103
|
+
// 首方核心包(Forsion Extend):页面据 locked 才放出它的商店页、「Forsion 云端」子页与首方接缝(同桌面内置包)。
|
|
104
|
+
// ponytail: 只按 id 认 —— Unit 只装运营方用 CLI 拷进来的本地包(install.ts),没有商店安装;哪天 Unit 能从商店装插件,改成按桌面 builtinBundles 的固定公钥验 SIGNATURE 再标。
|
|
105
|
+
...CORE_BUNDLE_IDS.includes(manifest.id) ? { locked: true } : {}
|
|
94
106
|
};
|
|
95
107
|
}
|
|
96
108
|
if (manifest.runtime) {
|
|
@@ -130,6 +142,7 @@ var init_packages = __esm({
|
|
|
130
142
|
"use strict";
|
|
131
143
|
init_pluginFiles();
|
|
132
144
|
init_nativeFeatures();
|
|
145
|
+
init_corePlugins();
|
|
133
146
|
validId = (id) => typeof id === "string" && /^[a-z][a-z0-9-]*$/.test(id);
|
|
134
147
|
}
|
|
135
148
|
});
|
|
@@ -567,6 +580,7 @@ var IPC = {
|
|
|
567
580
|
// 通用 vault 文本文件读写(供插件文件类型 ctx.app.readFile/writeFile;写走自写账本防 watcher 回弹)。
|
|
568
581
|
readTextFile: "file:read-text",
|
|
569
582
|
writeTextFile: "file:write-text",
|
|
583
|
+
migrateWorkFolder: "file:migrate-work-folder",
|
|
570
584
|
/** 外部改动了 vault 里的**非 .md / 非 .db** 文件(附件、片段 .js…)→ ctx.app.watchFile 的数据源。 */
|
|
571
585
|
fileChange: "file:external-change",
|
|
572
586
|
/** 每插件一份 JSON blob(~/.forsion/plugins-data/<id>.json);ctx.loadData/saveData 的落点。 */
|
|
@@ -665,6 +679,7 @@ var ENGINE_ROUTES = [
|
|
|
665
679
|
{ method: "DELETE", path: "/agent/skills/user/:id", access: "deny-remote", src: "routes/assets.ts", why: "delete user skill" },
|
|
666
680
|
{ method: "GET", path: "/agent/tools", access: "allow", src: "routes/assets.ts", why: "tool list" },
|
|
667
681
|
{ method: "GET", path: "/agent/browser-extension", access: "deny-remote", src: "routes/browserExtension.ts", why: "browser extension pairing credentials" },
|
|
682
|
+
{ method: "POST", path: "/agent/browser-extension/reload-clients", access: "deny-remote", src: "routes/browserExtension.ts", why: "reloads the browser extension on the local machine" },
|
|
668
683
|
{ method: "POST", path: "/agent/browser-extension/reset-code", access: "deny-remote", src: "routes/browserExtension.ts", why: "rotates browser extension pairing credentials" },
|
|
669
684
|
{ method: "GET", path: "/agent/channels", access: "deny-remote", src: "routes/channels.ts", why: "channel config is local-only" },
|
|
670
685
|
{ method: "PUT", path: "/agent/channels/:kind/config", access: "deny-remote", src: "routes/channels.ts", why: "channel config is local-only" },
|
|
@@ -686,6 +701,11 @@ var ENGINE_ROUTES = [
|
|
|
686
701
|
{ method: "GET", path: "/agent/agents/:slug/human", access: "deny-remote", src: "routes/human.ts", why: "host collaboration configuration" },
|
|
687
702
|
{ method: "PUT", path: "/agent/agents/:slug/human", access: "deny-remote", src: "routes/human.ts", why: "host collaboration configuration write" },
|
|
688
703
|
{ method: "POST", path: "/agent/agents/:slug/human/undo", access: "deny-remote", src: "routes/human.ts", why: "host collaboration configuration undo" },
|
|
704
|
+
{ method: "GET", path: "/agent/human/:file", access: "deny-remote", src: "routes/human.ts", why: "host human folder (HUMAN / AGENT / SOUL / MEMORY)" },
|
|
705
|
+
{ method: "PUT", path: "/agent/human/:file", access: "deny-remote", src: "routes/human.ts", why: "host human folder write" },
|
|
706
|
+
{ method: "POST", path: "/agent/human/:file/undo", access: "deny-remote", src: "routes/human.ts", why: "host human folder undo" },
|
|
707
|
+
{ method: "GET", path: "/agent/human/CALENDAR.db", access: "deny-remote", src: "routes/human.ts", why: "host default calendar (human/CALENDAR.db)" },
|
|
708
|
+
{ method: "PUT", path: "/agent/human/CALENDAR.db", access: "deny-remote", src: "routes/human.ts", why: "host default calendar write" },
|
|
689
709
|
{ method: "GET", path: "/agent/project-context/human", access: "deny-remote", src: "routes/human.ts", why: "host collaboration configuration" },
|
|
690
710
|
{ method: "PUT", path: "/agent/project-context/human", access: "deny-remote", src: "routes/human.ts", why: "host collaboration configuration write" },
|
|
691
711
|
{ method: "POST", path: "/agent/project-context/human/undo", access: "deny-remote", src: "routes/human.ts", why: "host collaboration configuration undo" },
|
|
@@ -703,6 +723,8 @@ var ENGINE_ROUTES = [
|
|
|
703
723
|
{ method: "GET", path: "/agent/memory", access: "allow", src: "routes/memory.ts", why: "read memory" },
|
|
704
724
|
{ method: "POST", path: "/agent/memory", access: "deny-remote", src: "routes/memory.ts", why: "memory write" },
|
|
705
725
|
{ method: "POST", path: "/agent/sync", access: "deny-remote", src: "routes/memory.ts", why: "memory sync (design appendix C)" },
|
|
726
|
+
{ method: "GET", path: "/agent/sync/default", access: "allow", src: "routes/memory.ts", why: "account-level agent sync switch (read)" },
|
|
727
|
+
{ method: "PUT", path: "/agent/sync/default", access: "deny-remote", src: "routes/memory.ts", why: "account-level agent sync switch: only this computer decides what it uploads" },
|
|
706
728
|
{ method: "GET", path: "/agent/sync/status", access: "allow", src: "routes/memory.ts", why: "memory sync status" },
|
|
707
729
|
{ method: "DELETE", path: "/agent/agents/:slug/memory/dream", access: "deny-remote", src: "routes/memoryMaintenance.ts", why: "memory maintenance control" },
|
|
708
730
|
{ method: "GET", path: "/agent/agents/:slug/memory/dream", access: "allow", src: "routes/memoryMaintenance.ts", why: "read memory maintenance state" },
|
|
@@ -741,6 +763,7 @@ var ENGINE_ROUTES = [
|
|
|
741
763
|
{ method: "POST", path: "/agent/project-context/git/publish-github", access: "deny-remote", src: "routes/projectContext.ts", why: "creates a GitHub repository with the linked account, adds a remote and pushes" },
|
|
742
764
|
{ method: "POST", path: "/agent/project-context/git/pull", access: "deny-remote", src: "routes/projectContext.ts", why: "git fetch + fast-forward with local credentials (runs repository hooks)" },
|
|
743
765
|
{ method: "POST", path: "/agent/project-context/git/push", access: "deny-remote", src: "routes/projectContext.ts", why: "git push with local credentials" },
|
|
766
|
+
{ method: "POST", path: "/agent/project-context/git/push-target", access: "deny-remote", src: "routes/projectContext.ts", why: "git repository config write (which remote the current branch pushes to)" },
|
|
744
767
|
{ method: "POST", path: "/agent/project-context/git/remote", access: "deny-remote", src: "routes/projectContext.ts", why: "writes the repo config and contacts the remote (may send the signed-in account credentials)" },
|
|
745
768
|
{ method: "POST", path: "/agent/project-context/git/trust", access: "deny-remote", src: "routes/projectContext.ts", why: "trusts repo-provided executable git config" },
|
|
746
769
|
{ method: "DELETE", path: "/agent/project-context/icon", access: "deny-remote", src: "routes/projectContext.ts", why: "project icon write" },
|
|
@@ -777,10 +800,13 @@ var ENGINE_ROUTES = [
|
|
|
777
800
|
{ method: "DELETE", path: "/agent/sessions/:id", access: "deny-remote", src: "routes/sessions.ts", why: "irreversible hard delete of a local session (runs, messages, code checkpoints); remote uses archive (PATCH archived)" },
|
|
778
801
|
{ method: "PATCH", path: "/agent/sessions/:id", access: "allow", src: "routes/sessions.ts", why: "rename / archive / model / project of a session (a remote project_path never widens /unit/host* reads: only locally confirmed project roots count)" },
|
|
779
802
|
{ method: "POST", path: "/agent/sessions/:id/aside", access: "allow", src: "routes/sessions.ts", why: "btw aside (taint propagates, C5)" },
|
|
803
|
+
{ method: "GET", path: "/agent/sessions/:id/asides", access: "allow", src: "routes/sessions.ts", why: "saved btw asides of a session (read)" },
|
|
804
|
+
{ method: "DELETE", path: "/agent/sessions/:id/asides/:asideId", access: "deny-remote", src: "routes/sessions.ts", why: "irreversible delete of a saved btw aside; local only like session hard delete" },
|
|
780
805
|
{ method: "GET", path: "/agent/sessions/:id/background", access: "allow", src: "routes/sessions.ts", why: "background child sessions" },
|
|
781
806
|
{ method: "POST", path: "/agent/sessions/:id/branch", access: "allow", src: "routes/sessions.ts", why: "branch a session (remote taint propagates, C5)" },
|
|
782
807
|
{ method: "GET", path: "/agent/sessions/:id/checkpoints", access: "allow", src: "routes/sessions.ts", why: "list code checkpoints" },
|
|
783
808
|
{ method: "POST", path: "/agent/sessions/:id/checkpoints/restore", access: "deny-remote", src: "routes/sessions.ts", why: "restores host files from checkpoints (design appendix C)" },
|
|
809
|
+
{ method: "POST", path: "/agent/sessions/:id/children", access: "allow", src: "routes/sessions.ts", why: "task card starts a visible child session; remote taint is copied onto its first run and stored marker (C5)" },
|
|
784
810
|
{ method: "POST", path: "/agent/sessions/:id/compact", access: "allow", src: "routes/sessions.ts", why: "compact a session" },
|
|
785
811
|
{ method: "GET", path: "/agent/sessions/:id/config", access: "allow", src: "routes/sessions.ts", why: "read session config" },
|
|
786
812
|
{ method: "PATCH", path: "/agent/sessions/:id/config", access: "allow", src: "routes/sessions.ts", why: "session config patch (field subset + approval ceiling enforced engine-side, P0 \u2463 / C3)" },
|
|
@@ -788,11 +814,13 @@ var ENGINE_ROUTES = [
|
|
|
788
814
|
{ method: "GET", path: "/agent/sessions/:id/detail", access: "allow", src: "routes/sessions.ts", why: "session detail" },
|
|
789
815
|
{ method: "GET", path: "/agent/sessions/:id/messages", access: "allow", src: "routes/sessions.ts", why: "session messages" },
|
|
790
816
|
{ method: "POST", path: "/agent/sessions/:id/messages/delete", access: "deny-remote", src: "routes/sessions.ts", why: "irreversible deletion of local conversation history" },
|
|
817
|
+
{ method: "POST", path: "/agent/sessions/:id/read", access: "allow", src: "routes/sessions.ts", why: "mark a session read (only moves last_read_at)" },
|
|
791
818
|
{ method: "GET", path: "/agent/sessions/:id/status", access: "allow", src: "routes/sessions.ts", why: "live run status (context / tokens / steps)" },
|
|
792
819
|
{ method: "POST", path: "/agent/sessions/:id/suggest", access: "allow", src: "routes/sessions.ts", why: "next-message suggestion for the input box (reads a one-shot in-memory snapshot of the run that just ended; writes nothing)" },
|
|
793
820
|
{ method: "POST", path: "/agent/sessions/:id/team-members/:slug", access: "allow", src: "routes/sessions.ts", why: "open a team member child session (taint propagates, C5)" },
|
|
794
821
|
{ method: "GET", path: "/agent/sessions/:id/timeline", access: "allow", src: "routes/sessions.ts", why: "session timeline" },
|
|
795
822
|
{ method: "GET", path: "/agent/sessions/:id/usage", access: "allow", src: "routes/sessions.ts", why: "session usage" },
|
|
823
|
+
{ method: "GET", path: "/agent/sessions/attention", access: "allow", src: "routes/sessions.ts", why: "per-session unread / waiting flags for row status and the Tangu badge (ids and booleans only)" },
|
|
796
824
|
{ method: "GET", path: "/agent/sessions/search", access: "allow", src: "routes/sessions.ts", why: "session search" },
|
|
797
825
|
{ method: "POST", path: "/agent/solo/:kind/:id/open", access: "allow", src: "routes/solo.ts", why: "open the Agent direct-chat session" },
|
|
798
826
|
{ method: "POST", path: "/agent/solo/:kind/:id/rotate", access: "allow", src: "routes/solo.ts", why: "start a fresh Agent direct-chat session" },
|
|
@@ -1085,6 +1113,7 @@ var VAULT_RPC_LOCAL_ONLY = /* @__PURE__ */ new Set([IPC.emptyTrash, IPC.deleteTr
|
|
|
1085
1113
|
var UNIT_INTERNAL_HEADER = "x-unit-internal";
|
|
1086
1114
|
var UNIT_P2P_HEADER = "x-unit-p2p";
|
|
1087
1115
|
var LOCAL_ONLY_BODY = { code: "LOCAL_ONLY", detail: "This action is only available on the device itself" };
|
|
1116
|
+
var HOST_OFF_BODY = { code: "HOST_OFF", detail: "Device connection is turned off on this computer" };
|
|
1088
1117
|
var BAD_CALLER_BODY = { code: "BAD_CALLER_ASSERTION", detail: "Invalid caller assertion" };
|
|
1089
1118
|
var ENGINE_PATH_CHARS = /^(?:[A-Za-z0-9\-._~!$&'()*+,;=:@/]|%[0-9A-Fa-f]{2})*$/;
|
|
1090
1119
|
var ENGINE_QUERY_CHARS = /^[\x21-\x7e]*$/;
|
|
@@ -1123,6 +1152,8 @@ function engineRouteAccess(method, normPath) {
|
|
|
1123
1152
|
}
|
|
1124
1153
|
var decodeRpcArgs = (args2) => args2.map((a) => a && typeof a === "object" && typeof a.__u8 === "string" ? Buffer.from(a.__u8, "base64") : a);
|
|
1125
1154
|
var encodeRpcResult = (r) => r instanceof Uint8Array ? { __u8: Buffer.from(r).toString("base64") } : r;
|
|
1155
|
+
var newPairStore = () => ({ pending: /* @__PURE__ */ new Map(), byIp: /* @__PURE__ */ new Map() });
|
|
1156
|
+
var DOORBELL_PATHS = /* @__PURE__ */ new Set(["/unit/meta", "/unit/pair/request", "/unit/pair/poll", "/unit/browser-control"]);
|
|
1126
1157
|
var sha256 = (s) => createHash("sha256").update(s).digest("hex");
|
|
1127
1158
|
var PAIR_TTL_MS = 2 * 6e4;
|
|
1128
1159
|
var MIME = {
|
|
@@ -1198,8 +1229,7 @@ function startUnitWeb(deps, opts) {
|
|
|
1198
1229
|
const proxyCallerKey = randomBytes(32).toString("hex");
|
|
1199
1230
|
const seenCallerDispatch = /* @__PURE__ */ new Map();
|
|
1200
1231
|
const ownerProjection = deps.projection?.mode === "local";
|
|
1201
|
-
const pending
|
|
1202
|
-
const pendingByIp = /* @__PURE__ */ new Map();
|
|
1232
|
+
const { pending, byIp: pendingByIp } = opts.pairs ?? newPairStore();
|
|
1203
1233
|
const assetTokens = /* @__PURE__ */ new Map();
|
|
1204
1234
|
const ASSET_TTL_MS = 10 * 6e4;
|
|
1205
1235
|
const gc = () => {
|
|
@@ -1429,6 +1459,10 @@ function startUnitWeb(deps, opts) {
|
|
|
1429
1459
|
}
|
|
1430
1460
|
};
|
|
1431
1461
|
const handler = async (req, res) => {
|
|
1462
|
+
if (opts.doorbell && !DOORBELL_PATHS.has(plainPath(req))) {
|
|
1463
|
+
json2(res, 503, HOST_OFF_BODY);
|
|
1464
|
+
return;
|
|
1465
|
+
}
|
|
1432
1466
|
if (!ownerProjection && lockedNow()) {
|
|
1433
1467
|
const p = plainPath(req);
|
|
1434
1468
|
if (!(p === "/engine" || p.startsWith("/engine/")) && p !== "/vault/rpc" && !lockedRequestAllowed(req.method || "GET", p)) {
|
|
@@ -1494,6 +1528,10 @@ function startUnitWeb(deps, opts) {
|
|
|
1494
1528
|
return;
|
|
1495
1529
|
}
|
|
1496
1530
|
if (path === "/unit/pair/request" && req.method === "POST") {
|
|
1531
|
+
if (opts.doorbell && !opts.doorbell.origins.includes(String(req.headers.origin || ""))) {
|
|
1532
|
+
json2(res, 403, HOST_OFF_BODY);
|
|
1533
|
+
return;
|
|
1534
|
+
}
|
|
1497
1535
|
const prevId = pendingByIp.get(ip);
|
|
1498
1536
|
if (prevId && pending.get(prevId)?.status === "pending") {
|
|
1499
1537
|
json2(res, 429, { detail: "\u5DF2\u6709\u5F85\u786E\u8BA4\u7684\u914D\u5BF9\u8BF7\u6C42", code: "PAIR_PENDING" });
|
|
@@ -1515,7 +1553,7 @@ function startUnitWeb(deps, opts) {
|
|
|
1515
1553
|
pending.set(p.id, p);
|
|
1516
1554
|
pendingByIp.set(ip, p.id);
|
|
1517
1555
|
json2(res, 200, { requestId: p.id, code: p.code, ttlMs: PAIR_TTL_MS });
|
|
1518
|
-
void deps.confirmPair({ name: p.name, code: p.code, ip }).then(async (ok) => {
|
|
1556
|
+
void deps.confirmPair({ name: p.name, code: p.code, ip, expires: p.expires }).then(async (ok) => {
|
|
1519
1557
|
const live = pending.get(p.id);
|
|
1520
1558
|
if (!live || live.status !== "pending" || live.expires < Date.now()) return;
|
|
1521
1559
|
if (!ok) {
|
|
@@ -1547,6 +1585,24 @@ function startUnitWeb(deps, opts) {
|
|
|
1547
1585
|
json2(res, 200, { status: p.status });
|
|
1548
1586
|
return;
|
|
1549
1587
|
}
|
|
1588
|
+
if (path === "/unit/browser-control" && req.method === "GET") {
|
|
1589
|
+
const info = authInfo(req);
|
|
1590
|
+
if (!info.ok) {
|
|
1591
|
+
json2(res, 401, { detail: "Not paired", code: "UNPAIRED" });
|
|
1592
|
+
return;
|
|
1593
|
+
}
|
|
1594
|
+
if (info.via !== "lan" || !isLoopback(req.socket.remoteAddress)) {
|
|
1595
|
+
json2(res, 403, LOCAL_ONLY_BODY);
|
|
1596
|
+
return;
|
|
1597
|
+
}
|
|
1598
|
+
const code = deps.browserControlCode ? await deps.browserControlCode() : null;
|
|
1599
|
+
if (!code) {
|
|
1600
|
+
json2(res, 404, { detail: "Browser control is not available on this computer", code: "BROWSER_CONTROL_UNAVAILABLE" });
|
|
1601
|
+
return;
|
|
1602
|
+
}
|
|
1603
|
+
json2(res, 200, { code });
|
|
1604
|
+
return;
|
|
1605
|
+
}
|
|
1550
1606
|
if (path === "/unit/whoami" && req.method === "GET") {
|
|
1551
1607
|
if (!authed(req)) {
|
|
1552
1608
|
json2(res, 401, { detail: "\u672A\u914D\u5BF9", code: "UNPAIRED" });
|
|
@@ -1856,7 +1912,7 @@ function startUnitWeb(deps, opts) {
|
|
|
1856
1912
|
});
|
|
1857
1913
|
server.requestTimeout = 60 * 60 * 1e3;
|
|
1858
1914
|
return new Promise((resolve8, reject) => {
|
|
1859
|
-
if (deps.routeUpgrade) server.on("upgrade", (req, socket, head) => {
|
|
1915
|
+
if (deps.routeUpgrade && !opts.doorbell) server.on("upgrade", (req, socket, head) => {
|
|
1860
1916
|
if (!deps.routeUpgrade(req, socket, head)) socket.destroy();
|
|
1861
1917
|
});
|
|
1862
1918
|
const sockets = /* @__PURE__ */ new Set();
|
|
@@ -1865,7 +1921,7 @@ function startUnitWeb(deps, opts) {
|
|
|
1865
1921
|
socket.once("close", () => sockets.delete(socket));
|
|
1866
1922
|
});
|
|
1867
1923
|
server.once("error", reject);
|
|
1868
|
-
server.listen(opts.port, opts.bindHost ?? "0.0.0.0", () => {
|
|
1924
|
+
server.listen(opts.port, opts.doorbell ? "127.0.0.1" : opts.bindHost ?? "0.0.0.0", () => {
|
|
1869
1925
|
const { port } = server.address();
|
|
1870
1926
|
resolve8({
|
|
1871
1927
|
port,
|
|
@@ -2980,6 +3036,7 @@ async function startBasicUnit(config, managementOptions = {}) {
|
|
|
2980
3036
|
product.agentBackend = product.nativeFeatures.includes("tangu");
|
|
2981
3037
|
product.spaces = spaces.length ? [] : ["home"];
|
|
2982
3038
|
product.defaultSpace = spaces.includes(config.defaultSpace || "") ? config.defaultSpace : spaces[0] || "home";
|
|
3039
|
+
product.market = visible2.some((r) => !!r.package.ui?.locked);
|
|
2983
3040
|
};
|
|
2984
3041
|
let chain = Promise.resolve(), closing = false, started = false;
|
|
2985
3042
|
const syncRuntimes = async () => {
|
|
@@ -3275,7 +3332,7 @@ init_control();
|
|
|
3275
3332
|
// desktop/package.json
|
|
3276
3333
|
var package_default = {
|
|
3277
3334
|
name: "forsion-desktop",
|
|
3278
|
-
version: "2.13.
|
|
3335
|
+
version: "2.13.6",
|
|
3279
3336
|
description: "Forsion Desktop \u2014 AI \u9A71\u52A8\u7684\u5E94\u7528\u751F\u6001\u7CFB\u7EDF\u7684\u684C\u9762\u7AEF(Electron):Tangu Agent \u5F15\u64CE + LCL \u53EF\u505C\u9760\u5DE5\u4F5C\u533A\u6846\u67B6 + \u53EF\u63D2\u62D4\u529F\u80FD\u7A7A\u95F4(\u5BF9\u8BDD/\u7B14\u8BB0/\u65E5\u5386/\u6536\u4EF6\u7BB1/\u7F16\u7801),\u6309\u4EA7\u54C1\u6863\u6848\u88C1\u51FA\u5168\u5BB6\u6876\u4E0E\u5355\u54C1\u53D1\u884C\u7248",
|
|
3280
3337
|
author: "Forsion",
|
|
3281
3338
|
private: true,
|
|
@@ -3283,8 +3340,9 @@ var package_default = {
|
|
|
3283
3340
|
main: "out/main/main.js",
|
|
3284
3341
|
scripts: {
|
|
3285
3342
|
postinstall: "node build/link-lcl.cjs && node build/copy-excalidraw-assets.cjs && node build/gen-fonts.cjs && node build/fix-pty-helper.cjs",
|
|
3286
|
-
predev: "node scripts/dev-version.check.cjs",
|
|
3343
|
+
predev: "node scripts/dev-version.check.cjs && node build/copy-excalidraw-assets.cjs",
|
|
3287
3344
|
dev: "electron-vite dev --noSandbox",
|
|
3345
|
+
"check:marketplace-upgrade": "node scripts/marketplace-upgrade.e2e.cjs",
|
|
3288
3346
|
"check:visualize": "node scripts/visualize.check.cjs",
|
|
3289
3347
|
"check:intelligent-ui": "node scripts/intelligent-ui.e2e.cjs",
|
|
3290
3348
|
"e2e:intelligent-live": "cd ../tangu-agent && node scripts/live-harness.mjs --only intelligentusers --model codex/gpt-6-luna --timeout 1800000",
|
|
@@ -3293,6 +3351,8 @@ var package_default = {
|
|
|
3293
3351
|
"check:intelligent-ui-setting": "node scripts/intelligent-ui-setting.check.cjs",
|
|
3294
3352
|
"demo:sketch": "node scripts/sketch-demo.record.cjs",
|
|
3295
3353
|
"check:version": "node scripts/dev-version.check.cjs",
|
|
3354
|
+
"check:mini-native-windows": "node scripts/mini-native-windows.e2e.cjs",
|
|
3355
|
+
"check:clip-native-windows": "node scripts/clip-native-windows.e2e.cjs",
|
|
3296
3356
|
build: "electron-vite build",
|
|
3297
3357
|
preview: "electron-vite preview",
|
|
3298
3358
|
web: "vite frontend",
|
|
@@ -3308,6 +3368,8 @@ var package_default = {
|
|
|
3308
3368
|
"e2e:dnd": "node scripts/block-dnd.e2e.cjs",
|
|
3309
3369
|
"e2e:sidebardrop": "node scripts/sidebar-drop.e2e.cjs",
|
|
3310
3370
|
"e2e:notemove": "node scripts/note-move-assets.e2e.cjs",
|
|
3371
|
+
"e2e:notemove:stress": "node scripts/note-move-stress.e2e.cjs",
|
|
3372
|
+
"e2e:notemove:metadata": "node scripts/note-move-metadata.e2e.cjs",
|
|
3311
3373
|
"e2e:filelink": "node scripts/file-wikilink.e2e.cjs",
|
|
3312
3374
|
"e2e:ribbon": "node scripts/ribbon-dnd.e2e.cjs",
|
|
3313
3375
|
"e2e:spacewindow": "node scripts/space-window.e2e.cjs",
|
|
@@ -3321,8 +3383,13 @@ var package_default = {
|
|
|
3321
3383
|
"check:listsrc": "node scripts/plugin-listsrc.check.cjs",
|
|
3322
3384
|
"e2e:latex": "node scripts/e2e-editor.cjs --script=latex-suite.e2e.cjs",
|
|
3323
3385
|
"e2e:activewindow": "node scripts/active-window.e2e.cjs",
|
|
3386
|
+
"check:plugindata": "node scripts/plugin-data.e2e.cjs",
|
|
3324
3387
|
"e2e:recall": "node scripts/recall-rewind.e2e.cjs",
|
|
3325
3388
|
"e2e:chatevents": "node scripts/chat-events.e2e.cjs",
|
|
3389
|
+
"e2e:nested": "node scripts/nested-sessions.e2e.cjs",
|
|
3390
|
+
"e2e:anchors": "node scripts/branch-anchors.e2e.cjs",
|
|
3391
|
+
"e2e:chatcanvas": "node scripts/chat-canvas.e2e.cjs",
|
|
3392
|
+
"e2e:musedm": "node scripts/muse-dm.e2e.cjs",
|
|
3326
3393
|
"e2e:computerhistory": "node scripts/computer-history.e2e.cjs",
|
|
3327
3394
|
"e2e:appdock": "node scripts/app-dock.e2e.cjs",
|
|
3328
3395
|
"e2e:apprefs": "node scripts/app-refs.e2e.cjs",
|
|
@@ -3339,16 +3406,22 @@ var package_default = {
|
|
|
3339
3406
|
"e2e:runlocation": "node scripts/run-location.e2e.cjs",
|
|
3340
3407
|
"check:runlocpill": "node scripts/e2e-editor.cjs --check=run-location-pill",
|
|
3341
3408
|
"e2e:chatlanding": "node scripts/amadeus-chat-landing.e2e.cjs",
|
|
3409
|
+
"e2e:websearch": "node scripts/websearch-settings.e2e.cjs",
|
|
3342
3410
|
"e2e:musespace": "node scripts/muse-space.e2e.cjs",
|
|
3343
3411
|
"e2e:coreplugins": "node scripts/core-plugins.e2e.cjs",
|
|
3344
3412
|
"e2e:restart-update": "node scripts/restart-update.e2e.cjs",
|
|
3413
|
+
"check:engine-update-live": "node scripts/engine-update.live.check.cjs",
|
|
3345
3414
|
"e2e:market-submissions": "node scripts/market-submissions.e2e.cjs",
|
|
3346
3415
|
"e2e:storepages": "node scripts/store-pages.e2e.cjs",
|
|
3347
3416
|
"e2e:market-auto-update": "node scripts/market-auto-update.e2e.cjs",
|
|
3348
3417
|
"e2e:market-open-settings": "node scripts/market-open-settings.e2e.cjs",
|
|
3418
|
+
"e2e:cloud-settings": "node scripts/cloud-settings-groups.e2e.cjs",
|
|
3349
3419
|
"e2e:account": "node scripts/account-center.shot.cjs",
|
|
3350
3420
|
"e2e:accountpopups": "node scripts/account-popups.shot.cjs",
|
|
3351
3421
|
"e2e:extend": "node scripts/extend-seam.e2e.cjs",
|
|
3422
|
+
"e2e:guide": "node scripts/guide-space.e2e.cjs",
|
|
3423
|
+
"check:guide-anchors": "node scripts/guide-space.e2e.cjs --anchors",
|
|
3424
|
+
"e2e:penzor": "node scripts/penzor-space.e2e.cjs",
|
|
3352
3425
|
"e2e:musesettings": "node scripts/muse-settings.e2e.cjs",
|
|
3353
3426
|
"e2e:modelcatalog": "node scripts/model-catalog.e2e.cjs",
|
|
3354
3427
|
"e2e:museagentspace": "node scripts/muse-agentspace.e2e.cjs",
|
|
@@ -3368,6 +3441,9 @@ var package_default = {
|
|
|
3368
3441
|
"check:selectionbar": "node scripts/selection-bar.check.cjs",
|
|
3369
3442
|
"check:promptsuggest": "node scripts/prompt-suggest.check.cjs",
|
|
3370
3443
|
"check:chatlayout": "node scripts/chat-layout.check.cjs",
|
|
3444
|
+
"check:chatscrollhold": "node scripts/chat-scroll-hold.check.cjs",
|
|
3445
|
+
"check:chatcanvasjump": "node scripts/chat-canvas-jump.check.cjs",
|
|
3446
|
+
"check:sendflight": "node scripts/send-flight.check.cjs",
|
|
3371
3447
|
"check:sessionemoji": "node scripts/session-emoji.check.cjs",
|
|
3372
3448
|
"check:messageactions": "node scripts/chat-message-actions.check.cjs",
|
|
3373
3449
|
"check:approval": "node scripts/approval-menu.check.cjs",
|
|
@@ -3375,6 +3451,9 @@ var package_default = {
|
|
|
3375
3451
|
"check:caret": "node scripts/smooth-caret.check.cjs",
|
|
3376
3452
|
"check:spacerestore": "node scripts/space-restore.check.cjs",
|
|
3377
3453
|
"check:spacerestart": "node scripts/space-restart.check.cjs",
|
|
3454
|
+
"check:spacemainpage": "node scripts/space-main-page.check.cjs",
|
|
3455
|
+
"check:rightrules": "node scripts/right-rules.check.cjs",
|
|
3456
|
+
"check:sidetoggle": "node scripts/side-toggle-drift.check.cjs",
|
|
3378
3457
|
"check:spacefallback": "node scripts/space-fallback-persist.check.cjs",
|
|
3379
3458
|
"check:bluebirdspace": "node scripts/bluebird-space.check.cjs",
|
|
3380
3459
|
"check:bluebirdtimestamps": "node scripts/bluebird-space.check.cjs --timestamps",
|
|
@@ -3403,6 +3482,7 @@ var package_default = {
|
|
|
3403
3482
|
"check:editorai": "node scripts/e2e-editor.cjs --check=editor-ai",
|
|
3404
3483
|
"check:menus": "node scripts/e2e-editor.cjs --check=editor-menus",
|
|
3405
3484
|
"check:cloudgap": "node scripts/cloud-gap.check.cjs",
|
|
3485
|
+
"check:cloudvaults": "node scripts/cloud-vault-sections.check.cjs",
|
|
3406
3486
|
"check:amadeusinteractions": "node scripts/e2e-editor.cjs --check=amadeus-interactions",
|
|
3407
3487
|
"check:dashboard": "node scripts/e2e-editor.cjs --check=dashboard",
|
|
3408
3488
|
"check:embedinputs": "node scripts/e2e-editor.cjs --check=embed-inputs",
|
|
@@ -3442,6 +3522,7 @@ var package_default = {
|
|
|
3442
3522
|
"e2e:pdfcite": "node scripts/pdf-citation.e2e.cjs",
|
|
3443
3523
|
"check:hlband": "node scripts/pdf-highlight-geometry.check.cjs",
|
|
3444
3524
|
"e2e:filecite": "node scripts/file-citation.e2e.cjs",
|
|
3525
|
+
"e2e:openfile": "node scripts/open-external-file.e2e.cjs",
|
|
3445
3526
|
"e2e:pathgonefiles": "node scripts/vault-pathgone-files.e2e.cjs",
|
|
3446
3527
|
"e2e:ftoverride": "node scripts/filetype-override.e2e.cjs",
|
|
3447
3528
|
"e2e:pathgoneunmounted": "node scripts/vault-pathgone-unmounted.e2e.cjs",
|
|
@@ -3461,21 +3542,37 @@ var package_default = {
|
|
|
3461
3542
|
"check:modelmenu": "node scripts/model-menu.check.cjs",
|
|
3462
3543
|
"check:menutap": "node scripts/menu-tap.check.cjs",
|
|
3463
3544
|
"check:settingsui": "node scripts/settings-ui.check.cjs",
|
|
3545
|
+
"check:settingsparts": "node scripts/settings-parts.shot.cjs",
|
|
3464
3546
|
"check:agentmemory": "node scripts/agent-memory.check.cjs",
|
|
3465
3547
|
"check:settingsmode": "node scripts/settings-mode.check.cjs",
|
|
3466
3548
|
"check:themecontrast": "node scripts/theme-contrast.check.cjs",
|
|
3467
3549
|
"check:themevisual": "node scripts/theme-visual.check.cjs",
|
|
3468
3550
|
"check:spaceappearance": "node scripts/space-appearance.e2e.cjs",
|
|
3469
3551
|
"check:fps": "node scripts/check-fps.cjs",
|
|
3552
|
+
"probe:longcontent": "node scripts/long-content.probe.cjs",
|
|
3470
3553
|
"check:themeapp": "node scripts/theme-app.check.cjs",
|
|
3471
3554
|
"check:marketui": "node scripts/market-ui.check.cjs",
|
|
3472
3555
|
"probe:marketdl": "node scripts/market-download.probe.cjs",
|
|
3473
3556
|
"check:uiscale": "node scripts/ui-scale.check.cjs",
|
|
3557
|
+
"check:attachfold": "node scripts/chat-attach-fold.check.cjs",
|
|
3558
|
+
"check:imageviewer": "node scripts/chat-image-viewer.check.cjs",
|
|
3559
|
+
"check:shortcuts": "node scripts/shortcut-conflicts.check.cjs",
|
|
3560
|
+
"e2e:cusettings": "node scripts/computer-use-settings.e2e.cjs",
|
|
3474
3561
|
"check:uifont": "node scripts/ui-font.check.cjs",
|
|
3475
3562
|
"check:topchrome": "node scripts/top-chrome.check.cjs",
|
|
3563
|
+
"check:tabtitlebar": "node scripts/tab-titlebar.e2e.cjs",
|
|
3476
3564
|
"check:minicard": "node scripts/mini-card.check.cjs",
|
|
3565
|
+
"check:minidock": "node scripts/mini-dock.e2e.cjs",
|
|
3477
3566
|
"check:floatingpanel": "node scripts/floating-panel.check.cjs",
|
|
3478
3567
|
"check:quietfocus": "node scripts/quiet-focus.check.cjs",
|
|
3568
|
+
"check:windows-background": "node scripts/background-desktop.check.cjs",
|
|
3569
|
+
"check:windows-icons": "node scripts/windows-icons.check.cjs",
|
|
3570
|
+
"check:windows-updater": "node scripts/windows-updater.check.cjs",
|
|
3571
|
+
"check:windows-apprefs": "node scripts/windows-apprefs.check.cjs",
|
|
3572
|
+
"e2e:windows-clip": "node scripts/windows-clip.e2e.cjs",
|
|
3573
|
+
"e2e:windows-clip-browser": "node scripts/windows-clip-browser.check.cjs",
|
|
3574
|
+
"e2e:windows-legacy": "node scripts/windows-legacy-state.e2e.cjs",
|
|
3575
|
+
"e2e:windows-upgrade": "node scripts/windows-upgrade.e2e.cjs",
|
|
3479
3576
|
"check:persistignore": "node scripts/persist-ignore.check.cjs",
|
|
3480
3577
|
"check:spaceicon": "node scripts/space-icon.check.cjs",
|
|
3481
3578
|
"check:spacehidden": "node scripts/plugin-space-hidden.check.cjs",
|
|
@@ -3483,13 +3580,18 @@ var package_default = {
|
|
|
3483
3580
|
"check:plugindeps": "node scripts/plugin-deps.check.cjs",
|
|
3484
3581
|
"check:pluginsync": "node scripts/plugin-install-sync.check.cjs",
|
|
3485
3582
|
"check:first-run": "node scripts/onboarding.check.cjs",
|
|
3583
|
+
"stage:calendar": "node scripts/calendar.stage.cjs",
|
|
3486
3584
|
"stage:first-run": "node scripts/onboarding.stage.cjs",
|
|
3487
3585
|
"check:miniauto": "node scripts/mini-auto.check.cjs",
|
|
3488
3586
|
"check:board": "node scripts/board-paper.check.cjs",
|
|
3489
3587
|
"check:boardlive": "node scripts/e2e-editor.cjs --check=board-live",
|
|
3588
|
+
"check:boardpen": "node scripts/e2e-editor.cjs --check=board-pen",
|
|
3589
|
+
"check:boardview": "node scripts/board-view.electron.cjs",
|
|
3490
3590
|
"check:scrollbar": "node scripts/scrollbar-overlay.check.cjs",
|
|
3491
3591
|
"check:callout": "node scripts/callout-fold.check.cjs",
|
|
3592
|
+
"check:typejitter": "node scripts/type-jitter.probe.cjs",
|
|
3492
3593
|
"check:toggle": "node scripts/e2e-editor.cjs --check=toggle-block",
|
|
3594
|
+
"check:toggleenter:electron": "node scripts/toggle-block.electron.cjs --double-enter",
|
|
3493
3595
|
"check:togglecaret": "node scripts/e2e-editor.cjs --check=toggle-caret",
|
|
3494
3596
|
"check:togglecontent": "node scripts/e2e-editor.cjs --check=toggle-content",
|
|
3495
3597
|
"check:togglemotion": "node scripts/e2e-editor.cjs --check=toggle-motion",
|
|
@@ -3529,12 +3631,19 @@ var package_default = {
|
|
|
3529
3631
|
"probe:startup-windows": "node scripts/startup-windows.probe.cjs",
|
|
3530
3632
|
"probe:startup-trace": "node scripts/startup-trace.probe.cjs",
|
|
3531
3633
|
"check:parity": "node scripts/platform-parity.check.cjs",
|
|
3634
|
+
"check:terms": "node scripts/terms-update.check.cjs",
|
|
3635
|
+
"check:tanguboundary": "node scripts/tangu-boundary.check.cjs --selftest && node scripts/tangu-boundary.check.cjs",
|
|
3636
|
+
"check:achcloud": "node scripts/achievements-cloud.check.cjs",
|
|
3637
|
+
"e2e:spaceswitch": "node scripts/space-switch.electron.cjs",
|
|
3532
3638
|
"check:vitecache": "node scripts/vite-cachedir.check.cjs",
|
|
3533
3639
|
"check:enginetarget": "node scripts/engine-target.check.cjs",
|
|
3534
3640
|
"check:remotechain": "node scripts/remote-chain.e2e.cjs",
|
|
3535
3641
|
"check:streamrenew": "node scripts/stream-renew.check.cjs",
|
|
3536
3642
|
"check:phonedist": "node scripts/lib/phone-dist-stamp.selftest.cjs",
|
|
3537
3643
|
"check:unitswitcher": "node scripts/unit-switcher.check.cjs",
|
|
3644
|
+
"check:device-sidebar": "node scripts/e2e-editor.cjs --check=device-sidebar",
|
|
3645
|
+
"e2e:unitsettings": "node scripts/unit-settings.e2e.cjs",
|
|
3646
|
+
"e2e:unitpublic": "npx tsx scripts/unit-public-extend.e2e.ts",
|
|
3538
3647
|
"check:secrets": "node scripts/device-secrets.e2e.cjs",
|
|
3539
3648
|
"gen:engineroutes": "node scripts/gen-engine-routes.mjs",
|
|
3540
3649
|
"test:ics-tz": 'for tz in Europe/London America/New_York Asia/Shanghai Australia/Lord_Howe UTC; do echo "== $tz"; TZ=$tz vitest run frontend/src/views/calendar/ics.test.ts || exit 1; done',
|
|
@@ -3562,6 +3671,7 @@ var package_default = {
|
|
|
3562
3671
|
"fix:zhpunct": "node scripts/zh-punct.codemod.cjs",
|
|
3563
3672
|
"shot:walk": "node scripts/uiux-walk.shot.cjs",
|
|
3564
3673
|
"check:agentprofile": "node scripts/agent-profile.check.cjs",
|
|
3674
|
+
"check:humanprofile": "node scripts/human-profile.check.cjs",
|
|
3565
3675
|
"check:projectdetails": "node scripts/project-details.check.cjs",
|
|
3566
3676
|
"check:creationcard": "node scripts/creation-card.check.cjs",
|
|
3567
3677
|
"check:teamoutputs": "node scripts/team-outputs.check.cjs",
|
|
@@ -3584,8 +3694,13 @@ var package_default = {
|
|
|
3584
3694
|
"check:shadowcontract": "node scripts/shadow-contract.check.cjs",
|
|
3585
3695
|
"check:shadowsurface": "node scripts/shadow-surface.check.cjs",
|
|
3586
3696
|
"check:calendarui": "node scripts/calendar-ui.check.cjs",
|
|
3697
|
+
"check:calendar-actions": "node scripts/calendar-actions.check.cjs",
|
|
3698
|
+
"e2e:humancal": "node scripts/human-calendar.e2e.cjs",
|
|
3587
3699
|
"check:astryxscope": "node scripts/astryx-scope.check.cjs",
|
|
3700
|
+
"check:astryxhas": "node scripts/astryx-has.check.cjs",
|
|
3701
|
+
"check:restylescope": "node scripts/restyle-scope.check.cjs",
|
|
3588
3702
|
"check:todo": "node scripts/todo-view.check.cjs",
|
|
3703
|
+
"check:homeglyph": "node scripts/home-glyph.check.cjs",
|
|
3589
3704
|
"check:chattabs": "node scripts/chat-multitab.check.cjs",
|
|
3590
3705
|
"check:openbeside": "node scripts/open-beside.check.cjs",
|
|
3591
3706
|
"check:linkmenu": "node scripts/e2e-editor.cjs --check=link-menu",
|
|
@@ -3602,6 +3717,7 @@ var package_default = {
|
|
|
3602
3717
|
"e2e:canvaslive": "node scripts/canvas-live.e2e.cjs",
|
|
3603
3718
|
"e2e:attachment-clipboard": "node scripts/attachment-clipboard.e2e.cjs",
|
|
3604
3719
|
"e2e:seams": "node scripts/plugin-seams.e2e.cjs",
|
|
3720
|
+
"e2e:toolcard": "node scripts/tool-result-card.e2e.cjs",
|
|
3605
3721
|
"check:imgsel": "node scripts/image-select.check.cjs",
|
|
3606
3722
|
"check:coldrag": "node scripts/e2e-editor.cjs --check=columns-realdrag",
|
|
3607
3723
|
"check:topdrag": "node scripts/e2e-editor.cjs --check=toplevel-realdrag",
|
|
@@ -3618,7 +3734,8 @@ var package_default = {
|
|
|
3618
3734
|
"e2e:image-studio": "node scripts/image-studio.e2e.cjs",
|
|
3619
3735
|
"e2e:image-studio:live": "node scripts/image-studio.live.cjs",
|
|
3620
3736
|
"check:permissions": "node scripts/permissions.check.cjs",
|
|
3621
|
-
"check:mininative": "node scripts/mini-auto.check.cjs --native-helper"
|
|
3737
|
+
"check:mininative": "node scripts/mini-auto.check.cjs --native-helper",
|
|
3738
|
+
"e2e:notemove:handoff": "node scripts/note-move-handoff.e2e.cjs"
|
|
3622
3739
|
},
|
|
3623
3740
|
dependencies: {
|
|
3624
3741
|
"@astryxdesign/core": "^0.1.4",
|
|
@@ -3630,7 +3747,8 @@ var package_default = {
|
|
|
3630
3747
|
"@dnd-kit/sortable": "^10.0.0",
|
|
3631
3748
|
"@dnd-kit/utilities": "^3.2.2",
|
|
3632
3749
|
"@excalidraw/excalidraw": "npm:@zsviczian/excalidraw@0.18.122",
|
|
3633
|
-
"@forsion/
|
|
3750
|
+
"@forsion/calendar": "0.1.0",
|
|
3751
|
+
"@forsion/extend": "0.9.2",
|
|
3634
3752
|
"@forsion/tangu-computer-use": "0.7.1",
|
|
3635
3753
|
"@milkdown/kit": "^7.21.2",
|
|
3636
3754
|
"@milkdown/plugin-math": "^7.5.9",
|
|
@@ -3688,6 +3806,7 @@ var package_default = {
|
|
|
3688
3806
|
"@fontsource-variable/jetbrains-mono": "^5.3.0",
|
|
3689
3807
|
"@fontsource/lxgw-wenkai": "^5.3.0",
|
|
3690
3808
|
"@fontsource/noto-sans-sc": "^5.3.0",
|
|
3809
|
+
"@forsion/clip": "2.1.1",
|
|
3691
3810
|
"@iarna/toml": "^2.2.5",
|
|
3692
3811
|
"@types/node": "^20.10.0",
|
|
3693
3812
|
"@types/qrcode": "^1.5.6",
|
package/package.json
CHANGED
package/release.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"desktopVersion": "2.13.
|
|
3
|
-
"
|
|
4
|
-
"
|
|
2
|
+
"desktopVersion": "2.13.6",
|
|
3
|
+
"engineVersion": "2.13.7",
|
|
4
|
+
"desktopTag": "v2.13.6",
|
|
5
|
+
"desktopCommit": "faed29152287edbf622dfed1928052559d6fe0a9",
|
|
5
6
|
"unitRevision": 0,
|
|
6
7
|
"prerelease": false,
|
|
7
|
-
"sourceCommit": "
|
|
8
|
+
"sourceCommit": "faed29152287edbf622dfed1928052559d6fe0a9",
|
|
8
9
|
"sourceDirty": false,
|
|
9
|
-
"builtAt": "2026-10-
|
|
10
|
+
"builtAt": "2026-10-21T19:51:50.093Z",
|
|
10
11
|
"commercialServerIncluded": false
|
|
11
12
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as D,r as d,j as t}from"./index-YuejkHoJ.js";import{p as F,f as T,A as q,aO as M,s as y,a7 as W,l as R}from"./pageStore-D_fKLv-o.js";import"./client-DD5czSuF.js";import{qW as V,e8 as U,jb as _,qX as N,aj as B,E as H,aQ as O,de as X,qY as $,e_ as K,u as Q}from"./appStore-BskcSDl6.js";import{u as Y}from"./codeStudioStore-OswE1_s0.js";import{C as G}from"./CapabilityMenu-Dzn6RbB1.js";import{c as J}from"./react-DOzedx9n.js";/* empty css */import{C as Z}from"./code-xml-vTB4LtTf.js";import{P as aa}from"./pencil-BgF4Kiqp.js";import{A as ta}from"./arrow-up-right-DEykpgsH.js";import"./dbStore-Bc2lC8ZI.js";import"./ipc-8cxXGSZK.js";import"./nativeDownload-DlnT8U-y.js";import"./drawingStore-BD5m2eqn.js";const ia=[["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"m15 10-3 3-3-3",key:"lzhmyn"}],["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}]],ea=F("monitor-down",ia);let p=0;const f=J((i,l)=>({items:[],status:"loading",async load(){const m=window.tangu?.productsList;if(!m){i({status:"error"});return}const n=++p;l().status!=="ready"&&i({status:"loading"});try{const r=await m();n===p&&i({items:r,status:"ready"})}catch{n===p&&l().status!=="ready"&&i({status:"error"})}}})),v=i=>i instanceof Error?i.message:String(i);function ga(){const{t:i,locale:l}=D(),m=f(a=>a.items),n=f(a=>a.status),r=f(a=>a.load),[k]=d.useState(()=>f.getState().status!=="ready"),[S,o]=d.useState(null),w=T(a=>a.spaces.some(e=>e.id==="coding"))&&!!q("code-studio"),[z,g]=d.useState(()=>Date.now());d.useEffect(()=>{r();const a=()=>{g(Date.now()),r()};return window.addEventListener("focus",a),()=>{window.removeEventListener("focus",a)}},[r]),d.useEffect(()=>{const a=setInterval(()=>{document.hidden||g(Date.now())},6e4);return()=>clearInterval(a)},[]);const u=(a,e,s=!1)=>Q.getState().toast(i(a,e),s),E=a=>{R.getState().openView("product",{id:a.id},"main",{newTab:!0})},L=a=>{window.tangu?.openDetached?.([{type:"product",params:{id:a.id}}])},j=a=>{y("coding"),requestAnimationFrame(()=>{Y.getState().openProject(a.root,a.name)})},C=async a=>{const e=window.tangu?.productsShortcut;if(e){o(a.id);try{const{key:s,error:c,vars:h}=$(await e(a.id,i("artificial.shortcut.fallbackName")));u(s,h,c)}catch(s){u("artificial.toast.shortcutFailed",{detail:v(s)},!0)}finally{o(null)}}},A=async a=>{const e=window.tangu?.productsUpdate;if(!e)return;const s=(await K(i("artificial.rename.title"),a.name,{label:i("artificial.rename.label")}))?.trim();if(!(!s||s===a.name)){o(a.id);try{await e(a.id,{name:s}),await r()}catch(c){u("artificial.toast.renameFailed",{detail:v(c)},!0)}finally{o(null)}}},I=async a=>{const e=window.tangu?.productsTrash;if(!(!e||!window.confirm(i(a.external?"artificial.remove.confirm":"artificial.trash.confirm",{name:a.name})))){o(a.id);try{await e(a.id,{action:a.external?"unregister":"trash",dirId:a.dirId}),await r()}catch(s){u("artificial.toast.trashFailed",{detail:v(s)},!0)}finally{o(null)}}},P=a=>{const e=N(a.kind),s=e.icon,c=S===a.id,h=[...e.canLaunch&&window.tangu?.openDetached?[{id:"open-window",label:i("artificial.action.openWindow"),icon:t.jsx(B,{size:14}),onSelect:()=>L(a)}]:[],...w?[{id:"edit",label:i("artificial.action.edit"),icon:t.jsx(Z,{size:14}),onSelect:()=>j(a)}]:[],...e.canShortcut&&window.tangu?.productsShortcut?[{id:"shortcut",label:i("artificial.action.shortcut"),icon:t.jsx(ea,{size:14}),onSelect:()=>{C(a)}}]:[],...window.tangu?.revealHostPath?[{id:"reveal",label:i("artificial.action.reveal"),icon:t.jsx(H,{size:14}),onSelect:()=>{window.tangu?.revealHostPath?.(a.root)}}]:[],...window.tangu?.productsUpdate?[{id:"rename",label:i("artificial.action.rename"),icon:t.jsx(aa,{size:14}),onSelect:()=>{A(a)}}]:[],...window.tangu?.productsTrash?[{id:"trash",label:i(a.external?"artificial.action.remove":"artificial.action.trash"),icon:t.jsx(O,{size:14}),danger:!0,onSelect:()=>{I(a)}}]:[]],b=c||!e.canLaunch&&!w;return t.jsxs("div",{className:"newtab-card art-card","data-artificial-card":!0,"data-product-id":a.id,"data-kind":a.kind,children:[t.jsxs("button",{className:"art-card-main","data-action":"open",disabled:b,"aria-label":e.canLaunch?i("artificial.action.open",{name:a.name}):`${i("artificial.action.edit")} · ${a.name}`,onClick:()=>e.canLaunch?E(a):j(a),children:[t.jsx("span",{className:"newtab-card-ic",children:t.jsx(s,{size:18})}),t.jsx("span",{className:"art-card-name",title:a.name,children:a.name}),!b&&t.jsx(ta,{size:14,className:"art-card-go","aria-hidden":!0})]}),t.jsxs("div",{className:"art-card-foot",children:[t.jsxs("div",{className:"art-card-meta",children:[t.jsx("span",{children:X(a.updatedAt,{now:z,locale:l})}),a.published&&t.jsx("span",{className:"art-badge","data-badge":"published",children:i("artificial.badge.published")}),a.kind==="plugin"&&a.devLoad&&t.jsx("span",{className:"art-badge","data-badge":"devload",children:i("artificial.badge.devLoad")})]}),h.length>0&&t.jsx(G,{label:i("artificial.action.more",{name:a.name}),className:"icon-btn art-card-more",disabled:c,items:h,children:t.jsx(W,{size:14})})]})]},a.id)},x=V(m);return t.jsx("div",{className:"art-root","data-artificial-root":!0,children:t.jsxs("div",{className:"art-inner",children:[t.jsxs("div",{className:"art-head",children:[t.jsx(U,{size:18}),t.jsxs("div",{className:"art-titles",children:[t.jsx("div",{className:"art-title",children:i("view.artificial")}),t.jsx("div",{className:"art-sub",children:i("artificial.subtitle")})]}),t.jsx("button",{className:"icon-btn","data-action":"refresh",title:i("artificial.refresh"),"aria-label":i("artificial.refresh"),onClick:()=>{r()},children:t.jsx(_,{size:14})})]}),n==="loading"&&t.jsxs("div",{className:"art-loading","data-state":"loading",children:[t.jsx(M,{variant:"list"}),t.jsx("span",{className:"art-sr-only",role:"status",children:i("artificial.loading")})]}),n==="error"&&t.jsxs("div",{className:"art-state",role:"alert","data-state":"error",children:[t.jsx("div",{className:"art-state-title",children:i("artificial.loadFailed")}),t.jsx("button",{className:"btn sm","data-action":"retry",onClick:()=>{r()},children:i("common.retry")})]}),n==="ready"&&!x.length&&t.jsxs("div",{className:"art-state","data-state":"empty",children:[t.jsx("div",{className:"art-state-title",children:i("artificial.empty.title")}),t.jsx("p",{children:i("artificial.empty.body")}),w&&t.jsx("button",{className:"btn primary sm","data-action":"go-coding",onClick:()=>y("coding"),children:i("artificial.empty.cta")})]}),n==="ready"&&x.length>0&&t.jsx("div",{className:k?"sk-fade-in":void 0,children:x.map(a=>t.jsxs("div",{className:"newtab-sec","data-kind-group":a.kind,children:[t.jsx("div",{className:"newtab-sec-title",children:i(N(a.kind).labelKey)}),t.jsx("div",{className:"newtab-grid art-grid",children:a.items.map(P)})]},a.kind))})]})})}export{ga as ArtificialView};
|