ryco-cli 0.1.23 → 0.1.25
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/dist/{AcpNativeLogging-COepku4a.cjs → AcpNativeLogging-CA6XYzIS.cjs} +1 -1
- package/dist/{AcpNativeLogging-D7e1dn7s.mjs → AcpNativeLogging-D4-VoHrq.mjs} +1 -1
- package/dist/{AzureDevOpsSourceControlProvider-BNGEg1R8.mjs → AzureDevOpsSourceControlProvider-B_E0XXfD.mjs} +2 -2
- package/dist/{AzureDevOpsSourceControlProvider-CrvgKNf2.cjs → AzureDevOpsSourceControlProvider-COmd21c-.cjs} +2 -2
- package/dist/{BitbucketSourceControlProvider-BzhsQwH-.cjs → BitbucketSourceControlProvider-CD8IvXQK.cjs} +2 -2
- package/dist/{BitbucketSourceControlProvider-Bt21jw68.mjs → BitbucketSourceControlProvider-pUKsNXcg.mjs} +2 -2
- package/dist/{ClaudeDriver-C4yu7Jit.mjs → ClaudeDriver-CGifBixr.mjs} +2 -2
- package/dist/{ClaudeDriver-B7mbf51W.cjs → ClaudeDriver-Dry5uJfX.cjs} +2 -2
- package/dist/{CodexDriver-CR0S17Lb.cjs → CodexDriver-BzR8gA8w.cjs} +3 -3
- package/dist/{CodexDriver-DnnqkGoY.mjs → CodexDriver-V4CL9APE.mjs} +3 -3
- package/dist/{CodexTextGeneration-tlfe1S5W.cjs → CodexTextGeneration-DTrSzY-I.cjs} +1 -1
- package/dist/{CodexTextGeneration-Cw-FZbSS.mjs → CodexTextGeneration-DoCidwvI.mjs} +1 -1
- package/dist/{CopilotDriver-GxKLX5pL.mjs → CopilotDriver-Dt13X60f.mjs} +3 -3
- package/dist/{CopilotDriver-IBd27Ji2.cjs → CopilotDriver-rLcA8PSN.cjs} +3 -3
- package/dist/{CursorDriver-C4Enoe9N.cjs → CursorDriver-C3s-8s9F.cjs} +3 -3
- package/dist/{CursorDriver-CNo9Uzo8.mjs → CursorDriver-HIPUs7cz.mjs} +3 -3
- package/dist/{ForgejoSourceControlProvider-BGXysSX6.mjs → ForgejoSourceControlProvider-CmvOAzEG.mjs} +2 -2
- package/dist/{ForgejoSourceControlProvider-Dh6DOoc8.cjs → ForgejoSourceControlProvider-JgiyrMqp.cjs} +2 -2
- package/dist/{GitHubSourceControlProvider-CPCYV8Xo.mjs → GitHubSourceControlProvider-BYuvbcBf.mjs} +2 -2
- package/dist/{GitHubSourceControlProvider-8hsv_kCE.cjs → GitHubSourceControlProvider-CItCpOcC.cjs} +2 -2
- package/dist/{GitLabSourceControlProvider-B0ZbF9Zx.cjs → GitLabSourceControlProvider-CMce22nU.cjs} +2 -2
- package/dist/{GitLabSourceControlProvider-Bvknpaon.mjs → GitLabSourceControlProvider-DZzEaVSi.mjs} +2 -2
- package/dist/{GrokDriver-DSPEmiwq.mjs → GrokDriver-CduUwiOH.mjs} +3 -3
- package/dist/{GrokDriver-RyyFeh_q.cjs → GrokDriver-D0jraOC_.cjs} +3 -3
- package/dist/{OpenCodeDriver-0q44rSQX.mjs → OpenCodeDriver-Bz_uJdMA.mjs} +2 -2
- package/dist/{OpenCodeDriver-CDcvPT9v.cjs → OpenCodeDriver-DxGpgtDS.cjs} +2 -2
- package/dist/{SourceControlProviderDiscoveryCatalog-DreaAH1H.cjs → SourceControlProviderDiscoveryCatalog-Dm_lhrhv.cjs} +1 -1
- package/dist/{SourceControlProviderDiscoveryCatalog-B37RHe2u.mjs → SourceControlProviderDiscoveryCatalog-ZtwPWoxE.mjs} +1 -1
- package/dist/bin.cjs +518 -263
- package/dist/bin.mjs +519 -264
- package/dist/client/assets/AccountSettings-Bv57-JYy.js +1 -0
- package/dist/client/assets/AiFocusSettings-DCPHmJpA.js +1 -0
- package/dist/client/assets/{AnimatedHeight-D9bpLPqe.js → AnimatedHeight-DPqb09B0.js} +1 -1
- package/dist/client/assets/AppearanceSettings-EmTrtb_U.js +1 -0
- package/dist/client/assets/BranchToolbar.logic-CHRK3hDt.js +1 -0
- package/dist/client/assets/BrowserPanel-2Xu08il5.js +1 -0
- package/dist/client/assets/ChatRightPanel-C1VD6GCV.js +194 -0
- package/dist/client/assets/ChatThreadRouteView-CNww3i2J.js +1 -0
- package/dist/client/assets/CommandPaletteDialog-B_f3fKp7.js +1 -0
- package/dist/client/assets/CompositeRoot-B40iitmH.js +1 -0
- package/dist/client/assets/ComputerUseSettings-BJs7jqR0.js +1 -0
- package/dist/client/assets/ConnectionsSettings-B9nfvgLG.js +7 -0
- package/dist/client/assets/ContextHandoffEndpointLabel-BSQOArMR.js +4 -0
- package/dist/client/assets/DiagnosticsSettings-BmrqOKMe.js +2 -0
- package/dist/client/assets/DialogHandle-pelzaaiH.js +1 -0
- package/dist/client/assets/DialogPopup-BLM0vN4N.js +1 -0
- package/dist/client/assets/DialogRoot-CY6ZzEUS.js +1 -0
- package/dist/client/assets/DialogTitle-BvIjMtMm.js +1 -0
- package/dist/client/assets/DialogTrigger-CIeVAA-a.js +1 -0
- package/dist/client/assets/DialogViewport-Cz0OadGI.js +1 -0
- package/dist/client/assets/DraftChatThreadRouteView-DMIGMESb.js +1 -0
- package/dist/client/assets/{ExternalIdentityWeb.logic-pjD4pCDd.js → ExternalIdentityWeb.logic-3rlDV7lT.js} +1 -1
- package/dist/client/assets/GlassSurface-CEVIdyfP.js +1 -0
- package/dist/client/assets/HostedConnectionControls-r9cyZPyF.js +1 -0
- package/dist/client/assets/HostedHubRoot-BkfafJ5x.js +2 -0
- package/dist/client/assets/HostedNativeAuthorizationRoute-CqHuW853.js +2 -0
- package/dist/client/assets/HostedNodeRenameDialog-C7m-nvTj.js +1 -0
- package/dist/client/assets/HostedRelayTrustNotice-DNZQyAX0.js +1 -0
- package/dist/client/assets/IntegrationsSettingsPanel-hul3ysgL.js +2 -0
- package/dist/client/assets/KeybindingsSettings-Cme6omBM.js +7 -0
- package/dist/client/assets/LazyBrowserPanel-COJFwNK7.js +2 -0
- package/dist/client/assets/McpServersSettings-CPeNF8_u.js +6 -0
- package/dist/client/assets/MobileSheet-BZo-RAfm.js +1 -0
- package/dist/client/assets/NodeSecuritySettings-CwT5nEW9.js +1 -0
- package/dist/client/assets/OpinionatedPluginsSettings-D8A1CbMG.js +1 -0
- package/dist/client/assets/PhoneGetAppInterstitial-BBnGXVkR.js +1 -0
- package/dist/client/assets/PhoneHome-BTKOPVjw.js +1 -0
- package/dist/client/assets/PhoneSettingsSurface-DdVCndyt.js +2 -0
- package/dist/client/assets/ProviderModelPicker-DoYEUZrn.js +1 -0
- package/dist/client/assets/ProvidersSettingsPanel-ldDCPVIY.js +1 -0
- package/dist/client/assets/QuitShortcutFeedback-mF7X0WMD.js +1 -0
- package/dist/client/assets/RedactedSensitiveText-DovqFcmM.js +1 -0
- package/dist/client/assets/RootAppShell-CzmEWO9w.js +7 -0
- package/dist/client/assets/Separator-BhAVTIOc.js +1 -0
- package/dist/client/assets/SettingsDialog-ByXgBN0U.js +2 -0
- package/dist/client/assets/SettingsPanels-Bgf4vkrJ.js +3 -0
- package/dist/client/assets/SettingsPanels.editor-d-rVlbeN.js +1 -0
- package/dist/client/assets/SourceControlSettings-dKw0FaN1.js +1 -0
- package/dist/client/assets/StatisticsPage-C2RuqDIK.js +1 -0
- package/dist/client/assets/StatisticsPanel-DqoXnrhQ.js +1 -0
- package/dist/client/assets/StatisticsSettingsLink-C_f31sb4.js +1 -0
- package/dist/client/assets/{ThreadTerminalDrawer-DcZk76Y9.js → ThreadTerminalDrawer-DaLrSTn9.js} +11 -11
- package/dist/client/assets/ThreadWorkspacePanel-BvRZIxZQ.js +2073 -0
- package/dist/client/assets/activity-bn_fBQGf.js +1 -0
- package/dist/client/assets/alert-BmLJh6DH.js +1 -0
- package/dist/client/assets/{appChrome-CiOQzE1d.js → appChrome-Dy57Ve9N.js} +1 -1
- package/dist/client/assets/arrow-left-pzj1cbX3.js +1 -0
- package/dist/client/assets/arrow-right-BW5jU-vo.js +1 -0
- package/dist/client/assets/arrow-up-right-AfC5AaSO.js +1 -0
- package/dist/client/assets/authorization-7xVVtCBu.js +1 -0
- package/dist/client/assets/badge-DnBuGHGL.js +1 -0
- package/dist/client/assets/bot-CsKkSRlb.js +1 -0
- package/dist/client/assets/{capabilities-BTd0MRtv.js → capabilities-DskyVNd2.js} +1 -1
- package/dist/client/assets/chart-column-DhvWXIiH.js +1 -0
- package/dist/client/assets/chevron-right-CITtTwME.js +1 -0
- package/dist/client/assets/clipboard-copy-fJnfdl4H.js +1 -0
- package/dist/client/assets/data-list-_E-Al1sf.js +1 -0
- package/dist/client/assets/desktopWorkspace-DycXKuMm.js +1 -0
- package/dist/client/assets/download-CLQzE1di.js +1 -0
- package/dist/client/assets/editorPreferences-Bg624RVT.js +1 -0
- package/dist/client/assets/empty-YXFtCUDN.js +1 -0
- package/dist/client/assets/group-DOCkUmuY.js +1 -0
- package/dist/client/assets/hostedConnectionCoordinator-JZ1dLx4v.js +1 -0
- package/dist/client/assets/{hostedPairing-PogXRAb7.js → hostedPairing-B_ylEEDa.js} +1 -1
- package/dist/client/assets/hubRoutes-C2S5of9_.js +1 -0
- package/dist/client/assets/{index-D5j6WG7w.js → index-CvRFRkBK.js} +2 -2
- package/dist/client/assets/input-C2xv8mMt.js +1 -0
- package/dist/client/assets/kbd-4-4mGdIa.js +1 -0
- package/dist/client/assets/key-round-CYcb9lAa.js +1 -0
- package/dist/client/assets/layers-CGlOWYxu.js +1 -0
- package/dist/client/assets/log-out-CZW2EpNJ.js +1 -0
- package/dist/client/assets/{logging-DfaR8ACp.js → logging-BpmZOfmu.js} +1 -1
- package/dist/client/assets/main-CC-U8LrA.css +2 -0
- package/dist/client/assets/main-CzDOnLFw.js +9 -0
- package/dist/client/assets/palette-CQOuNfSO.js +1 -0
- package/dist/client/assets/play-CPVy9wwV.js +1 -0
- package/dist/client/assets/primary-CjhRI8fe.js +2 -0
- package/dist/client/assets/providerDriverMeta-BVHpFupf.js +1 -0
- package/dist/client/assets/providerModels-BsybzP4P.js +1 -0
- package/dist/client/assets/{qr-code-Bun4dpvz.js → qr-code-BPqDlVMn.js} +1 -1
- package/dist/client/assets/qr-code-C6BVTc4V.js +1 -0
- package/dist/client/assets/radio-group-C8qudOQH.js +2 -0
- package/dist/client/assets/refresh-cw-B5Cz1z3e.js +1 -0
- package/dist/client/assets/runtime-Bxg7k81u.js +17 -0
- package/dist/client/assets/save-C7zM6ey6.js +1 -0
- package/dist/client/assets/scroll-area-5OU_pvTW.js +1 -0
- package/dist/client/assets/scrollEdges-qnEXfIOg.js +1 -0
- package/dist/client/assets/separator-B5HfRiaO.js +1 -0
- package/dist/client/assets/settingsLayout-CfKq88KD.js +1 -0
- package/dist/client/assets/sheet-B9gQDy_I.js +1 -0
- package/dist/client/assets/shield-alert-7yBlEyOs.js +1 -0
- package/dist/client/assets/shield-check-CnKgVJ0F.js +1 -0
- package/dist/client/assets/shield-rdjnBE2Q.js +1 -0
- package/dist/client/assets/sidebar-BdvL1Pbj.js +1 -0
- package/dist/client/assets/sidebarProjectFolders-BH8XBqNe.js +4 -0
- package/dist/client/assets/sidebarStatusText-CZKsUFBD.js +1 -0
- package/dist/client/assets/skeleton-CoyLqyaB.js +1 -0
- package/dist/client/assets/smartphone-CBgpMHXR.js +1 -0
- package/dist/client/assets/sparkles-w-UZXQx1.js +1 -0
- package/dist/client/assets/src-Bi-5Nw9C.js +14 -0
- package/dist/client/assets/star-BZ-RtSFD.js +1 -0
- package/dist/client/assets/switch-CEJEmLe7.js +48 -0
- package/dist/client/assets/toastHelpers-CSQRKo4F.js +1 -0
- package/dist/client/assets/toggle-DVGrNHjq.js +1 -0
- package/dist/client/assets/toggle-group-CNDOfNhH.js +1 -0
- package/dist/client/assets/tokenModePresentation-CQNdC9CW.js +1 -0
- package/dist/client/assets/tooltip-B7Z4qomY.js +1 -0
- package/dist/client/assets/unplug-CRUwFNFw.js +1 -0
- package/dist/client/assets/useAppSidebarCollapsed-wq6czkNJ.js +1 -0
- package/dist/client/assets/useBaseUiId-OYaGjnkh.js +1 -0
- package/dist/client/assets/useLabelableId-VMc-yITe.js +1 -0
- package/dist/client/assets/useNavigate-DVi0rBlf.js +1 -0
- package/dist/client/assets/usePhoneThreadActions-CwwHikjB.js +1 -0
- package/dist/client/assets/usePopupViewport-BcSIK_ph.js +1 -0
- package/dist/client/assets/useScrollLock-BQf9VYJT.js +1 -0
- package/dist/client/assets/{useStatistics-DfLU9_Qu.js → useStatistics-DczKdEfy.js} +15 -15
- package/dist/client/assets/useTriggerFocusGuards-DjP-D0_a.js +1 -0
- package/dist/client/assets/useValueChanged-CRwCkFdy.js +1 -0
- package/dist/client/assets/user-round-DStbWN3z.js +1 -0
- package/dist/client/assets/{vscode-icons-Dgo7Sslf.js → vscode-icons-BihBo3tb.js} +1 -1
- package/dist/client/assets/{workspaceMetadataProjection-UiprkDbH.js → workspaceMetadataProjection-j3BGlVOB.js} +1 -1
- package/dist/client/assets/wrench-BBIgGxy9.js +1 -0
- package/dist/client/index.html +1 -1
- package/dist/{collectUint8StreamText-C_VNyArd.mjs → collectUint8StreamText-CE1Re5Ij.mjs} +41 -3
- package/dist/{collectUint8StreamText-DStwNTTK.cjs → collectUint8StreamText-whblCEfg.cjs} +52 -2
- package/dist/{makeManagedServerProvider-GZcpSLrW.mjs → makeManagedServerProvider-CwYhl_P-.mjs} +1 -1
- package/dist/{makeManagedServerProvider-VzxWN-04.cjs → makeManagedServerProvider-Dy2Ny9tk.cjs} +1 -1
- package/dist/resource-monitor/ryco-resource-monitor +0 -0
- package/dist/resource-monitor/ryco-resource-monitor.exe +0 -0
- package/dist/resource-monitor/win32-arm64/ryco-resource-monitor.exe +0 -0
- package/dist/resource-monitor/win32-x64/ryco-resource-monitor.exe +0 -0
- package/package.json +1 -1
- package/dist/client/assets/AccountSettings-DGvZzAqN.js +0 -1
- package/dist/client/assets/AiFocusSettings-D8wZfNES.js +0 -1
- package/dist/client/assets/AppearanceSettings-BFo6g6_s.js +0 -1
- package/dist/client/assets/BranchToolbar.logic-CmO2U1U7.js +0 -1
- package/dist/client/assets/BrowserPanel-r6is5C3e.js +0 -1
- package/dist/client/assets/ChatRightPanel-BewXBRFZ.js +0 -194
- package/dist/client/assets/ChatThreadRouteView-CC_6FmHd.js +0 -1
- package/dist/client/assets/CommandPaletteDialog-ftA_Xg2G.js +0 -1
- package/dist/client/assets/CompositeRoot-arlgwzfX.js +0 -1
- package/dist/client/assets/ComputerUseSettings-V-oMtddy.js +0 -1
- package/dist/client/assets/ConnectionsSettings-BrFvrRjz.js +0 -7
- package/dist/client/assets/ContextHandoffEndpointLabel-CPeU4K5A.js +0 -4
- package/dist/client/assets/DiagnosticsSettings-Dk3JaIOU.js +0 -2
- package/dist/client/assets/DialogHandle-00ZXxxpz.js +0 -1
- package/dist/client/assets/DialogPopup-mazVJKyB.js +0 -1
- package/dist/client/assets/DialogRoot-CWlzx19Z.js +0 -1
- package/dist/client/assets/DialogTitle-CKaEtTky.js +0 -1
- package/dist/client/assets/DialogTrigger-CiElTNmo.js +0 -1
- package/dist/client/assets/DialogViewport-a5beR5bY.js +0 -1
- package/dist/client/assets/DraftChatThreadRouteView-DMwnSfgh.js +0 -1
- package/dist/client/assets/FloatingPortalLite-DWdtHKob.js +0 -1
- package/dist/client/assets/GlassSurface-BqfxDYiR.js +0 -1
- package/dist/client/assets/HostedConnectionControls-BmJd89CC.js +0 -1
- package/dist/client/assets/HostedHubRoot-CRIiJ67A.js +0 -2
- package/dist/client/assets/HostedNativeAuthorizationRoute-DcksCt9n.js +0 -2
- package/dist/client/assets/HostedRelayTrustNotice-C9pl5h2a.js +0 -1
- package/dist/client/assets/IntegrationsSettingsPanel-BnfjyLrM.js +0 -2
- package/dist/client/assets/KeybindingsSettings-CkW7lzvz.js +0 -7
- package/dist/client/assets/LazyBrowserPanel-C6uMUmoV.js +0 -2
- package/dist/client/assets/McpServersSettings-BdXgS-Pm.js +0 -6
- package/dist/client/assets/MobileSheet-D19YdeQ9.js +0 -1
- package/dist/client/assets/NodeSecuritySettings-BfcBgtEg.js +0 -1
- package/dist/client/assets/OpinionatedPluginsSettings-YY54IT7P.js +0 -1
- package/dist/client/assets/PhoneGetAppInterstitial-9r6NwJP8.js +0 -1
- package/dist/client/assets/PhoneHome-DnEJp0bU.js +0 -1
- package/dist/client/assets/PhoneSettingsSurface-NKJrLCxU.js +0 -2
- package/dist/client/assets/ProviderModelPicker-CYGv-4fE.js +0 -1
- package/dist/client/assets/ProvidersSettingsPanel-DsXHij4h.js +0 -1
- package/dist/client/assets/QuitShortcutFeedback-BVyYaNtd.js +0 -1
- package/dist/client/assets/RedactedSensitiveText-D8j7kpow.js +0 -1
- package/dist/client/assets/RootAppShell-D7c8sbA0.js +0 -7
- package/dist/client/assets/Separator-Bn8l1oSK.js +0 -1
- package/dist/client/assets/SettingsDialog-BlPX1mT8.js +0 -2
- package/dist/client/assets/SettingsPanels-CeuvwIV_.js +0 -3
- package/dist/client/assets/SettingsPanels.editor-CLJJeKLI.js +0 -1
- package/dist/client/assets/SourceControlSettings-D-GeZ6PW.js +0 -1
- package/dist/client/assets/StatisticsPage-poomFDoQ.js +0 -1
- package/dist/client/assets/StatisticsPanel-DbGgCCpZ.js +0 -1
- package/dist/client/assets/StatisticsSettingsLink-Brc9--O7.js +0 -1
- package/dist/client/assets/ThreadWorkspacePanel-Shhau2BD.js +0 -2073
- package/dist/client/assets/activity-Dy-wOS-S.js +0 -1
- package/dist/client/assets/alert-4WZo8oMe.js +0 -1
- package/dist/client/assets/arrow-left-gLRAasih.js +0 -1
- package/dist/client/assets/arrow-right-CAK2t4QL.js +0 -1
- package/dist/client/assets/arrow-up-right-DP0hmMEB.js +0 -1
- package/dist/client/assets/authorization-K_UCP_xh.js +0 -1
- package/dist/client/assets/badge-CYDyJZRJ.js +0 -1
- package/dist/client/assets/bot-CCrx5oCt.js +0 -1
- package/dist/client/assets/button-QrCU0tNP.js +0 -1
- package/dist/client/assets/chart-column-BvK6lSzG.js +0 -1
- package/dist/client/assets/chevron-down-yka18-iP.js +0 -1
- package/dist/client/assets/chevron-right-CHyIXx5W.js +0 -1
- package/dist/client/assets/clamp-D0kAXd-u.js +0 -1
- package/dist/client/assets/clipboard-copy-DfdkWOiT.js +0 -1
- package/dist/client/assets/copy-riIPLkKV.js +0 -1
- package/dist/client/assets/data-list-CsiYTho5.js +0 -1
- package/dist/client/assets/download-B0lbSdq5.js +0 -1
- package/dist/client/assets/editorPreferences-Cf2Smgu1.js +0 -1
- package/dist/client/assets/empty-CHk0OiOB.js +0 -1
- package/dist/client/assets/group-DfFZdj79.js +0 -1
- package/dist/client/assets/hostedConnectionCoordinator-DZh1yVqz.js +0 -1
- package/dist/client/assets/input-BAC5Cd3b.js +0 -1
- package/dist/client/assets/kbd-CMUW8K7b.js +0 -1
- package/dist/client/assets/key-round-Cm6itp2V.js +0 -1
- package/dist/client/assets/layers-DoDpJao_.js +0 -1
- package/dist/client/assets/loader-circle-D0CNb5GI.js +0 -1
- package/dist/client/assets/log-out-BuoOiS45.js +0 -1
- package/dist/client/assets/main-CRk9p9SC.css +0 -2
- package/dist/client/assets/main-DaXSCt8g.js +0 -9
- package/dist/client/assets/monitor-Dyigmrl2.js +0 -1
- package/dist/client/assets/palette-kIM_geXk.js +0 -1
- package/dist/client/assets/play-Dh8XDMnw.js +0 -1
- package/dist/client/assets/primary-DjXNHNGV.js +0 -2
- package/dist/client/assets/providerDriverMeta-Cl-ADdmZ.js +0 -1
- package/dist/client/assets/providerModels-dpugJUmV.js +0 -1
- package/dist/client/assets/qr-code-CkI1p05P.js +0 -1
- package/dist/client/assets/radio-group-Hh0oQGyf.js +0 -2
- package/dist/client/assets/react-dom-x9LNwWQc.js +0 -1
- package/dist/client/assets/refresh-cw-MqmsC7V0.js +0 -1
- package/dist/client/assets/runtime-L56puJDA.js +0 -17
- package/dist/client/assets/save-BSB81i-r.js +0 -1
- package/dist/client/assets/scroll-area-DCGCzd6v.js +0 -1
- package/dist/client/assets/scrollEdges-DIzjkUJG.js +0 -1
- package/dist/client/assets/separator-YeH3P39x.js +0 -1
- package/dist/client/assets/settingsLayout-CmNqO2kB.js +0 -1
- package/dist/client/assets/settingsSections.logic-Bg960p_I.js +0 -1
- package/dist/client/assets/sheet-CTbjQ5Bv.js +0 -1
- package/dist/client/assets/shield-DlqCO-0N.js +0 -1
- package/dist/client/assets/shield-alert-BrZ-Rb8N.js +0 -1
- package/dist/client/assets/shield-check-DHxdM6te.js +0 -1
- package/dist/client/assets/sidebar-4cwEndEB.js +0 -1
- package/dist/client/assets/sidebarProjectFolders-C7WDwUYJ.js +0 -4
- package/dist/client/assets/sidebarStatusText-Cq_MMykN.js +0 -1
- package/dist/client/assets/skeleton-BlostfCS.js +0 -1
- package/dist/client/assets/smartphone-OaA-Xj_d.js +0 -1
- package/dist/client/assets/sparkles-BXwkPX2M.js +0 -1
- package/dist/client/assets/src-gDjuIvMO.js +0 -14
- package/dist/client/assets/star-BjaAYD-x.js +0 -1
- package/dist/client/assets/switch-COrEGDkz.js +0 -48
- package/dist/client/assets/toast-C_F1LeME.js +0 -1
- package/dist/client/assets/toggle-BPNEBXg_.js +0 -1
- package/dist/client/assets/toggle-group-BC1zJ9xi.js +0 -1
- package/dist/client/assets/tokenModePresentation-DUJ8DMTy.js +0 -1
- package/dist/client/assets/tooltip-iy3_osu5.js +0 -1
- package/dist/client/assets/triangle-alert-YXqtFxD6.js +0 -1
- package/dist/client/assets/unplug-e3z4rXgY.js +0 -1
- package/dist/client/assets/useAppSidebarCollapsed-mtvJ7qbW.js +0 -1
- package/dist/client/assets/useLabelableId-NJQsKdL6.js +0 -1
- package/dist/client/assets/useNavigate-2tVq4iZ2.js +0 -1
- package/dist/client/assets/usePhoneThreadActions-97AsVVIR.js +0 -1
- package/dist/client/assets/usePopupViewport-8OM2irPK.js +0 -1
- package/dist/client/assets/usePositioner-0Kb-C4al.js +0 -1
- package/dist/client/assets/useRenderElement-D0HVF5g_.js +0 -1
- package/dist/client/assets/useRouter-CcIDS3PN.js +0 -1
- package/dist/client/assets/useScrollLock-AUqaSAkf.js +0 -1
- package/dist/client/assets/useSwipeDismiss-CcW-GPO_.js +0 -1
- package/dist/client/assets/useTriggerFocusGuards-ChBvppef.js +0 -1
- package/dist/client/assets/useValueChanged-CThCTn4h.js +0 -1
- package/dist/client/assets/user-round-evbX_eto.js +0 -1
- package/dist/client/assets/utils-5-6TOrS1.js +0 -1
- package/dist/client/assets/visuallyHidden-BRaogTVF.js +0 -1
- package/dist/client/assets/wrench-mA--bcId.js +0 -1
- package/dist/client/assets/x-_SjFRYll.js +0 -1
package/dist/bin.cjs
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
4
4
|
const require_rolldown_runtime = require("./rolldown-runtime-LGfotAqq.cjs");
|
|
5
|
-
const require_collectUint8StreamText = require("./collectUint8StreamText-
|
|
5
|
+
const require_collectUint8StreamText = require("./collectUint8StreamText-whblCEfg.cjs");
|
|
6
6
|
const require_Metrics = require("./Metrics-Bcb9vCAe.cjs");
|
|
7
|
-
const require_SourceControlProviderDiscoveryCatalog = require("./SourceControlProviderDiscoveryCatalog-
|
|
7
|
+
const require_SourceControlProviderDiscoveryCatalog = require("./SourceControlProviderDiscoveryCatalog-Dm_lhrhv.cjs");
|
|
8
8
|
const require_sourceControl = require("./sourceControl-B0D1Op29.cjs");
|
|
9
9
|
let _effect_platform_node_NodeRuntime = require("@effect/platform-node/NodeRuntime");
|
|
10
10
|
_effect_platform_node_NodeRuntime = require_rolldown_runtime.__toESM(_effect_platform_node_NodeRuntime, 1);
|
|
@@ -1408,6 +1408,7 @@ function logPathHydrationWarning(message, error) {
|
|
|
1408
1408
|
console.warn(`[server] ${message}`, error instanceof Error ? error.message : error ?? "");
|
|
1409
1409
|
}
|
|
1410
1410
|
function fixPath(options = {}) {
|
|
1411
|
+
if (options.inheritedFromDesktop) return;
|
|
1411
1412
|
const platform = options.platform ?? process.platform;
|
|
1412
1413
|
const env = options.env ?? process.env;
|
|
1413
1414
|
const logWarning = options.logWarning ?? logPathHydrationWarning;
|
|
@@ -2494,9 +2495,14 @@ const INLINE_ATTACHMENT_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
|
2494
2495
|
".webp"
|
|
2495
2496
|
]);
|
|
2496
2497
|
const STATIC_CONTENT_TYPES = {
|
|
2498
|
+
".avif": "image/avif",
|
|
2499
|
+
".bmp": "image/bmp",
|
|
2497
2500
|
".css": "text/css; charset=utf-8",
|
|
2498
2501
|
".html": "text/html; charset=utf-8",
|
|
2502
|
+
".gif": "image/gif",
|
|
2499
2503
|
".ico": "image/x-icon",
|
|
2504
|
+
".jpeg": "image/jpeg",
|
|
2505
|
+
".jpg": "image/jpeg",
|
|
2500
2506
|
".js": "text/javascript; charset=utf-8",
|
|
2501
2507
|
".json": "application/json; charset=utf-8",
|
|
2502
2508
|
".map": "application/json; charset=utf-8",
|
|
@@ -2504,7 +2510,8 @@ const STATIC_CONTENT_TYPES = {
|
|
|
2504
2510
|
".svg": "image/svg+xml; charset=utf-8",
|
|
2505
2511
|
".txt": "text/plain; charset=utf-8",
|
|
2506
2512
|
".wasm": "application/wasm",
|
|
2507
|
-
".webmanifest": "application/manifest+json; charset=utf-8"
|
|
2513
|
+
".webmanifest": "application/manifest+json; charset=utf-8",
|
|
2514
|
+
".webp": "image/webp"
|
|
2508
2515
|
};
|
|
2509
2516
|
const browserApiCorsLayer = effect_unstable_http.HttpRouter.cors({
|
|
2510
2517
|
allowedMethods: [
|
|
@@ -2823,16 +2830,17 @@ const projectFaviconRouteLayer = effect_unstable_http.HttpRouter.add("GET", "/ap
|
|
|
2823
2830
|
if (effect.Option.isNone(url)) return effect_unstable_http.HttpServerResponse.text("Bad Request", { status: 400 });
|
|
2824
2831
|
const projectCwd = url.value.searchParams.get("cwd");
|
|
2825
2832
|
if (!projectCwd) return effect_unstable_http.HttpServerResponse.text("Missing cwd parameter", { status: 400 });
|
|
2826
|
-
const
|
|
2827
|
-
if (!
|
|
2833
|
+
const favicon = yield* (yield* ProjectFaviconResolver).readIcon(projectCwd);
|
|
2834
|
+
if (!favicon) return effect_unstable_http.HttpServerResponse.text(FALLBACK_PROJECT_FAVICON_SVG, {
|
|
2828
2835
|
status: 200,
|
|
2829
2836
|
contentType: "image/svg+xml",
|
|
2830
2837
|
headers: inlineImageResponseHeaders("fallback.svg")
|
|
2831
2838
|
});
|
|
2832
|
-
return
|
|
2839
|
+
return effect_unstable_http.HttpServerResponse.uint8Array(favicon.bytes, {
|
|
2833
2840
|
status: 200,
|
|
2834
|
-
|
|
2835
|
-
|
|
2841
|
+
contentType: resolveStaticContentType(favicon.path, yield* effect.Path.Path),
|
|
2842
|
+
headers: inlineImageResponseHeaders(favicon.path)
|
|
2843
|
+
});
|
|
2836
2844
|
}).pipe(effect.Effect.catchTag("AuthError", respondToAuthError)));
|
|
2837
2845
|
const AvatarFormSchema = effect_Schema.Struct({ avatar: effect_unstable_http.Multipart.SingleFileSchema });
|
|
2838
2846
|
const PROJECT_ID_PATTERN = /^[A-Za-z0-9_-]+$/;
|
|
@@ -6569,8 +6577,35 @@ const repairProjectionThreadSubagentNestingColumns = effect_Effect.fn("repairPro
|
|
|
6569
6577
|
const repairContextHandoffRuntimeSessions = effect_Effect.fn("repairContextHandoffRuntimeSessions")(function* () {
|
|
6570
6578
|
yield* _042_ContextHandoffRuntimeSessions_default;
|
|
6571
6579
|
});
|
|
6580
|
+
const repairProjectionThreadSummaryState = effect_Effect.gen(function* () {
|
|
6581
|
+
const sql = yield* effect_unstable_sql_SqlClient.SqlClient;
|
|
6582
|
+
yield* sql`
|
|
6583
|
+
CREATE TABLE IF NOT EXISTS ryco_compatibility_repairs (
|
|
6584
|
+
repair_key TEXT PRIMARY KEY
|
|
6585
|
+
)
|
|
6586
|
+
`;
|
|
6587
|
+
yield* sql.withTransaction(effect_Effect.gen(function* () {
|
|
6588
|
+
const completed = yield* sql`
|
|
6589
|
+
SELECT repair_key FROM ryco_compatibility_repairs
|
|
6590
|
+
WHERE repair_key = 'projection-thread-summary-v1'
|
|
6591
|
+
`;
|
|
6592
|
+
const objects = yield* sql`
|
|
6593
|
+
SELECT name FROM sqlite_master WHERE name IN (
|
|
6594
|
+
'projection_thread_user_input_requests',
|
|
6595
|
+
'idx_projection_thread_user_input_requests_thread_pending',
|
|
6596
|
+
'idx_projection_thread_proposed_plans_thread_turn_updated'
|
|
6597
|
+
)
|
|
6598
|
+
`;
|
|
6599
|
+
if (completed.length > 0 && objects.length === 3) return;
|
|
6600
|
+
yield* _044_ProjectionThreadSummaryState_default;
|
|
6601
|
+
yield* sql`
|
|
6602
|
+
INSERT OR IGNORE INTO ryco_compatibility_repairs (repair_key)
|
|
6603
|
+
VALUES ('projection-thread-summary-v1')
|
|
6604
|
+
`;
|
|
6605
|
+
}));
|
|
6606
|
+
});
|
|
6572
6607
|
const repairProjectionThreadReadModelMigrations = effect_Effect.fn("repairProjectionThreadReadModelMigrations")(function* (toMigrationInclusive) {
|
|
6573
|
-
if (toMigrationInclusive >= 44) yield*
|
|
6608
|
+
if (toMigrationInclusive >= 44) yield* repairProjectionThreadSummaryState;
|
|
6574
6609
|
if (toMigrationInclusive >= 45) yield* _045_ProjectionThreadHistoryPaginationIndexes_default;
|
|
6575
6610
|
if (toMigrationInclusive >= 46) yield* _046_ProjectionThreadMessageDispatchMode_default;
|
|
6576
6611
|
if (toMigrationInclusive >= 47) yield* _047_ProjectionThreadsGoal_default;
|
|
@@ -13500,26 +13535,26 @@ const make$13 = effect.Effect.fn("makeSourceControlProviderRegistry")(function*
|
|
|
13500
13535
|
const azureDevOpsCli = yield* AzureDevOpsCli;
|
|
13501
13536
|
const fileSystem = yield* effect.FileSystem.FileSystem;
|
|
13502
13537
|
const github = yield* makeLazyProvider("github", effect.Effect.tryPromise({
|
|
13503
|
-
try: () => Promise.resolve().then(() => require("./GitHubSourceControlProvider-
|
|
13538
|
+
try: () => Promise.resolve().then(() => require("./GitHubSourceControlProvider-CItCpOcC.cjs")),
|
|
13504
13539
|
catch: (cause) => providerLoadError("github", cause)
|
|
13505
13540
|
}).pipe(effect.Effect.flatMap((module) => module.make()), effect.Effect.provideService(GitHubCli, githubCli), effect.Effect.provideService(effect.FileSystem.FileSystem, fileSystem)));
|
|
13506
13541
|
const gitlab = yield* makeLazyProvider("gitlab", effect.Effect.tryPromise({
|
|
13507
|
-
try: () => Promise.resolve().then(() => require("./GitLabSourceControlProvider-
|
|
13542
|
+
try: () => Promise.resolve().then(() => require("./GitLabSourceControlProvider-CMce22nU.cjs")),
|
|
13508
13543
|
catch: (cause) => providerLoadError("gitlab", cause)
|
|
13509
13544
|
}).pipe(effect.Effect.flatMap((module) => module.make()), effect.Effect.provideService(GitLabCli, gitlabCli)));
|
|
13510
13545
|
const bitbucket = yield* makeLazyProvider("bitbucket", effect.Effect.tryPromise({
|
|
13511
|
-
try: () => Promise.resolve().then(() => require("./BitbucketSourceControlProvider-
|
|
13546
|
+
try: () => Promise.resolve().then(() => require("./BitbucketSourceControlProvider-CD8IvXQK.cjs")),
|
|
13512
13547
|
catch: (cause) => providerLoadError("bitbucket", cause)
|
|
13513
13548
|
}).pipe(effect.Effect.flatMap((module) => module.make()), effect.Effect.provideService(BitbucketApi, bitbucketApi)), {
|
|
13514
13549
|
searchRepositories: true,
|
|
13515
13550
|
cloneAuthentication: true
|
|
13516
13551
|
});
|
|
13517
13552
|
const forgejo = yield* makeLazyProvider("forgejo", effect.Effect.tryPromise({
|
|
13518
|
-
try: () => Promise.resolve().then(() => require("./ForgejoSourceControlProvider-
|
|
13553
|
+
try: () => Promise.resolve().then(() => require("./ForgejoSourceControlProvider-JgiyrMqp.cjs")),
|
|
13519
13554
|
catch: (cause) => providerLoadError("forgejo", cause)
|
|
13520
13555
|
}).pipe(effect.Effect.flatMap((module) => module.make()), effect.Effect.provideService(ForgejoApi, forgejoApi)));
|
|
13521
13556
|
const azureDevOps = yield* makeLazyProvider("azure-devops", effect.Effect.tryPromise({
|
|
13522
|
-
try: () => Promise.resolve().then(() => require("./AzureDevOpsSourceControlProvider-
|
|
13557
|
+
try: () => Promise.resolve().then(() => require("./AzureDevOpsSourceControlProvider-COmd21c-.cjs")),
|
|
13523
13558
|
catch: (cause) => providerLoadError("azure-devops", cause)
|
|
13524
13559
|
}).pipe(effect.Effect.flatMap((module) => module.make()), effect.Effect.provideService(AzureDevOpsCli, azureDevOpsCli)));
|
|
13525
13560
|
const bitbucketDiscovery = require_SourceControlProviderDiscoveryCatalog.makeBitbucketDiscovery(bitbucketApi);
|
|
@@ -34008,7 +34043,7 @@ const BUILT_IN_DRIVERS = [
|
|
|
34008
34043
|
configSchema: require_collectUint8StreamText.CodexSettings,
|
|
34009
34044
|
defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.CodexSettings)({}),
|
|
34010
34045
|
create: (input) => effect.Effect.tryPromise({
|
|
34011
|
-
try: () => Promise.resolve().then(() => require("./CodexDriver-
|
|
34046
|
+
try: () => Promise.resolve().then(() => require("./CodexDriver-BzR8gA8w.cjs")),
|
|
34012
34047
|
catch: (cause) => driverImportError(codexDriverKind, input, cause)
|
|
34013
34048
|
}).pipe(effect.Effect.flatMap(({ CodexDriver }) => CodexDriver.create(input)))
|
|
34014
34049
|
},
|
|
@@ -34022,7 +34057,7 @@ const BUILT_IN_DRIVERS = [
|
|
|
34022
34057
|
configSchema: require_collectUint8StreamText.ClaudeSettings,
|
|
34023
34058
|
defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.ClaudeSettings)({}),
|
|
34024
34059
|
create: (input) => effect.Effect.tryPromise({
|
|
34025
|
-
try: () => Promise.resolve().then(() => require("./ClaudeDriver-
|
|
34060
|
+
try: () => Promise.resolve().then(() => require("./ClaudeDriver-Dry5uJfX.cjs")),
|
|
34026
34061
|
catch: (cause) => driverImportError(claudeDriverKind, input, cause)
|
|
34027
34062
|
}).pipe(effect.Effect.flatMap(({ ClaudeDriver }) => ClaudeDriver.create(input)))
|
|
34028
34063
|
},
|
|
@@ -34036,7 +34071,7 @@ const BUILT_IN_DRIVERS = [
|
|
|
34036
34071
|
configSchema: require_collectUint8StreamText.CopilotSettings,
|
|
34037
34072
|
defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.CopilotSettings)({}),
|
|
34038
34073
|
create: (input) => effect.Effect.tryPromise({
|
|
34039
|
-
try: () => Promise.resolve().then(() => require("./CopilotDriver-
|
|
34074
|
+
try: () => Promise.resolve().then(() => require("./CopilotDriver-rLcA8PSN.cjs")),
|
|
34040
34075
|
catch: (cause) => driverImportError(copilotDriverKind, input, cause)
|
|
34041
34076
|
}).pipe(effect.Effect.flatMap(({ CopilotDriver }) => CopilotDriver.create(input)))
|
|
34042
34077
|
},
|
|
@@ -34050,7 +34085,7 @@ const BUILT_IN_DRIVERS = [
|
|
|
34050
34085
|
configSchema: require_collectUint8StreamText.CursorSettings,
|
|
34051
34086
|
defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.CursorSettings)({}),
|
|
34052
34087
|
create: (input) => effect.Effect.tryPromise({
|
|
34053
|
-
try: () => Promise.resolve().then(() => require("./CursorDriver-
|
|
34088
|
+
try: () => Promise.resolve().then(() => require("./CursorDriver-C3s-8s9F.cjs")),
|
|
34054
34089
|
catch: (cause) => driverImportError(cursorDriverKind, input, cause)
|
|
34055
34090
|
}).pipe(effect.Effect.flatMap(({ CursorDriver }) => CursorDriver.create(input)))
|
|
34056
34091
|
},
|
|
@@ -34064,7 +34099,7 @@ const BUILT_IN_DRIVERS = [
|
|
|
34064
34099
|
configSchema: require_collectUint8StreamText.GrokSettings,
|
|
34065
34100
|
defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.GrokSettings)({}),
|
|
34066
34101
|
create: (input) => effect.Effect.tryPromise({
|
|
34067
|
-
try: () => Promise.resolve().then(() => require("./GrokDriver-
|
|
34102
|
+
try: () => Promise.resolve().then(() => require("./GrokDriver-D0jraOC_.cjs")),
|
|
34068
34103
|
catch: (cause) => driverImportError(grokDriverKind, input, cause)
|
|
34069
34104
|
}).pipe(effect.Effect.flatMap(({ GrokDriver }) => GrokDriver.create(input)))
|
|
34070
34105
|
},
|
|
@@ -34078,7 +34113,7 @@ const BUILT_IN_DRIVERS = [
|
|
|
34078
34113
|
configSchema: require_collectUint8StreamText.OpenCodeSettings,
|
|
34079
34114
|
defaultConfig: () => effect.Schema.decodeSync(require_collectUint8StreamText.OpenCodeSettings)({}),
|
|
34080
34115
|
create: (input) => effect.Effect.tryPromise({
|
|
34081
|
-
try: () => Promise.resolve().then(() => require("./OpenCodeDriver-
|
|
34116
|
+
try: () => Promise.resolve().then(() => require("./OpenCodeDriver-DxGpgtDS.cjs")),
|
|
34082
34117
|
catch: (cause) => driverImportError(openCodeDriverKind, input, cause)
|
|
34083
34118
|
}).pipe(effect.Effect.flatMap(({ OpenCodeDriver }) => OpenCodeDriver.create(input)))
|
|
34084
34119
|
}
|
|
@@ -34793,7 +34828,7 @@ const scopedSafeTeardown = (label) => (effect$28) => effect.Effect.gen(function*
|
|
|
34793
34828
|
});
|
|
34794
34829
|
//#endregion
|
|
34795
34830
|
//#region package.json
|
|
34796
|
-
var version$1 = "0.1.
|
|
34831
|
+
var version$1 = "0.1.25";
|
|
34797
34832
|
//#endregion
|
|
34798
34833
|
//#region src/provider/Layers/CodexProvider.ts
|
|
34799
34834
|
const PROVIDER_PROBE_TIMEOUT_MS = 8e3;
|
|
@@ -43378,6 +43413,36 @@ function resolveWorktreeCheckoutPath(input) {
|
|
|
43378
43413
|
return resolveAppManagedWorktreeCheckoutPath(input.appWorktreesRoot, input.projectId, input.branchName);
|
|
43379
43414
|
}
|
|
43380
43415
|
//#endregion
|
|
43416
|
+
//#region src/persistence/Services/ProjectionProjects.ts
|
|
43417
|
+
/**
|
|
43418
|
+
* ProjectionProjectRepository - Projection repository interface for projects.
|
|
43419
|
+
*
|
|
43420
|
+
* Owns persistence operations for project rows in the orchestration projection
|
|
43421
|
+
* read model.
|
|
43422
|
+
*
|
|
43423
|
+
* @module ProjectionProjectRepository
|
|
43424
|
+
*/
|
|
43425
|
+
const ProjectionProject = effect.Schema.Struct({
|
|
43426
|
+
projectId: require_collectUint8StreamText.ProjectId,
|
|
43427
|
+
title: effect.Schema.String,
|
|
43428
|
+
workspaceRoot: effect.Schema.String,
|
|
43429
|
+
projectMetadataDir: require_collectUint8StreamText.ProjectMetadataDir,
|
|
43430
|
+
defaultModelSelection: effect.Schema.NullOr(require_collectUint8StreamText.ModelSelection),
|
|
43431
|
+
customSystemPrompt: effect.Schema.optional(effect.Schema.NullOr(effect.Schema.String)),
|
|
43432
|
+
customAvatarContentHash: effect.Schema.NullOr(effect.Schema.String),
|
|
43433
|
+
preferredRemoteName: effect.Schema.NullOr(effect.Schema.String),
|
|
43434
|
+
scripts: effect.Schema.Array(require_collectUint8StreamText.ProjectScript),
|
|
43435
|
+
createdAt: require_collectUint8StreamText.IsoDateTime,
|
|
43436
|
+
updatedAt: require_collectUint8StreamText.IsoDateTime,
|
|
43437
|
+
deletedAt: effect.Schema.NullOr(require_collectUint8StreamText.IsoDateTime)
|
|
43438
|
+
});
|
|
43439
|
+
const GetProjectionProjectInput = effect.Schema.Struct({ projectId: require_collectUint8StreamText.ProjectId });
|
|
43440
|
+
const DeleteProjectionProjectInput = effect.Schema.Struct({ projectId: require_collectUint8StreamText.ProjectId });
|
|
43441
|
+
/**
|
|
43442
|
+
* ProjectionProjectRepository - Service tag for project projection persistence.
|
|
43443
|
+
*/
|
|
43444
|
+
var ProjectionProjectRepository = class extends effect.Context.Service()("ryco/persistence/Services/ProjectionProjects/ProjectionProjectRepository") {};
|
|
43445
|
+
//#endregion
|
|
43381
43446
|
//#region src/persistence/Services/ProjectionWorktrees.ts
|
|
43382
43447
|
/**
|
|
43383
43448
|
* ProjectionWorktreeRepository - Projection repository interface for worktrees.
|
|
@@ -44674,6 +44739,7 @@ const RPC_ACCESS_POLICY = {
|
|
|
44674
44739
|
[require_collectUint8StreamText.WS_METHODS.projectsList]: "viewer",
|
|
44675
44740
|
[require_collectUint8StreamText.WS_METHODS.projectsListEntries]: "operator",
|
|
44676
44741
|
[require_collectUint8StreamText.WS_METHODS.projectsReadFile]: "operator",
|
|
44742
|
+
[require_collectUint8StreamText.WS_METHODS.projectsReadIcon]: "viewer",
|
|
44677
44743
|
[require_collectUint8StreamText.WS_METHODS.projectsReadFileBinary]: "operator",
|
|
44678
44744
|
[require_collectUint8StreamText.WS_METHODS.projectsRemove]: "operator",
|
|
44679
44745
|
[require_collectUint8StreamText.WS_METHODS.projectsSearchEntries]: "operator",
|
|
@@ -46589,6 +46655,9 @@ const makeWsRpcContext = (principal) => effect.Effect.gen(function* () {
|
|
|
46589
46655
|
openCodeMcp
|
|
46590
46656
|
]);
|
|
46591
46657
|
const startup = yield* ServerRuntimeStartup;
|
|
46658
|
+
const projectionProjects = yield* effect.Effect.serviceOption(ProjectionProjectRepository);
|
|
46659
|
+
const projectFaviconResolver = yield* effect.Effect.serviceOption(ProjectFaviconResolver);
|
|
46660
|
+
const projectAvatarStore = yield* effect.Effect.serviceOption(ProjectAvatarStore);
|
|
46592
46661
|
const workspaceEntries = yield* WorkspaceEntries;
|
|
46593
46662
|
const workspaceFileSystem = yield* WorkspaceFileSystem;
|
|
46594
46663
|
const workspaceAccessPolicy = yield* WorkspaceAccessPolicy;
|
|
@@ -46964,6 +47033,9 @@ const makeWsRpcContext = (principal) => effect.Effect.gen(function* () {
|
|
|
46964
47033
|
lifecycleEvents,
|
|
46965
47034
|
serverSettings,
|
|
46966
47035
|
mcpRegistry,
|
|
47036
|
+
projectionProjects,
|
|
47037
|
+
projectFaviconResolver,
|
|
47038
|
+
projectAvatarStore,
|
|
46967
47039
|
workspaceEntries,
|
|
46968
47040
|
workspaceFileSystem,
|
|
46969
47041
|
sourceControlDiscovery,
|
|
@@ -48111,10 +48183,51 @@ const makeTerminalHandlers = (ctx) => {
|
|
|
48111
48183
|
});
|
|
48112
48184
|
};
|
|
48113
48185
|
//#endregion
|
|
48186
|
+
//#region src/project/readProjectIcon.ts
|
|
48187
|
+
const iconTypes = {
|
|
48188
|
+
".png": "image/png",
|
|
48189
|
+
".jpg": "image/jpeg",
|
|
48190
|
+
".jpeg": "image/jpeg",
|
|
48191
|
+
".webp": "image/webp",
|
|
48192
|
+
".svg": "image/svg+xml",
|
|
48193
|
+
".ico": "image/x-icon"
|
|
48194
|
+
};
|
|
48195
|
+
/** Resolve only the registered project's artwork; callers cannot supply filesystem paths. */
|
|
48196
|
+
function readProjectIcon(project, services) {
|
|
48197
|
+
return effect.Effect.gen(function* () {
|
|
48198
|
+
if (project.customAvatarContentHash && services.avatar) {
|
|
48199
|
+
const avatar = yield* services.avatar.read(project.id);
|
|
48200
|
+
if (avatar && avatar.bytes.length <= 524288) return {
|
|
48201
|
+
mimeType: "image/png",
|
|
48202
|
+
dataBase64: avatar.bytes.toString("base64")
|
|
48203
|
+
};
|
|
48204
|
+
}
|
|
48205
|
+
const icon = services.favicon ? yield* services.favicon.readIcon(project.workspaceRoot) : null;
|
|
48206
|
+
if (!icon || icon.bytes.length > 524288) return null;
|
|
48207
|
+
const mimeType = iconTypes[(0, node_path.extname)(icon.path).toLowerCase()];
|
|
48208
|
+
return mimeType ? {
|
|
48209
|
+
mimeType,
|
|
48210
|
+
dataBase64: Buffer.from(icon.bytes).toString("base64")
|
|
48211
|
+
} : null;
|
|
48212
|
+
});
|
|
48213
|
+
}
|
|
48214
|
+
//#endregion
|
|
48114
48215
|
//#region src/ws/projectRpc.ts
|
|
48115
48216
|
const makeProjectHandlers = (ctx) => {
|
|
48116
48217
|
const { ownerEffect, workspaceEntries, workspaceFileSystem, open } = ctx;
|
|
48117
48218
|
return defineWsHandlers({
|
|
48219
|
+
[require_collectUint8StreamText.WS_METHODS.projectsReadIcon]: (input) => ctx.withAccess("viewer", require_collectUint8StreamText.WS_METHODS.projectsReadIcon, effect.Effect.gen(function* () {
|
|
48220
|
+
if (effect.Option.isNone(ctx.projectionProjects)) return null;
|
|
48221
|
+
const project = yield* ctx.projectionProjects.value.getById(input).pipe(effect.Effect.mapError(() => new require_collectUint8StreamText.ProjectReadIconError({ message: "Could not load project artwork." })));
|
|
48222
|
+
if (effect.Option.isNone(project) || project.value.deletedAt !== null) return null;
|
|
48223
|
+
return yield* readProjectIcon({
|
|
48224
|
+
...project.value,
|
|
48225
|
+
id: project.value.projectId
|
|
48226
|
+
}, {
|
|
48227
|
+
favicon: effect.Option.getOrNull(ctx.projectFaviconResolver),
|
|
48228
|
+
avatar: effect.Option.getOrNull(ctx.projectAvatarStore)
|
|
48229
|
+
});
|
|
48230
|
+
})),
|
|
48118
48231
|
[require_collectUint8StreamText.WS_METHODS.projectsSearchEntries]: (input) => observeRpcEffect(require_collectUint8StreamText.WS_METHODS.projectsSearchEntries, ownerEffect(require_collectUint8StreamText.WS_METHODS.projectsSearchEntries, workspaceEntries.search(input).pipe(effect.Effect.mapError((cause) => new require_collectUint8StreamText.ProjectSearchEntriesError({
|
|
48119
48232
|
message: `Failed to search workspace entries: ${cause.detail}`,
|
|
48120
48233
|
cause
|
|
@@ -49264,7 +49377,7 @@ async function readResourceTelemetryHistory(input) {
|
|
|
49264
49377
|
//#endregion
|
|
49265
49378
|
//#region src/diagnostics/ProcessDiagnostics.ts
|
|
49266
49379
|
const QUERY_TIMEOUT_MS = 3e3;
|
|
49267
|
-
const MAX_OUTPUT_BYTES = 4194304;
|
|
49380
|
+
const MAX_OUTPUT_BYTES$1 = 4194304;
|
|
49268
49381
|
const MAX_PROCESSES = 2e4;
|
|
49269
49382
|
/** Parse fixed numeric columns; never capture command-line arguments. */
|
|
49270
49383
|
function parseProcessTable(output) {
|
|
@@ -49345,7 +49458,7 @@ async function queryProcessTable(fresh = false) {
|
|
|
49345
49458
|
(0, node_child_process.execFile)("/bin/ps", ["-axo", "pid=,ppid=,lstart=,pcpu=,rss=,stat=,etime=,comm="], {
|
|
49346
49459
|
encoding: "utf8",
|
|
49347
49460
|
timeout: QUERY_TIMEOUT_MS,
|
|
49348
|
-
maxBuffer: MAX_OUTPUT_BYTES,
|
|
49461
|
+
maxBuffer: MAX_OUTPUT_BYTES$1,
|
|
49349
49462
|
env: {
|
|
49350
49463
|
...process.env,
|
|
49351
49464
|
LC_ALL: "C"
|
|
@@ -69823,7 +69936,7 @@ function makeNodeNativeClaimService(options) {
|
|
|
69823
69936
|
claim: input.claim,
|
|
69824
69937
|
requireCurrent: true
|
|
69825
69938
|
});
|
|
69826
|
-
if (input.result.status !== "claimed" || input.result.node.environmentId !== input.claim.environmentId || input.result.node.fingerprint !== input.claim.nodeFingerprint || input.result.node.label !== expectedLabel || input.result.node.effectiveRole !== "owner") return claimError("native_node_claim_conflict");
|
|
69939
|
+
if (input.result.status !== "claimed" || input.result.node.environmentId !== input.claim.environmentId || input.result.node.fingerprint !== input.claim.nodeFingerprint || input.result.node.label !== expectedLabel && !(validated.descriptor.state === "active" && input.result.disposition === "reconnected") || input.result.node.effectiveRole !== "owner") return claimError("native_node_claim_conflict");
|
|
69827
69940
|
const active = {
|
|
69828
69941
|
hubOrigin: validated.descriptor.hubOrigin,
|
|
69829
69942
|
nodeId: input.result.node.id,
|
|
@@ -73603,6 +73716,8 @@ var RelayConnectionSession = class {
|
|
|
73603
73716
|
#frameDeliveryActive = false;
|
|
73604
73717
|
#settled = false;
|
|
73605
73718
|
#closed = false;
|
|
73719
|
+
#authenticationStarted = false;
|
|
73720
|
+
#rejectAuthentication;
|
|
73606
73721
|
#listeners;
|
|
73607
73722
|
constructor(options) {
|
|
73608
73723
|
this.#identity = options.identity;
|
|
@@ -73618,8 +73733,21 @@ var RelayConnectionSession = class {
|
|
|
73618
73733
|
get ready() {
|
|
73619
73734
|
return this.#ready;
|
|
73620
73735
|
}
|
|
73621
|
-
|
|
73622
|
-
if (this.#
|
|
73736
|
+
authenticate() {
|
|
73737
|
+
if (this.#authenticationStarted || this.#closed) return Promise.reject(new RelayConnectionError("internal_error"));
|
|
73738
|
+
this.#authenticationStarted = true;
|
|
73739
|
+
return new Promise((resolve, reject) => {
|
|
73740
|
+
this.#rejectAuthentication = reject;
|
|
73741
|
+
this.#authenticate().then((ready) => {
|
|
73742
|
+
this.#rejectAuthentication = void 0;
|
|
73743
|
+
resolve(ready);
|
|
73744
|
+
}, (error) => {
|
|
73745
|
+
this.#rejectAuthentication = void 0;
|
|
73746
|
+
reject(error);
|
|
73747
|
+
});
|
|
73748
|
+
});
|
|
73749
|
+
}
|
|
73750
|
+
async #authenticate() {
|
|
73623
73751
|
let auth;
|
|
73624
73752
|
try {
|
|
73625
73753
|
auth = await this.#identity.createRelayAuthenticationFrame(this.#hubOrigin, {
|
|
@@ -73668,6 +73796,7 @@ var RelayConnectionSession = class {
|
|
|
73668
73796
|
};
|
|
73669
73797
|
const onOpen = () => {
|
|
73670
73798
|
if (this.#closed) return;
|
|
73799
|
+
if (this.#timer !== void 0) this.#scheduler.clearTimeout(this.#timer);
|
|
73671
73800
|
try {
|
|
73672
73801
|
socket.send(authBytes);
|
|
73673
73802
|
} catch {
|
|
@@ -73741,6 +73870,7 @@ var RelayConnectionSession = class {
|
|
|
73741
73870
|
socket.addEventListener("message", onMessage);
|
|
73742
73871
|
socket.addEventListener("error", onError);
|
|
73743
73872
|
socket.addEventListener("close", onClose);
|
|
73873
|
+
this.#timer = this.#scheduler.setTimeout(() => fail(new RelayConnectionError("network")), require_collectUint8StreamText.RELAY_AUTHENTICATION_DEADLINE_MS);
|
|
73744
73874
|
});
|
|
73745
73875
|
}
|
|
73746
73876
|
/**
|
|
@@ -73772,6 +73902,11 @@ var RelayConnectionSession = class {
|
|
|
73772
73902
|
close() {
|
|
73773
73903
|
if (this.#closed) return;
|
|
73774
73904
|
this.#closed = true;
|
|
73905
|
+
if (!this.#settled) {
|
|
73906
|
+
this.#settled = true;
|
|
73907
|
+
this.#rejectAuthentication?.(new RelayConnectionError("network"));
|
|
73908
|
+
}
|
|
73909
|
+
this.#rejectAuthentication = void 0;
|
|
73775
73910
|
for (const frame of this.#pendingPostReadyFrames) clearRelayFrameBytes(frame);
|
|
73776
73911
|
this.#pendingPostReadyFrames = [];
|
|
73777
73912
|
this.#clearPendingAuthentication();
|
|
@@ -89730,83 +89865,173 @@ const ProviderRegistryLive = effect.Layer.effect(ProviderRegistry, effect.Effect
|
|
|
89730
89865
|
};
|
|
89731
89866
|
}));
|
|
89732
89867
|
//#endregion
|
|
89733
|
-
//#region src/project/
|
|
89734
|
-
|
|
89735
|
-
|
|
89736
|
-
|
|
89737
|
-
|
|
89738
|
-
|
|
89739
|
-
|
|
89740
|
-
|
|
89741
|
-
|
|
89742
|
-
|
|
89743
|
-
|
|
89744
|
-
|
|
89745
|
-
|
|
89746
|
-
|
|
89747
|
-
|
|
89748
|
-
|
|
89749
|
-
|
|
89750
|
-
|
|
89751
|
-
|
|
89752
|
-
|
|
89753
|
-
|
|
89754
|
-
|
|
89755
|
-
|
|
89756
|
-
|
|
89757
|
-
|
|
89758
|
-
|
|
89759
|
-
|
|
89760
|
-
|
|
89761
|
-
|
|
89762
|
-
|
|
89763
|
-
|
|
89764
|
-
|
|
89765
|
-
|
|
89766
|
-
|
|
89767
|
-
|
|
89768
|
-
|
|
89769
|
-
|
|
89770
|
-
|
|
89771
|
-
|
|
89772
|
-
|
|
89773
|
-
|
|
89774
|
-
|
|
89775
|
-
|
|
89776
|
-
|
|
89777
|
-
|
|
89778
|
-
|
|
89779
|
-
const
|
|
89780
|
-
|
|
89781
|
-
|
|
89782
|
-
|
|
89783
|
-
|
|
89784
|
-
|
|
89785
|
-
|
|
89786
|
-
|
|
89868
|
+
//#region src/project/projectFaviconWorker.ts
|
|
89869
|
+
/**
|
|
89870
|
+
* Serialized into a short-lived Node/Bun child. Keep this function self-contained:
|
|
89871
|
+
* opening a cloud-backed file can block in the kernel even after an async read
|
|
89872
|
+
* is cancelled. A separate process keeps optional icons out of the node's shared
|
|
89873
|
+
* filesystem/DNS worker pool, and lets the parent terminate a stalled read.
|
|
89874
|
+
*/
|
|
89875
|
+
function projectFaviconWorkerMain() {
|
|
89876
|
+
const fs = process.getBuiltinModule("node:fs");
|
|
89877
|
+
const path = process.getBuiltinModule("node:path");
|
|
89878
|
+
const iconLimit = 524288;
|
|
89879
|
+
const sourceLimit = 262144;
|
|
89880
|
+
const candidates = [
|
|
89881
|
+
"favicon.svg",
|
|
89882
|
+
"favicon.ico",
|
|
89883
|
+
"favicon.png",
|
|
89884
|
+
"public/favicon.svg",
|
|
89885
|
+
"public/favicon.ico",
|
|
89886
|
+
"public/favicon.png",
|
|
89887
|
+
"app/favicon.ico",
|
|
89888
|
+
"app/favicon.png",
|
|
89889
|
+
"app/icon.svg",
|
|
89890
|
+
"app/icon.png",
|
|
89891
|
+
"app/icon.ico",
|
|
89892
|
+
"src/favicon.ico",
|
|
89893
|
+
"src/favicon.svg",
|
|
89894
|
+
"src/app/favicon.ico",
|
|
89895
|
+
"src/app/icon.svg",
|
|
89896
|
+
"src/app/icon.png",
|
|
89897
|
+
"assets/icon.svg",
|
|
89898
|
+
"assets/icon.png",
|
|
89899
|
+
"assets/logo.svg",
|
|
89900
|
+
"assets/logo.png",
|
|
89901
|
+
".idea/icon.svg"
|
|
89902
|
+
];
|
|
89903
|
+
const sources = [
|
|
89904
|
+
"index.html",
|
|
89905
|
+
"public/index.html",
|
|
89906
|
+
"app/routes/__root.tsx",
|
|
89907
|
+
"src/routes/__root.tsx",
|
|
89908
|
+
"app/root.tsx",
|
|
89909
|
+
"src/root.tsx",
|
|
89910
|
+
"src/index.html"
|
|
89911
|
+
];
|
|
89912
|
+
try {
|
|
89913
|
+
const root = fs.realpathSync(process.argv[1]);
|
|
89914
|
+
const read = (relative, limit) => {
|
|
89915
|
+
let fd;
|
|
89916
|
+
try {
|
|
89917
|
+
const filename = fs.realpathSync(path.resolve(root, relative));
|
|
89918
|
+
const within = path.relative(root, filename);
|
|
89919
|
+
if (within === ".." || within.startsWith(`..${path.sep}`) || path.isAbsolute(within)) return null;
|
|
89920
|
+
fd = fs.openSync(filename, fs.constants.O_RDONLY | fs.constants.O_NONBLOCK);
|
|
89921
|
+
const stats = fs.fstatSync(fd);
|
|
89922
|
+
if (!stats.isFile() || stats.size > limit) return null;
|
|
89923
|
+
const bytes = Buffer.alloc(limit + 1);
|
|
89924
|
+
let length = 0;
|
|
89925
|
+
while (length < bytes.length) {
|
|
89926
|
+
const count = fs.readSync(fd, bytes, length, bytes.length - length, null);
|
|
89927
|
+
if (count === 0) break;
|
|
89928
|
+
length += count;
|
|
89929
|
+
}
|
|
89930
|
+
return length > limit ? null : {
|
|
89931
|
+
path: filename,
|
|
89932
|
+
bytes: bytes.subarray(0, length)
|
|
89933
|
+
};
|
|
89934
|
+
} catch {
|
|
89935
|
+
return null;
|
|
89936
|
+
} finally {
|
|
89937
|
+
if (fd !== void 0) fs.closeSync(fd);
|
|
89938
|
+
}
|
|
89939
|
+
};
|
|
89940
|
+
const send = (icon) => {
|
|
89941
|
+
process.stdout.write(JSON.stringify({
|
|
89942
|
+
path: icon.path,
|
|
89943
|
+
base64: icon.bytes.toString("base64")
|
|
89944
|
+
}));
|
|
89945
|
+
};
|
|
89787
89946
|
for (const candidate of candidates) {
|
|
89788
|
-
|
|
89789
|
-
if (
|
|
89947
|
+
const icon = read(candidate, iconLimit);
|
|
89948
|
+
if (icon) {
|
|
89949
|
+
send(icon);
|
|
89950
|
+
return;
|
|
89951
|
+
}
|
|
89790
89952
|
}
|
|
89791
|
-
|
|
89792
|
-
|
|
89793
|
-
|
|
89794
|
-
|
|
89795
|
-
const resolved = path.join(cwd, candidate);
|
|
89796
|
-
const existing = yield* findExistingFile(cwd, [resolved]);
|
|
89797
|
-
if (existing) return existing;
|
|
89798
|
-
}
|
|
89799
|
-
for (const sourceFile of ICON_SOURCE_FILES) {
|
|
89800
|
-
const sourcePath = path.join(cwd, sourceFile);
|
|
89801
|
-
const source = yield* fileSystem.readFileString(sourcePath).pipe(effect.Effect.catch(() => effect.Effect.succeed(null)));
|
|
89802
|
-
if (!source) continue;
|
|
89803
|
-
const href = extractIconHref(source);
|
|
89953
|
+
for (const source of sources) {
|
|
89954
|
+
const text = read(source, sourceLimit)?.bytes.toString("utf8");
|
|
89955
|
+
if (!text) continue;
|
|
89956
|
+
const href = text.match(/<link\b(?=[^>]*\brel=["'](?:icon|shortcut icon)["'])(?=[^>]*\bhref=["']([^"'?]+))[^>]*>/i)?.[1] ?? text.match(/(?=[^}]*\brel\s*:\s*["'](?:icon|shortcut icon)["'])(?=[^}]*\bhref\s*:\s*["']([^"'?]+))[^}]*/i)?.[1];
|
|
89804
89957
|
if (!href) continue;
|
|
89805
|
-
const
|
|
89806
|
-
|
|
89958
|
+
const clean = href.replace(/^\//, "");
|
|
89959
|
+
for (const candidate of [path.join("public", clean), clean]) {
|
|
89960
|
+
const icon = read(candidate, iconLimit);
|
|
89961
|
+
if (icon) {
|
|
89962
|
+
send(icon);
|
|
89963
|
+
return;
|
|
89964
|
+
}
|
|
89965
|
+
}
|
|
89807
89966
|
}
|
|
89808
|
-
|
|
89809
|
-
|
|
89967
|
+
} catch {}
|
|
89968
|
+
process.stdout.write("null");
|
|
89969
|
+
}
|
|
89970
|
+
const MAX_OUTPUT_BYTES = 786432;
|
|
89971
|
+
const WORKER_SCRIPT = `(${projectFaviconWorkerMain.toString()})()`;
|
|
89972
|
+
function readProjectFavicon(cwd, options = {}) {
|
|
89973
|
+
return new Promise((resolve) => {
|
|
89974
|
+
if (options.signal?.aborted) {
|
|
89975
|
+
resolve(null);
|
|
89976
|
+
return;
|
|
89977
|
+
}
|
|
89978
|
+
let child;
|
|
89979
|
+
const abort = () => {
|
|
89980
|
+
child?.kill("SIGKILL");
|
|
89981
|
+
};
|
|
89982
|
+
const cleanup = () => options.signal?.removeEventListener("abort", abort);
|
|
89983
|
+
options.signal?.addEventListener("abort", abort, { once: true });
|
|
89984
|
+
try {
|
|
89985
|
+
child = (options.execFile ?? node_child_process.execFile)(process.execPath, [
|
|
89986
|
+
"--eval",
|
|
89987
|
+
WORKER_SCRIPT,
|
|
89988
|
+
"--",
|
|
89989
|
+
cwd
|
|
89990
|
+
], {
|
|
89991
|
+
env: {
|
|
89992
|
+
...process.env,
|
|
89993
|
+
ELECTRON_RUN_AS_NODE: "1",
|
|
89994
|
+
NODE_OPTIONS: void 0,
|
|
89995
|
+
NODE_PATH: void 0
|
|
89996
|
+
},
|
|
89997
|
+
encoding: "utf8",
|
|
89998
|
+
timeout: options.timeoutMs ?? 1500,
|
|
89999
|
+
killSignal: "SIGKILL",
|
|
90000
|
+
maxBuffer: MAX_OUTPUT_BYTES,
|
|
90001
|
+
windowsHide: true
|
|
90002
|
+
}, (error, stdout) => {
|
|
90003
|
+
cleanup();
|
|
90004
|
+
if (error) {
|
|
90005
|
+
resolve(null);
|
|
90006
|
+
return;
|
|
90007
|
+
}
|
|
90008
|
+
try {
|
|
90009
|
+
const result = JSON.parse(stdout);
|
|
90010
|
+
if (typeof result !== "object" || result === null || !("path" in result) || !("base64" in result) || typeof result.path !== "string" || typeof result.base64 !== "string") {
|
|
90011
|
+
resolve(null);
|
|
90012
|
+
return;
|
|
90013
|
+
}
|
|
90014
|
+
const bytes = Buffer.from(result.base64, "base64");
|
|
90015
|
+
resolve(bytes.length <= 524288 ? {
|
|
90016
|
+
path: result.path,
|
|
90017
|
+
bytes
|
|
90018
|
+
} : null);
|
|
90019
|
+
} catch {
|
|
90020
|
+
resolve(null);
|
|
90021
|
+
}
|
|
90022
|
+
});
|
|
90023
|
+
if (options.signal?.aborted) abort();
|
|
90024
|
+
} catch {
|
|
90025
|
+
cleanup();
|
|
90026
|
+
resolve(null);
|
|
90027
|
+
}
|
|
90028
|
+
});
|
|
90029
|
+
}
|
|
90030
|
+
//#endregion
|
|
90031
|
+
//#region src/project/Layers/ProjectFaviconResolver.ts
|
|
90032
|
+
const makeProjectFaviconResolver = effect.Effect.gen(function* () {
|
|
90033
|
+
const workers = yield* effect_Semaphore.make(2);
|
|
90034
|
+
return { readIcon: (cwd) => workers.withPermit(effect.Effect.promise((signal) => readProjectFavicon(cwd, { signal }))).pipe(effect.Effect.timeout("5 seconds"), effect.Effect.catch(() => effect.Effect.succeed(null))) };
|
|
89810
90035
|
});
|
|
89811
90036
|
const ProjectFaviconResolverLive = effect.Layer.effect(ProjectFaviconResolver, makeProjectFaviconResolver);
|
|
89812
90037
|
//#endregion
|
|
@@ -89874,22 +90099,25 @@ function buildRepositoryIdentity(input) {
|
|
|
89874
90099
|
const DEFAULT_REPOSITORY_IDENTITY_CACHE_CAPACITY = 512;
|
|
89875
90100
|
const DEFAULT_POSITIVE_CACHE_TTL = effect.Duration.minutes(1);
|
|
89876
90101
|
const DEFAULT_NEGATIVE_CACHE_TTL = effect.Duration.minutes(1);
|
|
90102
|
+
const GIT_IDENTITY_PROBE_TIMEOUT_MS = 1e3;
|
|
89877
90103
|
async function resolveRepositoryIdentityCacheKey(cwd) {
|
|
89878
|
-
let cacheKey = cwd;
|
|
89879
90104
|
try {
|
|
89880
90105
|
const topLevelResult = await runProcess("git", [
|
|
89881
90106
|
"-C",
|
|
89882
90107
|
cwd,
|
|
89883
90108
|
"rev-parse",
|
|
89884
90109
|
"--show-toplevel"
|
|
89885
|
-
], {
|
|
89886
|
-
|
|
90110
|
+
], {
|
|
90111
|
+
allowNonZeroExit: true,
|
|
90112
|
+
timeoutMs: GIT_IDENTITY_PROBE_TIMEOUT_MS
|
|
90113
|
+
});
|
|
90114
|
+
if (topLevelResult.timedOut || topLevelResult.code !== 0) return null;
|
|
89887
90115
|
const candidate = topLevelResult.stdout.trim();
|
|
89888
|
-
if (candidate.length > 0)
|
|
90116
|
+
if (candidate.length > 0) return candidate;
|
|
89889
90117
|
} catch {
|
|
89890
|
-
return
|
|
90118
|
+
return null;
|
|
89891
90119
|
}
|
|
89892
|
-
return
|
|
90120
|
+
return null;
|
|
89893
90121
|
}
|
|
89894
90122
|
async function resolveRepositoryIdentityFromCacheKey(cacheKey) {
|
|
89895
90123
|
try {
|
|
@@ -89898,8 +90126,11 @@ async function resolveRepositoryIdentityFromCacheKey(cacheKey) {
|
|
|
89898
90126
|
cacheKey,
|
|
89899
90127
|
"remote",
|
|
89900
90128
|
"-v"
|
|
89901
|
-
], {
|
|
89902
|
-
|
|
90129
|
+
], {
|
|
90130
|
+
allowNonZeroExit: true,
|
|
90131
|
+
timeoutMs: GIT_IDENTITY_PROBE_TIMEOUT_MS
|
|
90132
|
+
});
|
|
90133
|
+
if (remoteResult.timedOut || remoteResult.code !== 0) return null;
|
|
89903
90134
|
const allRemotes = parseRemoteFetchUrls(remoteResult.stdout);
|
|
89904
90135
|
const remote = pickPrimaryRemote(allRemotes);
|
|
89905
90136
|
return remote ? buildRepositoryIdentity({
|
|
@@ -89912,6 +90143,13 @@ async function resolveRepositoryIdentityFromCacheKey(cacheKey) {
|
|
|
89912
90143
|
}
|
|
89913
90144
|
}
|
|
89914
90145
|
const makeRepositoryIdentityResolver = effect.Effect.fn("makeRepositoryIdentityResolver")(function* (options = {}) {
|
|
90146
|
+
const workspaceRootCache = yield* effect.Cache.makeWith((cwd) => effect.Effect.promise(() => resolveRepositoryIdentityCacheKey(cwd)), {
|
|
90147
|
+
capacity: options.cacheCapacity ?? DEFAULT_REPOSITORY_IDENTITY_CACHE_CAPACITY,
|
|
90148
|
+
timeToLive: effect.Exit.match({
|
|
90149
|
+
onSuccess: (value) => value === null ? options.negativeCacheTtl ?? DEFAULT_NEGATIVE_CACHE_TTL : options.positiveCacheTtl ?? DEFAULT_POSITIVE_CACHE_TTL,
|
|
90150
|
+
onFailure: () => effect.Duration.zero
|
|
90151
|
+
})
|
|
90152
|
+
});
|
|
89915
90153
|
const repositoryIdentityCache = yield* effect.Cache.makeWith((cacheKey) => effect.Effect.promise(() => resolveRepositoryIdentityFromCacheKey(cacheKey)), {
|
|
89916
90154
|
capacity: options.cacheCapacity ?? DEFAULT_REPOSITORY_IDENTITY_CACHE_CAPACITY,
|
|
89917
90155
|
timeToLive: effect.Exit.match({
|
|
@@ -89920,7 +90158,8 @@ const makeRepositoryIdentityResolver = effect.Effect.fn("makeRepositoryIdentityR
|
|
|
89920
90158
|
})
|
|
89921
90159
|
});
|
|
89922
90160
|
return { resolve: effect.Effect.fn("RepositoryIdentityResolver.resolve")(function* (cwd) {
|
|
89923
|
-
const cacheKey = yield* effect.
|
|
90161
|
+
const cacheKey = yield* effect.Cache.get(workspaceRootCache, cwd);
|
|
90162
|
+
if (cacheKey === null) return null;
|
|
89924
90163
|
return yield* effect.Cache.get(repositoryIdentityCache, cacheKey);
|
|
89925
90164
|
}) };
|
|
89926
90165
|
});
|
|
@@ -92052,6 +92291,23 @@ const makeTraceSink = effect.Effect.fn("makeTraceSink")(function* (options) {
|
|
|
92052
92291
|
};
|
|
92053
92292
|
});
|
|
92054
92293
|
//#endregion
|
|
92294
|
+
//#region src/observability/HttpHeaderRedaction.ts
|
|
92295
|
+
/** Capture policy before HTTP tracing defers span completion outside its request context. */
|
|
92296
|
+
function makeHttpHeaderRedactor(names) {
|
|
92297
|
+
const redactedNames = [
|
|
92298
|
+
...names,
|
|
92299
|
+
require_collectUint8StreamText.LOCAL_INTRODUCTION_CONTROL_HEADER,
|
|
92300
|
+
"dpop",
|
|
92301
|
+
"dpop-nonce"
|
|
92302
|
+
];
|
|
92303
|
+
return (key, value) => {
|
|
92304
|
+
const match = /^http\.(?:request|response)\.header\.(.+)$/iu.exec(key);
|
|
92305
|
+
if (!match) return value;
|
|
92306
|
+
const name = match[1].toLowerCase();
|
|
92307
|
+
return String(effect_unstable_http.Headers.redact(effect_unstable_http.Headers.fromInput({ [name]: String(value) }), redactedNames)[name]);
|
|
92308
|
+
};
|
|
92309
|
+
}
|
|
92310
|
+
//#endregion
|
|
92055
92311
|
//#region src/observability/LocalFileTracer.ts
|
|
92056
92312
|
var LocalFileSpan = class {
|
|
92057
92313
|
_tag = "Span";
|
|
@@ -92068,9 +92324,11 @@ var LocalFileSpan = class {
|
|
|
92068
92324
|
events;
|
|
92069
92325
|
delegate;
|
|
92070
92326
|
push;
|
|
92071
|
-
|
|
92327
|
+
redactAttribute;
|
|
92328
|
+
constructor(options, delegate, push, redactAttribute) {
|
|
92072
92329
|
this.delegate = delegate;
|
|
92073
92330
|
this.push = push;
|
|
92331
|
+
this.redactAttribute = redactAttribute;
|
|
92074
92332
|
this.name = delegate.name;
|
|
92075
92333
|
this.spanId = delegate.spanId;
|
|
92076
92334
|
this.traceId = delegate.traceId;
|
|
@@ -92097,8 +92355,9 @@ var LocalFileSpan = class {
|
|
|
92097
92355
|
if (this.sampled) this.push(spanToTraceRecord(this));
|
|
92098
92356
|
}
|
|
92099
92357
|
attribute(key, value) {
|
|
92100
|
-
this.
|
|
92101
|
-
this.
|
|
92358
|
+
const redacted = this.redactAttribute(key, value);
|
|
92359
|
+
this.attributes.set(key, redacted);
|
|
92360
|
+
this.delegate.attribute(key, redacted);
|
|
92102
92361
|
}
|
|
92103
92362
|
event(name, startTime, attributes) {
|
|
92104
92363
|
const nextAttributes = attributes ?? {};
|
|
@@ -92115,6 +92374,7 @@ var LocalFileSpan = class {
|
|
|
92115
92374
|
}
|
|
92116
92375
|
};
|
|
92117
92376
|
const makeLocalFileTracer = effect.Effect.fn("makeLocalFileTracer")(function* (options) {
|
|
92377
|
+
const redactAttribute = makeHttpHeaderRedactor(yield* effect.Effect.service(effect_unstable_http.Headers.CurrentRedactedNames));
|
|
92118
92378
|
const sink = options.sink ?? (yield* makeTraceSink({
|
|
92119
92379
|
filePath: options.filePath,
|
|
92120
92380
|
maxBytes: options.maxBytes,
|
|
@@ -92124,7 +92384,7 @@ const makeLocalFileTracer = effect.Effect.fn("makeLocalFileTracer")(function* (o
|
|
|
92124
92384
|
const delegate = options.delegate ?? effect.Tracer.make({ span: (spanOptions) => new effect.Tracer.NativeSpan(spanOptions) });
|
|
92125
92385
|
return effect.Tracer.make({
|
|
92126
92386
|
span(spanOptions) {
|
|
92127
|
-
return new LocalFileSpan(spanOptions, delegate.span(spanOptions), sink.push);
|
|
92387
|
+
return new LocalFileSpan(spanOptions, delegate.span(spanOptions), sink.push, redactAttribute);
|
|
92128
92388
|
},
|
|
92129
92389
|
...delegate.context ? { context: delegate.context } : {}
|
|
92130
92390
|
});
|
|
@@ -92240,6 +92500,20 @@ const resolveServerEnvironmentLabel = effect.Effect.fn("resolveServerEnvironment
|
|
|
92240
92500
|
return normalizeLabel(input.cwdBaseName) ?? "Ryco environment";
|
|
92241
92501
|
});
|
|
92242
92502
|
//#endregion
|
|
92503
|
+
//#region ../../packages/shared/src/environmentIcon.ts
|
|
92504
|
+
/** Reuse existing platform/name metadata; icon selection must never probe permissions or delay startup. */
|
|
92505
|
+
function inferEnvironmentMachineKind(platform, label = "") {
|
|
92506
|
+
const name = label.toLowerCase().replaceAll(/[\s_-]+/g, "");
|
|
92507
|
+
if (/macmini|minipc/.test(name)) return "mini-pc";
|
|
92508
|
+
if (/macstudio|workstation/.test(name)) return "workstation";
|
|
92509
|
+
if (/macbook|notebook|laptop/.test(name)) return "laptop";
|
|
92510
|
+
if (/imac|macpro|desktop/.test(name)) return "desktop";
|
|
92511
|
+
if (platform === "windows" || platform === "win32") return "windows";
|
|
92512
|
+
if (platform === "linux") return "linux";
|
|
92513
|
+
if (platform === "darwin") return "desktop";
|
|
92514
|
+
return "server";
|
|
92515
|
+
}
|
|
92516
|
+
//#endregion
|
|
92243
92517
|
//#region src/environment/Layers/ServerEnvironment.ts
|
|
92244
92518
|
function platformOs() {
|
|
92245
92519
|
switch (process.platform) {
|
|
@@ -92275,18 +92549,22 @@ const makeServerEnvironment = effect.Effect.fn("makeServerEnvironment")(function
|
|
|
92275
92549
|
});
|
|
92276
92550
|
const environmentId = require_collectUint8StreamText.EnvironmentId.make(environmentIdRaw);
|
|
92277
92551
|
const cwdBaseName = path.basename(serverConfig.cwd).trim();
|
|
92552
|
+
const label = yield* resolveServerEnvironmentLabel({ cwdBaseName });
|
|
92278
92553
|
const descriptor = {
|
|
92279
92554
|
environmentId,
|
|
92280
|
-
label
|
|
92555
|
+
label,
|
|
92281
92556
|
platform: {
|
|
92282
92557
|
os: platformOs(),
|
|
92283
|
-
arch: platformArch()
|
|
92558
|
+
arch: platformArch(),
|
|
92559
|
+
machine: inferEnvironmentMachineKind(platformOs(), label)
|
|
92284
92560
|
},
|
|
92285
92561
|
serverVersion: version$1,
|
|
92286
92562
|
capabilities: {
|
|
92287
92563
|
repositoryIdentity: true,
|
|
92288
92564
|
threadSettlement: true,
|
|
92289
92565
|
threadSnooze: true,
|
|
92566
|
+
projectIcons: true,
|
|
92567
|
+
environmentIcon: true,
|
|
92290
92568
|
threadPriorityRanking: true,
|
|
92291
92569
|
fileAttachments: { maxUploadBytes: require_collectUint8StreamText.PROVIDER_SEND_TURN_MAX_FILE_BYTES }
|
|
92292
92570
|
}
|
|
@@ -94028,6 +94306,121 @@ const makeProjectAtlassianLinkRepository = effect.Effect.gen(function* () {
|
|
|
94028
94306
|
});
|
|
94029
94307
|
const ProjectAtlassianLinkRepositoryLive = effect.Layer.effect(ProjectAtlassianLinkRepository, makeProjectAtlassianLinkRepository);
|
|
94030
94308
|
//#endregion
|
|
94309
|
+
//#region src/persistence/Layers/ProjectionProjects.ts
|
|
94310
|
+
const ProjectionProjectDbRow = ProjectionProject.mapFields(effect.Struct.assign({
|
|
94311
|
+
defaultModelSelection: effect.Schema.NullOr(effect.Schema.fromJsonString(require_collectUint8StreamText.ModelSelection)),
|
|
94312
|
+
scripts: effect.Schema.fromJsonString(effect.Schema.Array(require_collectUint8StreamText.ProjectScript))
|
|
94313
|
+
}));
|
|
94314
|
+
const makeProjectionProjectRepository = effect.Effect.gen(function* () {
|
|
94315
|
+
const sql = yield* effect_unstable_sql_SqlClient.SqlClient;
|
|
94316
|
+
const upsertProjectionProjectRow = effect_unstable_sql_SqlSchema.void({
|
|
94317
|
+
Request: ProjectionProject,
|
|
94318
|
+
execute: (row) => sql`
|
|
94319
|
+
INSERT INTO projection_projects (
|
|
94320
|
+
project_id,
|
|
94321
|
+
title,
|
|
94322
|
+
workspace_root,
|
|
94323
|
+
project_metadata_dir,
|
|
94324
|
+
default_model_selection_json,
|
|
94325
|
+
custom_system_prompt,
|
|
94326
|
+
custom_avatar_content_hash,
|
|
94327
|
+
preferred_remote_name,
|
|
94328
|
+
scripts_json,
|
|
94329
|
+
created_at,
|
|
94330
|
+
updated_at,
|
|
94331
|
+
deleted_at
|
|
94332
|
+
)
|
|
94333
|
+
VALUES (
|
|
94334
|
+
${row.projectId},
|
|
94335
|
+
${row.title},
|
|
94336
|
+
${row.workspaceRoot},
|
|
94337
|
+
${row.projectMetadataDir},
|
|
94338
|
+
${row.defaultModelSelection !== null ? JSON.stringify(row.defaultModelSelection) : null},
|
|
94339
|
+
${row.customSystemPrompt ?? null},
|
|
94340
|
+
${row.customAvatarContentHash ?? null},
|
|
94341
|
+
${row.preferredRemoteName ?? null},
|
|
94342
|
+
${JSON.stringify(row.scripts)},
|
|
94343
|
+
${row.createdAt},
|
|
94344
|
+
${row.updatedAt},
|
|
94345
|
+
${row.deletedAt}
|
|
94346
|
+
)
|
|
94347
|
+
ON CONFLICT (project_id)
|
|
94348
|
+
DO UPDATE SET
|
|
94349
|
+
title = excluded.title,
|
|
94350
|
+
workspace_root = excluded.workspace_root,
|
|
94351
|
+
project_metadata_dir = excluded.project_metadata_dir,
|
|
94352
|
+
default_model_selection_json = excluded.default_model_selection_json,
|
|
94353
|
+
custom_system_prompt = excluded.custom_system_prompt,
|
|
94354
|
+
custom_avatar_content_hash = excluded.custom_avatar_content_hash,
|
|
94355
|
+
preferred_remote_name = excluded.preferred_remote_name,
|
|
94356
|
+
scripts_json = excluded.scripts_json,
|
|
94357
|
+
created_at = excluded.created_at,
|
|
94358
|
+
updated_at = excluded.updated_at,
|
|
94359
|
+
deleted_at = excluded.deleted_at
|
|
94360
|
+
`
|
|
94361
|
+
});
|
|
94362
|
+
const getProjectionProjectRow = effect_unstable_sql_SqlSchema.findOneOption({
|
|
94363
|
+
Request: GetProjectionProjectInput,
|
|
94364
|
+
Result: ProjectionProjectDbRow,
|
|
94365
|
+
execute: ({ projectId }) => sql`
|
|
94366
|
+
SELECT
|
|
94367
|
+
project_id AS "projectId",
|
|
94368
|
+
title,
|
|
94369
|
+
workspace_root AS "workspaceRoot",
|
|
94370
|
+
project_metadata_dir AS "projectMetadataDir",
|
|
94371
|
+
default_model_selection_json AS "defaultModelSelection",
|
|
94372
|
+
custom_system_prompt AS "customSystemPrompt",
|
|
94373
|
+
custom_avatar_content_hash AS "customAvatarContentHash",
|
|
94374
|
+
preferred_remote_name AS "preferredRemoteName",
|
|
94375
|
+
scripts_json AS "scripts",
|
|
94376
|
+
created_at AS "createdAt",
|
|
94377
|
+
updated_at AS "updatedAt",
|
|
94378
|
+
deleted_at AS "deletedAt"
|
|
94379
|
+
FROM projection_projects
|
|
94380
|
+
WHERE project_id = ${projectId}
|
|
94381
|
+
`
|
|
94382
|
+
});
|
|
94383
|
+
const listProjectionProjectRows = effect_unstable_sql_SqlSchema.findAll({
|
|
94384
|
+
Request: effect.Schema.Void,
|
|
94385
|
+
Result: ProjectionProjectDbRow,
|
|
94386
|
+
execute: () => sql`
|
|
94387
|
+
SELECT
|
|
94388
|
+
project_id AS "projectId",
|
|
94389
|
+
title,
|
|
94390
|
+
workspace_root AS "workspaceRoot",
|
|
94391
|
+
project_metadata_dir AS "projectMetadataDir",
|
|
94392
|
+
default_model_selection_json AS "defaultModelSelection",
|
|
94393
|
+
custom_system_prompt AS "customSystemPrompt",
|
|
94394
|
+
custom_avatar_content_hash AS "customAvatarContentHash",
|
|
94395
|
+
preferred_remote_name AS "preferredRemoteName",
|
|
94396
|
+
scripts_json AS "scripts",
|
|
94397
|
+
created_at AS "createdAt",
|
|
94398
|
+
updated_at AS "updatedAt",
|
|
94399
|
+
deleted_at AS "deletedAt"
|
|
94400
|
+
FROM projection_projects
|
|
94401
|
+
ORDER BY created_at ASC, project_id ASC
|
|
94402
|
+
`
|
|
94403
|
+
});
|
|
94404
|
+
const deleteProjectionProjectRow = effect_unstable_sql_SqlSchema.void({
|
|
94405
|
+
Request: DeleteProjectionProjectInput,
|
|
94406
|
+
execute: ({ projectId }) => sql`
|
|
94407
|
+
DELETE FROM projection_projects
|
|
94408
|
+
WHERE project_id = ${projectId}
|
|
94409
|
+
`
|
|
94410
|
+
});
|
|
94411
|
+
const upsert = (row) => upsertProjectionProjectRow(row).pipe(effect.Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.upsert:query")));
|
|
94412
|
+
const getById = (input) => getProjectionProjectRow(input).pipe(effect.Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.getById:query")));
|
|
94413
|
+
const listAll = () => listProjectionProjectRows().pipe(effect.Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.listAll:query")));
|
|
94414
|
+
const deleteById = (input) => deleteProjectionProjectRow(input).pipe(effect.Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.deleteById:query")));
|
|
94415
|
+
return {
|
|
94416
|
+
upsert,
|
|
94417
|
+
getById,
|
|
94418
|
+
listAll,
|
|
94419
|
+
deleteById
|
|
94420
|
+
};
|
|
94421
|
+
});
|
|
94422
|
+
const ProjectionProjectRepositoryLive = effect.Layer.effect(ProjectionProjectRepository, makeProjectionProjectRepository);
|
|
94423
|
+
//#endregion
|
|
94031
94424
|
//#region src/persistence/Layers/ProjectionWorktrees.ts
|
|
94032
94425
|
const ProjectionWorktreeDbRowSchema$1 = ProjectionWorktree.mapFields(effect.Struct.assign({ prIsDraft: effect.Schema.NullOr(effect.Schema.Number) }));
|
|
94033
94426
|
function toProjectionWorktree(row) {
|
|
@@ -106951,36 +107344,6 @@ const DeleteProjectionPendingApprovalInput = effect.Schema.Struct({ requestId: r
|
|
|
106951
107344
|
*/
|
|
106952
107345
|
var ProjectionPendingApprovalRepository = class extends effect.Context.Service()("ryco/persistence/Services/ProjectionPendingApprovals/ProjectionPendingApprovalRepository") {};
|
|
106953
107346
|
//#endregion
|
|
106954
|
-
//#region src/persistence/Services/ProjectionProjects.ts
|
|
106955
|
-
/**
|
|
106956
|
-
* ProjectionProjectRepository - Projection repository interface for projects.
|
|
106957
|
-
*
|
|
106958
|
-
* Owns persistence operations for project rows in the orchestration projection
|
|
106959
|
-
* read model.
|
|
106960
|
-
*
|
|
106961
|
-
* @module ProjectionProjectRepository
|
|
106962
|
-
*/
|
|
106963
|
-
const ProjectionProject = effect.Schema.Struct({
|
|
106964
|
-
projectId: require_collectUint8StreamText.ProjectId,
|
|
106965
|
-
title: effect.Schema.String,
|
|
106966
|
-
workspaceRoot: effect.Schema.String,
|
|
106967
|
-
projectMetadataDir: require_collectUint8StreamText.ProjectMetadataDir,
|
|
106968
|
-
defaultModelSelection: effect.Schema.NullOr(require_collectUint8StreamText.ModelSelection),
|
|
106969
|
-
customSystemPrompt: effect.Schema.optional(effect.Schema.NullOr(effect.Schema.String)),
|
|
106970
|
-
customAvatarContentHash: effect.Schema.NullOr(effect.Schema.String),
|
|
106971
|
-
preferredRemoteName: effect.Schema.NullOr(effect.Schema.String),
|
|
106972
|
-
scripts: effect.Schema.Array(require_collectUint8StreamText.ProjectScript),
|
|
106973
|
-
createdAt: require_collectUint8StreamText.IsoDateTime,
|
|
106974
|
-
updatedAt: require_collectUint8StreamText.IsoDateTime,
|
|
106975
|
-
deletedAt: effect.Schema.NullOr(require_collectUint8StreamText.IsoDateTime)
|
|
106976
|
-
});
|
|
106977
|
-
const GetProjectionProjectInput = effect.Schema.Struct({ projectId: require_collectUint8StreamText.ProjectId });
|
|
106978
|
-
const DeleteProjectionProjectInput = effect.Schema.Struct({ projectId: require_collectUint8StreamText.ProjectId });
|
|
106979
|
-
/**
|
|
106980
|
-
* ProjectionProjectRepository - Service tag for project projection persistence.
|
|
106981
|
-
*/
|
|
106982
|
-
var ProjectionProjectRepository = class extends effect.Context.Service()("ryco/persistence/Services/ProjectionProjects/ProjectionProjectRepository") {};
|
|
106983
|
-
//#endregion
|
|
106984
107347
|
//#region src/persistence/Services/ProjectionState.ts
|
|
106985
107348
|
/**
|
|
106986
107349
|
* ProjectionStateRepository - Projection repository interface for projector cursors.
|
|
@@ -107267,121 +107630,6 @@ const makeProjectionPendingApprovalRepository = effect.Effect.gen(function* () {
|
|
|
107267
107630
|
});
|
|
107268
107631
|
const ProjectionPendingApprovalRepositoryLive = effect.Layer.effect(ProjectionPendingApprovalRepository, makeProjectionPendingApprovalRepository);
|
|
107269
107632
|
//#endregion
|
|
107270
|
-
//#region src/persistence/Layers/ProjectionProjects.ts
|
|
107271
|
-
const ProjectionProjectDbRow = ProjectionProject.mapFields(effect.Struct.assign({
|
|
107272
|
-
defaultModelSelection: effect.Schema.NullOr(effect.Schema.fromJsonString(require_collectUint8StreamText.ModelSelection)),
|
|
107273
|
-
scripts: effect.Schema.fromJsonString(effect.Schema.Array(require_collectUint8StreamText.ProjectScript))
|
|
107274
|
-
}));
|
|
107275
|
-
const makeProjectionProjectRepository = effect.Effect.gen(function* () {
|
|
107276
|
-
const sql = yield* effect_unstable_sql_SqlClient.SqlClient;
|
|
107277
|
-
const upsertProjectionProjectRow = effect_unstable_sql_SqlSchema.void({
|
|
107278
|
-
Request: ProjectionProject,
|
|
107279
|
-
execute: (row) => sql`
|
|
107280
|
-
INSERT INTO projection_projects (
|
|
107281
|
-
project_id,
|
|
107282
|
-
title,
|
|
107283
|
-
workspace_root,
|
|
107284
|
-
project_metadata_dir,
|
|
107285
|
-
default_model_selection_json,
|
|
107286
|
-
custom_system_prompt,
|
|
107287
|
-
custom_avatar_content_hash,
|
|
107288
|
-
preferred_remote_name,
|
|
107289
|
-
scripts_json,
|
|
107290
|
-
created_at,
|
|
107291
|
-
updated_at,
|
|
107292
|
-
deleted_at
|
|
107293
|
-
)
|
|
107294
|
-
VALUES (
|
|
107295
|
-
${row.projectId},
|
|
107296
|
-
${row.title},
|
|
107297
|
-
${row.workspaceRoot},
|
|
107298
|
-
${row.projectMetadataDir},
|
|
107299
|
-
${row.defaultModelSelection !== null ? JSON.stringify(row.defaultModelSelection) : null},
|
|
107300
|
-
${row.customSystemPrompt ?? null},
|
|
107301
|
-
${row.customAvatarContentHash ?? null},
|
|
107302
|
-
${row.preferredRemoteName ?? null},
|
|
107303
|
-
${JSON.stringify(row.scripts)},
|
|
107304
|
-
${row.createdAt},
|
|
107305
|
-
${row.updatedAt},
|
|
107306
|
-
${row.deletedAt}
|
|
107307
|
-
)
|
|
107308
|
-
ON CONFLICT (project_id)
|
|
107309
|
-
DO UPDATE SET
|
|
107310
|
-
title = excluded.title,
|
|
107311
|
-
workspace_root = excluded.workspace_root,
|
|
107312
|
-
project_metadata_dir = excluded.project_metadata_dir,
|
|
107313
|
-
default_model_selection_json = excluded.default_model_selection_json,
|
|
107314
|
-
custom_system_prompt = excluded.custom_system_prompt,
|
|
107315
|
-
custom_avatar_content_hash = excluded.custom_avatar_content_hash,
|
|
107316
|
-
preferred_remote_name = excluded.preferred_remote_name,
|
|
107317
|
-
scripts_json = excluded.scripts_json,
|
|
107318
|
-
created_at = excluded.created_at,
|
|
107319
|
-
updated_at = excluded.updated_at,
|
|
107320
|
-
deleted_at = excluded.deleted_at
|
|
107321
|
-
`
|
|
107322
|
-
});
|
|
107323
|
-
const getProjectionProjectRow = effect_unstable_sql_SqlSchema.findOneOption({
|
|
107324
|
-
Request: GetProjectionProjectInput,
|
|
107325
|
-
Result: ProjectionProjectDbRow,
|
|
107326
|
-
execute: ({ projectId }) => sql`
|
|
107327
|
-
SELECT
|
|
107328
|
-
project_id AS "projectId",
|
|
107329
|
-
title,
|
|
107330
|
-
workspace_root AS "workspaceRoot",
|
|
107331
|
-
project_metadata_dir AS "projectMetadataDir",
|
|
107332
|
-
default_model_selection_json AS "defaultModelSelection",
|
|
107333
|
-
custom_system_prompt AS "customSystemPrompt",
|
|
107334
|
-
custom_avatar_content_hash AS "customAvatarContentHash",
|
|
107335
|
-
preferred_remote_name AS "preferredRemoteName",
|
|
107336
|
-
scripts_json AS "scripts",
|
|
107337
|
-
created_at AS "createdAt",
|
|
107338
|
-
updated_at AS "updatedAt",
|
|
107339
|
-
deleted_at AS "deletedAt"
|
|
107340
|
-
FROM projection_projects
|
|
107341
|
-
WHERE project_id = ${projectId}
|
|
107342
|
-
`
|
|
107343
|
-
});
|
|
107344
|
-
const listProjectionProjectRows = effect_unstable_sql_SqlSchema.findAll({
|
|
107345
|
-
Request: effect.Schema.Void,
|
|
107346
|
-
Result: ProjectionProjectDbRow,
|
|
107347
|
-
execute: () => sql`
|
|
107348
|
-
SELECT
|
|
107349
|
-
project_id AS "projectId",
|
|
107350
|
-
title,
|
|
107351
|
-
workspace_root AS "workspaceRoot",
|
|
107352
|
-
project_metadata_dir AS "projectMetadataDir",
|
|
107353
|
-
default_model_selection_json AS "defaultModelSelection",
|
|
107354
|
-
custom_system_prompt AS "customSystemPrompt",
|
|
107355
|
-
custom_avatar_content_hash AS "customAvatarContentHash",
|
|
107356
|
-
preferred_remote_name AS "preferredRemoteName",
|
|
107357
|
-
scripts_json AS "scripts",
|
|
107358
|
-
created_at AS "createdAt",
|
|
107359
|
-
updated_at AS "updatedAt",
|
|
107360
|
-
deleted_at AS "deletedAt"
|
|
107361
|
-
FROM projection_projects
|
|
107362
|
-
ORDER BY created_at ASC, project_id ASC
|
|
107363
|
-
`
|
|
107364
|
-
});
|
|
107365
|
-
const deleteProjectionProjectRow = effect_unstable_sql_SqlSchema.void({
|
|
107366
|
-
Request: DeleteProjectionProjectInput,
|
|
107367
|
-
execute: ({ projectId }) => sql`
|
|
107368
|
-
DELETE FROM projection_projects
|
|
107369
|
-
WHERE project_id = ${projectId}
|
|
107370
|
-
`
|
|
107371
|
-
});
|
|
107372
|
-
const upsert = (row) => upsertProjectionProjectRow(row).pipe(effect.Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.upsert:query")));
|
|
107373
|
-
const getById = (input) => getProjectionProjectRow(input).pipe(effect.Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.getById:query")));
|
|
107374
|
-
const listAll = () => listProjectionProjectRows().pipe(effect.Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.listAll:query")));
|
|
107375
|
-
const deleteById = (input) => deleteProjectionProjectRow(input).pipe(effect.Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.deleteById:query")));
|
|
107376
|
-
return {
|
|
107377
|
-
upsert,
|
|
107378
|
-
getById,
|
|
107379
|
-
listAll,
|
|
107380
|
-
deleteById
|
|
107381
|
-
};
|
|
107382
|
-
});
|
|
107383
|
-
const ProjectionProjectRepositoryLive = effect.Layer.effect(ProjectionProjectRepository, makeProjectionProjectRepository);
|
|
107384
|
-
//#endregion
|
|
107385
107633
|
//#region src/persistence/Layers/ProjectionState.ts
|
|
107386
107634
|
const MinLastAppliedSequenceRowSchema = effect.Schema.Struct({ minLastAppliedSequence: effect.Schema.NullOr(require_collectUint8StreamText.NonNegativeInt) });
|
|
107387
107635
|
const makeProjectionStateRepository = effect.Effect.gen(function* () {
|
|
@@ -109854,7 +110102,14 @@ const makeProjectionSnapshotQuery = effect.Effect.gen(function* () {
|
|
|
109854
110102
|
const resolveRepositoryIdentitiesForProjects = effect.Effect.fn("ProjectionSnapshotQuery.resolveRepositoryIdentitiesForProjects")(function* (projectRows, options) {
|
|
109855
110103
|
const filteredProjectRows = options?.includeDeleted === true ? projectRows : projectRows.filter((row) => row.deletedAt === null);
|
|
109856
110104
|
const uniqueWorkspaceRoots = [...new Set(filteredProjectRows.map((row) => row.workspaceRoot))];
|
|
109857
|
-
const repositoryIdentityByWorkspaceRoot =
|
|
110105
|
+
const repositoryIdentityByWorkspaceRoot = /* @__PURE__ */ new Map();
|
|
110106
|
+
const resolveIdentities = effect.Effect.forEach(uniqueWorkspaceRoots, (workspaceRoot) => repositoryIdentityResolver.resolve(workspaceRoot).pipe(effect.Effect.tap((identity) => effect.Effect.sync(() => {
|
|
110107
|
+
repositoryIdentityByWorkspaceRoot.set(workspaceRoot, identity);
|
|
110108
|
+
}))), {
|
|
110109
|
+
concurrency: repositoryIdentityResolutionConcurrency,
|
|
110110
|
+
discard: true
|
|
110111
|
+
});
|
|
110112
|
+
yield* options?.timeoutMs === void 0 ? resolveIdentities : resolveIdentities.pipe(effect.Effect.timeoutOption(options.timeoutMs));
|
|
109858
110113
|
return new Map(filteredProjectRows.map((row) => [row.projectId, repositoryIdentityByWorkspaceRoot.get(row.workspaceRoot) ?? null]));
|
|
109859
110114
|
});
|
|
109860
110115
|
const listProjectRows = effect_unstable_sql_SqlSchema.findAll({
|
|
@@ -111244,7 +111499,7 @@ const makeProjectionSnapshotQuery = effect.Effect.gen(function* () {
|
|
|
111244
111499
|
if (row.completedAt !== null) updatedAt = maxIso(updatedAt, row.completedAt);
|
|
111245
111500
|
}
|
|
111246
111501
|
for (const row of stateRows) updatedAt = maxIso(updatedAt, row.updatedAt);
|
|
111247
|
-
const repositoryIdentities = yield* resolveRepositoryIdentitiesForProjects(projectRows);
|
|
111502
|
+
const repositoryIdentities = yield* resolveRepositoryIdentitiesForProjects(projectRows, { timeoutMs: 1e3 });
|
|
111248
111503
|
const latestTurnByThread = new Map(latestTurnRows.map((row) => [row.threadId, mapLatestTurn(row)]));
|
|
111249
111504
|
const sessionByThread = new Map(sessionRows.map((row) => [row.threadId, mapSessionRow(row)]));
|
|
111250
111505
|
const activeProjectIds = new Set(projectRows.filter((row) => row.deletedAt === null).map((row) => row.projectId));
|
|
@@ -111932,7 +112187,7 @@ const WorkspaceLayerLive = effect.Layer.mergeAll(WorkspaceAccessPolicyLive, Work
|
|
|
111932
112187
|
const AuthLayerLive = ServerAuthLive.pipe(effect.Layer.provideMerge(PersistenceLayerLive), effect.Layer.provide(ServerSecretStoreLive));
|
|
111933
112188
|
const AtlassianLayerLive = effect.Layer.mergeAll(layer$18, layer$2).pipe(effect.Layer.provideMerge(AtlassianConnectionRepositoryLive), effect.Layer.provideMerge(AtlassianResourceRepositoryLive), effect.Layer.provideMerge(ProjectAtlassianLinkRepositoryLive), effect.Layer.provideMerge(PersistenceLayerLive), effect.Layer.provide(ServerSecretStoreLive));
|
|
111934
112189
|
const ProviderRuntimeLayerLive = ProviderSessionReaperLive.pipe(effect.Layer.provideMerge(ProviderLayerLive), effect.Layer.provideMerge(OrchestrationLayerLive));
|
|
111935
|
-
const RuntimeCoreBaseDependenciesLive = RuntimeFeatureLayerLive.pipe(effect.Layer.provideMerge(CheckpointingLayerLive), effect.Layer.provideMerge(SourceControlProviderRegistryLayerLive), effect.Layer.provideMerge(GitLayerLive), effect.Layer.provideMerge(VcsLayerLive), effect.Layer.provideMerge(ProviderRuntimeLayerLive), effect.Layer.provideMerge(TerminalLayerLive), effect.Layer.provideMerge(AgentControlLayerLive), effect.Layer.provideMerge(PersistenceLayerLive), effect.Layer.provideMerge(ProjectionWorktreeRepositoryLive), effect.Layer.provideMerge(KeybindingsLive), effect.Layer.provideMerge(ProviderRegistryLive), effect.Layer.provideMerge(ProviderInstanceRegistryHydrationLive), effect.Layer.provideMerge(AgentControlSessionRegistryLayerLive), effect.Layer.provideMerge(ProviderEventLoggersLive), effect.Layer.provideMerge(layer$1), effect.Layer.provideMerge(OpenCodeRuntimeLive), effect.Layer.provideMerge(WorkspaceLayerLive), effect.Layer.provideMerge(ProjectFaviconResolverLive), effect.Layer.provideMerge(ProjectAvatarStoreLayerLive));
|
|
112190
|
+
const RuntimeCoreBaseDependenciesLive = RuntimeFeatureLayerLive.pipe(effect.Layer.provideMerge(CheckpointingLayerLive), effect.Layer.provideMerge(SourceControlProviderRegistryLayerLive), effect.Layer.provideMerge(GitLayerLive), effect.Layer.provideMerge(VcsLayerLive), effect.Layer.provideMerge(ProviderRuntimeLayerLive), effect.Layer.provideMerge(TerminalLayerLive), effect.Layer.provideMerge(AgentControlLayerLive), effect.Layer.provideMerge(PersistenceLayerLive), effect.Layer.provideMerge(ProjectionWorktreeRepositoryLive), effect.Layer.provideMerge(ProjectionProjectRepositoryLive), effect.Layer.provideMerge(KeybindingsLive), effect.Layer.provideMerge(ProviderRegistryLive), effect.Layer.provideMerge(ProviderInstanceRegistryHydrationLive), effect.Layer.provideMerge(AgentControlSessionRegistryLayerLive), effect.Layer.provideMerge(ProviderEventLoggersLive), effect.Layer.provideMerge(layer$1), effect.Layer.provideMerge(OpenCodeRuntimeLive), effect.Layer.provideMerge(WorkspaceLayerLive), effect.Layer.provideMerge(ProjectFaviconResolverLive), effect.Layer.provideMerge(ProjectAvatarStoreLayerLive));
|
|
111936
112191
|
const RuntimeDependenciesLive = effect.Layer.mergeAll(RuntimeCoreBaseDependenciesLive, UsageServiceLive).pipe(effect.Layer.provideMerge(ServerSettingsLive)).pipe(effect.Layer.provideMerge(RepositoryIdentityResolverLive), effect.Layer.provideMerge(ServerEnvironmentLive), effect.Layer.provideMerge(AdvertisedEndpointRegistryLive), effect.Layer.provideMerge(AuthLayerLive), effect.Layer.provideMerge(AtlassianLayerLive)).pipe(effect.Layer.provideMerge(AnalyticsServiceLayerLive), effect.Layer.provideMerge(OpenLive), effect.Layer.provideMerge(ServerLifecycleEventsLive), effect.Layer.provideMerge(ChatAttachmentUploadsLive), effect.Layer.provide(NetService.layer));
|
|
111937
112192
|
const RuntimeServicesLive = effect.Layer.mergeAll(ServerRuntimeStartupLive, AgentControlMcpServerLive.pipe(effect.Layer.provideMerge(AgentControlDiagnosticsServiceLive), effect.Layer.provideMerge(AgentControlActionValidatorLive), effect.Layer.provideMerge(AgentControlProjectPlansLive)), AgentControlExternalMcpServerLive.pipe(effect.Layer.provideMerge(AgentControlDiagnosticsServiceLive), effect.Layer.provideMerge(AgentControlActionValidatorLive), effect.Layer.provideMerge(AgentControlProjectPlansLive), effect.Layer.provideMerge(AgentControlExternalTaskServiceLive.pipe(effect.Layer.provideMerge(AgentControlActionValidatorLive), effect.Layer.provideMerge(AgentControlProjectPlansLive)))), AgentControlExecutionLive.pipe(effect.Layer.provideMerge(ServerRuntimeStartupLive), effect.Layer.provideMerge(AgentControlActionValidatorLive), effect.Layer.provideMerge(AgentControlProjectPlansLive), effect.Layer.provideMerge(OrchestrationCommandApplicationLive))).pipe(effect.Layer.provideMerge(RuntimeDependenciesLive), effect.Layer.provideMerge(DeviceServiceLive));
|
|
111938
112193
|
const authRoutesLayer = effect.Layer.mergeAll(authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer);
|
|
@@ -111940,7 +112195,7 @@ const projectAssetRoutesLayer = effect.Layer.mergeAll(projectFaviconRouteLayer,
|
|
|
111940
112195
|
const makeRoutesLayer = effect.Layer.mergeAll(authRoutesLayer, attachmentsRouteLayer, attachmentUploadRouteLayer, orchestrationDispatchRouteLayer, orchestrationSnapshotRouteLayer, otlpTracesProxyRouteLayer, projectAssetRoutesLayer, serverEnvironmentRouteLayer, legacyServerEnvironmentRouteLayer, staticAndDevRouteLayer, websocketRpcRouteLayer, deviceWebsocketRpcRouteLayer, deviceFrameRouteLayer, hubConnectorRoutesLayer, desktopLocalIntroductionRoutesLayer, desktopNativeNodeClaimRoutesLayer).pipe(effect.Layer.provide(browserApiCorsLayer));
|
|
111941
112196
|
const makeServerLayer = effect.Layer.unwrap(effect.Effect.gen(function* () {
|
|
111942
112197
|
const config = yield* require_Metrics.ServerConfig;
|
|
111943
|
-
fixPath();
|
|
112198
|
+
fixPath({ inheritedFromDesktop: config.mode === "desktop" });
|
|
111944
112199
|
const httpListeningLayer = effect.Layer.effectDiscard(effect.Effect.gen(function* () {
|
|
111945
112200
|
yield* effect_unstable_http.HttpServer.HttpServer;
|
|
111946
112201
|
yield* (yield* ServerRuntimeStartup).markHttpListening;
|