@runeya/runeya 2.0.106 → 2.0.107
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/agent-manager-2RWV2SXZ.js +9 -0
- package/{chat-N6XONNVG.js → chat-O7ZXCCKV.js} +6 -6
- package/{chunk-NPORVPEO.js → chunk-ELI2TELD.js} +2 -2
- package/{chunk-LTLOVQJQ.js → chunk-J3NAI636.js} +53 -3
- package/chunk-J3NAI636.js.map +1 -0
- package/{chunk-YQISK6BL.js → chunk-JNI4CXJ7.js} +354 -70
- package/chunk-JNI4CXJ7.js.map +1 -0
- package/{chunk-CQCCVPTX.js → chunk-TE57T5GO.js} +29 -7
- package/chunk-TE57T5GO.js.map +1 -0
- package/{chunk-5GYBAMHV.js → chunk-ZDHLWTHW.js} +2 -2
- package/{companion-7AFRBUQI.js → companion-NZU7FNID.js} +4 -4
- package/index.js +3 -3
- package/package.json +1 -1
- package/settings-manager-Q4PZ3UD5.js +9 -0
- package/{src-US4EBM64.js → src-MILB2SQA.js} +115 -42
- package/src-MILB2SQA.js.map +1 -0
- package/{vault-resolver-JR7TCITD.js → vault-resolver-V7KH4FTC.js} +8 -2
- package/web/assets/{AgentScalarChatInterface.vue-BXv2YF_7.js → AgentScalarChatInterface.vue-CvSuHoWx.js} +1 -1
- package/web/assets/{AgentTerminalPage-HbM44kg8.js → AgentTerminalPage-DM7AvnyQ.js} +1 -1
- package/web/assets/AiChatPage-DuXpncYG.js +1 -0
- package/web/assets/{AppLayout-EhZfYcsl.css → AppLayout-DK0hjOjl.css} +1 -1
- package/web/assets/{AppLayout-DJ1dZUtQ.js → AppLayout-DimGQa7G.js} +1 -1
- package/web/assets/{AuditPage-CF53LMHt.js → AuditPage-B_0kBq_9.js} +1 -1
- package/web/assets/CloudAccountPage-BJK2BN44.js +1 -0
- package/web/assets/CloudAccountPage-Bxa_0f6m.css +1 -0
- package/web/assets/CloudAccountPage-HGWX4TH4.js +1 -0
- package/web/assets/{CloudMessagingPage-D15sTToL.js → CloudMessagingPage-CWv16kIi.js} +1 -1
- package/web/assets/{DashboardPage-inYgcB3J.js → DashboardPage-D7uW5Gte.js} +1 -1
- package/web/assets/{DirectoryPickerDialog-DDWbon2r.js → DirectoryPickerDialog-FsJTp3yS.js} +1 -1
- package/web/assets/{EditorIcon-BWhMJTSH.js → EditorIcon-DAVCsZGN.js} +1 -1
- package/web/assets/{EnvironmentForm-DG_9AXml.js → EnvironmentForm-DNUk-CLn.js} +1 -1
- package/web/assets/{EnvironmentFormPage-DYmI2BfZ.js → EnvironmentFormPage-AeYFkQiH.js} +1 -1
- package/web/assets/{EnvironmentListPage-D2l91HzS.js → EnvironmentListPage-zo_QJeYZ.js} +1 -1
- package/web/assets/{KanbanBoardPage-BPH1ywhH.js → KanbanBoardPage-CXSqV6Qh.js} +3 -3
- package/web/assets/KanbanBoardPage-hU10A0U8.css +1 -0
- package/web/assets/{KanbanListPage-Bj9-EbPv.js → KanbanListPage-DZBXXH0r.js} +1 -1
- package/web/assets/LaunchProjectPage-BHLH3peH.css +1 -0
- package/web/assets/LaunchProjectPage-D_Ivnho3.js +1 -0
- package/web/assets/{LaunchServicesPage-CAdAAyfG.js → LaunchServicesPage-BTXi6jNU.js} +1 -1
- package/web/assets/{LogViewer-QRpqcjXC.js → LogViewer-Bqe-albM.js} +1 -1
- package/web/assets/{OrgKeyPrompt-uMjz7Y5A.js → OrgKeyPrompt-D05OEwQM.js} +1 -1
- package/web/assets/{ProcessControls-B6blcC2b.js → ProcessControls-BnlYc5oo.js} +1 -1
- package/web/assets/{ProcessDetailPage-Bi5vk4ah.js → ProcessDetailPage-CsbqvXk8.js} +1 -1
- package/web/assets/{ProcessMetrics-luXa72sd.js → ProcessMetrics-3iA0I20o.js} +1 -1
- package/web/assets/{RandomJobTestPage-uuy7by63.js → RandomJobTestPage-BO3b4l7T.js} +1 -1
- package/web/assets/{ScenarioEditorPage-oyhLaoVE.js → ScenarioEditorPage-CHX44wHI.js} +1 -1
- package/web/assets/{SendToChatDialog-BnZEu35Q.js → SendToChatDialog-8ToadFnr.js} +1 -1
- package/web/assets/{ServiceControlsBar-Dp3r57J4.js → ServiceControlsBar-OVSGVoGc.js} +1 -1
- package/web/assets/{ServiceDetailPage-DBm79vOL.js → ServiceDetailPage-DpqDQl76.js} +1 -1
- package/web/assets/{ServiceFormPage-BGWjKCUH.js → ServiceFormPage-COlkaDyA.js} +1 -1
- package/web/assets/{SettingsPage-CrzdGJlG.css → SettingsPage-B7yKfXK2.css} +1 -1
- package/web/assets/{SettingsPage-BIVmZT7t.js → SettingsPage-YOKL8o_O.js} +30 -30
- package/web/assets/{UnlockPage-DYRFhdrT.js → UnlockPage-B75f6TuX.js} +1 -1
- package/web/assets/{VariablesTable-Cbc_RlnE.js → VariablesTable-siiUpJXY.js} +1 -1
- package/web/assets/{VaultMigrationPage-GlJyIJAw.js → VaultMigrationPage-DcYkoGTq.js} +1 -1
- package/web/assets/{VersionBadge-CSX89ryT.js → VersionBadge-BH9S4OPH.js} +1 -1
- package/web/assets/WikiPage-CxBVPs9x.js +1 -0
- package/web/assets/{WikiView-DyU4eNEh.js → WikiView-DnQhoJpH.js} +1 -1
- package/web/assets/{add-scalar-classes-CxpzHvBM.js → add-scalar-classes-B2maka72.js} +3 -3
- package/web/assets/{autocomplete-COj-K1Nc.js → autocomplete-CsyixLlY.js} +1 -1
- package/web/assets/{basic-shape-diamond.svg-Dw9kJc3l.js → basic-shape-diamond.svg-BbOA3Gz6.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-DeTUNvAm.js → basic-shape-hexagon.svg-DdJgnvDo.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CZe21n5k.js → basic-shape-primary-circle-ellipse-round.svg-Bg3fLGGT.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-DIvBb7uH.js → basic-shape-primary-square-rectangle.svg-CESoq0fN.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-D2Ttq4yx.js → basic-shape-shield.svg-ElM9Zp2x.js} +1 -1
- package/web/assets/{browser-BtPtEa-Z.js → browser-CwiIrBV5.js} +1 -1
- package/web/assets/{browser-8qE0e05E.js → browser-MtZH8oRn.js} +1 -1
- package/web/assets/{card-pbrPkbmk.js → card-D8i3Wb9E.js} +1 -1
- package/web/assets/{checkbox-g16PaQaN.js → checkbox-DfhW4jIw.js} +1 -1
- package/web/assets/{chip-B1jaR69s.js → chip-jxWVyF6O.js} +1 -1
- package/web/assets/{client-DZg134cQ.js → client-BgGTZAbs.js} +1 -1
- package/web/assets/{cloud-chat.store-D899jVQ4.js → cloud-chat.store-DnjVk4Ss.js} +1 -1
- package/web/assets/cloud-client-CJH_Ql5a.js +1 -0
- package/web/assets/cloud-session-DWaO5I68.js +2 -0
- package/web/assets/{column-Pmg7Ma5f.js → column-DucGv9T0.js} +1 -1
- package/web/assets/{computer-device-desktop-monitor.svg-BpU1vmqL.js → computer-device-desktop-monitor.svg-DJbi1v8s.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-CofWATKj.js → computer-device-desktop.svg-DJtxrGiU.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-Bk0WdntU.js → computer-device-laptop.svg-BxPl4SOy.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-4jDLeTUE.js → computer-device-mobile-phone-android-samsung-back.svg-DZyVWDjs.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BtDfk53W.js → computer-device-mobile-phone-android-samsung.svg-CY2rayd7.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-mrfLt2LS.js → computer-device-mobile-phone-iphone-x-back.svg-wB3dvTWI.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-D3hLzA-f.js → computer-device-mobile-phone-iphone-x.svg-DlRKY5sj.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-URFOvX2G.js → computer-device-mobile-tablet-touch.svg-DfslXQQZ.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-CIdkHAYo.js → computer-device-mobile-tablet.svg-CcURGna7.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-BEC9unNd.js → computer-device-network-ethernet-cat6.svg-Dp-TzO2e.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-C_WEyWn-.js → computer-device-network-lan-www.svg-BPpSMigg.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-D2xhIyf7.js → computer-device-network-wifi-connection.svg-CYQyIbfa.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-DwIQxKAQ.js → computer-device-network-wifi-router.svg-DSAd7WFk.js} +1 -1
- package/web/assets/{cssMode-YcxdUWNT.js → cssMode-COezfEv9.js} +1 -1
- package/web/assets/{divider-C95jkWZ7.js → divider-DUL-UFyL.js} +1 -1
- package/web/assets/{docx-preview-B1K7Js_Q.js → docx-preview-BF14ztI2.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-DOmkHECy.js → ecology-science-erlenmeyer-flask.svg-ETcpyMYz.js} +1 -1
- package/web/assets/{fieldset-DEPqiZWe.js → fieldset-CSn4dPXR.js} +1 -1
- package/web/assets/{freemarker2-Bzhvjbz4.js → freemarker2-CqLlcxHC.js} +1 -1
- package/web/assets/{handlebars-CymxzXg4.js → handlebars-Cp1TiX9f.js} +1 -1
- package/web/assets/{html-CouVDmTR.js → html-BzArqvCu.js} +1 -1
- package/web/assets/{htmlMode-Be-vsCic.js → htmlMode-CIRVb85i.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-CTaPLIBa.js → image-flash-lightning.svg-CSTusJ5t.js} +1 -1
- package/web/assets/{image-picture-flower.svg-BkIdyuJf.js → image-picture-flower.svg-Cg9aaOhh.js} +1 -1
- package/web/assets/{index-DkeyMLje.js → index-Q9nkGIct.js} +4 -4
- package/web/assets/{interface-alert-exclamation-diamond.svg-LE6wXJfb.js → interface-alert-exclamation-diamond.svg-JL4lYLy1.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-DnJUBUVG.js → interface-alert-exclamation-triangle-warning.svg-kvz8dLNC.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-BBESAf3A.js → interface-alert-information-circle.svg-DRqP_pYe.js} +1 -1
- package/web/assets/{interface-award-crown.svg-A9FnpbJ_.js → interface-award-crown.svg-CX4w4INE.js} +1 -1
- package/web/assets/{interface-bookmark.svg-BMCuN1KQ.js → interface-bookmark-tag.svg-D5LiJMAo.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-CONBx7yi.js → interface-bookmark.svg-Bx06-XmV.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-BsHBSc-o.js → interface-calendar-date-one.svg-D28mjrW2.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-BsndNDne.js → interface-content-book-open-pages.svg-DvkccrQv.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-D9O4ldas.js → interface-content-book-page.svg-Co_Rf29J.js} +1 -1
- package/web/assets/{interface-content-file.svg-3hZDtYrB.js → interface-content-file.svg-CLqtAgLt.js} +1 -1
- package/web/assets/{interface-content-folder.svg-D2PGz4rg.js → interface-content-folder.svg-C9dHyqkp.js} +1 -1
- package/web/assets/interface-content-folder.svg-kYcgQcTJ.js +1 -0
- package/web/assets/{interface-copy-clipboard.svg-DDENzgQo.js → interface-copy-clipboard.svg-DmF1P-Po.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-D2cQZV5Q.js → interface-edit-attachment.svg-BD_k5qE4.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-DrIFa0gk.js → interface-edit-binocular.svg-BzKsCrsk.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-AnGByEQd.js → interface-edit-magic-wand.svg-CJkxoH8r.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-KNrFMeco.js → interface-edit-tool-paint-roller.svg-CgXiF7qe.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-DF9u9WDQ.js → interface-edit-tool-pencil.svg-CeWHirTd.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-mkb9vXWE.js → interface-favorite-award.svg-B9Vd9Hf6.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-BDIYdX-W.js → interface-favorite-flag.svg-BRp3aMEx.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-DtIvO6z9.js → interface-favorite-heart.svg-B2zeO1q2.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-CEv2Io1P.js → interface-favorite-star.svg-vkH4UOle.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-D0SoJbJE.js → interface-favorite-stars-sparkles.svg-CPTglDfo.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-B-kMOZH8.js → interface-hierarchy-flowchart.svg-D_WG90fj.js} +1 -1
- package/web/assets/{interface-home-house.svg-FOYUzOig.js → interface-home-house.svg-BUYqjZPI.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-BaPGYtZM.js → interface-hyperlink.svg-DU6gyhSU.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-ddMiifOe.js → interface-lighting-brightness.svg-BMX-UMmG.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-WGGCrOPW.js → interface-lock-closed.svg-fm6gJnaL.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-BHdzRkd9.js → interface-lock-open-unlock.svg-D0IkCqrd.js} +1 -1
- package/web/assets/{interface-login-key.svg-C-CaH8gN.js → interface-login-key.svg-BjXwMM_4.js} +1 -1
- package/web/assets/{interface-search.svg-BWvztnST.js → interface-search.svg-Ce8_4eqn.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-BiiP7i7e.js → interface-setting-cog.svg-BCQ9oWrI.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-BaNwYllj.js → interface-share-megaphone-bullhorn.svg-IraxN-RR.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-DpVzHxi1.js → interface-share-rocket.svg-NzwY-7pd.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-DVMadDln.js → interface-share-satellite.svg-CN8f5zE5.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-B1a7LlLT.js → interface-share-space-ship.svg-BMm5tIIq.js} +1 -1
- package/web/assets/{interface-share.svg-BknNtx4U.js → interface-share.svg-5RMe9Dry.js} +1 -1
- package/web/assets/{interface-signal-square.svg-DTf1mlii.js → interface-signal-square.svg-C-RuIJu1.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-DT6LHPex.js → interface-time-clock-circle.svg-B3CNKtVN.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-CNCTqw_R.js → interface-time-hour-glass.svg-o3F09IxK.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-DuMlS4pH.js → interface-users-multiple.svg-Cmqji5Ln.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-BfOraF6E.js → interface-weather-moon.svg-CGM-ZS56.js} +1 -1
- package/web/assets/{javascript-CSbYcb4a.js → javascript-qSezXPr1.js} +1 -1
- package/web/assets/{jsonMode-BfABTJ_P.js → jsonMode-BvjmRSYr.js} +1 -1
- package/web/assets/{liquid-D8zk2iFJ.js → liquid-CH1qgG2G.js} +1 -1
- package/web/assets/{lspLanguageFeatures-CDjcX5cq.js → lspLanguageFeatures-CtBsCddT.js} +1 -1
- package/web/assets/{mail-chat-bubble-square.svg-B57LhJ7L.js → mail-chat-bubble-square.svg-DvStF3KW.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-Zh4WfmfD.js → mail-send-email-paper-airplane.svg-CwTkfLk9.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-B3JTaotd.js → mail-send-envelope.svg-Dkh_5t2W.js} +1 -1
- package/web/assets/{mdx-Rt1S5V6O.js → mdx-BqogtCJ-.js} +1 -1
- package/web/assets/{minus-h_LYd9EK.js → minus-B2dZQvCq.js} +1 -1
- package/web/assets/modal-B6NeZlOc.js +1 -0
- package/web/assets/{modal--Ilf4bg_.js → modal-BkbDSZxh.js} +1 -1
- package/web/assets/{money-cashier-receipt.svg-BYcjjmII.js → money-cashier-receipt.svg-zKWFfD0k.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-D_eoPfYw.js → money-currency-dollar-pay.svg-D5lfefuk.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-BVafbTUR.js → money-graph-arrow-increase.svg-Bd2mW0uZ.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-DFCnoSVq.js → money-graph-bar-chart-increase.svg-DegjdGbk.js} +1 -1
- package/web/assets/{multiselect-DlGWFLJR.js → multiselect-DeUaJiPX.js} +1 -1
- package/web/assets/{nature-ecology-leaf.svg-DI19KkR3.js → nature-ecology-leaf.svg-BbmZ_3cd.js} +1 -1
- package/web/assets/{password-BQyr-83Q.js → password-D1YX3MCu.js} +1 -1
- package/web/assets/{phone-telephone.svg-si7GWPbw.js → phone-telephone.svg-B6UL6Fhu.js} +1 -1
- package/web/assets/{plus-yTeMgVZF.js → plus-BmifHgiX.js} +1 -1
- package/web/assets/process.store-BucXc8GP.js +1 -0
- package/web/assets/{programming-bug.svg-C8_FsRk_.js → programming-bug.svg-Dhr7h5Lm.js} +1 -1
- package/web/assets/{programming-cloud.svg-Djjnh8pM.js → programming-cloud.svg-DIse9DrB.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-Cw72ZkUG.js → programming-computer-database-server.svg-BlKvXZnN.js} +1 -1
- package/web/assets/{programming-computer-database.svg-C0Z7_RVR.js → programming-computer-database.svg-Du4GGdek.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-BvERcUAT.js → programming-module-four-layout.svg-TcO3xW7h.js} +1 -1
- package/web/assets/{programming-module-three.svg-BkoUon6u.js → programming-module-three.svg-6UNuJszx.js} +1 -1
- package/web/assets/{programming-module.svg-CK1yw5W-.js → programming-module.svg-BFkOw80L.js} +1 -1
- package/web/assets/{programming-script-code.svg-BhU73hpj.js → programming-script-code.svg-CPNpYr6l.js} +1 -1
- package/web/assets/project-launch.store-Xo3pwupQ.js +1 -0
- package/web/assets/project.store-Bdp-Dw-w.js +1 -0
- package/web/assets/{python-CSf8HAN9.js → python-W_UHovJ1.js} +1 -1
- package/web/assets/{razor-BKjp9q-U.js → razor-BQiPtbwG.js} +1 -1
- package/web/assets/router-DZShz0-l.js +1 -0
- package/web/assets/settings-scope-vqQX-GF1.js +1 -0
- package/web/assets/{settings.store-BBoXO9_c.js → settings.store-DqnPoZDR.js} +1 -1
- package/web/assets/{shopping-cart.svg-CgRtQ4k-.js → shopping-cart.svg-Bux9YEU6.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-XdAdBUaO.js → shopping-gift-present.svg-_h-yzC6c.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-BaFPv3xL.js → shopping-shipping-box-parcel-package.svg-BdhGUAKV.js} +1 -1
- package/web/assets/{src-DeCIcklm.js → src-BL1Lafqz.js} +1 -1
- package/web/assets/{src-CRQ32_Qg.js → src-BsHOvodv.js} +1 -1
- package/web/assets/{src-S24lFUYb.js → src-cvMrX61Z.js} +3 -3
- package/web/assets/{tabpanel-DbMhKzgJ.js → tabpanel-B7UUtaKJ.js} +1 -1
- package/web/assets/{tag-new-circle.svg-BwxdYwp4.js → tag-new-circle.svg-CPl83AFc.js} +1 -1
- package/web/assets/theme-CuU9r36Y.js +1 -0
- package/web/assets/{toggleswitch-DKXm3drm.js → toggleswitch-CqZ2j960.js} +1 -1
- package/web/assets/{travel-map-earth-globe.svg-B3QIUens.js → travel-map-earth-globe.svg-mdZXLqAH.js} +1 -1
- package/web/assets/trpc-i_kC7f4I.js +1 -0
- package/web/assets/{tsMode-KbYg0Qfw.js → tsMode-BTrmDRFt.js} +1 -1
- package/web/assets/{typescript-UzU12abv.js → typescript-B5jdwmxa.js} +1 -1
- package/web/assets/useAiChatDrawer-ChqgY66m.js +1 -0
- package/web/assets/{useCloudOrg-CXvwb5Fo.js → useCloudOrg-Dq8l_9Ry.js} +1 -1
- package/web/assets/useProjectCatalog-BE9Yy2SC.js +1 -0
- package/web/assets/useProjectCloudOrg-DAj0XB8D.js +1 -0
- package/web/assets/{xml-CkgxvNFc.js → xml-vcJlRCph.js} +1 -1
- package/web/assets/{yaml-Cjr4aAq9.js → yaml-CfcdnZ_c.js} +1 -1
- package/web/index.html +1 -1
- package/agent-manager-4XJUIZKL.js +0 -9
- package/chunk-CQCCVPTX.js.map +0 -1
- package/chunk-LTLOVQJQ.js.map +0 -1
- package/chunk-YQISK6BL.js.map +0 -1
- package/settings-manager-Y4GNAXOH.js +0 -9
- package/src-US4EBM64.js.map +0 -1
- package/web/assets/AiChatPage-BTsALiaV.js +0 -1
- package/web/assets/CloudAccountPage-BttYjaR8.js +0 -1
- package/web/assets/CloudAccountPage-Dou70Ljn.js +0 -1
- package/web/assets/CloudAccountPage-g6lFVpsX.css +0 -1
- package/web/assets/KanbanBoardPage-BOVq3zOt.css +0 -1
- package/web/assets/LaunchProjectPage-CHpVVYBa.css +0 -1
- package/web/assets/LaunchProjectPage-ObKhBvlS.js +0 -1
- package/web/assets/WikiPage-DAPhZkpS.js +0 -1
- package/web/assets/cloud-session-DSjPbs8C.js +0 -1
- package/web/assets/interface-content-folder.svg-GTysMuP_.js +0 -1
- package/web/assets/modal-Wk0CWaUJ.js +0 -1
- package/web/assets/process.store-CvrK-4rR.js +0 -1
- package/web/assets/project-launch.store-D5cyKKyw.js +0 -1
- package/web/assets/project.store-OwPRdjA0.js +0 -1
- package/web/assets/router-DuWVvMLT.js +0 -1
- package/web/assets/settings-scope-D7NFCXjg.js +0 -1
- package/web/assets/theme-pRVEu5SJ.js +0 -1
- package/web/assets/trpc-Cf_8kWCl.js +0 -1
- package/web/assets/useAiChatDrawer-DCVhP5N0.js +0 -1
- package/web/assets/useProjectCatalog-Bth_aDP4.js +0 -1
- package/web/assets/useProjectCloudOrg-MUCjKP3P.js +0 -1
- /package/{agent-manager-4XJUIZKL.js.map → agent-manager-2RWV2SXZ.js.map} +0 -0
- /package/{chat-N6XONNVG.js.map → chat-O7ZXCCKV.js.map} +0 -0
- /package/{chunk-NPORVPEO.js.map → chunk-ELI2TELD.js.map} +0 -0
- /package/{chunk-5GYBAMHV.js.map → chunk-ZDHLWTHW.js.map} +0 -0
- /package/{companion-7AFRBUQI.js.map → companion-NZU7FNID.js.map} +0 -0
- /package/{settings-manager-Y4GNAXOH.js.map → settings-manager-Q4PZ3UD5.js.map} +0 -0
- /package/{vault-resolver-JR7TCITD.js.map → vault-resolver-V7KH4FTC.js.map} +0 -0
- /package/web/assets/{abap-DIWaXxy4.js → abap-cDlgWO6H.js} +0 -0
- /package/web/assets/{apex-D4-KnjW_.js → apex-DxzSGotK.js} +0 -0
- /package/web/assets/{azcli-IfDsRCLo.js → azcli-CUNfZLtQ.js} +0 -0
- /package/web/assets/{bat-DWkIEnW3.js → bat-C-oKGifY.js} +0 -0
- /package/web/assets/{bicep-CsOqEKmZ.js → bicep-C4xTl9QV.js} +0 -0
- /package/web/assets/{browser-BRPZK8RN.js → browser-CE5P0iHW.js} +0 -0
- /package/web/assets/{cameligo-CVJihesZ.js → cameligo-COpO1ZvP.js} +0 -0
- /package/web/assets/{clojure-CPXjbAsV.js → clojure-D8gp5eAN.js} +0 -0
- /package/web/assets/{coffee-Dk6AGUBs.js → coffee-De9HMN-q.js} +0 -0
- /package/web/assets/{cpp-D8TcNCkN.js → cpp-C4pJyeKy.js} +0 -0
- /package/web/assets/{csharp-B_ijQZWm.js → csharp-B4wLqqiU.js} +0 -0
- /package/web/assets/{csp-CT_qVlF1.js → csp-Do0Gg4qE.js} +0 -0
- /package/web/assets/{css-BNKulUcx.js → css-BLq1nXK0.js} +0 -0
- /package/web/assets/{cypher-BZUAEEC-.js → cypher-CDQzi0TV.js} +0 -0
- /package/web/assets/{dart-H8Ri9IID.js → dart-bTPYn7bY.js} +0 -0
- /package/web/assets/{dockerfile-BibtL7_E.js → dockerfile-yM7ZnQpo.js} +0 -0
- /package/web/assets/{ecl-Cq6OzwoI.js → ecl-BgTpp_c4.js} +0 -0
- /package/web/assets/{elixir-DEzZo1Bn.js → elixir-DO7wJ1ib.js} +0 -0
- /package/web/assets/{flow9-CJjg7TJH.js → flow9-B2Ko_py3.js} +0 -0
- /package/web/assets/{fsharp-vGx-8LrK.js → fsharp-DNdx3wKW.js} +0 -0
- /package/web/assets/{go-CHEkyua-.js → go-D7LajbkE.js} +0 -0
- /package/web/assets/{graphql--iPbFyYe.js → graphql-BCQSwUPo.js} +0 -0
- /package/web/assets/{hcl-C8EkclQS.js → hcl-DR3uNUXT.js} +0 -0
- /package/web/assets/{ini-DkuTJDAH.js → ini-zkzQPitL.js} +0 -0
- /package/web/assets/{java-DzuDjs1c.js → java-YFwuCa4S.js} +0 -0
- /package/web/assets/{julia-BUS80tf_.js → julia-WWwv4jLR.js} +0 -0
- /package/web/assets/{kotlin-s0eIc-h2.js → kotlin-FwlJkapy.js} +0 -0
- /package/web/assets/{less-o5f3n-o_.js → less-CyhHW1nH.js} +0 -0
- /package/web/assets/{lexon-AgKBNlrf.js → lexon-BScN_v1c.js} +0 -0
- /package/web/assets/{lua-DUTvSobZ.js → lua-eWb9GpZJ.js} +0 -0
- /package/web/assets/{m3-DoULJRPc.js → m3-C4NDU793.js} +0 -0
- /package/web/assets/{markdown-f9-EhcTi.js → markdown-DWWpXAtL.js} +0 -0
- /package/web/assets/{mips-aCd_43tp.js → mips-BpJKGw00.js} +0 -0
- /package/web/assets/{msdax-cwHq3sFu.js → msdax-BiuvyZwP.js} +0 -0
- /package/web/assets/{mysql-ITCpZRvB.js → mysql-DJW9Aa9q.js} +0 -0
- /package/web/assets/{objective-c-BjU-4cpP.js → objective-c-YouNnWOW.js} +0 -0
- /package/web/assets/{pascal-Dmt8LI08.js → pascal-jQsRnBre.js} +0 -0
- /package/web/assets/{pascaligo-DrXjRBef.js → pascaligo-DZI84_dt.js} +0 -0
- /package/web/assets/{perl-BbJKyW-Z.js → perl-D9TKt-s6.js} +0 -0
- /package/web/assets/{pgsql-CLT36ygM.js → pgsql-DXgI6ehC.js} +0 -0
- /package/web/assets/{php-BIcyBKEQ.js → php-Cgqd4wfW.js} +0 -0
- /package/web/assets/{pla-sVewnHw1.js → pla-DRDkvVUU.js} +0 -0
- /package/web/assets/{postiats-D9DrURSm.js → postiats-BOLeCCau.js} +0 -0
- /package/web/assets/{powerquery-BEjdKhpn.js → powerquery-DCDtPNBU.js} +0 -0
- /package/web/assets/{powershell-BynZyJK1.js → powershell-WnZ4e5ia.js} +0 -0
- /package/web/assets/{process-DIamAPAU.js → process-Cf4Ob2V-.js} +0 -0
- /package/web/assets/{protobuf-BQ34Qnv5.js → protobuf-C9Dg-C9o.js} +0 -0
- /package/web/assets/{pug--jmF9o7P.js → pug-Dr8RhWun.js} +0 -0
- /package/web/assets/{qsharp-BDe4Axn9.js → qsharp-DukGWvWZ.js} +0 -0
- /package/web/assets/{r-DpjaSKX3.js → r-BC41pTgC.js} +0 -0
- /package/web/assets/{redis-C_Q-xUDt.js → redis-D-gYIUku.js} +0 -0
- /package/web/assets/{redshift-CHNShrpo.js → redshift-r0XbF8XS.js} +0 -0
- /package/web/assets/{restructuredtext-CVN0W1xR.js → restructuredtext-DsJDS7Eu.js} +0 -0
- /package/web/assets/{ruby-CaKcv4f1.js → ruby-JPrm3ODz.js} +0 -0
- /package/web/assets/{rust-CbqMT_Ew.js → rust-C8IjEXni.js} +0 -0
- /package/web/assets/{sb-DIdUmAXV.js → sb-D8vNiFl9.js} +0 -0
- /package/web/assets/{scala-DVyALEcz.js → scala-DThahuqf.js} +0 -0
- /package/web/assets/{scheme-Cox4VpHa.js → scheme-CvEQUYYf.js} +0 -0
- /package/web/assets/{scss-MW_l4ZY_.js → scss-C6obpl8K.js} +0 -0
- /package/web/assets/{shared-sse-BjXwPkLo.js → shared-sse-Bpqv2-GI.js} +0 -0
- /package/web/assets/{shell-CP5qAt5e.js → shell-BnVmd31t.js} +0 -0
- /package/web/assets/{solidity-1ctHOHIb.js → solidity-Bo6zEybc.js} +0 -0
- /package/web/assets/{sophia-DRAqvk2I.js → sophia-DuB3Px8n.js} +0 -0
- /package/web/assets/{sparql-8_9Nt5xp.js → sparql-CW9HqMW2.js} +0 -0
- /package/web/assets/{sql-owsrW4c3.js → sql-CPCPCQON.js} +0 -0
- /package/web/assets/{st-BDgXslxD.js → st-AxC3n-1-.js} +0 -0
- /package/web/assets/{swift-TE6gFxno.js → swift-CgZOS_MZ.js} +0 -0
- /package/web/assets/{systemverilog-DVGMenxt.js → systemverilog-DYR-yx39.js} +0 -0
- /package/web/assets/{tcl-D6NP8_oR.js → tcl-4hAvWv0d.js} +0 -0
- /package/web/assets/{twig-CVnYtCc5.js → twig-Cf_07aFW.js} +0 -0
- /package/web/assets/{typespec-BkD2qKRU.js → typespec-2tXj8s11.js} +0 -0
- /package/web/assets/{uuid-u4W9vzU3.js → uuid--pMuF47W.js} +0 -0
- /package/web/assets/{vb--Oo_cy-E.js → vb-DLpM4f4s.js} +0 -0
- /package/web/assets/{w3c-keyname-Dfw8VxXe.js → w3c-keyname-CIiluUot.js} +0 -0
- /package/web/assets/{wgsl-CrnkJFcw.js → wgsl-BcECae_z.js} +0 -0
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
resetRelaunches,
|
|
29
29
|
syncConversationFromClaudeTranscript,
|
|
30
30
|
verifyJwt
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-TE57T5GO.js";
|
|
32
32
|
import {
|
|
33
33
|
agentManager,
|
|
34
34
|
agentStore,
|
|
@@ -48,10 +48,10 @@ import {
|
|
|
48
48
|
rememberFile,
|
|
49
49
|
serviceStore,
|
|
50
50
|
wasRead
|
|
51
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-ELI2TELD.js";
|
|
52
52
|
import {
|
|
53
53
|
settingsManager
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-ZDHLWTHW.js";
|
|
55
55
|
import {
|
|
56
56
|
AGENT_STOP_FETCH_TIMEOUT,
|
|
57
57
|
ApiKeysFileSchema,
|
|
@@ -83,7 +83,7 @@ import {
|
|
|
83
83
|
machineRoot,
|
|
84
84
|
orgVaultRoot,
|
|
85
85
|
vaultIdOfRoot
|
|
86
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-J3NAI636.js";
|
|
87
87
|
|
|
88
88
|
// ../server/src/trpc/routers/chat.ts
|
|
89
89
|
import { z as z5 } from "zod";
|
|
@@ -3549,11 +3549,14 @@ import { TRPCError as TRPCError3 } from "@trpc/server";
|
|
|
3549
3549
|
// ../server/src/services/cloud-session-store.ts
|
|
3550
3550
|
import { readFile as readFile7, writeFile as writeFile5, rename as rename5, mkdir as mkdir7, chmod as chmod4, unlink as unlink3 } from "fs/promises";
|
|
3551
3551
|
import { dirname as dirname5 } from "path";
|
|
3552
|
-
import { randomBytes as randomBytes2, timingSafeEqual as timingSafeEqual2 } from "crypto";
|
|
3552
|
+
import { randomBytes as randomBytes2, createHash, timingSafeEqual as timingSafeEqual2 } from "crypto";
|
|
3553
3553
|
var FILENAME2 = "cloud-session.json";
|
|
3554
3554
|
var STATE_TTL_MS = 5 * 60 * 1e3;
|
|
3555
|
+
function accountIdFor(cloudUrl, userId) {
|
|
3556
|
+
return createHash("sha256").update(`${cloudUrl.replace(/\/+$/, "")}|${userId}`).digest("hex").slice(0, 32);
|
|
3557
|
+
}
|
|
3555
3558
|
var CloudSessionStore = class {
|
|
3556
|
-
|
|
3559
|
+
accounts = [];
|
|
3557
3560
|
loaded = false;
|
|
3558
3561
|
/** Pending login states (CSRF binding between `start` and the callback). */
|
|
3559
3562
|
pending = /* @__PURE__ */ new Map();
|
|
@@ -3581,11 +3584,37 @@ var CloudSessionStore = class {
|
|
|
3581
3584
|
return readFile7(this.getLegacyFilePath(), "utf-8");
|
|
3582
3585
|
}
|
|
3583
3586
|
}
|
|
3587
|
+
/**
|
|
3588
|
+
* Relire le fichier, quelle que soit sa version.
|
|
3589
|
+
*
|
|
3590
|
+
* La forme d'avant n'est pas convertie sur disque ici : elle est lue telle
|
|
3591
|
+
* quelle et prend un id dérivé de son seul cloud. L'identité manque — le
|
|
3592
|
+
* compte n'était pas décrit — et se remplira au premier appel qui la
|
|
3593
|
+
* connaîtra. Réécrire le fichier au chargement le rendrait illisible à une
|
|
3594
|
+
* Runeya plus ancienne pour rien.
|
|
3595
|
+
*/
|
|
3584
3596
|
async load() {
|
|
3585
3597
|
if (this.loaded) return;
|
|
3586
3598
|
try {
|
|
3587
|
-
const
|
|
3588
|
-
|
|
3599
|
+
const parsed = JSON.parse(await this.readFromDisk());
|
|
3600
|
+
if ("accounts" in parsed && Array.isArray(parsed.accounts)) {
|
|
3601
|
+
this.accounts = parsed.accounts.filter(
|
|
3602
|
+
(a) => typeof a?.id === "string" && typeof a?.encryptedToken === "string"
|
|
3603
|
+
);
|
|
3604
|
+
} else if (typeof parsed.encryptedToken === "string") {
|
|
3605
|
+
const legacy = parsed;
|
|
3606
|
+
this.accounts = [{
|
|
3607
|
+
// Pas d'utilisateur connu : le cloud seul fonde l'id, et la première
|
|
3608
|
+
// identité lue le remplacera par le définitif.
|
|
3609
|
+
id: accountIdFor(legacy.cloudUrl, ""),
|
|
3610
|
+
cloudUrl: legacy.cloudUrl,
|
|
3611
|
+
encryptedToken: legacy.encryptedToken,
|
|
3612
|
+
userId: "",
|
|
3613
|
+
email: "",
|
|
3614
|
+
name: "",
|
|
3615
|
+
image: null
|
|
3616
|
+
}];
|
|
3617
|
+
}
|
|
3589
3618
|
} catch {
|
|
3590
3619
|
}
|
|
3591
3620
|
this.loaded = true;
|
|
@@ -3625,48 +3654,137 @@ var CloudSessionStore = class {
|
|
|
3625
3654
|
}
|
|
3626
3655
|
}
|
|
3627
3656
|
async save() {
|
|
3628
|
-
await mkdir7(dirname5(await this.getFilePath()), { recursive: true });
|
|
3629
3657
|
const filePath = await this.getFilePath();
|
|
3658
|
+
await mkdir7(dirname5(filePath), { recursive: true });
|
|
3659
|
+
const payload = { version: 2, accounts: this.accounts };
|
|
3630
3660
|
const tmpPath = filePath + ".tmp";
|
|
3631
|
-
await writeFile5(tmpPath, JSON.stringify(
|
|
3661
|
+
await writeFile5(tmpPath, JSON.stringify(payload, null, 2), "utf-8");
|
|
3632
3662
|
await rename5(tmpPath, filePath);
|
|
3633
3663
|
await chmod4(filePath, 384);
|
|
3634
3664
|
}
|
|
3635
|
-
/**
|
|
3636
|
-
|
|
3665
|
+
/**
|
|
3666
|
+
* Ranger le token obtenu par l'échange de jeton à usage unique.
|
|
3667
|
+
*
|
|
3668
|
+
* L'identité est fournie par l'appelant, qui vient de la lire avec ce token :
|
|
3669
|
+
* c'est elle qui donne son id au compte, et donc ce qui fait qu'une seconde
|
|
3670
|
+
* connexion du même utilisateur remplace la première au lieu de s'ajouter.
|
|
3671
|
+
*/
|
|
3672
|
+
async add(cloudUrl, token, identity) {
|
|
3637
3673
|
await this.load();
|
|
3638
|
-
|
|
3674
|
+
const account = {
|
|
3675
|
+
...identity,
|
|
3676
|
+
id: accountIdFor(cloudUrl, identity.userId),
|
|
3677
|
+
cloudUrl,
|
|
3678
|
+
encryptedToken: encryptValue(token)
|
|
3679
|
+
};
|
|
3680
|
+
const at = this.accounts.findIndex((a) => a.id === account.id);
|
|
3681
|
+
if (at >= 0) this.accounts[at] = account;
|
|
3682
|
+
else this.accounts.push(account);
|
|
3639
3683
|
await this.save();
|
|
3684
|
+
return this.publicView(account);
|
|
3685
|
+
}
|
|
3686
|
+
publicView(account) {
|
|
3687
|
+
const { encryptedToken: _token, ...rest } = account;
|
|
3688
|
+
return rest;
|
|
3640
3689
|
}
|
|
3641
|
-
/**
|
|
3642
|
-
async
|
|
3690
|
+
/** Les comptes liés à ce poste, sans rien de secret. */
|
|
3691
|
+
async list() {
|
|
3692
|
+
await this.load();
|
|
3693
|
+
return this.accounts.map((a) => this.publicView(a));
|
|
3694
|
+
}
|
|
3695
|
+
/** Un compte par son id, ou null. */
|
|
3696
|
+
async get(accountId) {
|
|
3697
|
+
await this.load();
|
|
3698
|
+
const found = this.accounts.find((a) => a.id === accountId);
|
|
3699
|
+
return found ? this.publicView(found) : null;
|
|
3700
|
+
}
|
|
3701
|
+
/**
|
|
3702
|
+
* Compléter ce qu'on sait d'un compte, une fois le cloud interrogé.
|
|
3703
|
+
*
|
|
3704
|
+
* Sert à la forme héritée, liée avant que l'identité soit retenue : son id
|
|
3705
|
+
* provisoire (fondé sur le seul cloud) devient le définitif, et les tampons
|
|
3706
|
+
* d'organisation qui le désignaient sont suivis par l'appelant.
|
|
3707
|
+
*/
|
|
3708
|
+
async describe(accountId, identity) {
|
|
3643
3709
|
await this.load();
|
|
3644
|
-
|
|
3710
|
+
const at = this.accounts.findIndex((a) => a.id === accountId);
|
|
3711
|
+
if (at < 0) return accountId;
|
|
3712
|
+
const current = this.accounts[at];
|
|
3713
|
+
const nextId = accountIdFor(current.cloudUrl, identity.userId);
|
|
3714
|
+
if (current.id === nextId && current.email === identity.email && current.name === identity.name) {
|
|
3715
|
+
return current.id;
|
|
3716
|
+
}
|
|
3717
|
+
const duplicate = this.accounts.findIndex((a) => a.id === nextId && a.id !== current.id);
|
|
3718
|
+
if (duplicate >= 0) this.accounts.splice(duplicate, 1);
|
|
3719
|
+
this.accounts[this.accounts.findIndex((a) => a.id === accountId)] = {
|
|
3720
|
+
...current,
|
|
3721
|
+
...identity,
|
|
3722
|
+
id: nextId
|
|
3723
|
+
};
|
|
3724
|
+
await this.save();
|
|
3725
|
+
return nextId;
|
|
3726
|
+
}
|
|
3727
|
+
/**
|
|
3728
|
+
* Le token déchiffré d'un compte, ou null.
|
|
3729
|
+
*
|
|
3730
|
+
* Sans id : le compte unique du poste, et rien du tout dès qu'il y en a
|
|
3731
|
+
* plusieurs — deviner lequel reviendrait à parler au cloud d'un autre
|
|
3732
|
+
* utilisateur, ce qu'aucun appel ne veut jamais.
|
|
3733
|
+
*/
|
|
3734
|
+
async getToken(accountId) {
|
|
3735
|
+
await this.load();
|
|
3736
|
+
const account = accountId ? this.accounts.find((a) => a.id === accountId) : this.accounts.length === 1 ? this.accounts[0] : void 0;
|
|
3737
|
+
if (!account) return null;
|
|
3645
3738
|
try {
|
|
3646
|
-
return decryptValue(
|
|
3739
|
+
return decryptValue(account.encryptedToken);
|
|
3647
3740
|
} catch {
|
|
3648
3741
|
return null;
|
|
3649
3742
|
}
|
|
3650
3743
|
}
|
|
3651
3744
|
/**
|
|
3652
|
-
* The cloud
|
|
3745
|
+
* The cloud a given account is signed into, or null when unknown.
|
|
3653
3746
|
*
|
|
3654
3747
|
* Needed to tell "an org I am not a member of" apart from "an org of another
|
|
3655
3748
|
* cloud instance entirely" — the ids of two clouds share no namespace, so
|
|
3656
3749
|
* comparing them without this would call every foreign-cloud project a
|
|
3657
3750
|
* permission problem.
|
|
3658
3751
|
*/
|
|
3659
|
-
async getCloudUrl() {
|
|
3752
|
+
async getCloudUrl(accountId) {
|
|
3660
3753
|
await this.load();
|
|
3661
|
-
|
|
3754
|
+
const account = accountId ? this.accounts.find((a) => a.id === accountId) : this.accounts.length === 1 ? this.accounts[0] : void 0;
|
|
3755
|
+
return account?.cloudUrl ?? null;
|
|
3662
3756
|
}
|
|
3757
|
+
/** Au moins un compte lié — l'état du poste, pas celui d'un compte précis. */
|
|
3663
3758
|
async isLinked() {
|
|
3664
|
-
|
|
3759
|
+
await this.load();
|
|
3760
|
+
return this.accounts.length > 0;
|
|
3761
|
+
}
|
|
3762
|
+
/** Ce compte-là est-il utilisable ? */
|
|
3763
|
+
async isAccountLinked(accountId) {
|
|
3764
|
+
return await this.getToken(accountId) !== null;
|
|
3765
|
+
}
|
|
3766
|
+
/**
|
|
3767
|
+
* Oublier un compte, en laissant les autres tranquilles.
|
|
3768
|
+
*
|
|
3769
|
+
* Les organisations qui en dépendaient passent hors ligne d'elles-mêmes : leur
|
|
3770
|
+
* tampon désigne un compte qui n'est plus là, et la résolution rend « non
|
|
3771
|
+
* lié » plutôt que d'aller frapper au cloud avec le token du voisin.
|
|
3772
|
+
*/
|
|
3773
|
+
async remove(accountId) {
|
|
3774
|
+
await this.load();
|
|
3775
|
+
const before = this.accounts.length;
|
|
3776
|
+
this.accounts = this.accounts.filter((a) => a.id !== accountId);
|
|
3777
|
+
if (this.accounts.length === before) return;
|
|
3778
|
+
if (this.accounts.length === 0) {
|
|
3779
|
+
await this.clear();
|
|
3780
|
+
return;
|
|
3781
|
+
}
|
|
3782
|
+
await this.save();
|
|
3665
3783
|
}
|
|
3666
|
-
/** Forget
|
|
3784
|
+
/** Forget every session (full sign-out of this machine). */
|
|
3667
3785
|
async clear() {
|
|
3668
3786
|
await this.load();
|
|
3669
|
-
this.
|
|
3787
|
+
this.accounts = [];
|
|
3670
3788
|
this.pending.clear();
|
|
3671
3789
|
try {
|
|
3672
3790
|
await unlink3(await this.getFilePath());
|
|
@@ -3803,10 +3921,17 @@ function getCloudApiUrl() {
|
|
|
3803
3921
|
return (env.CLOUD_URL ?? DEFAULT_CLOUD_API_URL).replace(/\/+$/, "");
|
|
3804
3922
|
}
|
|
3805
3923
|
async function orgCloudUrl(orgId) {
|
|
3806
|
-
const { readOrgClouds } = await import("./vault-resolver-
|
|
3924
|
+
const { readOrgClouds } = await import("./vault-resolver-V7KH4FTC.js");
|
|
3807
3925
|
const clouds = await readOrgClouds();
|
|
3808
3926
|
return (clouds[orgId] ?? getCloudApiUrl()).replace(/\/+$/, "");
|
|
3809
3927
|
}
|
|
3928
|
+
async function accountForOrg(orgId) {
|
|
3929
|
+
const { readOrgAccounts } = await import("./vault-resolver-V7KH4FTC.js");
|
|
3930
|
+
const stamped = (await readOrgAccounts())[orgId];
|
|
3931
|
+
const accounts = await cloudSessionStore.list();
|
|
3932
|
+
if (stamped && accounts.some((a) => a.id === stamped)) return stamped;
|
|
3933
|
+
return accounts.length === 1 ? accounts[0].id : null;
|
|
3934
|
+
}
|
|
3810
3935
|
function getCloudAppUrl() {
|
|
3811
3936
|
return (env.CLOUD_APP_URL ?? DEFAULT_CLOUD_APP_URL).replace(/\/+$/, "");
|
|
3812
3937
|
}
|
|
@@ -3817,10 +3942,18 @@ var CloudNotLinkedError = class extends Error {
|
|
|
3817
3942
|
this.name = "CloudNotLinkedError";
|
|
3818
3943
|
}
|
|
3819
3944
|
};
|
|
3945
|
+
async function resolveAccountId(scope) {
|
|
3946
|
+
if (scope.accountId) return scope.accountId;
|
|
3947
|
+
if (scope.orgId) return accountForOrg(scope.orgId);
|
|
3948
|
+
const accounts = await cloudSessionStore.list();
|
|
3949
|
+
return accounts.length === 1 ? accounts[0].id : null;
|
|
3950
|
+
}
|
|
3820
3951
|
async function cloudFetch(path, init = {}) {
|
|
3821
|
-
const
|
|
3822
|
-
|
|
3823
|
-
|
|
3952
|
+
const accountId = await resolveAccountId(init);
|
|
3953
|
+
const token = accountId ? await cloudSessionStore.getToken(accountId) : null;
|
|
3954
|
+
if (!accountId || !token) throw new CloudNotLinkedError();
|
|
3955
|
+
const base = await cloudSessionStore.getCloudUrl(accountId) ?? getCloudApiUrl();
|
|
3956
|
+
return fetch(`${base.replace(/\/+$/, "")}${path}`, {
|
|
3824
3957
|
method: init.method ?? "GET",
|
|
3825
3958
|
headers: {
|
|
3826
3959
|
Authorization: `Bearer ${token}`,
|
|
@@ -3833,6 +3966,26 @@ async function cloudFetch(path, init = {}) {
|
|
|
3833
3966
|
signal: AbortSignal.timeout(init.timeoutMs ?? 15e3)
|
|
3834
3967
|
});
|
|
3835
3968
|
}
|
|
3969
|
+
async function readCloudIdentity(cloudUrl, token) {
|
|
3970
|
+
try {
|
|
3971
|
+
const res = await fetch(`${cloudUrl.replace(/\/+$/, "")}/api/auth/get-session`, {
|
|
3972
|
+
headers: { Authorization: `Bearer ${token}`, [APP_VERSION_HEADER]: appVersion },
|
|
3973
|
+
signal: AbortSignal.timeout(15e3)
|
|
3974
|
+
});
|
|
3975
|
+
if (!res.ok) return null;
|
|
3976
|
+
const body = await res.json();
|
|
3977
|
+
const id = body.user?.id;
|
|
3978
|
+
if (typeof id !== "string" || !id) return null;
|
|
3979
|
+
return {
|
|
3980
|
+
userId: id,
|
|
3981
|
+
email: typeof body.user?.email === "string" ? body.user.email : "",
|
|
3982
|
+
name: typeof body.user?.name === "string" ? body.user.name : "",
|
|
3983
|
+
image: typeof body.user?.image === "string" ? body.user.image : null
|
|
3984
|
+
};
|
|
3985
|
+
} catch {
|
|
3986
|
+
return null;
|
|
3987
|
+
}
|
|
3988
|
+
}
|
|
3836
3989
|
|
|
3837
3990
|
// ../server/src/trpc/routers/cloud-auth.ts
|
|
3838
3991
|
function getDeviceName() {
|
|
@@ -3874,6 +4027,19 @@ function isAllowedProxyPath(path) {
|
|
|
3874
4027
|
const [pathname] = path.split("?");
|
|
3875
4028
|
return PROXY_PREFIXES.some((p) => pathname === p || pathname.startsWith(p));
|
|
3876
4029
|
}
|
|
4030
|
+
var ScopeSchema = z4.object({
|
|
4031
|
+
accountId: z4.string().max(64).optional(),
|
|
4032
|
+
orgId: z4.string().max(128).optional()
|
|
4033
|
+
});
|
|
4034
|
+
function scopeOf(input) {
|
|
4035
|
+
return { accountId: input.accountId, orgId: input.orgId };
|
|
4036
|
+
}
|
|
4037
|
+
async function scopedAccountId(input) {
|
|
4038
|
+
if (input.accountId) return input.accountId;
|
|
4039
|
+
if (input.orgId) return accountForOrg(input.orgId);
|
|
4040
|
+
const accounts = await cloudSessionStore.list();
|
|
4041
|
+
return accounts.length === 1 ? accounts[0].id : null;
|
|
4042
|
+
}
|
|
3877
4043
|
var cloudAuthRouter = router({
|
|
3878
4044
|
/** Build the cloud authorization URL to open in the browser. */
|
|
3879
4045
|
startLogin: protectedProcedure.input(z4.object({ returnTo: z4.string().url().max(2048) })).mutation(async ({ input }) => {
|
|
@@ -3888,31 +4054,64 @@ var cloudAuthRouter = router({
|
|
|
3888
4054
|
const url = `${getCloudAppUrl()}/link-local?callback=${encodeURIComponent(callback)}&state=${encodeURIComponent(state)}`;
|
|
3889
4055
|
return { url };
|
|
3890
4056
|
}),
|
|
3891
|
-
/**
|
|
4057
|
+
/**
|
|
4058
|
+
* Whether this machine holds any cloud session, and against which cloud.
|
|
4059
|
+
*
|
|
4060
|
+
* `cloudUrl` n'a de sens qu'avec un seul compte : au-delà, il n'y a plus « le »
|
|
4061
|
+
* cloud du poste, et c'est `accounts` qu'il faut lire.
|
|
4062
|
+
*/
|
|
3892
4063
|
status: protectedProcedure.query(async () => {
|
|
3893
|
-
const
|
|
3894
|
-
return {
|
|
4064
|
+
const accounts = await cloudSessionStore.list();
|
|
4065
|
+
return {
|
|
4066
|
+
linked: accounts.length > 0,
|
|
4067
|
+
cloudUrl: accounts.length === 1 ? accounts[0].cloudUrl : null,
|
|
4068
|
+
accountCount: accounts.length
|
|
4069
|
+
};
|
|
4070
|
+
}),
|
|
4071
|
+
/**
|
|
4072
|
+
* Les comptes liés à ce poste, et l'organisation dont chacun répond.
|
|
4073
|
+
*
|
|
4074
|
+
* Aucun token n'en sort : de quoi peupler la page Compte et afficher, à côté
|
|
4075
|
+
* du projet ouvert, sous quel compte il se synchronise.
|
|
4076
|
+
*/
|
|
4077
|
+
accounts: protectedProcedure.query(async () => {
|
|
4078
|
+
const { readOrgAccounts } = await import("./vault-resolver-V7KH4FTC.js");
|
|
4079
|
+
return { accounts: await cloudSessionStore.list(), orgAccounts: await readOrgAccounts() };
|
|
3895
4080
|
}),
|
|
3896
4081
|
/** The cloud session (user + org), fetched with the stored token. */
|
|
3897
|
-
session: protectedProcedure.query(async () => {
|
|
3898
|
-
|
|
3899
|
-
|
|
4082
|
+
session: protectedProcedure.input(ScopeSchema.optional()).query(async ({ input }) => {
|
|
4083
|
+
const accountId = await scopedAccountId(input ?? {});
|
|
4084
|
+
if (!accountId || !await cloudSessionStore.isAccountLinked(accountId)) return null;
|
|
4085
|
+
const res = await cloudFetch2("/api/auth/get-session", { accountId });
|
|
3900
4086
|
if (!res.ok) {
|
|
3901
|
-
if (res.status === 401) await cloudSessionStore.
|
|
4087
|
+
if (res.status === 401) await cloudSessionStore.remove(accountId);
|
|
3902
4088
|
return null;
|
|
3903
4089
|
}
|
|
3904
|
-
|
|
4090
|
+
const payload = await res.json();
|
|
4091
|
+
const account = await cloudSessionStore.get(accountId);
|
|
4092
|
+
if (account && !account.userId) {
|
|
4093
|
+
const identity = await readCloudIdentity(account.cloudUrl, await cloudSessionStore.getToken(accountId) ?? "");
|
|
4094
|
+
if (identity) {
|
|
4095
|
+
const settled = await cloudSessionStore.describe(accountId, identity);
|
|
4096
|
+
const { renameOrgAccount } = await import("./vault-resolver-V7KH4FTC.js");
|
|
4097
|
+
await renameOrgAccount(accountId, settled);
|
|
4098
|
+
}
|
|
4099
|
+
}
|
|
4100
|
+
return payload;
|
|
3905
4101
|
}),
|
|
3906
4102
|
/**
|
|
3907
4103
|
* Every session of the cloud account: the machines linked to it and the
|
|
3908
4104
|
* browsers signed into it. No token material — the cloud only ever returns
|
|
3909
4105
|
* ids and labels here.
|
|
3910
4106
|
*/
|
|
3911
|
-
devices: protectedProcedure.query(async () => {
|
|
3912
|
-
|
|
3913
|
-
|
|
4107
|
+
devices: protectedProcedure.input(ScopeSchema.optional()).query(async ({ input }) => {
|
|
4108
|
+
const accountId = await scopedAccountId(input ?? {});
|
|
4109
|
+
if (!accountId || !await cloudSessionStore.isAccountLinked(accountId)) {
|
|
4110
|
+
return { devices: [] };
|
|
4111
|
+
}
|
|
4112
|
+
const res = await cloudFetch2("/api/auth/device/list", { accountId });
|
|
3914
4113
|
if (!res.ok) {
|
|
3915
|
-
if (res.status === 401) await cloudSessionStore.
|
|
4114
|
+
if (res.status === 401) await cloudSessionStore.remove(accountId);
|
|
3916
4115
|
return { devices: [] };
|
|
3917
4116
|
}
|
|
3918
4117
|
return await res.json();
|
|
@@ -3924,14 +4123,20 @@ var cloudAuthRouter = router({
|
|
|
3924
4123
|
* drops the session, and the local token is dropped here too, so nothing is
|
|
3925
4124
|
* left holding a dead credential.
|
|
3926
4125
|
*/
|
|
3927
|
-
revokeDevice: protectedProcedure.input(
|
|
3928
|
-
const
|
|
4126
|
+
revokeDevice: protectedProcedure.input(ScopeSchema.extend({ id: z4.string().min(1).max(128) })).mutation(async ({ input }) => {
|
|
4127
|
+
const accountId = await scopedAccountId(input);
|
|
4128
|
+
if (!accountId) throw new TRPCError3({ code: "PRECONDITION_FAILED", message: "No cloud account for this scope." });
|
|
4129
|
+
const res = await cloudFetch2("/api/auth/device/revoke", {
|
|
4130
|
+
method: "POST",
|
|
4131
|
+
body: { id: input.id },
|
|
4132
|
+
accountId
|
|
4133
|
+
});
|
|
3929
4134
|
if (!res.ok) {
|
|
3930
|
-
if (res.status === 401) await cloudSessionStore.
|
|
4135
|
+
if (res.status === 401) await cloudSessionStore.remove(accountId);
|
|
3931
4136
|
throw new TRPCError3({ code: "BAD_REQUEST", message: "Could not revoke this session." });
|
|
3932
4137
|
}
|
|
3933
4138
|
const { self } = await res.json();
|
|
3934
|
-
if (self) await cloudSessionStore.
|
|
4139
|
+
if (self) await cloudSessionStore.remove(accountId);
|
|
3935
4140
|
return { success: true, self: self === true };
|
|
3936
4141
|
}),
|
|
3937
4142
|
/**
|
|
@@ -3945,7 +4150,9 @@ var cloudAuthRouter = router({
|
|
|
3945
4150
|
path: z4.string().min(1).max(512),
|
|
3946
4151
|
method: z4.enum(["GET", "POST"]).default("GET"),
|
|
3947
4152
|
query: z4.record(z4.string().max(128), z4.string().max(2048)).optional(),
|
|
3948
|
-
body: z4.unknown().optional()
|
|
4153
|
+
body: z4.unknown().optional(),
|
|
4154
|
+
accountId: z4.string().max(64).optional(),
|
|
4155
|
+
orgId: z4.string().max(128).optional()
|
|
3949
4156
|
})
|
|
3950
4157
|
).mutation(async ({ input }) => {
|
|
3951
4158
|
if (!isAllowedProxyPath(input.path)) {
|
|
@@ -3954,7 +4161,8 @@ var cloudAuthRouter = router({
|
|
|
3954
4161
|
const qs = input.query ? `?${new URLSearchParams(input.query).toString()}` : "";
|
|
3955
4162
|
const res = await cloudFetch2(`/api/auth${input.path}${qs}`, {
|
|
3956
4163
|
method: input.method,
|
|
3957
|
-
...input.method === "POST" ? { body: input.body ?? {} } : {}
|
|
4164
|
+
...input.method === "POST" ? { body: input.body ?? {} } : {},
|
|
4165
|
+
...scopeOf(input)
|
|
3958
4166
|
});
|
|
3959
4167
|
const text = await res.text();
|
|
3960
4168
|
let data = null;
|
|
@@ -3973,14 +4181,19 @@ var cloudAuthRouter = router({
|
|
|
3973
4181
|
* browser's session — signing out here leaves the web app signed in, and vice
|
|
3974
4182
|
* versa.
|
|
3975
4183
|
*/
|
|
3976
|
-
signOut: protectedProcedure.mutation(async () => {
|
|
3977
|
-
|
|
4184
|
+
signOut: protectedProcedure.input(ScopeSchema.optional()).mutation(async ({ input }) => {
|
|
4185
|
+
const accountId = await scopedAccountId(input ?? {});
|
|
4186
|
+
if (!accountId) {
|
|
4187
|
+
if ((await cloudSessionStore.list()).length === 0) return { success: true };
|
|
4188
|
+
throw new TRPCError3({ code: "BAD_REQUEST", message: "Which account? Several are linked." });
|
|
4189
|
+
}
|
|
4190
|
+
if (await cloudSessionStore.isAccountLinked(accountId)) {
|
|
3978
4191
|
try {
|
|
3979
|
-
await cloudFetch2("/api/auth/sign-out", { method: "POST", body: {} });
|
|
4192
|
+
await cloudFetch2("/api/auth/sign-out", { method: "POST", body: {}, accountId });
|
|
3980
4193
|
} catch {
|
|
3981
4194
|
}
|
|
3982
4195
|
}
|
|
3983
|
-
await cloudSessionStore.
|
|
4196
|
+
await cloudSessionStore.remove(accountId);
|
|
3984
4197
|
return { success: true };
|
|
3985
4198
|
})
|
|
3986
4199
|
});
|
|
@@ -4020,12 +4233,57 @@ function must(res) {
|
|
|
4020
4233
|
}
|
|
4021
4234
|
return res.data;
|
|
4022
4235
|
}
|
|
4236
|
+
var boardAccounts = /* @__PURE__ */ new Map();
|
|
4237
|
+
async function accountOfOrg(orgId) {
|
|
4238
|
+
return await accountForOrg(orgId) ?? void 0;
|
|
4239
|
+
}
|
|
4240
|
+
function rememberBoardAccount(boardId, accountId) {
|
|
4241
|
+
if (accountId) boardAccounts.set(boardId, accountId);
|
|
4242
|
+
}
|
|
4243
|
+
async function accountOfBoard(boardId) {
|
|
4244
|
+
const memo = boardAccounts.get(boardId);
|
|
4245
|
+
if (memo) return memo;
|
|
4246
|
+
const accounts = await cloudSessionStore.list();
|
|
4247
|
+
if (accounts.length <= 1) return accounts[0]?.id;
|
|
4248
|
+
const owners = await Promise.all(accounts.map(async (account) => {
|
|
4249
|
+
const res = await callCloud(
|
|
4250
|
+
`/kanban/board/get?id=${encodeURIComponent(boardId)}`,
|
|
4251
|
+
{ accountId: account.id }
|
|
4252
|
+
);
|
|
4253
|
+
return res.ok && res.data?.board ? account.id : null;
|
|
4254
|
+
}));
|
|
4255
|
+
const owner = owners.find((id) => id !== null);
|
|
4256
|
+
if (owner) {
|
|
4257
|
+
boardAccounts.set(boardId, owner);
|
|
4258
|
+
return owner;
|
|
4259
|
+
}
|
|
4260
|
+
throw new KanbanUnavailableError(
|
|
4261
|
+
`Aucun des ${accounts.length} comptes li\xE9s \xE0 ce poste ne conna\xEEt le tableau ${boardId}.`
|
|
4262
|
+
);
|
|
4263
|
+
}
|
|
4264
|
+
async function scopeOfBoard(boardId) {
|
|
4265
|
+
const accountId = await accountOfBoard(boardId);
|
|
4266
|
+
return accountId ? { accountId } : {};
|
|
4267
|
+
}
|
|
4023
4268
|
async function resolveOrganizationId(explicit) {
|
|
4024
4269
|
if (explicit) return explicit;
|
|
4025
|
-
const
|
|
4270
|
+
const accounts = await cloudSessionStore.list();
|
|
4271
|
+
if (accounts.length > 1) {
|
|
4272
|
+
throw new KanbanUnavailableError(
|
|
4273
|
+
`Ce poste est li\xE9 \xE0 ${accounts.length} comptes cloud : pr\xE9cisez organizationId, sans quoi rien ne dit lequel interroger.`
|
|
4274
|
+
);
|
|
4275
|
+
}
|
|
4276
|
+
const accountId = accounts[0]?.id;
|
|
4277
|
+
const session = await callCloud(
|
|
4278
|
+
"/get-session",
|
|
4279
|
+
accountId ? { accountId } : {}
|
|
4280
|
+
);
|
|
4026
4281
|
const active = session.data?.session?.activeOrganizationId;
|
|
4027
4282
|
if (active) return active;
|
|
4028
|
-
const orgs = must(await callCloud(
|
|
4283
|
+
const orgs = must(await callCloud(
|
|
4284
|
+
"/organization/list",
|
|
4285
|
+
accountId ? { accountId } : {}
|
|
4286
|
+
));
|
|
4029
4287
|
if (orgs.length === 1) return orgs[0].id;
|
|
4030
4288
|
if (orgs.length === 0) {
|
|
4031
4289
|
throw new KanbanUnavailableError(
|
|
@@ -4047,7 +4305,12 @@ var KanbanStore = class {
|
|
|
4047
4305
|
async list(includeArchived = false, organizationId) {
|
|
4048
4306
|
const orgId = await resolveOrganizationId(organizationId);
|
|
4049
4307
|
const query = `?organizationId=${encodeURIComponent(orgId)}` + (includeArchived ? "&includeArchived=true" : "");
|
|
4050
|
-
const
|
|
4308
|
+
const accountId = await accountOfOrg(orgId);
|
|
4309
|
+
const res = must(await callCloud(
|
|
4310
|
+
`/kanban/board/list${query}`,
|
|
4311
|
+
accountId ? { accountId } : {}
|
|
4312
|
+
));
|
|
4313
|
+
for (const board of res.boards ?? []) rememberBoardAccount(board.id, accountId);
|
|
4051
4314
|
return { organizationId: orgId, boards: res.boards ?? [] };
|
|
4052
4315
|
}
|
|
4053
4316
|
/**
|
|
@@ -4058,13 +4321,18 @@ var KanbanStore = class {
|
|
|
4058
4321
|
*/
|
|
4059
4322
|
async get(id, opts = {}) {
|
|
4060
4323
|
const query = `?id=${encodeURIComponent(id)}${opts.withHistory ? "&withHistory=true" : ""}`;
|
|
4061
|
-
const
|
|
4324
|
+
const accountId = await accountOfBoard(id);
|
|
4325
|
+
const res = must(await callCloud(
|
|
4326
|
+
`/kanban/board/get${query}`,
|
|
4327
|
+
accountId ? { accountId } : {}
|
|
4328
|
+
));
|
|
4062
4329
|
return res.board ?? null;
|
|
4063
4330
|
}
|
|
4064
4331
|
/** Le journal d'une seule carte — ce que le contexte d'un agent demande. */
|
|
4065
4332
|
async cardHistory(boardId, cardId) {
|
|
4066
4333
|
const res = await callCloud(
|
|
4067
|
-
`/kanban/card/history?boardId=${encodeURIComponent(boardId)}&cardId=${encodeURIComponent(cardId)}
|
|
4334
|
+
`/kanban/card/history?boardId=${encodeURIComponent(boardId)}&cardId=${encodeURIComponent(cardId)}`,
|
|
4335
|
+
await scopeOfBoard(boardId)
|
|
4068
4336
|
);
|
|
4069
4337
|
return res.data?.history ?? [];
|
|
4070
4338
|
}
|
|
@@ -4078,7 +4346,8 @@ var KanbanStore = class {
|
|
|
4078
4346
|
async addComment(boardId, cardId, detail, conversationId) {
|
|
4079
4347
|
const res = await callCloud("/kanban/card/comment/add", {
|
|
4080
4348
|
method: "POST",
|
|
4081
|
-
body: { boardId, cardId, detail, author: "ai", ...conversationId ? { conversationId } : {} }
|
|
4349
|
+
body: { boardId, cardId, detail, author: "ai", ...conversationId ? { conversationId } : {} },
|
|
4350
|
+
...await scopeOfBoard(boardId)
|
|
4082
4351
|
});
|
|
4083
4352
|
return res.ok;
|
|
4084
4353
|
}
|
|
@@ -4086,7 +4355,8 @@ var KanbanStore = class {
|
|
|
4086
4355
|
async addCardEvent(boardId, cardId, type, detail) {
|
|
4087
4356
|
const res = await callCloud("/kanban/card/event/add", {
|
|
4088
4357
|
method: "POST",
|
|
4089
|
-
body: { boardId, cardId, type, detail }
|
|
4358
|
+
body: { boardId, cardId, type, detail },
|
|
4359
|
+
...await scopeOfBoard(boardId)
|
|
4090
4360
|
});
|
|
4091
4361
|
return res.ok;
|
|
4092
4362
|
}
|
|
@@ -4100,14 +4370,16 @@ var KanbanStore = class {
|
|
|
4100
4370
|
async addCard(boardId, input) {
|
|
4101
4371
|
const res = await callCloud("/kanban/card/add", {
|
|
4102
4372
|
method: "POST",
|
|
4103
|
-
body: { boardId, ...input }
|
|
4373
|
+
body: { boardId, ...input },
|
|
4374
|
+
...await scopeOfBoard(boardId)
|
|
4104
4375
|
});
|
|
4105
4376
|
return { card: res.data?.card ?? null, unsupported: res.status === 404 };
|
|
4106
4377
|
}
|
|
4107
4378
|
/** Une carte, par son identifiant — archivée comprise. */
|
|
4108
4379
|
async card(boardId, cardId) {
|
|
4109
4380
|
const res = await callCloud(
|
|
4110
|
-
`/kanban/card/get?boardId=${encodeURIComponent(boardId)}&cardId=${encodeURIComponent(cardId)}
|
|
4381
|
+
`/kanban/card/get?boardId=${encodeURIComponent(boardId)}&cardId=${encodeURIComponent(cardId)}`,
|
|
4382
|
+
await scopeOfBoard(boardId)
|
|
4111
4383
|
);
|
|
4112
4384
|
return res.data ?? null;
|
|
4113
4385
|
}
|
|
@@ -4121,7 +4393,8 @@ var KanbanStore = class {
|
|
|
4121
4393
|
async updateCard(boardId, cardId, patch) {
|
|
4122
4394
|
const res = await callCloud("/kanban/card/update", {
|
|
4123
4395
|
method: "POST",
|
|
4124
|
-
body: { boardId, cardId, ...patch }
|
|
4396
|
+
body: { boardId, cardId, ...patch },
|
|
4397
|
+
...await scopeOfBoard(boardId)
|
|
4125
4398
|
});
|
|
4126
4399
|
return res.data?.card ?? null;
|
|
4127
4400
|
}
|
|
@@ -4129,7 +4402,8 @@ var KanbanStore = class {
|
|
|
4129
4402
|
async setCardArchived(boardId, cardId, archived) {
|
|
4130
4403
|
const res = await callCloud(`/kanban/card/${archived ? "archive" : "unarchive"}`, {
|
|
4131
4404
|
method: "POST",
|
|
4132
|
-
body: { boardId, cardId }
|
|
4405
|
+
body: { boardId, cardId },
|
|
4406
|
+
...await scopeOfBoard(boardId)
|
|
4133
4407
|
});
|
|
4134
4408
|
return res.ok;
|
|
4135
4409
|
}
|
|
@@ -4141,7 +4415,8 @@ var KanbanStore = class {
|
|
|
4141
4415
|
const orgId = await resolveOrganizationId(organizationId);
|
|
4142
4416
|
const res = must(
|
|
4143
4417
|
await callCloud(
|
|
4144
|
-
`/organization/get-full-organization?organizationId=${encodeURIComponent(orgId)}
|
|
4418
|
+
`/organization/get-full-organization?organizationId=${encodeURIComponent(orgId)}`,
|
|
4419
|
+
{ orgId }
|
|
4145
4420
|
)
|
|
4146
4421
|
);
|
|
4147
4422
|
return (res.members ?? []).map((m) => ({
|
|
@@ -4169,7 +4444,8 @@ var KanbanStore = class {
|
|
|
4169
4444
|
if (input.limit) query.set("limit", String(input.limit));
|
|
4170
4445
|
const res = must(
|
|
4171
4446
|
await callCloud(
|
|
4172
|
-
`/kanban/card/search?${query.toString()}
|
|
4447
|
+
`/kanban/card/search?${query.toString()}`,
|
|
4448
|
+
{ orgId }
|
|
4173
4449
|
)
|
|
4174
4450
|
);
|
|
4175
4451
|
return { cards: res.cards ?? [], total: res.total ?? 0, truncated: Boolean(res.truncated) };
|
|
@@ -4178,7 +4454,8 @@ var KanbanStore = class {
|
|
|
4178
4454
|
async moveCard(boardId, cardId, toColumnId) {
|
|
4179
4455
|
const res = await callCloud("/kanban/card/move", {
|
|
4180
4456
|
method: "POST",
|
|
4181
|
-
body: { boardId, cardId, toColumnId }
|
|
4457
|
+
body: { boardId, cardId, toColumnId },
|
|
4458
|
+
...await scopeOfBoard(boardId)
|
|
4182
4459
|
});
|
|
4183
4460
|
return res.ok;
|
|
4184
4461
|
}
|
|
@@ -4191,7 +4468,8 @@ var KanbanStore = class {
|
|
|
4191
4468
|
*/
|
|
4192
4469
|
async cardLinks(boardId) {
|
|
4193
4470
|
const res = await callCloud(
|
|
4194
|
-
`/kanban/card-link/list?boardId=${encodeURIComponent(boardId)}
|
|
4471
|
+
`/kanban/card-link/list?boardId=${encodeURIComponent(boardId)}`,
|
|
4472
|
+
await scopeOfBoard(boardId)
|
|
4195
4473
|
);
|
|
4196
4474
|
return { links: res.data?.links ?? [], cards: res.data?.cards ?? [] };
|
|
4197
4475
|
}
|
|
@@ -4209,7 +4487,8 @@ var KanbanStore = class {
|
|
|
4209
4487
|
cardId,
|
|
4210
4488
|
parentBoardId: parent?.boardId ?? null,
|
|
4211
4489
|
parentCardId: parent?.cardId ?? null
|
|
4212
|
-
}
|
|
4490
|
+
},
|
|
4491
|
+
...await scopeOfBoard(boardId)
|
|
4213
4492
|
});
|
|
4214
4493
|
return res.ok;
|
|
4215
4494
|
}
|
|
@@ -4218,6 +4497,7 @@ var KanbanStore = class {
|
|
|
4218
4497
|
if (!organizationId) return null;
|
|
4219
4498
|
const res = await callCloud("/kanban/board/create", {
|
|
4220
4499
|
method: "POST",
|
|
4500
|
+
orgId: organizationId,
|
|
4221
4501
|
body: {
|
|
4222
4502
|
organizationId,
|
|
4223
4503
|
name: input.name,
|
|
@@ -4230,14 +4510,16 @@ var KanbanStore = class {
|
|
|
4230
4510
|
async update(input) {
|
|
4231
4511
|
const res = await callCloud("/kanban/board/update", {
|
|
4232
4512
|
method: "POST",
|
|
4233
|
-
body: input
|
|
4513
|
+
body: input,
|
|
4514
|
+
...await scopeOfBoard(input.id)
|
|
4234
4515
|
});
|
|
4235
4516
|
return res.data?.board ?? null;
|
|
4236
4517
|
}
|
|
4237
4518
|
async delete(id) {
|
|
4238
4519
|
const res = await callCloud("/kanban/board/delete", {
|
|
4239
4520
|
method: "POST",
|
|
4240
|
-
body: { id }
|
|
4521
|
+
body: { id },
|
|
4522
|
+
...await scopeOfBoard(id)
|
|
4241
4523
|
});
|
|
4242
4524
|
return res.data?.success ?? false;
|
|
4243
4525
|
}
|
|
@@ -4657,7 +4939,7 @@ function tailTranscript(opts) {
|
|
|
4657
4939
|
|
|
4658
4940
|
// ../server/src/services/ai-runners/claude-pty-runner.ts
|
|
4659
4941
|
async function getAgentManager() {
|
|
4660
|
-
const { agentManager: agentManager2 } = await import("./agent-manager-
|
|
4942
|
+
const { agentManager: agentManager2 } = await import("./agent-manager-2RWV2SXZ.js");
|
|
4661
4943
|
return agentManager2;
|
|
4662
4944
|
}
|
|
4663
4945
|
function buildPtyArgs(params, sessionId, opts) {
|
|
@@ -5349,7 +5631,7 @@ async function shutdownCodexAppServer() {
|
|
|
5349
5631
|
}
|
|
5350
5632
|
}
|
|
5351
5633
|
async function getAgentManager2() {
|
|
5352
|
-
const { agentManager: agentManager2 } = await import("./agent-manager-
|
|
5634
|
+
const { agentManager: agentManager2 } = await import("./agent-manager-2RWV2SXZ.js");
|
|
5353
5635
|
return agentManager2;
|
|
5354
5636
|
}
|
|
5355
5637
|
function parseRuneyaCurlCommand(command) {
|
|
@@ -7297,7 +7579,9 @@ export {
|
|
|
7297
7579
|
cloudSessionStore,
|
|
7298
7580
|
getCloudApiUrl,
|
|
7299
7581
|
orgCloudUrl,
|
|
7582
|
+
accountForOrg,
|
|
7300
7583
|
cloudFetch,
|
|
7584
|
+
readCloudIdentity,
|
|
7301
7585
|
environmentOverridesStore,
|
|
7302
7586
|
environmentResolver,
|
|
7303
7587
|
auditService,
|
|
@@ -7344,4 +7628,4 @@ export {
|
|
|
7344
7628
|
startCliSession,
|
|
7345
7629
|
chatRouter
|
|
7346
7630
|
};
|
|
7347
|
-
//# sourceMappingURL=chunk-
|
|
7631
|
+
//# sourceMappingURL=chunk-JNI4CXJ7.js.map
|