@halcyonlabs/app 0.47.0-halcyon.21 → 0.47.0-halcyon.22
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/app/dist/assets/{AddMachineDialog-4BQFC118.js → AddMachineDialog-BlVfh9PM.js} +1 -1
- package/app/dist/assets/AddMachineDialog-BlVfh9PM.js.br +0 -0
- package/app/dist/assets/AddMachineDialog-BlVfh9PM.js.gz +0 -0
- package/app/dist/assets/{AppCommandShortcutHint-BlXOfa_n.js → AppCommandShortcutHint-C1mIupNX.js} +1 -1
- package/app/dist/assets/{AppFileExternalNavigationDispatcher-fGD_vTns.js → AppFileExternalNavigationDispatcher-zdrgMBvF.js} +1 -1
- package/app/dist/assets/AppFileExternalNavigationDispatcher-zdrgMBvF.js.br +0 -0
- package/app/dist/assets/AppFileExternalNavigationDispatcher-zdrgMBvF.js.gz +0 -0
- package/app/dist/assets/{AppToasterView-DzbjTKdn.js → AppToasterView-C6IQDk4H.js} +1 -1
- package/app/dist/assets/{BbDiff-BkqgAZD9.js → BbDiff-CORXfK92.js} +1 -1
- package/app/dist/assets/BbDiff-CORXfK92.js.br +0 -0
- package/app/dist/assets/BbDiff-CORXfK92.js.gz +0 -0
- package/app/dist/assets/{BbDiffSplit-DTvWaW-n.js → BbDiffSplit-By8A1QN-.js} +2 -2
- package/app/dist/assets/BbDiffSplit-By8A1QN-.js.br +0 -0
- package/app/dist/assets/BbDiffSplit-By8A1QN-.js.gz +0 -0
- package/app/dist/assets/{BbSourceCode-Dqw4VrLu.js → BbSourceCode-C3we2GZp.js} +1 -1
- package/app/dist/assets/BbSourceCode-C3we2GZp.js.br +0 -0
- package/app/dist/assets/BbSourceCode-C3we2GZp.js.gz +0 -0
- package/app/dist/assets/{BrowserTabDeck-CuHEyZd6.js → BrowserTabDeck-BtVycavD.js} +1 -1
- package/app/dist/assets/BrowserTabDeck-BtVycavD.js.br +0 -0
- package/app/dist/assets/BrowserTabDeck-BtVycavD.js.gz +0 -0
- package/app/dist/assets/{CommandPaletteBody-DynxiDg6.js → CommandPaletteBody-JfQwJqGn.js} +1 -1
- package/app/dist/assets/CommandPaletteBody-JfQwJqGn.js.br +0 -0
- package/app/dist/assets/CommandPaletteBody-JfQwJqGn.js.gz +0 -0
- package/app/dist/assets/{DiffHost-3UTZIJNs.js → DiffHost-DEYVmsVa.js} +1 -1
- package/app/dist/assets/DiffHost-DEYVmsVa.js.br +0 -0
- package/app/dist/assets/DiffHost-DEYVmsVa.js.gz +0 -0
- package/app/dist/assets/{ExperimentalFileLinkMenu-C0RXVabs.js → ExperimentalFileLinkMenu-B-B8GXE8.js} +1 -1
- package/app/dist/assets/ExperimentalFileLinkMenu-B-B8GXE8.js.br +0 -0
- package/app/dist/assets/ExperimentalFileLinkMenu-B-B8GXE8.js.gz +0 -0
- package/app/dist/assets/{FilePreview-BxgJ2jjI.js → FilePreview-BHoPmg-c.js} +1 -1
- package/app/dist/assets/FilePreview-BHoPmg-c.js.br +0 -0
- package/app/dist/assets/FilePreview-BHoPmg-c.js.gz +0 -0
- package/app/dist/assets/{GitDiffCardHeader-Ce736y-m.js → GitDiffCardHeader-6LP_7oWh.js} +1 -1
- package/app/dist/assets/GitDiffCardHeader-6LP_7oWh.js.br +0 -0
- package/app/dist/assets/GitDiffCardHeader-6LP_7oWh.js.gz +0 -0
- package/app/dist/assets/{InlineMessageEditorFrame-Dud8h1It.js → InlineMessageEditorFrame-DyVCSKBJ.js} +1 -1
- package/app/dist/assets/InlineMessageEditorFrame-DyVCSKBJ.js.br +0 -0
- package/app/dist/assets/InlineMessageEditorFrame-DyVCSKBJ.js.gz +0 -0
- package/app/dist/assets/{MachineRenameDialog-C_ZV5gEB.js → MachineRenameDialog-HGiXO0UG.js} +1 -1
- package/app/dist/assets/MachineRenameDialog-HGiXO0UG.js.br +0 -0
- package/app/dist/assets/MachineRenameDialog-HGiXO0UG.js.gz +0 -0
- package/app/dist/assets/{MachineSettingsView-BWSIpenw.js → MachineSettingsView-C4q9cbRr.js} +1 -1
- package/app/dist/assets/MachineSettingsView-C4q9cbRr.js.br +0 -0
- package/app/dist/assets/MachineSettingsView-C4q9cbRr.js.gz +0 -0
- package/app/dist/assets/{MicrophonePreferences-CNEhQgAS.js → MicrophonePreferences-qaOpiph1.js} +1 -1
- package/app/dist/assets/MicrophonePreferences-qaOpiph1.js.br +0 -0
- package/app/dist/assets/MicrophonePreferences-qaOpiph1.js.gz +0 -0
- package/app/dist/assets/{ModelReasoningMenu-BeNCpeQf.js → ModelReasoningMenu-CVmIvyBC.js} +1 -1
- package/app/dist/assets/ModelReasoningMenu-CVmIvyBC.js.br +0 -0
- package/app/dist/assets/ModelReasoningMenu-CVmIvyBC.js.gz +0 -0
- package/app/dist/assets/{NewTabPage-CsPDV6iC.js → NewTabPage-BD3LFok4.js} +1 -1
- package/app/dist/assets/NewTabPage-BD3LFok4.js.br +0 -0
- package/app/dist/assets/NewTabPage-BD3LFok4.js.gz +0 -0
- package/app/dist/assets/{NewThreadComposer-BY0jUSbs.js → NewThreadComposer-C2ZKRVh2.js} +1 -1
- package/app/dist/assets/NewThreadComposer-C2ZKRVh2.js.br +0 -0
- package/app/dist/assets/NewThreadComposer-C2ZKRVh2.js.gz +0 -0
- package/app/dist/assets/{OnboardingFlow-BQdrTtHC.js → OnboardingFlow-D7-YF2ZM.js} +1 -1
- package/app/dist/assets/OnboardingFlow-D7-YF2ZM.js.br +0 -0
- package/app/dist/assets/OnboardingFlow-D7-YF2ZM.js.gz +0 -0
- package/app/dist/assets/{OptionPicker-sql35hd_.js → OptionPicker-DzY4ri8R.js} +1 -1
- package/app/dist/assets/OptionPicker-DzY4ri8R.js.br +0 -0
- package/app/dist/assets/OptionPicker-DzY4ri8R.js.gz +0 -0
- package/app/dist/assets/{PaletteShell-B9KeWKsT.js → PaletteShell-4enjLs-M.js} +1 -1
- package/app/dist/assets/PaletteShell-4enjLs-M.js.br +0 -0
- package/app/dist/assets/PaletteShell-4enjLs-M.js.gz +0 -0
- package/app/dist/assets/{PaneMaximizeButton-CGBzyikf.js → PaneMaximizeButton-40ZGXf3w.js} +1 -1
- package/app/dist/assets/PaneMaximizeButton-40ZGXf3w.js.br +0 -0
- package/app/dist/assets/PaneMaximizeButton-40ZGXf3w.js.gz +0 -0
- package/app/dist/assets/{PierreLineSelectionActions-BYL6I0xE.js → PierreLineSelectionActions-DrQj-N__.js} +1 -1
- package/app/dist/assets/PierreLineSelectionActions-DrQj-N__.js.br +0 -0
- package/app/dist/assets/PierreLineSelectionActions-DrQj-N__.js.gz +0 -0
- package/app/dist/assets/{PluginPanelRightPanelHost-Dj-wS_Ki.js → PluginPanelRightPanelHost-Ha0PrCa9.js} +1 -1
- package/app/dist/assets/PluginPanelRightPanelHost-Ha0PrCa9.js.br +0 -0
- package/app/dist/assets/PluginPanelRightPanelHost-Ha0PrCa9.js.gz +0 -0
- package/app/dist/assets/{PluginThreadChat-Dh-No9s-.js → PluginThreadChat-D_tbXHEo.js} +1 -1
- package/app/dist/assets/PluginThreadChat-D_tbXHEo.js.br +0 -0
- package/app/dist/assets/PluginThreadChat-D_tbXHEo.js.gz +0 -0
- package/app/dist/assets/ProjectDetailSettingsView-Ckp-m-c0.js +1 -0
- package/app/dist/assets/ProjectDetailSettingsView-Ckp-m-c0.js.br +0 -0
- package/app/dist/assets/ProjectDetailSettingsView-Ckp-m-c0.js.gz +0 -0
- package/app/dist/assets/{ProjectMachineSetupDialog-BW4gUYj0.js → ProjectMachineSetupDialog-Bn43xkw-.js} +1 -1
- package/app/dist/assets/ProjectMachineSetupDialog-Bn43xkw-.js.br +0 -0
- package/app/dist/assets/ProjectMachineSetupDialog-Bn43xkw-.js.gz +0 -0
- package/app/dist/assets/{ProjectsSettingsSection-BI_xhcA2.js → ProjectsSettingsSection-DXHostGl.js} +1 -1
- package/app/dist/assets/ProjectsSettingsSection-DXHostGl.js.br +0 -0
- package/app/dist/assets/ProjectsSettingsSection-DXHostGl.js.gz +0 -0
- package/app/dist/assets/{QueuedMessagesList-BEyivVSE.js → QueuedMessagesList-C53i8_rz.js} +1 -1
- package/app/dist/assets/QueuedMessagesList-C53i8_rz.js.br +0 -0
- package/app/dist/assets/QueuedMessagesList-C53i8_rz.js.gz +0 -0
- package/app/dist/assets/{RemotePathBrowser-DVW5AwBs.js → RemotePathBrowser-CsCxZdUk.js} +1 -1
- package/app/dist/assets/RemotePathBrowser-CsCxZdUk.js.br +0 -0
- package/app/dist/assets/RemotePathBrowser-CsCxZdUk.js.gz +0 -0
- package/app/dist/assets/{RootComposeView-Cbnwq7j_.js → RootComposeView-CsV3Ut7E.js} +1 -1
- package/app/dist/assets/RootComposeView-CsV3Ut7E.js.br +0 -0
- package/app/dist/assets/RootComposeView-CsV3Ut7E.js.gz +0 -0
- package/app/dist/assets/{SecondaryPanelLayout-fG8BuYv-.js → SecondaryPanelLayout-BPTIpQ2F.js} +1 -1
- package/app/dist/assets/SecondaryPanelLayout-BPTIpQ2F.js.br +0 -0
- package/app/dist/assets/SecondaryPanelLayout-BPTIpQ2F.js.gz +0 -0
- package/app/dist/assets/{ServerMoveOverlayView-CPWZimVv.js → ServerMoveOverlayView-DxwZdF-Z.js} +1 -1
- package/app/dist/assets/ServerMoveOverlayView-DxwZdF-Z.js.br +0 -0
- package/app/dist/assets/ServerMoveOverlayView-DxwZdF-Z.js.gz +0 -0
- package/app/dist/assets/{SettingsSidebar-DxfoXXKW.js → SettingsSidebar-CYEXglCo.js} +1 -1
- package/app/dist/assets/SettingsSidebar-CYEXglCo.js.br +0 -0
- package/app/dist/assets/SettingsSidebar-CYEXglCo.js.gz +0 -0
- package/app/dist/assets/{SettingsView-D_DkKpuv.js → SettingsView-B3HpJfUo.js} +1 -1
- package/app/dist/assets/SettingsView-B3HpJfUo.js.br +0 -0
- package/app/dist/assets/SettingsView-B3HpJfUo.js.gz +0 -0
- package/app/dist/assets/{SidebarFooterCustomize-VQoenr5y.js → SidebarFooterCustomize-BGXeu0og.js} +1 -1
- package/app/dist/assets/SidebarFooterCustomize-BGXeu0og.js.br +0 -0
- package/app/dist/assets/SidebarFooterCustomize-BGXeu0og.js.gz +0 -0
- package/app/dist/assets/{SidebarVisibilityCustomize-DUKnlz9Y.js → SidebarVisibilityCustomize-Qy7hHO5j.js} +1 -1
- package/app/dist/assets/SidebarVisibilityCustomize-Qy7hHO5j.js.br +0 -0
- package/app/dist/assets/SidebarVisibilityCustomize-Qy7hHO5j.js.gz +0 -0
- package/app/dist/assets/{SourceCodeHost-BlXLvWv2.js → SourceCodeHost-CJpVOgCd.js} +2 -2
- package/app/dist/assets/SourceCodeHost-CJpVOgCd.js.br +0 -0
- package/app/dist/assets/SourceCodeHost-CJpVOgCd.js.gz +0 -0
- package/app/dist/assets/{SplitWorkspaceRoute-6w4G23kc.js → SplitWorkspaceRoute-CWPCkdjo.js} +2 -2
- package/app/dist/assets/SplitWorkspaceRoute-CWPCkdjo.js.br +0 -0
- package/app/dist/assets/SplitWorkspaceRoute-CWPCkdjo.js.gz +0 -0
- package/app/dist/assets/{TerminalOutputBlock-BxBSWJr_.js → TerminalOutputBlock-BzxpJ5H3.js} +1 -1
- package/app/dist/assets/TerminalOutputBlock-BzxpJ5H3.js.br +0 -0
- package/app/dist/assets/TerminalOutputBlock-BzxpJ5H3.js.gz +0 -0
- package/app/dist/assets/{ThreadActionsMenu-ChpSKv80.js → ThreadActionsMenu-DfUIyx3e.js} +1 -1
- package/app/dist/assets/ThreadActionsMenu-DfUIyx3e.js.br +0 -0
- package/app/dist/assets/ThreadActionsMenu-DfUIyx3e.js.gz +0 -0
- package/app/dist/assets/{ThreadDetailView-CfH3uWo-.js → ThreadDetailView-BqzwklQd.js} +3 -3
- package/app/dist/assets/ThreadDetailView-BqzwklQd.js.br +0 -0
- package/app/dist/assets/ThreadDetailView-BqzwklQd.js.gz +0 -0
- package/app/dist/assets/{ThreadSearchPaletteMode-B72v3f5V.js → ThreadSearchPaletteMode-Dni8lJt2.js} +1 -1
- package/app/dist/assets/ThreadSearchPaletteMode-Dni8lJt2.js.br +0 -0
- package/app/dist/assets/ThreadSearchPaletteMode-Dni8lJt2.js.gz +0 -0
- package/app/dist/assets/{ThreadSecondaryPanel-4nIZy4h9.js → ThreadSecondaryPanel-Cfah9-yR.js} +1 -1
- package/app/dist/assets/ThreadSecondaryPanel-Cfah9-yR.js.br +0 -0
- package/app/dist/assets/ThreadSecondaryPanel-Cfah9-yR.js.gz +0 -0
- package/app/dist/assets/{ThreadSecondaryPanelTabContent-8-e35_Me.js → ThreadSecondaryPanelTabContent-ByMkWr4B.js} +1 -1
- package/app/dist/assets/ThreadSecondaryPanelTabContent-ByMkWr4B.js.br +0 -0
- package/app/dist/assets/ThreadSecondaryPanelTabContent-ByMkWr4B.js.gz +0 -0
- package/app/dist/assets/{ThreadStatusGlyph-C9tzRtlV.js → ThreadStatusGlyph-MjAgpNtv.js} +1 -1
- package/app/dist/assets/ThreadStatusGlyph-MjAgpNtv.js.br +0 -0
- package/app/dist/assets/ThreadStatusGlyph-MjAgpNtv.js.gz +0 -0
- package/app/dist/assets/{ThreadTerminalPanel-CqTk9L2y.js → ThreadTerminalPanel-2UtGqd1Z.js} +1 -1
- package/app/dist/assets/ThreadTerminalPanel-2UtGqd1Z.js.br +0 -0
- package/app/dist/assets/ThreadTerminalPanel-2UtGqd1Z.js.gz +0 -0
- package/app/dist/assets/{ThreadTerminalView-B6XNBrJ9.js → ThreadTerminalView-BqsCrU1_.js} +1 -1
- package/app/dist/assets/ThreadTerminalView-BqsCrU1_.js.br +0 -0
- package/app/dist/assets/ThreadTerminalView-BqsCrU1_.js.gz +0 -0
- package/app/dist/assets/{ThreadTimelineNavigationContext-DbZHHZfY.js → ThreadTimelineNavigationContext-B_vg4bPl.js} +2 -2
- package/app/dist/assets/ThreadTimelineNavigationContext-B_vg4bPl.js.br +0 -0
- package/app/dist/assets/ThreadTimelineNavigationContext-B_vg4bPl.js.gz +0 -0
- package/app/dist/assets/{ThreadUnarchiveButton-CtjS9UkR.js → ThreadUnarchiveButton-CnlHu7Dv.js} +1 -1
- package/app/dist/assets/{TimelineDetailScroll-CpFZhWhU.js → TimelineDetailScroll-CIXDGLcx.js} +1 -1
- package/app/dist/assets/TimelineDetailScroll-CIXDGLcx.js.br +0 -0
- package/app/dist/assets/TimelineDetailScroll-CIXDGLcx.js.gz +0 -0
- package/app/dist/assets/{TimelineFileDiffBlock-JiOlR3O8.js → TimelineFileDiffBlock-Cy_6X6XY.js} +1 -1
- package/app/dist/assets/TimelineFileDiffBlock-Cy_6X6XY.js.br +0 -0
- package/app/dist/assets/TimelineFileDiffBlock-Cy_6X6XY.js.gz +0 -0
- package/app/dist/assets/{TimelineSelectionMenu-DT4qwoFI.js → TimelineSelectionMenu-DzrSCC7e.js} +1 -1
- package/app/dist/assets/TimelineSelectionMenu-DzrSCC7e.js.br +0 -0
- package/app/dist/assets/TimelineSelectionMenu-DzrSCC7e.js.gz +0 -0
- package/app/dist/assets/{ToolsView-nAAic88Z.js → ToolsView-B8oDS6Ek.js} +1 -1
- package/app/dist/assets/ToolsView-B8oDS6Ek.js.br +0 -0
- package/app/dist/assets/ToolsView-B8oDS6Ek.js.gz +0 -0
- package/app/dist/assets/{ToolsViewSplits-Blo3GJMQ.js → ToolsViewSplits-JK-JmYIg.js} +2 -2
- package/app/dist/assets/ToolsViewSplits-JK-JmYIg.js.br +0 -0
- package/app/dist/assets/ToolsViewSplits-JK-JmYIg.js.gz +0 -0
- package/app/dist/assets/{WaveformVisualizer-BrH_nwc4.js → WaveformVisualizer-GDJ4mJRx.js} +1 -1
- package/app/dist/assets/WaveformVisualizer-GDJ4mJRx.js.br +0 -0
- package/app/dist/assets/WaveformVisualizer-GDJ4mJRx.js.gz +0 -0
- package/app/dist/assets/{absolute-file-path-W_eh4kPq.js → absolute-file-path-B-cUOroV.js} +1 -1
- package/app/dist/assets/{app-fixed-tab-navigation-DX9s-gCj.js → app-fixed-tab-navigation-BpDuGNDS.js} +1 -1
- package/app/dist/assets/app-fixed-tab-navigation-BpDuGNDS.js.br +0 -0
- package/app/dist/assets/app-fixed-tab-navigation-BpDuGNDS.js.gz +0 -0
- package/app/dist/assets/{audio-input-device-preference-DsU6GGNE.js → audio-input-device-preference-BeKjzmnK.js} +1 -1
- package/app/dist/assets/audio-input-device-preference-BeKjzmnK.js.br +0 -0
- package/app/dist/assets/audio-input-device-preference-BeKjzmnK.js.gz +0 -0
- package/app/dist/assets/{bottom-anchored-scroll-body-C8n22V_o.js → bottom-anchored-scroll-body-DaHi9M7W.js} +1 -1
- package/app/dist/assets/bottom-anchored-scroll-body-DaHi9M7W.js.br +0 -0
- package/app/dist/assets/bottom-anchored-scroll-body-DaHi9M7W.js.gz +0 -0
- package/app/dist/assets/{browser-url-B0SjaYti.js → browser-url-BdtGkCbj.js} +1 -1
- package/app/dist/assets/browser-url-BdtGkCbj.js.br +0 -0
- package/app/dist/assets/browser-url-BdtGkCbj.js.gz +0 -0
- package/app/dist/assets/{checkbox-Ct38DhHB.js → checkbox-5zZ_V1_F.js} +1 -1
- package/app/dist/assets/checkbox-5zZ_V1_F.js.br +0 -0
- package/app/dist/assets/checkbox-5zZ_V1_F.js.gz +0 -0
- package/app/dist/assets/{code-loading-skeletons-C_099GEq.js → code-loading-skeletons-DzoCzgll.js} +1 -1
- package/app/dist/assets/code-loading-skeletons-DzoCzgll.js.br +0 -0
- package/app/dist/assets/code-loading-skeletons-DzoCzgll.js.gz +0 -0
- package/app/dist/assets/{code-rendering-OxBy5zPr.js → code-rendering-A15j47Uy.js} +1 -1
- package/app/dist/assets/{code-theme-registration-BokyXo30.js → code-theme-registration-q5iRcekZ.js} +1 -1
- package/app/dist/assets/{detail-card-Cj628JNK.js → detail-card-BvFcq0Ru.js} +1 -1
- package/app/dist/assets/detail-card-BvFcq0Ru.js.br +0 -0
- package/app/dist/assets/detail-card-BvFcq0Ru.js.gz +0 -0
- package/app/dist/assets/{diff-stats-tally-MtORWItG.js → diff-stats-tally-DA41wrwM.js} +1 -1
- package/app/dist/assets/diff-stats-tally-DA41wrwM.js.br +0 -0
- package/app/dist/assets/diff-stats-tally-DA41wrwM.js.gz +0 -0
- package/app/dist/assets/{environment-mutations-rP4eROm2.js → environment-mutations-Bl2PK8kR.js} +1 -1
- package/app/dist/assets/environment-mutations-Bl2PK8kR.js.br +0 -0
- package/app/dist/assets/environment-mutations-Bl2PK8kR.js.gz +0 -0
- package/app/dist/assets/{environment-workspace-display-O1JRHfbV.js → environment-workspace-display-DdMsNL4x.js} +3 -3
- package/app/dist/assets/environment-workspace-display-DdMsNL4x.js.br +0 -0
- package/app/dist/assets/environment-workspace-display-DdMsNL4x.js.gz +0 -0
- package/app/dist/assets/{event-code-block-DqUZCAii.js → event-code-block-DT4pyQ5R.js} +1 -1
- package/app/dist/assets/event-code-block-DT4pyQ5R.js.br +0 -0
- package/app/dist/assets/event-code-block-DT4pyQ5R.js.gz +0 -0
- package/app/dist/assets/{expandable-text-herJC70e.js → expandable-text-CtGFLpBX.js} +1 -1
- package/app/dist/assets/expandable-text-CtGFLpBX.js.br +0 -0
- package/app/dist/assets/expandable-text-CtGFLpBX.js.gz +0 -0
- package/app/dist/assets/{file-opener-preference-BEeek6dm.js → file-opener-preference-B5sOAhVM.js} +1 -1
- package/app/dist/assets/{file-path-link-Cni9Azi2.js → file-path-link-xsn9GiAq.js} +1 -1
- package/app/dist/assets/file-path-link-xsn9GiAq.js.br +0 -0
- package/app/dist/assets/file-path-link-xsn9GiAq.js.gz +0 -0
- package/app/dist/assets/{host-mutations-Ckc-eVys.js → host-mutations-Bf4idS3m.js} +1 -1
- package/app/dist/assets/host-mutations-Bf4idS3m.js.br +0 -0
- package/app/dist/assets/host-mutations-Bf4idS3m.js.gz +0 -0
- package/app/dist/assets/{icon-extended-DDFkslJU.js → icon-extended-C7x9E4W9.js} +1 -1
- package/app/dist/assets/icon-extended-C7x9E4W9.js.br +0 -0
- package/app/dist/assets/icon-extended-C7x9E4W9.js.gz +0 -0
- package/app/dist/assets/{image-lightbox-BW1bqQJM.js → image-lightbox-CzY6y14n.js} +1 -1
- package/app/dist/assets/image-lightbox-CzY6y14n.js.br +0 -0
- package/app/dist/assets/image-lightbox-CzY6y14n.js.gz +0 -0
- package/app/dist/assets/index-B-RDC4LU.js +395 -0
- package/app/dist/assets/index-B-RDC4LU.js.br +0 -0
- package/app/dist/assets/index-B-RDC4LU.js.gz +0 -0
- package/app/dist/assets/{inline-rename-editor-wjwfk7v2.js → inline-rename-editor-DUVacR_R.js} +1 -1
- package/app/dist/assets/inline-rename-editor-DUVacR_R.js.br +0 -0
- package/app/dist/assets/inline-rename-editor-DUVacR_R.js.gz +0 -0
- package/app/dist/assets/{launcherRow-rIW7Z6Xm.js → launcherRow-C9Htfook.js} +1 -1
- package/app/dist/assets/launcherRow-C9Htfook.js.br +0 -0
- package/app/dist/assets/launcherRow-C9Htfook.js.gz +0 -0
- package/app/dist/assets/{localhost-link-rewrite-description-Bovg3W--.js → localhost-link-rewrite-description-DfPXtfPs.js} +1 -1
- package/app/dist/assets/localhost-link-rewrite-description-DfPXtfPs.js.br +0 -0
- package/app/dist/assets/localhost-link-rewrite-description-DfPXtfPs.js.gz +0 -0
- package/app/dist/assets/{machine-provider-queries-CRlWTEz7.js → machine-provider-queries-By9Ipha4.js} +1 -1
- package/app/dist/assets/machine-provider-queries-By9Ipha4.js.br +0 -0
- package/app/dist/assets/machine-provider-queries-By9Ipha4.js.gz +0 -0
- package/app/dist/assets/{machine-server-access-D3hixOIC.js → machine-server-access-6584jQ7-.js} +1 -1
- package/app/dist/assets/{markdown-file-image-routing-DAIVjxLg.js → markdown-file-image-routing-0_tf5d6g.js} +1 -1
- package/app/dist/assets/{markdown-html-B-Kyh3zI.js → markdown-html-JK4Gnuli.js} +1 -1
- package/app/dist/assets/markdown-html-JK4Gnuli.js.br +0 -0
- package/app/dist/assets/markdown-html-JK4Gnuli.js.gz +0 -0
- package/app/dist/assets/{markdown-local-file-link-C89PR8d5.js → markdown-local-file-link-DXjnoCIE.js} +1 -1
- package/app/dist/assets/markdown-local-file-link-DXjnoCIE.js.br +0 -0
- package/app/dist/assets/markdown-local-file-link-DXjnoCIE.js.gz +0 -0
- package/app/dist/assets/{markdown-preview-B7BmqIlu.js → markdown-preview-Bfwf40CC.js} +2 -2
- package/app/dist/assets/markdown-preview-Bfwf40CC.js.br +0 -0
- package/app/dist/assets/markdown-preview-Bfwf40CC.js.gz +0 -0
- package/app/dist/assets/{markdown-prompt-mentions-B0JRhgrI.js → markdown-prompt-mentions-BuHEkhJs.js} +1 -1
- package/app/dist/assets/markdown-prompt-mentions-BuHEkhJs.js.br +0 -0
- package/app/dist/assets/markdown-prompt-mentions-BuHEkhJs.js.gz +0 -0
- package/app/dist/assets/{model-load-error-message-B-HKqgUD.js → model-load-error-message-CnA6byT0.js} +1 -1
- package/app/dist/assets/model-load-error-message-CnA6byT0.js.br +0 -0
- package/app/dist/assets/model-load-error-message-CnA6byT0.js.gz +0 -0
- package/app/dist/assets/onboarding-telemetry-D6SXoh98.js +1 -0
- package/app/dist/assets/{open-in-editor-button-CQGreiCk.js → open-in-editor-button-jScMiuob.js} +1 -1
- package/app/dist/assets/open-in-editor-button-jScMiuob.js.br +0 -0
- package/app/dist/assets/open-in-editor-button-jScMiuob.js.gz +0 -0
- package/app/dist/assets/{page-shell-BHTOdeQn.js → page-shell-ClYdhKtX.js} +1 -1
- package/app/dist/assets/page-shell-ClYdhKtX.js.br +0 -0
- package/app/dist/assets/page-shell-ClYdhKtX.js.gz +0 -0
- package/app/dist/assets/{pierre-worker-pool-Bm9cLA-c.js → pierre-worker-pool-D1nZ9Lcz.js} +1 -1
- package/app/dist/assets/pierre-worker-pool-D1nZ9Lcz.js.br +0 -0
- package/app/dist/assets/pierre-worker-pool-D1nZ9Lcz.js.gz +0 -0
- package/app/dist/assets/{plugin-detail-navigation-CmSGTNyL.js → plugin-detail-navigation-BD4jDXuP.js} +1 -1
- package/app/dist/assets/plugin-detail-navigation-BD4jDXuP.js.br +0 -0
- package/app/dist/assets/plugin-detail-navigation-BD4jDXuP.js.gz +0 -0
- package/app/dist/assets/{plugin-frontend-BdQdYbWd.js → plugin-frontend-qfGFykt-.js} +3 -3
- package/app/dist/assets/plugin-frontend-qfGFykt-.js.br +0 -0
- package/app/dist/assets/plugin-frontend-qfGFykt-.js.gz +0 -0
- package/app/dist/assets/{plugin-ui-DyNDyPD9.js → plugin-ui-DfbeKd73.js} +1 -1
- package/app/dist/assets/plugin-ui-DfbeKd73.js.br +0 -0
- package/app/dist/assets/plugin-ui-DfbeKd73.js.gz +0 -0
- package/app/dist/assets/{project-default-execution-options-query-h6eTG6_Q.js → project-default-execution-options-query-DQKDDkRo.js} +1 -1
- package/app/dist/assets/{queued-editor-typeahead-layout-BKui5z7C.js → queued-editor-typeahead-layout-DKGYsvQ-.js} +1 -1
- package/app/dist/assets/queued-editor-typeahead-layout-DKGYsvQ-.js.br +0 -0
- package/app/dist/assets/queued-editor-typeahead-layout-DKGYsvQ-.js.gz +0 -0
- package/app/dist/assets/{queued-messages-layout-BuEilXwP.js → queued-messages-layout-ClZkWHAV.js} +1 -1
- package/app/dist/assets/queued-messages-layout-ClZkWHAV.js.br +0 -0
- package/app/dist/assets/queued-messages-layout-ClZkWHAV.js.gz +0 -0
- package/app/dist/assets/{resource-list-B6MkAu8v.js → resource-list-CC7zN47b.js} +1 -1
- package/app/dist/assets/resource-list-CC7zN47b.js.br +0 -0
- package/app/dist/assets/resource-list-CC7zN47b.js.gz +0 -0
- package/app/dist/assets/root-compose-create-preference-z0-Xe1ss.js +1 -0
- package/app/dist/assets/{save-file-DYAtq7A9.js → save-file-Cs9LWQ4E.js} +1 -1
- package/app/dist/assets/{settings-nav-DbICcozy.js → settings-nav-BKMVpc5b.js} +1 -1
- package/app/dist/assets/settings-nav-BKMVpc5b.js.br +0 -0
- package/app/dist/assets/settings-nav-BKMVpc5b.js.gz +0 -0
- package/app/dist/assets/{settings-sections-Cq0VX9E8.js → settings-sections-LqqPm8q3.js} +1 -1
- package/app/dist/assets/settings-sections-LqqPm8q3.js.br +0 -0
- package/app/dist/assets/settings-sections-LqqPm8q3.js.gz +0 -0
- package/app/dist/assets/{shortcut-pill-DldxrKgx.js → shortcut-pill-DOMeVrnR.js} +1 -1
- package/app/dist/assets/{sidebarTouchSensor-D7jKXrfM.js → sidebarTouchSensor-PP8-SQld.js} +1 -1
- package/app/dist/assets/sidebarTouchSensor-PP8-SQld.js.br +0 -0
- package/app/dist/assets/sidebarTouchSensor-PP8-SQld.js.gz +0 -0
- package/app/dist/assets/{switch-CzvlSesf.js → switch-B9nrFpZc.js} +1 -1
- package/app/dist/assets/switch-B9nrFpZc.js.br +0 -0
- package/app/dist/assets/switch-B9nrFpZc.js.gz +0 -0
- package/app/dist/assets/{textarea-9yaIMD7J.js → textarea-2fJEsqsi.js} +1 -1
- package/app/dist/assets/{thread-event-parser-BqVpKC6z.js → thread-event-parser-DedSEtmp.js} +1 -1
- package/app/dist/assets/thread-event-parser-DedSEtmp.js.br +0 -0
- package/app/dist/assets/thread-event-parser-DedSEtmp.js.gz +0 -0
- package/app/dist/assets/{thread-panel-queries-C3MI4mdc.js → thread-panel-queries-5N40syTx.js} +1 -1
- package/app/dist/assets/thread-panel-queries-5N40syTx.js.br +0 -0
- package/app/dist/assets/thread-panel-queries-5N40syTx.js.gz +0 -0
- package/app/dist/assets/{thread-runtime-mutations-Cr1H7KSz.js → thread-runtime-mutations-BY5xzme0.js} +1 -1
- package/app/dist/assets/thread-runtime-mutations-BY5xzme0.js.br +0 -0
- package/app/dist/assets/thread-runtime-mutations-BY5xzme0.js.gz +0 -0
- package/app/dist/assets/{thread-terminal-queries-B4JkOWS2.js → thread-terminal-queries-BF7AB7qh.js} +1 -1
- package/app/dist/assets/thread-terminal-queries-BF7AB7qh.js.br +0 -0
- package/app/dist/assets/thread-terminal-queries-BF7AB7qh.js.gz +0 -0
- package/app/dist/assets/{threadRecentItems-DI2mgj7S.js → threadRecentItems-CYYbbS1r.js} +1 -1
- package/app/dist/assets/threadRecentItems-CYYbbS1r.js.br +0 -0
- package/app/dist/assets/threadRecentItems-CYYbbS1r.js.gz +0 -0
- package/app/dist/assets/{threadWorkspaceOpenPath-BQgtUYL5.js → threadWorkspaceOpenPath-B5anoH2-.js} +1 -1
- package/app/dist/assets/threadWorkspaceOpenPath-B5anoH2-.js.br +0 -0
- package/app/dist/assets/threadWorkspaceOpenPath-B5anoH2-.js.gz +0 -0
- package/app/dist/assets/{title-bar-scroll-fade-CxbgbTcm.js → title-bar-scroll-fade-BfqL4WEJ.js} +1 -1
- package/app/dist/assets/title-bar-scroll-fade-BfqL4WEJ.js.br +0 -0
- package/app/dist/assets/title-bar-scroll-fade-BfqL4WEJ.js.gz +0 -0
- package/app/dist/assets/{truncate-start-CaCnKnh9.js → truncate-start-D-P3rLti.js} +1 -1
- package/app/dist/assets/{use-hover-popover-CyIdak3c.js → use-hover-popover-Bb8PuVyu.js} +1 -1
- package/app/dist/assets/use-hover-popover-Bb8PuVyu.js.br +0 -0
- package/app/dist/assets/use-hover-popover-Bb8PuVyu.js.gz +0 -0
- package/app/dist/assets/{useElementWidth-CL3Nb-eq.js → useElementWidth-vSwGqg9a.js} +1 -1
- package/app/dist/assets/useElementWidth-vSwGqg9a.js.br +0 -0
- package/app/dist/assets/useElementWidth-vSwGqg9a.js.gz +0 -0
- package/app/dist/assets/{useLocalOpenTargets-yzd9-Ceh.js → useLocalOpenTargets-DqjYzi0b.js} +1 -1
- package/app/dist/assets/useLocalOpenTargets-DqjYzi0b.js.br +0 -0
- package/app/dist/assets/useLocalOpenTargets-DqjYzi0b.js.gz +0 -0
- package/app/dist/assets/{usePanelResizeSnap-dys9IwEk.js → usePanelResizeSnap-Dvi7sa3e.js} +1 -1
- package/app/dist/assets/usePanelResizeSnap-Dvi7sa3e.js.br +0 -0
- package/app/dist/assets/usePanelResizeSnap-Dvi7sa3e.js.gz +0 -0
- package/app/dist/assets/{usePanelTerminals-BN8UCJFO.js → usePanelTerminals-B9MNSur4.js} +1 -1
- package/app/dist/assets/usePanelTerminals-B9MNSur4.js.br +0 -0
- package/app/dist/assets/usePanelTerminals-B9MNSur4.js.gz +0 -0
- package/app/dist/assets/{usePathSuggestions-DkeFAE7l.js → usePathSuggestions-zhZ-4fh8.js} +1 -1
- package/app/dist/assets/usePathSuggestions-zhZ-4fh8.js.br +0 -0
- package/app/dist/assets/usePathSuggestions-zhZ-4fh8.js.gz +0 -0
- package/app/dist/assets/{useResolvedLiveFileTarget-43fAKgDx.js → useResolvedLiveFileTarget-CZZwqw4L.js} +1 -1
- package/app/dist/assets/useResolvedLiveFileTarget-CZZwqw4L.js.br +0 -0
- package/app/dist/assets/useResolvedLiveFileTarget-CZZwqw4L.js.gz +0 -0
- package/app/dist/assets/{useThreadTerminalController-DcWLbe8W.js → useThreadTerminalController-CvXy-5HP.js} +1 -1
- package/app/dist/assets/useThreadTerminalController-CvXy-5HP.js.br +0 -0
- package/app/dist/assets/useThreadTerminalController-CvXy-5HP.js.gz +0 -0
- package/app/dist/assets/{workspace-change-summary-Bd3p-LXz.js → workspace-change-summary-CY01JLmJ.js} +1 -1
- package/app/dist/assets/workspace-change-summary-CY01JLmJ.js.br +0 -0
- package/app/dist/assets/workspace-change-summary-CY01JLmJ.js.gz +0 -0
- package/app/dist/assets/{workspace-checkout-display-DMp28yCr.js → workspace-checkout-display-C9B0QPLi.js} +4 -4
- package/app/dist/assets/workspace-checkout-display-C9B0QPLi.js.br +0 -0
- package/app/dist/assets/workspace-checkout-display-C9B0QPLi.js.gz +0 -0
- package/app/dist/index.html +17 -17
- package/app/dist/index.html.br +0 -0
- package/app/dist/index.html.gz +0 -0
- package/dist/index.d.ts +35 -6
- package/dist/index.js +9 -5
- package/host-daemon/dist/bb +2 -2
- package/host-daemon/dist/bb-chunks/{browser-DVIVPPSL.js → browser-3RYUCU4H.js} +1 -1
- package/host-daemon/dist/bb-chunks/{chunk-ATDR5E2C.js → chunk-CZ4K4Z4T.js} +1 -1
- package/host-daemon/dist/bb-chunks/{chunk-ZWBRH7R6.js → chunk-DCRUVPRR.js} +1 -1
- package/host-daemon/dist/bb-chunks/{chunk-7EOZF4HA.js → chunk-F7XCHQA3.js} +1 -1
- package/host-daemon/dist/bb-chunks/{chunk-JWA6VJYL.js → chunk-FYCUA6H6.js} +1 -1
- package/host-daemon/dist/bb-chunks/{chunk-5ZMA4MIX.js → chunk-FZ76WJJG.js} +1 -1
- package/host-daemon/dist/bb-chunks/{chunk-UXSJP3YM.js → chunk-GVXLVAX4.js} +1 -1
- package/host-daemon/dist/bb-chunks/chunk-HDUE2YKX.js +2199 -0
- package/host-daemon/dist/bb-chunks/{chunk-REEBSQ75.js → chunk-L5UJ4QUD.js} +1 -1
- package/host-daemon/dist/bb-chunks/{chunk-QE47NRKX.js → chunk-NZY63D4X.js} +1 -1
- package/host-daemon/dist/bb-chunks/{chunk-MLYXPSJC.js → chunk-UCNQXYXP.js} +1 -1
- package/host-daemon/dist/bb-chunks/chunk-WMCZMPZ4.js +2 -0
- package/host-daemon/dist/bb-chunks/{client-YJBBA4JS.js → client-NLWJKXJ2.js} +1 -1
- package/host-daemon/dist/bb-chunks/{commander-errors-P6LP2OHL.js → commander-errors-GDOJDU37.js} +1 -1
- package/host-daemon/dist/bb-chunks/{context-env-LJ5IITUO.js → context-env-VLEFLYWD.js} +1 -1
- package/host-daemon/dist/bb-chunks/{context-hints-MUUUMT2P.js → context-hints-FXEXGMFT.js} +1 -1
- package/host-daemon/dist/bb-chunks/{diagnostics-5EMHJNW7.js → diagnostics-ZKJGPJUH.js} +1 -1
- package/host-daemon/dist/bb-chunks/{environment-ZRSQFVHG.js → environment-CY5JUFSR.js} +1 -1
- package/host-daemon/dist/bb-chunks/{file-AEVJYJAY.js → file-KGZLZ36T.js} +1 -1
- package/host-daemon/dist/bb-chunks/{guide-GLY5UY4M.js → guide-MXAVSGKZ.js} +1 -1
- package/host-daemon/dist/bb-chunks/{machine-Z5QSPWEE.js → machine-Y7XFS7EJ.js} +1 -1
- package/host-daemon/dist/bb-chunks/{marketplace-4CGZ3NTM.js → marketplace-QLPRDZTC.js} +1 -1
- package/host-daemon/dist/bb-chunks/{plugin-VO7RP4JU.js → plugin-K276UYTK.js} +1 -1
- package/host-daemon/dist/bb-chunks/{plugin-cli-proxy-6Y6TTP7A.js → plugin-cli-proxy-QE7C6YLF.js} +1 -1
- package/host-daemon/dist/bb-chunks/project-QD44GO6S.js +2 -0
- package/host-daemon/dist/bb-chunks/{prompt-history-ZNIBNYER.js → prompt-history-YGK557NG.js} +1 -1
- package/host-daemon/dist/bb-chunks/{provider-TJ4DGKBX.js → provider-FAAY2EKV.js} +1 -1
- package/host-daemon/dist/bb-chunks/{server-YMSYCILC.js → server-Y7FRWA4U.js} +1 -1
- package/host-daemon/dist/bb-chunks/{settings-5CKNFTFZ.js → settings-76RZ35GN.js} +1 -1
- package/host-daemon/dist/bb-chunks/{skill-BMQPIFAD.js → skill-HMSLPSPW.js} +1 -1
- package/host-daemon/dist/bb-chunks/{status-2DJ3O6QU.js → status-GJFZ5YDD.js} +1 -1
- package/host-daemon/dist/bb-chunks/{terminal-NWC5PO4A.js → terminal-LSZHPIET.js} +1 -1
- package/host-daemon/dist/bb-chunks/{theme-OEOGYFXJ.js → theme-BMV5THCU.js} +1 -1
- package/host-daemon/dist/bb-chunks/{thread-AI6SXNXK.js → thread-UZ44ZBA2.js} +1 -1
- package/host-daemon/dist/bb-chunks/thread-event-parser-SIFYMDOV.js +2 -0
- package/host-daemon/dist/bb-chunks/{updates-DFLJJDO4.js → updates-IDCLXRIV.js} +1 -1
- package/host-daemon/dist/bb-chunks/{voice-ZSACREC3.js → voice-EXZARJ2J.js} +1 -1
- package/host-daemon/dist/daemon-bundle.mjs +102 -102
- package/package.json +1 -1
- package/server/dist/builtin-plugins/orbit/dist/assets/orbit/revision +1 -1
- package/server/dist/builtin-plugins/orbit/dist/server.js +52 -52
- package/server/dist/drizzle/0147_project_permission_escalation.sql +1 -0
- package/server/dist/drizzle/meta/0147_snapshot.json +5295 -0
- package/server/dist/drizzle/meta/_journal.json +7 -0
- package/server/dist/start-server.js +26 -7
- package/app/dist/assets/AddMachineDialog-4BQFC118.js.br +0 -0
- package/app/dist/assets/AddMachineDialog-4BQFC118.js.gz +0 -0
- package/app/dist/assets/AppFileExternalNavigationDispatcher-fGD_vTns.js.br +0 -0
- package/app/dist/assets/AppFileExternalNavigationDispatcher-fGD_vTns.js.gz +0 -0
- package/app/dist/assets/BbDiff-BkqgAZD9.js.br +0 -0
- package/app/dist/assets/BbDiff-BkqgAZD9.js.gz +0 -0
- package/app/dist/assets/BbDiffSplit-DTvWaW-n.js.br +0 -0
- package/app/dist/assets/BbDiffSplit-DTvWaW-n.js.gz +0 -0
- package/app/dist/assets/BbSourceCode-Dqw4VrLu.js.br +0 -0
- package/app/dist/assets/BbSourceCode-Dqw4VrLu.js.gz +0 -0
- package/app/dist/assets/BrowserTabDeck-CuHEyZd6.js.br +0 -0
- package/app/dist/assets/BrowserTabDeck-CuHEyZd6.js.gz +0 -0
- package/app/dist/assets/CommandPaletteBody-DynxiDg6.js.br +0 -0
- package/app/dist/assets/CommandPaletteBody-DynxiDg6.js.gz +0 -0
- package/app/dist/assets/DiffHost-3UTZIJNs.js.br +0 -0
- package/app/dist/assets/DiffHost-3UTZIJNs.js.gz +0 -0
- package/app/dist/assets/ExperimentalFileLinkMenu-C0RXVabs.js.br +0 -0
- package/app/dist/assets/ExperimentalFileLinkMenu-C0RXVabs.js.gz +0 -0
- package/app/dist/assets/FilePreview-BxgJ2jjI.js.br +0 -0
- package/app/dist/assets/FilePreview-BxgJ2jjI.js.gz +0 -0
- package/app/dist/assets/GitDiffCardHeader-Ce736y-m.js.br +0 -0
- package/app/dist/assets/GitDiffCardHeader-Ce736y-m.js.gz +0 -0
- package/app/dist/assets/InlineMessageEditorFrame-Dud8h1It.js.br +0 -0
- package/app/dist/assets/InlineMessageEditorFrame-Dud8h1It.js.gz +0 -0
- package/app/dist/assets/MachineRenameDialog-C_ZV5gEB.js.br +0 -0
- package/app/dist/assets/MachineRenameDialog-C_ZV5gEB.js.gz +0 -0
- package/app/dist/assets/MachineSettingsView-BWSIpenw.js.br +0 -0
- package/app/dist/assets/MachineSettingsView-BWSIpenw.js.gz +0 -0
- package/app/dist/assets/MicrophonePreferences-CNEhQgAS.js.br +0 -0
- package/app/dist/assets/MicrophonePreferences-CNEhQgAS.js.gz +0 -0
- package/app/dist/assets/ModelReasoningMenu-BeNCpeQf.js.br +0 -0
- package/app/dist/assets/ModelReasoningMenu-BeNCpeQf.js.gz +0 -0
- package/app/dist/assets/NewTabPage-CsPDV6iC.js.br +0 -0
- package/app/dist/assets/NewTabPage-CsPDV6iC.js.gz +0 -0
- package/app/dist/assets/NewThreadComposer-BY0jUSbs.js.br +0 -0
- package/app/dist/assets/NewThreadComposer-BY0jUSbs.js.gz +0 -0
- package/app/dist/assets/OnboardingFlow-BQdrTtHC.js.br +0 -0
- package/app/dist/assets/OnboardingFlow-BQdrTtHC.js.gz +0 -0
- package/app/dist/assets/OptionPicker-sql35hd_.js.br +0 -0
- package/app/dist/assets/OptionPicker-sql35hd_.js.gz +0 -0
- package/app/dist/assets/PaletteShell-B9KeWKsT.js.br +0 -0
- package/app/dist/assets/PaletteShell-B9KeWKsT.js.gz +0 -0
- package/app/dist/assets/PaneMaximizeButton-CGBzyikf.js.br +0 -0
- package/app/dist/assets/PaneMaximizeButton-CGBzyikf.js.gz +0 -0
- package/app/dist/assets/PierreLineSelectionActions-BYL6I0xE.js.br +0 -0
- package/app/dist/assets/PierreLineSelectionActions-BYL6I0xE.js.gz +0 -0
- package/app/dist/assets/PluginPanelRightPanelHost-Dj-wS_Ki.js.br +0 -0
- package/app/dist/assets/PluginPanelRightPanelHost-Dj-wS_Ki.js.gz +0 -0
- package/app/dist/assets/PluginThreadChat-Dh-No9s-.js.br +0 -0
- package/app/dist/assets/PluginThreadChat-Dh-No9s-.js.gz +0 -0
- package/app/dist/assets/ProjectDetailSettingsView-BOV7URzQ.js +0 -1
- package/app/dist/assets/ProjectDetailSettingsView-BOV7URzQ.js.br +0 -0
- package/app/dist/assets/ProjectDetailSettingsView-BOV7URzQ.js.gz +0 -0
- package/app/dist/assets/ProjectMachineSetupDialog-BW4gUYj0.js.br +0 -0
- package/app/dist/assets/ProjectMachineSetupDialog-BW4gUYj0.js.gz +0 -0
- package/app/dist/assets/ProjectsSettingsSection-BI_xhcA2.js.br +0 -0
- package/app/dist/assets/ProjectsSettingsSection-BI_xhcA2.js.gz +0 -0
- package/app/dist/assets/QueuedMessagesList-BEyivVSE.js.br +0 -0
- package/app/dist/assets/QueuedMessagesList-BEyivVSE.js.gz +0 -0
- package/app/dist/assets/RemotePathBrowser-DVW5AwBs.js.br +0 -0
- package/app/dist/assets/RemotePathBrowser-DVW5AwBs.js.gz +0 -0
- package/app/dist/assets/RootComposeView-Cbnwq7j_.js.br +0 -0
- package/app/dist/assets/RootComposeView-Cbnwq7j_.js.gz +0 -0
- package/app/dist/assets/SecondaryPanelLayout-fG8BuYv-.js.br +0 -0
- package/app/dist/assets/SecondaryPanelLayout-fG8BuYv-.js.gz +0 -0
- package/app/dist/assets/ServerMoveOverlayView-CPWZimVv.js.br +0 -0
- package/app/dist/assets/ServerMoveOverlayView-CPWZimVv.js.gz +0 -0
- package/app/dist/assets/SettingsSidebar-DxfoXXKW.js.br +0 -0
- package/app/dist/assets/SettingsSidebar-DxfoXXKW.js.gz +0 -0
- package/app/dist/assets/SettingsView-D_DkKpuv.js.br +0 -0
- package/app/dist/assets/SettingsView-D_DkKpuv.js.gz +0 -0
- package/app/dist/assets/SidebarFooterCustomize-VQoenr5y.js.br +0 -0
- package/app/dist/assets/SidebarFooterCustomize-VQoenr5y.js.gz +0 -0
- package/app/dist/assets/SidebarVisibilityCustomize-DUKnlz9Y.js.br +0 -0
- package/app/dist/assets/SidebarVisibilityCustomize-DUKnlz9Y.js.gz +0 -0
- package/app/dist/assets/SourceCodeHost-BlXLvWv2.js.br +0 -0
- package/app/dist/assets/SourceCodeHost-BlXLvWv2.js.gz +0 -0
- package/app/dist/assets/SplitWorkspaceRoute-6w4G23kc.js.br +0 -0
- package/app/dist/assets/SplitWorkspaceRoute-6w4G23kc.js.gz +0 -0
- package/app/dist/assets/TerminalOutputBlock-BxBSWJr_.js.br +0 -0
- package/app/dist/assets/TerminalOutputBlock-BxBSWJr_.js.gz +0 -0
- package/app/dist/assets/ThreadActionsMenu-ChpSKv80.js.br +0 -0
- package/app/dist/assets/ThreadActionsMenu-ChpSKv80.js.gz +0 -0
- package/app/dist/assets/ThreadDetailView-CfH3uWo-.js.br +0 -0
- package/app/dist/assets/ThreadDetailView-CfH3uWo-.js.gz +0 -0
- package/app/dist/assets/ThreadSearchPaletteMode-B72v3f5V.js.br +0 -0
- package/app/dist/assets/ThreadSearchPaletteMode-B72v3f5V.js.gz +0 -0
- package/app/dist/assets/ThreadSecondaryPanel-4nIZy4h9.js.br +0 -0
- package/app/dist/assets/ThreadSecondaryPanel-4nIZy4h9.js.gz +0 -0
- package/app/dist/assets/ThreadSecondaryPanelTabContent-8-e35_Me.js.br +0 -0
- package/app/dist/assets/ThreadSecondaryPanelTabContent-8-e35_Me.js.gz +0 -0
- package/app/dist/assets/ThreadStatusGlyph-C9tzRtlV.js.br +0 -0
- package/app/dist/assets/ThreadStatusGlyph-C9tzRtlV.js.gz +0 -0
- package/app/dist/assets/ThreadTerminalPanel-CqTk9L2y.js.br +0 -0
- package/app/dist/assets/ThreadTerminalPanel-CqTk9L2y.js.gz +0 -0
- package/app/dist/assets/ThreadTerminalView-B6XNBrJ9.js.br +0 -0
- package/app/dist/assets/ThreadTerminalView-B6XNBrJ9.js.gz +0 -0
- package/app/dist/assets/ThreadTimelineNavigationContext-DbZHHZfY.js.br +0 -0
- package/app/dist/assets/ThreadTimelineNavigationContext-DbZHHZfY.js.gz +0 -0
- package/app/dist/assets/TimelineDetailScroll-CpFZhWhU.js.br +0 -0
- package/app/dist/assets/TimelineDetailScroll-CpFZhWhU.js.gz +0 -0
- package/app/dist/assets/TimelineFileDiffBlock-JiOlR3O8.js.br +0 -0
- package/app/dist/assets/TimelineFileDiffBlock-JiOlR3O8.js.gz +0 -0
- package/app/dist/assets/TimelineSelectionMenu-DT4qwoFI.js.br +0 -0
- package/app/dist/assets/TimelineSelectionMenu-DT4qwoFI.js.gz +0 -0
- package/app/dist/assets/ToolsView-nAAic88Z.js.br +0 -0
- package/app/dist/assets/ToolsView-nAAic88Z.js.gz +0 -0
- package/app/dist/assets/ToolsViewSplits-Blo3GJMQ.js.br +0 -0
- package/app/dist/assets/ToolsViewSplits-Blo3GJMQ.js.gz +0 -0
- package/app/dist/assets/WaveformVisualizer-BrH_nwc4.js.br +0 -0
- package/app/dist/assets/WaveformVisualizer-BrH_nwc4.js.gz +0 -0
- package/app/dist/assets/app-fixed-tab-navigation-DX9s-gCj.js.br +0 -0
- package/app/dist/assets/app-fixed-tab-navigation-DX9s-gCj.js.gz +0 -0
- package/app/dist/assets/audio-input-device-preference-DsU6GGNE.js.br +0 -0
- package/app/dist/assets/audio-input-device-preference-DsU6GGNE.js.gz +0 -0
- package/app/dist/assets/bottom-anchored-scroll-body-C8n22V_o.js.br +0 -0
- package/app/dist/assets/bottom-anchored-scroll-body-C8n22V_o.js.gz +0 -0
- package/app/dist/assets/browser-url-B0SjaYti.js.br +0 -0
- package/app/dist/assets/browser-url-B0SjaYti.js.gz +0 -0
- package/app/dist/assets/checkbox-Ct38DhHB.js.br +0 -0
- package/app/dist/assets/checkbox-Ct38DhHB.js.gz +0 -0
- package/app/dist/assets/code-loading-skeletons-C_099GEq.js.br +0 -5
- package/app/dist/assets/code-loading-skeletons-C_099GEq.js.gz +0 -0
- package/app/dist/assets/detail-card-Cj628JNK.js.br +0 -0
- package/app/dist/assets/detail-card-Cj628JNK.js.gz +0 -0
- package/app/dist/assets/diff-stats-tally-MtORWItG.js.br +0 -0
- package/app/dist/assets/diff-stats-tally-MtORWItG.js.gz +0 -0
- package/app/dist/assets/environment-mutations-rP4eROm2.js.br +0 -0
- package/app/dist/assets/environment-mutations-rP4eROm2.js.gz +0 -0
- package/app/dist/assets/environment-workspace-display-O1JRHfbV.js.br +0 -0
- package/app/dist/assets/environment-workspace-display-O1JRHfbV.js.gz +0 -0
- package/app/dist/assets/event-code-block-DqUZCAii.js.br +0 -0
- package/app/dist/assets/event-code-block-DqUZCAii.js.gz +0 -0
- package/app/dist/assets/expandable-text-herJC70e.js.br +0 -0
- package/app/dist/assets/expandable-text-herJC70e.js.gz +0 -0
- package/app/dist/assets/file-path-link-Cni9Azi2.js.br +0 -0
- package/app/dist/assets/file-path-link-Cni9Azi2.js.gz +0 -0
- package/app/dist/assets/host-mutations-Ckc-eVys.js.br +0 -0
- package/app/dist/assets/host-mutations-Ckc-eVys.js.gz +0 -0
- package/app/dist/assets/icon-extended-DDFkslJU.js.br +0 -0
- package/app/dist/assets/icon-extended-DDFkslJU.js.gz +0 -0
- package/app/dist/assets/image-lightbox-BW1bqQJM.js.br +0 -0
- package/app/dist/assets/image-lightbox-BW1bqQJM.js.gz +0 -0
- package/app/dist/assets/index-BBxUiLNy.js +0 -395
- package/app/dist/assets/index-BBxUiLNy.js.br +0 -0
- package/app/dist/assets/index-BBxUiLNy.js.gz +0 -0
- package/app/dist/assets/inline-rename-editor-wjwfk7v2.js.br +0 -0
- package/app/dist/assets/inline-rename-editor-wjwfk7v2.js.gz +0 -0
- package/app/dist/assets/launcherRow-rIW7Z6Xm.js.br +0 -0
- package/app/dist/assets/launcherRow-rIW7Z6Xm.js.gz +0 -0
- package/app/dist/assets/localhost-link-rewrite-description-Bovg3W--.js.br +0 -0
- package/app/dist/assets/localhost-link-rewrite-description-Bovg3W--.js.gz +0 -0
- package/app/dist/assets/machine-provider-queries-CRlWTEz7.js.br +0 -0
- package/app/dist/assets/machine-provider-queries-CRlWTEz7.js.gz +0 -0
- package/app/dist/assets/markdown-html-B-Kyh3zI.js.br +0 -0
- package/app/dist/assets/markdown-html-B-Kyh3zI.js.gz +0 -0
- package/app/dist/assets/markdown-local-file-link-C89PR8d5.js.br +0 -0
- package/app/dist/assets/markdown-local-file-link-C89PR8d5.js.gz +0 -0
- package/app/dist/assets/markdown-preview-B7BmqIlu.js.br +0 -0
- package/app/dist/assets/markdown-preview-B7BmqIlu.js.gz +0 -0
- package/app/dist/assets/markdown-prompt-mentions-B0JRhgrI.js.br +0 -0
- package/app/dist/assets/markdown-prompt-mentions-B0JRhgrI.js.gz +0 -0
- package/app/dist/assets/model-load-error-message-B-HKqgUD.js.br +0 -0
- package/app/dist/assets/model-load-error-message-B-HKqgUD.js.gz +0 -0
- package/app/dist/assets/onboarding-telemetry-C21cbjI_.js +0 -1
- package/app/dist/assets/open-in-editor-button-CQGreiCk.js.br +0 -0
- package/app/dist/assets/open-in-editor-button-CQGreiCk.js.gz +0 -0
- package/app/dist/assets/page-shell-BHTOdeQn.js.br +0 -0
- package/app/dist/assets/page-shell-BHTOdeQn.js.gz +0 -0
- package/app/dist/assets/pierre-worker-pool-Bm9cLA-c.js.br +0 -0
- package/app/dist/assets/pierre-worker-pool-Bm9cLA-c.js.gz +0 -0
- package/app/dist/assets/plugin-detail-navigation-CmSGTNyL.js.br +0 -0
- package/app/dist/assets/plugin-detail-navigation-CmSGTNyL.js.gz +0 -0
- package/app/dist/assets/plugin-frontend-BdQdYbWd.js.br +0 -0
- package/app/dist/assets/plugin-frontend-BdQdYbWd.js.gz +0 -0
- package/app/dist/assets/plugin-ui-DyNDyPD9.js.br +0 -0
- package/app/dist/assets/plugin-ui-DyNDyPD9.js.gz +0 -0
- package/app/dist/assets/queued-editor-typeahead-layout-BKui5z7C.js.br +0 -0
- package/app/dist/assets/queued-editor-typeahead-layout-BKui5z7C.js.gz +0 -0
- package/app/dist/assets/queued-messages-layout-BuEilXwP.js.br +0 -0
- package/app/dist/assets/queued-messages-layout-BuEilXwP.js.gz +0 -0
- package/app/dist/assets/resource-list-B6MkAu8v.js.br +0 -0
- package/app/dist/assets/resource-list-B6MkAu8v.js.gz +0 -0
- package/app/dist/assets/root-compose-create-preference-DDv947dq.js +0 -1
- package/app/dist/assets/settings-nav-DbICcozy.js.br +0 -0
- package/app/dist/assets/settings-nav-DbICcozy.js.gz +0 -0
- package/app/dist/assets/settings-sections-Cq0VX9E8.js.br +0 -0
- package/app/dist/assets/settings-sections-Cq0VX9E8.js.gz +0 -0
- package/app/dist/assets/sidebarTouchSensor-D7jKXrfM.js.br +0 -0
- package/app/dist/assets/sidebarTouchSensor-D7jKXrfM.js.gz +0 -0
- package/app/dist/assets/switch-CzvlSesf.js.br +0 -0
- package/app/dist/assets/switch-CzvlSesf.js.gz +0 -0
- package/app/dist/assets/thread-event-parser-BqVpKC6z.js.br +0 -0
- package/app/dist/assets/thread-event-parser-BqVpKC6z.js.gz +0 -0
- package/app/dist/assets/thread-panel-queries-C3MI4mdc.js.br +0 -0
- package/app/dist/assets/thread-panel-queries-C3MI4mdc.js.gz +0 -0
- package/app/dist/assets/thread-runtime-mutations-Cr1H7KSz.js.br +0 -0
- package/app/dist/assets/thread-runtime-mutations-Cr1H7KSz.js.gz +0 -0
- package/app/dist/assets/thread-terminal-queries-B4JkOWS2.js.br +0 -0
- package/app/dist/assets/thread-terminal-queries-B4JkOWS2.js.gz +0 -0
- package/app/dist/assets/threadRecentItems-DI2mgj7S.js.br +0 -0
- package/app/dist/assets/threadRecentItems-DI2mgj7S.js.gz +0 -0
- package/app/dist/assets/threadWorkspaceOpenPath-BQgtUYL5.js.br +0 -0
- package/app/dist/assets/threadWorkspaceOpenPath-BQgtUYL5.js.gz +0 -0
- package/app/dist/assets/title-bar-scroll-fade-CxbgbTcm.js.br +0 -0
- package/app/dist/assets/title-bar-scroll-fade-CxbgbTcm.js.gz +0 -0
- package/app/dist/assets/use-hover-popover-CyIdak3c.js.br +0 -0
- package/app/dist/assets/use-hover-popover-CyIdak3c.js.gz +0 -0
- package/app/dist/assets/useElementWidth-CL3Nb-eq.js.br +0 -0
- package/app/dist/assets/useElementWidth-CL3Nb-eq.js.gz +0 -0
- package/app/dist/assets/useLocalOpenTargets-yzd9-Ceh.js.br +0 -0
- package/app/dist/assets/useLocalOpenTargets-yzd9-Ceh.js.gz +0 -0
- package/app/dist/assets/usePanelResizeSnap-dys9IwEk.js.br +0 -0
- package/app/dist/assets/usePanelResizeSnap-dys9IwEk.js.gz +0 -0
- package/app/dist/assets/usePanelTerminals-BN8UCJFO.js.br +0 -0
- package/app/dist/assets/usePanelTerminals-BN8UCJFO.js.gz +0 -0
- package/app/dist/assets/usePathSuggestions-DkeFAE7l.js.br +0 -0
- package/app/dist/assets/usePathSuggestions-DkeFAE7l.js.gz +0 -0
- package/app/dist/assets/useResolvedLiveFileTarget-43fAKgDx.js.br +0 -0
- package/app/dist/assets/useResolvedLiveFileTarget-43fAKgDx.js.gz +0 -0
- package/app/dist/assets/useThreadTerminalController-DcWLbe8W.js.br +0 -0
- package/app/dist/assets/useThreadTerminalController-DcWLbe8W.js.gz +0 -0
- package/app/dist/assets/workspace-change-summary-Bd3p-LXz.js.br +0 -0
- package/app/dist/assets/workspace-change-summary-Bd3p-LXz.js.gz +0 -0
- package/app/dist/assets/workspace-checkout-display-DMp28yCr.js.br +0 -0
- package/app/dist/assets/workspace-checkout-display-DMp28yCr.js.gz +0 -0
- package/host-daemon/dist/bb-chunks/chunk-CLMP7PJ2.js +0 -2
- package/host-daemon/dist/bb-chunks/chunk-SDZLOCRA.js +0 -2186
- package/host-daemon/dist/bb-chunks/project-J3U36Y4U.js +0 -2
- package/host-daemon/dist/bb-chunks/thread-event-parser-VC3WTCLZ.js +0 -2
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire as __createRequire } from "node:module";import { dirname as __pathDirname } from "node:path";import { fileURLToPath as __fileURLToPath } from "node:url";const require = __createRequire(import.meta.url);const __filename = __fileURLToPath(import.meta.url);const __dirname = __pathDirname(__filename);
|
|
2
|
-
import{c as I,d as y}from"./chunk-YTRZBZRZ.js";import{c as E,f as B}from"./chunk-ATDR5E2C.js";import{c as R,d as N}from"./chunk-XSBF3HQR.js";import{a as c,i as w,j as d}from"./chunk-ZWBRH7R6.js";import{c as C}from"./chunk-NCQMSH7M.js";import"./chunk-WWZ7D6EQ.js";import{b as l}from"./chunk-7EOZF4HA.js";import{F as S,I as k,U as P}from"./chunk-SDZLOCRA.js";import"./chunk-QE47NRKX.js";import{a as O}from"./chunk-5ZMA4MIX.js";import"./chunk-ZT24MY2V.js";import{j as $}from"./chunk-REEBSQ75.js";import"./chunk-E7J2DJY7.js";import"./chunk-7LJFYNRQ.js";import"./chunk-5PWLIQO6.js";import{Buffer as p}from"node:buffer";var M=80,W=24,v=124;function Te(e,t){let n=e.command("terminal").description("Manage terminal sessions across threads, environments, and machines");J(n.command("list").description("List terminal sessions in exactly one scope").option("--json","Print machine-readable JSON output")).action(d(async o=>{let r=await l(t()).terminals.list({scope:await L(o,t())});c(o,r)||G(r.sessions)})),J(n.command("create [command...]").alias("start").description("Create a terminal session in exactly one scope").option("--title <title>","Terminal title").option("--id <terminal-id>","Create the terminal with this ID (term_ plus 10 characters); fails if the ID exists").option("--command <command>","Command to run instead of an interactive shell").option("--cols <n>","Initial terminal columns").option("--rows <n>","Initial terminal rows").option("--attach","Attach after creating").option("--json","Print machine-readable JSON output")).action(d(async(o,i)=>{let r=l(t()),s=Y({commandOption:i.command,commandParts:o}),a=await r.terminals.create({cols:_(i.cols,M,"--cols"),id:i.id,rows:_(i.rows,W,"--rows"),scope:await H(i,t()),title:i.title,start:s});c(i,a)||(console.log(`Created terminal ${a.id} (${a.title})`),i.attach&&await q({baseUrl:t(),terminalId:a.id}))})),n.command("show <terminalId>").description("Show a terminal session").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let r=await l(t()).terminals.get({terminalId:o});c(i,r)||console.log(JSON.stringify(r,null,2))})),n.command("attach <terminalId>").description("Attach to a running terminal session").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{if(i.json){let r=await l(t()).terminals.get({terminalId:o});c(i,r);return}await q({baseUrl:t(),terminalId:o})})),n.command("send <terminalId>").description("Send input to a terminal session").option("--text <text>","Text to send").option("--stdin","Read bytes from stdin").option("--enter","Press Enter after the text").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let r=await Z(i),s=l(t()),a=null;for(let m of D(r))a=await s.terminals.input({terminalId:o,dataBase64:m.toString("base64")});if(a===null)throw new w("Terminal input cannot be empty",1);c(i,a)||console.log(`Sent input to terminal ${o}`)})),n.command("resize <terminalId>").description("Resize a terminal session").requiredOption("--cols <n>","Terminal columns").requiredOption("--rows <n>","Terminal rows").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let s=await l(t()).terminals.resize({terminalId:o,cols:T(i.cols,"--cols"),rows:T(i.rows,"--rows")});c(i,s)||console.log(`Resized terminal ${o} to ${s.cols}x${s.rows}`)})),n.command("output <terminalId>").alias("read").description("Print terminal output from daemon scrollback").option("--since-seq <n>","Only output chunks from this sequence").option("--tail-bytes <n>","Bound output to the latest N bytes").option("--limit-chunks <n>","Bound output to the latest N chunks").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let s=await l(t()).terminals.output({terminalId:o,...j(i)});c(i,s)||(K(s.chunks),s.status==="exited"&&console.error(g(o,s.exitCode)))})),n.command("wait <terminalId>").description("Wait for terminal output or exit").option("--contains <text>","Wait until output contains text").option("--regex <pattern>","Wait until output matches a regular expression").option("--exit","Wait until the terminal exits").option("--from-start","Include existing scrollback from sequence 0").option("--timeout <duration>",`Timeout as ${I("s")}`,"30s").option("--poll-interval <duration>",`Polling interval as ${I("ms")}`,"500ms").option("--tail-bytes <n>","Bound each output poll to N bytes").option("--limit-chunks <n>","Bound each output poll to N chunks").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let r=await ie({baseUrl:t(),opts:i,terminalId:o});c(i,r)||console.log(r.matched==="exit"?g(o,r.exitCode):`Terminal ${o} matched ${r.matched}`)})),n.command("rename <terminalId> <title>").description("Rename a terminal session").option("--json","Print machine-readable JSON output").action(d(async(o,i,r)=>{let s=await l(t()).terminals.rename({terminalId:o,title:i});c(r,s)||console.log(`Renamed terminal ${o} to ${s.title}`)})),n.command("restart <terminalId>").description("Replace a terminal with a shell in the same scope").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let r=await l(t()).terminals.restart({terminalId:o});c(i,r)||console.log(`Restarted terminal ${o} as ${r.id}`)})),n.command("close <terminalId>").alias("stop").description("Close a terminal session").option("--if-clean","Only close if no user input was sent").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let r=await l(t()).terminals.close({terminalId:o,mode:i.ifClean?"if-clean":"force"});c(i,r)||console.log(`Closed terminal ${o}`)}));for(let o of n.commands)o.registeredArguments.some(r=>r.name()==="terminalId")&&F(o)}function F(e){for(let t of["--thread <id>","--environment <id>","--machine <id-or-name>","--host <id-or-name>"])e.addOption(new C(t).hideHelp())}function J(e){return e.option("--thread <id>","Thread-scoped terminal").option("--environment <id>","Environment-scoped terminal").option("--machine <id-or-name>","Machine-scoped terminal").option("--host <id-or-name>","Alias for --machine").option("--cwd <path>","Working directory for --machine or --host")}async function L(e,t){let n=U(e);if(X({environment:e.environment,machine:n,thread:e.thread}),e.cwd!==void 0&&n===void 0)throw new Error("--cwd can only be used with --machine or --host.");return e.thread!==void 0?{kind:"thread",threadId:e.thread}:e.environment!==void 0?{kind:"environment",environmentId:e.environment}:{kind:"host_path",hostId:await B({serverUrl:t,target:n??""}),...e.cwd===void 0?{}:{cwd:e.cwd}}}async function H(e,t){let n=await L(e,t);return n.kind!=="host_path"?n:{...n,cwd:n.cwd??null}}function U(e){return E({machine:e.machine,host:e.host})}function X(e){let t=[e.thread,e.environment,e.machine].filter(n=>n!==void 0).length;if(t!==1)throw new O({code:t===0?"missing_required":"invalid_value",hint:t===0?$():null,message:"Provide exactly one terminal scope: --thread, --environment, or --machine/--host."})}function Y(e){if(e.commandOption!==void 0&&e.commandParts.length>0)throw new Error("Provide either --command or positional command args, not both");if(e.commandOption!==void 0){let t=e.commandOption.trim();if(t.length===0)throw new Error("--command must not be empty");return{mode:"command",command:t}}return e.commandParts.length>0?{mode:"argv",argv:[...e.commandParts]}:{mode:"shell"}}function _(e,t,n){return e===void 0?t:T(e,n)}function T(e,t){let n=Number.parseInt(e,10);if(!Number.isFinite(n)||n<=0||String(n)!==e)throw new Error(`${t} must be a positive integer`);return n}async function Z(e,t=process.stdin){if(e.text!==void 0&&e.stdin)throw new Error("Provide only one of --text or --stdin");if(e.text===void 0&&!e.stdin)throw new Error("Provide one of --text or --stdin");let n=e.text!==void 0?p.from(e.text,"utf8"):await new Promise((o,i)=>{let r=[];t.on("data",s=>r.push(s)),t.on("error",i),t.on("end",()=>o(p.concat(r)))});return e.enter?p.concat([n,p.from("\r","utf8")]):n}function j(e){return{...e.sinceSeq!==void 0?{sinceSeq:Q(e.sinceSeq,"--since-seq")}:{},...e.tailBytes!==void 0?{tailBytes:T(e.tailBytes,"--tail-bytes")}:{},...e.limitChunks!==void 0?{limitChunks:T(e.limitChunks,"--limit-chunks")}:{}}}function Q(e,t){let n=Number.parseInt(e,10);if(!Number.isFinite(n)||n<0||String(n)!==e)throw new Error(`${t} must be a non-negative integer`);return n}function G(e){if(e.length===0){console.log("No terminal sessions found");return}let t=e.map(n=>[n.id,n.title,n.status,`${n.cols}x${n.rows}`]);R({head:["ID","Title","Status","Size"],colWidths:N(t,[12,24,14,10])},t)}function K(e){for(let t of e)process.stdout.write(p.from(t.dataBase64,"base64"))}function V(e){let t=new URL(e.baseUrl);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.pathname=`${t.pathname.replace(/\/+$/u,"")}/ws/terminals/${encodeURIComponent(e.terminalId)}`,t.search="",t.hash="",t.href}async function q(e){if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("Attach requires an interactive terminal");let t=P()(V({baseUrl:e.baseUrl,terminalId:e.terminalId})),n=!1,o=process.stdin.isRaw,i=s=>{if(s.length===1&&s[0]===2){n=!0;return}if(n){if(n=!1,s.length===1&&s[0]===100){t.close();return}A(t,p.from([2]))}A(t,s)},r=()=>{t.send(JSON.stringify({type:"resize",cols:process.stdout.columns||M,rows:process.stdout.rows||W}))};await new Promise((s,a)=>{t.onopen=()=>{process.stdin.setRawMode(!0),process.stdin.resume(),r()},t.onerror=()=>a(new Error("Terminal websocket failed")),t.onclose=()=>s(),t.onmessage=m=>{let h=k.parse(JSON.parse(String(m.data)));switch(h.type){case"attached":case"pong":case"session-updated":return;case"output":process.stdout.write(p.from(h.chunk.dataBase64,"base64"));return;case"exited":t.close();return;case"error":a(new Error(h.message));return}},process.stdin.on("data",i),process.stdout.on("resize",r)}).finally(()=>{process.stdin.off("data",i),process.stdout.off("resize",r),process.stdin.setRawMode(o),process.stdin.pause()})}function D(e){let t=[];for(let n=0;n<e.byteLength;n+=S)t.push(e.subarray(n,Math.min(n+S,e.byteLength)));return t}function A(e,t){for(let n of D(t))e.send(JSON.stringify({type:"input",dataBase64:n.toString("base64")}))}var ee=256*1024,te=2e3;function g(e,t){return t===null?`Terminal ${e} exited`:`Terminal ${e} exited with code ${t}`}function ne(e){return e.map(t=>p.from(t.dataBase64,"base64").toString("utf8")).join("")}async function ie(e){let t=e.opts.contains!==void 0,n=e.opts.regex!==void 0,o=e.opts.exit===!0;if([t,n,o].filter(Boolean).length!==1)throw new O({code:"missing_required",hint:`For example: bb terminal wait ${e.terminalId} --exit, or --contains "ready".`,message:"Provide exactly one of --contains, --regex, or --exit"});let i=l(e.baseUrl),r=y({allowZero:!1,defaultUnit:"s",label:"--timeout",value:e.opts.timeout??"30s"}),s=y({allowZero:!1,defaultUnit:"ms",label:"--poll-interval",value:e.opts.pollInterval??"500ms"}),a=Date.now()+r,m=e.opts.fromStart?0:void 0,h=e.opts.regex===void 0?null:new RegExp(e.opts.regex,"u");if(!o&&m===void 0){let u=await i.terminals.output({terminalId:e.terminalId,limitChunks:1,tailBytes:1});if(u.status==="exited")throw new w(`${g(e.terminalId,u.exitCode)} before this wait started, so no new output will arrive.`,v,{code:"terminal_exited",hint:`Match its existing output with --from-start, or read it with \`bb terminal output ${e.terminalId}\`.`});m=u.nextSeq}let b="";for(;Date.now()<=a;){if(o){let f=await i.terminals.get({terminalId:e.terminalId});if(f.status==="exited")return{exitCode:f.exitCode,matched:"exit",nextSeq:m??0,terminalId:e.terminalId};await new Promise(z=>setTimeout(z,s));continue}let u=await i.terminals.output({terminalId:e.terminalId,...j(e.opts),...m!==void 0?{sinceSeq:m}:{}});m=u.nextSeq;let x=`${b}${ne(u.chunks)}`;if(b=x.slice(-ee),e.opts.contains!==void 0&&x.includes(e.opts.contains))return{exitCode:u.exitCode,matched:e.opts.contains,nextSeq:m,terminalId:e.terminalId};if(h&&h.test(x))return{exitCode:u.exitCode,matched:e.opts.regex??"",nextSeq:m,terminalId:e.terminalId};if(u.status==="exited"){let f=b.slice(-te).trimEnd();throw new w(`${g(e.terminalId,u.exitCode)} before the requested output matched`,v,{code:"terminal_exited",hint:f.length===0?`It printed nothing after this wait started. Read everything with \`bb terminal output ${e.terminalId}\`.`:`Last output:
|
|
2
|
+
import{c as I,d as y}from"./chunk-YTRZBZRZ.js";import{c as E,f as B}from"./chunk-CZ4K4Z4T.js";import{c as R,d as N}from"./chunk-XSBF3HQR.js";import{a as c,i as w,j as d}from"./chunk-DCRUVPRR.js";import{c as C}from"./chunk-NCQMSH7M.js";import"./chunk-WWZ7D6EQ.js";import{b as l}from"./chunk-F7XCHQA3.js";import{F as S,I as k,U as P}from"./chunk-HDUE2YKX.js";import"./chunk-NZY63D4X.js";import{a as O}from"./chunk-FZ76WJJG.js";import"./chunk-ZT24MY2V.js";import{j as $}from"./chunk-L5UJ4QUD.js";import"./chunk-E7J2DJY7.js";import"./chunk-7LJFYNRQ.js";import"./chunk-5PWLIQO6.js";import{Buffer as p}from"node:buffer";var M=80,W=24,v=124;function Te(e,t){let n=e.command("terminal").description("Manage terminal sessions across threads, environments, and machines");J(n.command("list").description("List terminal sessions in exactly one scope").option("--json","Print machine-readable JSON output")).action(d(async o=>{let r=await l(t()).terminals.list({scope:await L(o,t())});c(o,r)||G(r.sessions)})),J(n.command("create [command...]").alias("start").description("Create a terminal session in exactly one scope").option("--title <title>","Terminal title").option("--id <terminal-id>","Create the terminal with this ID (term_ plus 10 characters); fails if the ID exists").option("--command <command>","Command to run instead of an interactive shell").option("--cols <n>","Initial terminal columns").option("--rows <n>","Initial terminal rows").option("--attach","Attach after creating").option("--json","Print machine-readable JSON output")).action(d(async(o,i)=>{let r=l(t()),s=Y({commandOption:i.command,commandParts:o}),a=await r.terminals.create({cols:_(i.cols,M,"--cols"),id:i.id,rows:_(i.rows,W,"--rows"),scope:await H(i,t()),title:i.title,start:s});c(i,a)||(console.log(`Created terminal ${a.id} (${a.title})`),i.attach&&await q({baseUrl:t(),terminalId:a.id}))})),n.command("show <terminalId>").description("Show a terminal session").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let r=await l(t()).terminals.get({terminalId:o});c(i,r)||console.log(JSON.stringify(r,null,2))})),n.command("attach <terminalId>").description("Attach to a running terminal session").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{if(i.json){let r=await l(t()).terminals.get({terminalId:o});c(i,r);return}await q({baseUrl:t(),terminalId:o})})),n.command("send <terminalId>").description("Send input to a terminal session").option("--text <text>","Text to send").option("--stdin","Read bytes from stdin").option("--enter","Press Enter after the text").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let r=await Z(i),s=l(t()),a=null;for(let m of D(r))a=await s.terminals.input({terminalId:o,dataBase64:m.toString("base64")});if(a===null)throw new w("Terminal input cannot be empty",1);c(i,a)||console.log(`Sent input to terminal ${o}`)})),n.command("resize <terminalId>").description("Resize a terminal session").requiredOption("--cols <n>","Terminal columns").requiredOption("--rows <n>","Terminal rows").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let s=await l(t()).terminals.resize({terminalId:o,cols:T(i.cols,"--cols"),rows:T(i.rows,"--rows")});c(i,s)||console.log(`Resized terminal ${o} to ${s.cols}x${s.rows}`)})),n.command("output <terminalId>").alias("read").description("Print terminal output from daemon scrollback").option("--since-seq <n>","Only output chunks from this sequence").option("--tail-bytes <n>","Bound output to the latest N bytes").option("--limit-chunks <n>","Bound output to the latest N chunks").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let s=await l(t()).terminals.output({terminalId:o,...j(i)});c(i,s)||(K(s.chunks),s.status==="exited"&&console.error(g(o,s.exitCode)))})),n.command("wait <terminalId>").description("Wait for terminal output or exit").option("--contains <text>","Wait until output contains text").option("--regex <pattern>","Wait until output matches a regular expression").option("--exit","Wait until the terminal exits").option("--from-start","Include existing scrollback from sequence 0").option("--timeout <duration>",`Timeout as ${I("s")}`,"30s").option("--poll-interval <duration>",`Polling interval as ${I("ms")}`,"500ms").option("--tail-bytes <n>","Bound each output poll to N bytes").option("--limit-chunks <n>","Bound each output poll to N chunks").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let r=await ie({baseUrl:t(),opts:i,terminalId:o});c(i,r)||console.log(r.matched==="exit"?g(o,r.exitCode):`Terminal ${o} matched ${r.matched}`)})),n.command("rename <terminalId> <title>").description("Rename a terminal session").option("--json","Print machine-readable JSON output").action(d(async(o,i,r)=>{let s=await l(t()).terminals.rename({terminalId:o,title:i});c(r,s)||console.log(`Renamed terminal ${o} to ${s.title}`)})),n.command("restart <terminalId>").description("Replace a terminal with a shell in the same scope").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let r=await l(t()).terminals.restart({terminalId:o});c(i,r)||console.log(`Restarted terminal ${o} as ${r.id}`)})),n.command("close <terminalId>").alias("stop").description("Close a terminal session").option("--if-clean","Only close if no user input was sent").option("--json","Print machine-readable JSON output").action(d(async(o,i)=>{let r=await l(t()).terminals.close({terminalId:o,mode:i.ifClean?"if-clean":"force"});c(i,r)||console.log(`Closed terminal ${o}`)}));for(let o of n.commands)o.registeredArguments.some(r=>r.name()==="terminalId")&&F(o)}function F(e){for(let t of["--thread <id>","--environment <id>","--machine <id-or-name>","--host <id-or-name>"])e.addOption(new C(t).hideHelp())}function J(e){return e.option("--thread <id>","Thread-scoped terminal").option("--environment <id>","Environment-scoped terminal").option("--machine <id-or-name>","Machine-scoped terminal").option("--host <id-or-name>","Alias for --machine").option("--cwd <path>","Working directory for --machine or --host")}async function L(e,t){let n=U(e);if(X({environment:e.environment,machine:n,thread:e.thread}),e.cwd!==void 0&&n===void 0)throw new Error("--cwd can only be used with --machine or --host.");return e.thread!==void 0?{kind:"thread",threadId:e.thread}:e.environment!==void 0?{kind:"environment",environmentId:e.environment}:{kind:"host_path",hostId:await B({serverUrl:t,target:n??""}),...e.cwd===void 0?{}:{cwd:e.cwd}}}async function H(e,t){let n=await L(e,t);return n.kind!=="host_path"?n:{...n,cwd:n.cwd??null}}function U(e){return E({machine:e.machine,host:e.host})}function X(e){let t=[e.thread,e.environment,e.machine].filter(n=>n!==void 0).length;if(t!==1)throw new O({code:t===0?"missing_required":"invalid_value",hint:t===0?$():null,message:"Provide exactly one terminal scope: --thread, --environment, or --machine/--host."})}function Y(e){if(e.commandOption!==void 0&&e.commandParts.length>0)throw new Error("Provide either --command or positional command args, not both");if(e.commandOption!==void 0){let t=e.commandOption.trim();if(t.length===0)throw new Error("--command must not be empty");return{mode:"command",command:t}}return e.commandParts.length>0?{mode:"argv",argv:[...e.commandParts]}:{mode:"shell"}}function _(e,t,n){return e===void 0?t:T(e,n)}function T(e,t){let n=Number.parseInt(e,10);if(!Number.isFinite(n)||n<=0||String(n)!==e)throw new Error(`${t} must be a positive integer`);return n}async function Z(e,t=process.stdin){if(e.text!==void 0&&e.stdin)throw new Error("Provide only one of --text or --stdin");if(e.text===void 0&&!e.stdin)throw new Error("Provide one of --text or --stdin");let n=e.text!==void 0?p.from(e.text,"utf8"):await new Promise((o,i)=>{let r=[];t.on("data",s=>r.push(s)),t.on("error",i),t.on("end",()=>o(p.concat(r)))});return e.enter?p.concat([n,p.from("\r","utf8")]):n}function j(e){return{...e.sinceSeq!==void 0?{sinceSeq:Q(e.sinceSeq,"--since-seq")}:{},...e.tailBytes!==void 0?{tailBytes:T(e.tailBytes,"--tail-bytes")}:{},...e.limitChunks!==void 0?{limitChunks:T(e.limitChunks,"--limit-chunks")}:{}}}function Q(e,t){let n=Number.parseInt(e,10);if(!Number.isFinite(n)||n<0||String(n)!==e)throw new Error(`${t} must be a non-negative integer`);return n}function G(e){if(e.length===0){console.log("No terminal sessions found");return}let t=e.map(n=>[n.id,n.title,n.status,`${n.cols}x${n.rows}`]);R({head:["ID","Title","Status","Size"],colWidths:N(t,[12,24,14,10])},t)}function K(e){for(let t of e)process.stdout.write(p.from(t.dataBase64,"base64"))}function V(e){let t=new URL(e.baseUrl);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.pathname=`${t.pathname.replace(/\/+$/u,"")}/ws/terminals/${encodeURIComponent(e.terminalId)}`,t.search="",t.hash="",t.href}async function q(e){if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("Attach requires an interactive terminal");let t=P()(V({baseUrl:e.baseUrl,terminalId:e.terminalId})),n=!1,o=process.stdin.isRaw,i=s=>{if(s.length===1&&s[0]===2){n=!0;return}if(n){if(n=!1,s.length===1&&s[0]===100){t.close();return}A(t,p.from([2]))}A(t,s)},r=()=>{t.send(JSON.stringify({type:"resize",cols:process.stdout.columns||M,rows:process.stdout.rows||W}))};await new Promise((s,a)=>{t.onopen=()=>{process.stdin.setRawMode(!0),process.stdin.resume(),r()},t.onerror=()=>a(new Error("Terminal websocket failed")),t.onclose=()=>s(),t.onmessage=m=>{let h=k.parse(JSON.parse(String(m.data)));switch(h.type){case"attached":case"pong":case"session-updated":return;case"output":process.stdout.write(p.from(h.chunk.dataBase64,"base64"));return;case"exited":t.close();return;case"error":a(new Error(h.message));return}},process.stdin.on("data",i),process.stdout.on("resize",r)}).finally(()=>{process.stdin.off("data",i),process.stdout.off("resize",r),process.stdin.setRawMode(o),process.stdin.pause()})}function D(e){let t=[];for(let n=0;n<e.byteLength;n+=S)t.push(e.subarray(n,Math.min(n+S,e.byteLength)));return t}function A(e,t){for(let n of D(t))e.send(JSON.stringify({type:"input",dataBase64:n.toString("base64")}))}var ee=256*1024,te=2e3;function g(e,t){return t===null?`Terminal ${e} exited`:`Terminal ${e} exited with code ${t}`}function ne(e){return e.map(t=>p.from(t.dataBase64,"base64").toString("utf8")).join("")}async function ie(e){let t=e.opts.contains!==void 0,n=e.opts.regex!==void 0,o=e.opts.exit===!0;if([t,n,o].filter(Boolean).length!==1)throw new O({code:"missing_required",hint:`For example: bb terminal wait ${e.terminalId} --exit, or --contains "ready".`,message:"Provide exactly one of --contains, --regex, or --exit"});let i=l(e.baseUrl),r=y({allowZero:!1,defaultUnit:"s",label:"--timeout",value:e.opts.timeout??"30s"}),s=y({allowZero:!1,defaultUnit:"ms",label:"--poll-interval",value:e.opts.pollInterval??"500ms"}),a=Date.now()+r,m=e.opts.fromStart?0:void 0,h=e.opts.regex===void 0?null:new RegExp(e.opts.regex,"u");if(!o&&m===void 0){let u=await i.terminals.output({terminalId:e.terminalId,limitChunks:1,tailBytes:1});if(u.status==="exited")throw new w(`${g(e.terminalId,u.exitCode)} before this wait started, so no new output will arrive.`,v,{code:"terminal_exited",hint:`Match its existing output with --from-start, or read it with \`bb terminal output ${e.terminalId}\`.`});m=u.nextSeq}let b="";for(;Date.now()<=a;){if(o){let f=await i.terminals.get({terminalId:e.terminalId});if(f.status==="exited")return{exitCode:f.exitCode,matched:"exit",nextSeq:m??0,terminalId:e.terminalId};await new Promise(z=>setTimeout(z,s));continue}let u=await i.terminals.output({terminalId:e.terminalId,...j(e.opts),...m!==void 0?{sinceSeq:m}:{}});m=u.nextSeq;let x=`${b}${ne(u.chunks)}`;if(b=x.slice(-ee),e.opts.contains!==void 0&&x.includes(e.opts.contains))return{exitCode:u.exitCode,matched:e.opts.contains,nextSeq:m,terminalId:e.terminalId};if(h&&h.test(x))return{exitCode:u.exitCode,matched:e.opts.regex??"",nextSeq:m,terminalId:e.terminalId};if(u.status==="exited"){let f=b.slice(-te).trimEnd();throw new w(`${g(e.terminalId,u.exitCode)} before the requested output matched`,v,{code:"terminal_exited",hint:f.length===0?`It printed nothing after this wait started. Read everything with \`bb terminal output ${e.terminalId}\`.`:`Last output:
|
|
3
3
|
${f}`})}await new Promise(f=>setTimeout(f,s))}throw new w(`Timed out waiting for terminal ${e.terminalId}`,v,{code:"timeout",hint:`Read what it has printed so far with \`bb terminal output ${e.terminalId} --tail-bytes 4000\`.`})}export{Te as registerTerminalCommands,Z as resolveSendData};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire as __createRequire } from "node:module";import { dirname as __pathDirname } from "node:path";import { fileURLToPath as __fileURLToPath } from "node:url";const require = __createRequire(import.meta.url);const __filename = __fileURLToPath(import.meta.url);const __dirname = __pathDirname(__filename);
|
|
2
|
-
import{a as m,j as d}from"./chunk-
|
|
2
|
+
import{a as m,j as d}from"./chunk-DCRUVPRR.js";import"./chunk-NCQMSH7M.js";import"./chunk-WWZ7D6EQ.js";import{b as r}from"./chunk-F7XCHQA3.js";import{k as h,l as g,m as p,n as v,o as C,p as O}from"./chunk-HDUE2YKX.js";import"./chunk-NZY63D4X.js";import"./chunk-FZ76WJJG.js";import"./chunk-ZT24MY2V.js";import"./chunk-L5UJ4QUD.js";import"./chunk-E7J2DJY7.js";import"./chunk-7LJFYNRQ.js";import"./chunk-5PWLIQO6.js";function $(a){let t=v.safeParse(a);if(!t.success)throw new Error(`Invalid favicon color '${a}'. Expected one of: default, ${p.join(", ")}.`);return t.data}function l(a){if(!g(a.themeId)){let s=a.customCss?.length??0;return`Custom theme '${a.themeId}' (${s} bytes)`}let t=h.find(s=>s.id===a.themeId);return t?`${t.name} (${t.id})`:a.themeId}function w(a){let{dark:t,light:s}=a.resolvedCodeTheme;return t===s?t:`${t} / ${s}`}function I(a,t){let s=a.command("theme").description("Manage the app theme and favicon color");s.command("list").description("List built-in and custom themes and the active palette").option("--json","Print machine-readable JSON output").action(d(async n=>{let o=await r(t()).theme.catalog();if(m(n,{active:o.active,builtInThemes:h,custom:o.custom,plugins:o.plugins,dir:o.dir}))return;let e=o.active.themeId;console.log(""),console.log("Built-in:");for(let c of h){let u=e===c.id?"*":" ";console.log(`${u} ${c.id.padEnd(12)} ${c.description}`)}if(console.log(""),console.log(`Custom (${o.dir}):`),o.custom.length===0)console.log(" (none \u2014 create <name>/theme.css under that directory)");else for(let c of o.custom)console.log(`${e===c?"*":" "} ${c}`);console.log(""),console.log("Plugins:"),o.plugins.length===0&&console.log(" (none)");for(let c of o.plugins){let u=e===c.id?"*":" ";console.log(`${u} ${c.id.padEnd(24)} ${c.name}`)}console.log(""),console.log(`Active: ${l(o.active)}`),console.log(`Favicon color: ${o.active.faviconColor}`),console.log(`Code theme: ${w(o.active)}`)})),s.command("set <id>").description("Switch to a built-in, custom, or plugin-contributed theme by id").option("--favicon-color <color>","Set the favicon color in the same appearance update").option("--json","Print machine-readable JSON output").action(d(async(n,i)=>{let o=r(t()),e=i.faviconColor===void 0?await o.theme.set(n):await o.theme.set({themeId:n,faviconColor:$(i.faviconColor)});m(i,e)||console.log(`Theme set to ${l(e)}`)})),s.command("dir").description("Print the directory where custom themes live").option("--json","Print machine-readable JSON output").action(d(async n=>{let o=await r(t()).theme.catalog();m(n,{dir:o.dir})||console.log(o.dir)}));let f=s.command("favicon").description("Manage the app favicon color without changing the theme");f.command("set <color>").description(`Set the favicon color (${p.join(", ")}, or default)`).option("--json","Print machine-readable JSON output").action(d(async(n,i)=>{let o=r(t()),e=await o.theme.get(),c=await o.theme.set({themeId:e.themeId,faviconColor:$(n)});m(i,c)||console.log(`Favicon color set to ${c.faviconColor}`)})),f.command("reset").description("Reset the favicon color without changing the theme").option("--json","Print machine-readable JSON output").action(d(async n=>{let i=r(t()),o=await i.theme.get(),e=await i.theme.set({themeId:o.themeId,faviconColor:C});m(n,e)||console.log(`Favicon color reset to ${e.faviconColor}`)})),s.command("show [id]").description("Show the active theme, or resolve a theme by id without activating it").option("--css","Print the theme's CSS (custom and plugin themes only)").option("--json","Print machine-readable JSON output").action(d(async(n,i)=>{let o=r(t()),e=n===void 0?await o.theme.get():await o.theme.resolve({themeId:n});if(!m(i,e)){if(i.css){e.customCss!==null?console.log(e.customCss):console.log("// Built-in theme CSS is bundled in the app, not stored on disk.");return}n===void 0?(console.log(`Active: ${l(e)}`),console.log(`Favicon color: ${e.faviconColor}`)):console.log(`Theme: ${l(e)}`),console.log(`Code theme: ${w(e)}`)}})),s.command("reset").description("Reset to the Default theme").option("--json","Print machine-readable JSON output").action(d(async n=>{let o=await r(t()).theme.set(O.themeId);m(n,o)||console.log(`Theme reset to ${l(o)}`)}))}export{I as registerThemeCommands};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __createRequire } from "node:module";import { dirname as __pathDirname } from "node:path";import { fileURLToPath as __fileURLToPath } from "node:url";const require = __createRequire(import.meta.url);const __filename = __fileURLToPath(import.meta.url);const __dirname = __pathDirname(__filename);
|
|
2
|
-
import{a as mt,b as H,c as Ze,d as Ye}from"./chunk-YTRZBZRZ.js";import{a as at,b as lt,c as dt,d as ut}from"./chunk-JWA6VJYL.js";import{a as Xe}from"./chunk-MLYXPSJC.js";import{c as Ie,f as Ce}from"./chunk-ATDR5E2C.js";import{a as ct,c as G,d as ne,e as ue}from"./chunk-XSBF3HQR.js";import{b as Hn}from"./chunk-N3HRBBF4.js";import{a as v,b as A,c as xe,d as Re,e as st,f as de,g as M,h as ze,i as Z,j as f}from"./chunk-ZWBRH7R6.js";import"./chunk-NCQMSH7M.js";import"./chunk-WWZ7D6EQ.js";import{b as g}from"./chunk-7EOZF4HA.js";import{$ as it,B as le,D as Un,E as Kn,H as Gn,J as Jn,K as be,L as Qn,M as zn,N as Xn,O as Zn,Q as Ke,R as Se,S as Yn,T as et,V as Ge,X as nt,Y as Je,Z as tt,_ as Qe,aa as rt,ba as Pe,s as Mn,v as Ln,w as ae,x as ye,y as Wn,z as ee}from"./chunk-SDZLOCRA.js";import{D as Ve,F as Nn,G as jn,H as Fn,J as Bn,L as Vn,M as He,N as Ue,b as ve,f as An,h as $n,l as On,q as _n,r as qn,t as Dn}from"./chunk-QE47NRKX.js";import{a as K,e as W,f as $,g as we,h as w}from"./chunk-5ZMA4MIX.js";import"./chunk-ZT24MY2V.js";import{e as ot}from"./chunk-REEBSQ75.js";import"./chunk-E7J2DJY7.js";import{a as u}from"./chunk-7LJFYNRQ.js";import"./chunk-5PWLIQO6.js";function pt(e,n){e.command("context [id]").description("Show the latest recorded context window usage and available breakdown").option("--self","Use the current thread").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),o=await g(n()).threads.context({threadId:r});if(v(i,o))return;let s=o.usage;if(!s){console.log("Context usage is not available yet.");return}let a=l=>l.toLocaleString("en-US");if(console.log(`${s.estimated?"Estimated context":"Context window"}: ${a(s.usedTokens)} / ${a(s.modelContextWindow)} tokens`),s.cost&&console.log(`Session cost: ${s.cost.amount} ${s.cost.currency}`),!!s.snapshot){console.log(`Captured: ${s.snapshot.capturedAt}`);for(let l of s.snapshot.categories){let m=l.kind==="used"?"":` (${l.kind})`;console.log(`${l.label}${m}: ${a(l.tokens)}`);for(let c of l.entries)console.log(` ${c.label}: ${a(c.tokens)}`)}}}))}function gt(e,n=[]){return[...n,e]}function _i(e){let n={};for(let t of e.set){let i=t.indexOf("="),r=i===-1?"":t.slice(0,i);if(r==="")throw new Error(`Invalid --set '${t}'. Expected <option-id>=<value>.`);let o=t.slice(i+1);if(e.options?.find(a=>a.id===r)?.type==="boolean"){if(o!=="true"&&o!=="false")throw new Error(`Session option '${r}' takes true or false, not '${o}'.`);n[r]=o==="true";continue}n[r]=o}for(let t of e.clear){if(Object.hasOwn(n,t))throw new Error(`Session option '${t}' cannot be both set and cleared.`);n[t]=null}return n}function ft(e){let n={};for(let t of e){let i=t.indexOf("="),r=i===-1?"":t.slice(0,i),o=t.slice(i+1);if(r===""||o==="")throw new Error(`Invalid --option '${t}'. Expected <option-id>=<value>.`);n[r]=o==="true"?!0:o==="false"?!1:o}return n}function qi(e){return e===null||e.length===0?["The agent has not advertised any commands for this thread."]:e.map(n=>{let t=n.argumentHint?` <${n.argumentHint}>`:"",i=n.description?` ${n.description}`:"";return`/${n.name}${t}${i}`})}function Di(e){return e===null||e.length===0?["The agent has not reported any session options for this thread."]:e.flatMap(n=>{let t=n.pendingValue===null?"":` -> ${String(n.pendingValue)} on the next turn`,i=`${n.id} (${n.label}): ${String(n.value)}${t}`;return n.type==="boolean"?[i]:[i,...n.values.map(r=>` ${r.id===n.value?"*":" "} ${r.id}${r.label===r.id?"":` ${r.label}`}`)]})}function ht(e,n){e.command("commands [id]").description("List the slash commands the thread's agent has advertised").option("--self","Use the current thread").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),s=(await g(n()).threads.timeline({threadId:r,summaryOnly:"true"})).providerCommands;if(!v(i,{commands:s}))for(let a of qi(s))console.log(a)})),e.command("options [id]").description("List the session options the thread's agent reports, or choose values applied on the thread's next turn").option("--self","Use the current thread").option("--set <option=value>","Choose a value for an option, applied on the next turn (repeatable)",gt).option("--clear <option>","Drop a choice that has not been applied yet (repeatable)",gt).option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),o=g(n()),s=async()=>(await o.threads.timeline({threadId:r,summaryOnly:"true"})).sessionOptions,a=await s(),l=i.set??[],m=i.clear??[];if((l.length>0||m.length>0)&&(await o.threads.update({threadId:r,sessionOptions:_i({options:a,set:l,clear:m})}),a=await s()),!v(i,{options:a}))for(let c of Di(a))console.log(c)}))}import{randomUUID as Qi}from"node:crypto";import{readFile as Mi}from"node:fs/promises";var N="use - to read stdin. Prefer this for multi-line text: inside double quotes the shell runs `backticks` and $(...) before bb sees them";async function Li(e){let n=[];for await(let t of e)n.push(typeof t=="string"?Buffer.from(t):t);return Buffer.concat(n).toString("utf8")}async function en(e){if(e.file===void 0)return e.inline;if(e.inline!==void 0)throw new K({code:"invalid_value",hint:null,message:`Provide only one of ${e.inlineLabel} or ${e.fileLabel}.`});let n=e.stdin??process.stdin;if(e.file==="-"&&n.isTTY)throw new K({code:"invalid_value",hint:`Pipe the text in, for example: cat prompt.md | bb ... ${e.fileLabel} -`,message:`${e.fileLabel} - reads stdin, but stdin is a terminal.`});let i=(e.file==="-"?await Li(n):await Mi(e.file,"utf8").catch(r=>{throw new K({code:"invalid_value",hint:null,message:`Could not read ${e.fileLabel} '${e.file}': ${r instanceof Error?r.message:String(r)}`})})).replace(/\r?\n+$/u,"");if(i.trim().length===0)throw new K({code:"invalid_value",hint:null,message:`${e.fileLabel} ${e.file==="-"?"stdin":`'${e.file}'`} is empty.`});return i}async function J(e){let n=await en(e);if(n!==void 0)return n;throw new K({code:"missing_required",hint:`Pass ${e.inlineLabel}, or ${e.fileLabel} <path> (use - to read stdin).`,message:`Missing ${e.inlineLabel}.`})}import{readFile as Wi}from"node:fs/promises";import{basename as Ni,isAbsolute as ji,win32 as nn}from"node:path";import{fileURLToPath as Fi}from"node:url";var Tt=2,tn=3,vt=4,yt=Ke/1e3,ke="Service tier id the provider lists for the model, such as default or fast (see `bb provider models`)",te="Permission mode: accept-edits, auto, or full",Ee="Which turn outcomes wake the parent thread: auto (every outcome), stuck (failed, interrupted, or blocked on an approval or question), or off",Ae="Send the message as the provider's /plan action so the agent proposes a plan for approval before executing";function $e(e){return e===void 0?void 0:Wn.parse(e)}function j(e){return[e.plan?On(e.message):{type:"text",text:e.message,mentions:[]},...(e.files??[]).map(n=>({type:"localFile",path:n})),...(e.images??[]).map(n=>({type:"localImage",path:n}))]}function Bi(e){if(ji(e)||nn.isAbsolute(e))return e;if(!e.toLowerCase().startsWith("file:"))return null;try{return Fi(e)}catch{throw new Error(`Invalid client attachment URL '${e}'.`)}}function Vi(e){let n=nn.isAbsolute(e)?nn.basename(e):Ni(e);if(n.length===0)throw new Error(`Attachment path '${e}' has no filename.`);return n}function Hi(e){return e.byteLength>=8&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71&&e[4]===13&&e[5]===10&&e[6]===26&&e[7]===10?"image/png":void 0}async function Ui(e,n){let{default:t}=await import("./mime-types-35XNWBDI.js"),i=t.lookup(e);return typeof i=="string"?i:Hi(n)??"application/octet-stream"}async function U(e){let n=e.input.map(o=>o.type==="localImage"||o.type==="localFile"?Bi(o.path):null);if(n.every(o=>o===null))return e.input;let t=await e.resolveProjectId(),i=new Map,r=o=>{let s=i.get(o);if(s)return s;let a=(async()=>{let l=await Wi(o),m=Vi(o);return(await e.sdk.projects.attachments.upload({clientFile:l,filename:m,mimeType:await Ui(o,l),projectId:t})).path})();return i.set(o,a),a};return Promise.all(e.input.map(async(o,s)=>{let a=n[s];return(o.type==="localImage"||o.type==="localFile")&&a?{...o,path:await r(a)}:o}))}function bt(e){return e===void 0?Ke:Ye({allowZero:!0,defaultUnit:"s",label:"--timeout",value:e})}function St(e){return e===void 0?Se:Ye({allowZero:!1,defaultUnit:"ms",label:"--poll-interval",value:e})}function Oe(e){if(e===void 0)return;let n=An.safeParse(e);if(n.success)return n.data;throw new Error(`Invalid service tier '${e}'. Expected a tier id the provider lists, such as default or fast.`)}function ie(e){if(e===void 0)return;let n=$n.safeParse(e);if(n.success)return n.data;throw new Error(`Invalid permission mode '${e}'. Expected accept-edits, auto, or full.`)}var Ki=/^\d{4}-\d{2}-\d{2}$/,Gi=/^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,3})?)?(Z|[+-]\d{2}:?\d{2})?$/,ce="Dispatch at an ISO 8601 timestamp (2026-08-25T09:00) or a duration from now (30s, 10m, 2h, 7d)";function _e(e,n){return new Error(`Invalid --send-at value '${e}'. ${n} Expected an ISO 8601 timestamp such as 2026-08-25T09:00 or a duration such as 30s, 10m, 2h, or 7d.`)}function me(e,n=Date.now()){let t=e.trim();if(t==="")throw _e(e,"It is empty.");let i=mt(t);if(i!==null&&i.unit!==null){let o=Math.round(n+i.amount*H(i.unit));if(o<=n)throw new Error(`--send-at must be in the future; '${e}' is zero time from now.`);return o}if(Ki.test(t))throw _e(e,"A date alone has no time of day, and the time zone it means is ambiguous.");if(!Gi.test(t))throw _e(e,"It is neither a timestamp nor a duration.");let r=Date.parse(t.replace(" ","T"));if(!Number.isFinite(r))throw _e(e,"It is not a real date.");if(r<=n)throw new Error(`--send-at must be in the future; '${e}' resolves to ${new Date(r).toLocaleString()}, which has already passed.`);return r}function Pt(e,n=Date.now()){if(e===null)return"-";let t=e-n;return t<=0?"due":`in ${Ji(t)}`}function Ji(e){return e<H("m")?`${Math.max(1,Math.round(e/H("s")))}s`:e<H("h")?`${Math.floor(e/H("m"))}m`:e<H("d")?`${Math.floor(e/H("h"))}h`:`${Math.floor(e/H("d"))}d`}function xt(e,n){e.command("update [id]").description("Update a thread").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").option("--title <title>","Set the thread title").option("--parent-thread <id>","Set the parent thread id").option("--clear-parent-thread","Clear the parent thread id").option("--section <id>","Move the thread into a section").option("--clear-section","Remove the thread from its section").option("--model <model>","Set the sticky model applied on the thread's next turn").option("--reasoning-level <level>","Set the sticky reasoning level applied on the thread's next turn: low, medium, high, xhigh, max (provider-dependent)").option("--visibility <visibility>","Thread visibility: visible or hidden").option("--parent-notifications <value>",Ee).action(f(async(t,i)=>{if(i.parentThread&&i.clearParentThread)throw new Error("Cannot combine --parent-thread with --clear-parent-thread.");if(i.section&&i.clearSection)throw new Error("Cannot combine --section with --clear-section.");let r=de(i.reasoningLevel),o=i.visibility===void 0?void 0:ee.parse(i.visibility),s=$e(i.parentNotifications);if(!i.parentThread&&!i.clearParentThread&&!i.section&&!i.clearSection&&!i.title&&!i.model&&!r&&!o&&!s)throw new Error("No changes requested. Provide --title, --parent-thread, --clear-parent-thread, --section, --clear-section, --model, --reasoning-level, --visibility, or --parent-notifications.");let a=w(t,i),l=$({flagName:"--parent-thread",value:i.parentThread}),m={};i.title&&(m.title=i.title),l?m.parentThreadId=l:i.clearParentThread&&(m.parentThreadId=null),i.section?m.sectionId=$({flagName:"--section",value:i.section}):i.clearSection&&(m.sectionId=null),i.model&&(m.model=i.model),r&&(m.reasoningLevel=r),o&&(m.visibility=o),s&&(m.parentNotifications=s);let p=await g(n()).threads.update({threadId:a,...m});v(i,p)||(console.log(`Thread ${p.id} updated`),i.title&&console.log(`Title: ${p.title??"<untitled>"}`),(i.parentThread||i.clearParentThread)&&console.log(p.parentThreadId?`Parent: ${p.parentThreadId}`:"No parent thread"),(i.section||i.clearSection)&&console.log(p.sectionId?`Section: ${p.sectionId}`:"No section"),i.model&&console.log(`Model: ${i.model}`),r&&console.log(`Reasoning level: ${r}`),o&&console.log(`Visibility: ${o}`),s&&console.log(`Parent notifications: ${s}`))})),e.command("archive [id]").description("Archive a thread").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),o=g(n()),s=[r];try{s=(await o.threads.archive({threadId:r})).archivedThreadIds}catch(l){throw M(`Failed to archive thread ${r}`,l)}if(v(i,{ok:!0,threadId:r,archivedThreadIds:s}))return;let a=s.filter(l=>l!==r).length;if(a===0){console.log(`Thread ${r} archived`);return}console.log(`Thread ${r} archived (${a} related thread${a===1?"":"s"} also archived)`)})),e.command("unarchive [id]").description("Unarchive a thread").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i);await g(n()).threads.unarchive({threadId:r}),!v(i,{ok:!0,threadId:r})&&console.log(`Thread ${r} unarchived`)})),e.command("restore-environment [id]").description("Restore the workspace of a thread whose environment was destroyed, when its environment provider supports restoring").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),o=g(n()),s;try{s=await o.threads.restoreEnvironment({threadId:r})}catch(a){throw M(`Failed to restore the workspace for thread ${r}`,a)}v(i,s)||console.log(`Thread ${r} is restoring its workspace (status: ${s.status})`)}));for(let{name:t,description:i,done:r}of[{name:"pin",description:"Pin a thread",done:"pinned"},{name:"unpin",description:"Unpin a thread",done:"unpinned"}])e.command(`${t} [id]`).description(i).option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(o,s)=>{let a=w(o,s),m=await g(n()).threads[t]({threadId:a});v(s,m)||console.log(`Thread ${m.id} ${r}`)}));e.command("delete <id>").description("Delete a thread permanently").option("--yes","Skip the confirmation prompt").option("--confirm-child-threads","Confirm deleting a thread with child threads").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=g(n());try{let o=await r.threads.get({threadId:t});if(!i.yes&&!await Re(`Delete thread "${o.title??o.titleFallback??o.id}" permanently? This cannot be undone.`)){console.log(`Thread ${t} deletion cancelled`);return}await r.threads.delete({threadId:t,childThreadsConfirmed:i.confirmChildThreads===!0})}catch(o){throw M(`Failed to delete thread ${t}`,o)}v(i,{ok:!0,threadId:t})||console.log(`Thread ${t} deleted`)})),e.command("edit-message [id]").description("Replace an accepted user message and rerun from that point").option("--message <text>","Replacement message text").option("--message-file <path>",`Read the replacement message from a file; ${N}`).option("--self","Target the current thread (from BB_THREAD_ID)").option("--expected-request-sequence <sequence>","Edit the message at this event sequence (default: the latest editable message)").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),o=await J({file:i.messageFile,fileLabel:"--message-file",inline:i.message,inlineLabel:"--message <text>"}),s=g(n()),a=i.expectedRequestSequence===void 0?void 0:Number(i.expectedRequestSequence);if(a!==void 0&&(!Number.isInteger(a)||a<0))throw new Error("--expected-request-sequence must be a non-negative integer.");let l=wt(r),m=await s.threads.editMessage({threadId:r,operationId:Qi(),...a!==void 0?{expectedRequestSequence:a}:{},input:j({message:o}),...l!==void 0?{senderThreadId:l}:{}});v(i,{threadId:r,...m})||console.log(`Thread ${r} message replaced; workspace changes were kept`)})),e.command("tell <id> [message]").aliases(["message","send"]).description("Send a follow-up message to a thread").option("--message-file <path>",`Read the message from a file instead of [message]; ${N}`).option("--json","Print machine-readable JSON output").option("--model <model>","Model ID for this message").option("--service-tier <tier>",ke).option("--reasoning-level <level>","Reasoning level id the model lists: low, medium, high, xhigh, max, or a provider-specific id").option("--permission-mode <mode>",te).option("--mode <mode>","Message mode: steer (default), queue, or auto (steer a live turn, else start one)").option("--send-at <when>",ce).option("--compact-first","Compact the idle thread's context first, then send this message when compaction finishes").option("--plan",Ae).option("--file <path>","Upload an absolute path or file: URL from this CLI machine or pass an uploaded attachment path (repeatable)",A,[]).option("--image <path>","Upload an absolute path or file: URL from this CLI machine or pass an uploaded attachment path (repeatable)",A,[]).action(f(async(t,i,r)=>{let o=await J({file:r.messageFile,fileLabel:"--message-file",inline:i,inlineLabel:"<message>"}),s=await zi({getUrl:n,threadId:t,message:o,mode:er(r.mode),model:r.model,permissionMode:ie(r.permissionMode),reasoningLevel:de(r.reasoningLevel),serviceTier:Oe(r.serviceTier),senderThreadId:wt(t),plan:r.plan,files:r.file,images:r.image,...r.sendAt===void 0?{}:{sendAt:me(r.sendAt)},compactFirst:r.compactFirst===!0});v(r,{threadId:t,...s})||console.log(r.compactFirst===!0?`Thread ${t} compacting; the message sends when compaction finishes`:Zi(t,s))})),e.command("retry [id]").description("Retry the failed turn on a thread").option("--self","Target the current thread (from BB_THREAD_ID)").option("--turn <requestId>","Retry this turn request id specifically; fails when it is not the thread's failed turn").option("--send-at <when>",ce).option("--reason <text>","Why it is being retried, shown on the queued row").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),s=await g(n()).threads.retry({threadId:r,...i.turn===void 0?{}:{turnRequestId:i.turn},...i.sendAt===void 0?{}:{sendAt:me(i.sendAt)},...i.reason===void 0?{}:{reason:i.reason}});v(i,{threadId:r,...s})||console.log(Yi(r,s))}));for(let{name:t,description:i,method:r,done:o}of[{name:"stop",description:"Stop work and release the loaded agent runtime",method:"stop",done:"stopped"},{name:"compact",description:"Request compaction of an idle or errored thread's context",method:"compact",done:"context compaction requested"},{name:"clear",description:"Clear model context for an idle or failed thread",method:"clearContext",done:"context cleared"},{name:"cancel-plan",description:"Ask the provider to exit the active Plan mode",method:"cancelPlan",done:"exited Plan mode"},{name:"clear-goal",description:"Ask the provider to clear the active Goal",method:"clearGoal",done:"cleared its Goal"}])e.command(`${t} [id]`).description(i).option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(s,a)=>{let l=w(s,a);await g(n()).threads[r]({threadId:l}),!v(a,{ok:!0,threadId:l})&&console.log(`Thread ${l} ${o}`)}))}async function zi(e){let n=g(e.getUrl()),t=await U({input:j({message:e.message,plan:e.plan,files:e.files,images:e.images}),resolveProjectId:async()=>(await n.threads.get({threadId:e.threadId})).projectId,sdk:n}),i;try{i=await n.threads.send({threadId:e.threadId,input:t,mode:e.mode==="steer"?"steer-if-active":e.mode==="auto"?"auto":"queue-if-active",...e.model?{model:e.model}:{},...e.permissionMode?{permissionMode:e.permissionMode}:{},...e.reasoningLevel?{reasoningLevel:e.reasoningLevel}:{},...e.serviceTier?{serviceTier:e.serviceTier}:{},...e.senderThreadId?{senderThreadId:e.senderThreadId}:{},...e.sendAt===void 0?{}:{sendAt:e.sendAt},...e.compactFirst?{compactFirst:!0}:{}})}catch(r){throw await Xi(n,e.threadId,r)}return{...i,mode:e.mode}}async function Xi(e,n,t){if(!(t instanceof Pe))return t;let i=Gn.safeParse(t.body);if(!i.success||i.data.details.reason!=="destroyed")return t;let{canRestoreEnvironment:r}=await e.threads.get({threadId:n});return new Z(t.message,1,{code:i.data.code,hint:r?`Its workspace was removed. Restore it with \`bb thread restore-environment ${n}\`, then send again.`:"Its workspace was removed and its environment provider cannot restore it. Start a new thread to continue."})}function Zi(e,n){return n.delivery==="queued"?`Thread ${e} message queued (${pe(n.queuedMessage)}); it dispatches when that clears`:n.mode==="steer"?`Thread ${e} steered`:`Thread ${e} updated`}function Yi(e,n){let t=`turn ${n.turnRequestId} (attempt ${n.attempt})`;return n.delivery==="queued"?`Thread ${e} retry of ${t} queued (${pe(n)}); it dispatches when that clears`:`Thread ${e} retrying ${t}`}function pe(e){let n=e.waitingOn??{kind:"thread-busy"};switch(n.kind){case"time":return e.sendAt===null?"scheduled":`scheduled for ${new Date(e.sendAt).toLocaleString()}`;case"thread-busy":return"waiting for the current turn to finish";case"stopping":return"sending once the thread finishes stopping";case"turn-starting":return"waiting for the current turn to start";case"provisioning":return"waiting for the workspace";case"host-offline":return`waiting for ${n.hostName} to reconnect`;case"interaction":return"waiting for a pending interaction";case"plugin":return`${n.pluginId}: ${n.reason}`}}function wt(e){let n=W();if(!(!n||n===e))return n}function er(e){if(e===void 0)return"steer";let n=e.trim().toLowerCase();if(n==="steer"||n==="steer-if-active")return"steer";if(n==="queue"||n==="queue-if-active")return"queue";if(n==="auto")return"auto";throw new Error(`Invalid message mode '${e}'. Expected 'queue', 'steer', or 'auto'.`)}var nr={host:"Machine",provider:"Provider",project:"Project"};function Rt(e,n){e.command("count").description("Count threads without listing them; excludes archived and hidden threads").option("--status <status>",`Count threads in this status: ${ze(ae)}`).option("--host <id>","Count threads whose environment is on this machine").option("--provider <id>","Count threads running on this provider").option("--project <id>","Count threads in this project").option("--parent <id|none>",`Count children of this thread, or '${Jn}' for threads with no parent`).option("--by <dimension>","Group the count by host, provider, or project").option("--json","Print machine-readable JSON output").action(f(async t=>{let i=sr(t.by),r=await g(n()).threads.count({...t.status?{status:or(t.status)}:{},...t.host?{hostId:t.host}:{},...t.provider?{providerId:t.provider}:{},...t.project?{projectId:t.project}:{},...t.parent?{parentThreadId:t.parent}:{},...i?{groupBy:i}:{}});v(t,r)||tr(r,i)}))}function tr(e,n){if(e.groups===void 0||n===void 0){console.log(String(e.total));return}if(e.groups.length===0){console.log("No threads found");return}ir(e,n)}function ir(e,n){let i=[...e.groups??[]].sort((o,s)=>s.count-o.count||rr(o.key,s.key)).map(o=>[o.key??"-",String(o.count)]),r=[nr[n],"Count"];G({head:r,colWidths:ne(i,[r[0].length,r[1].length])},i),console.log(`Total: ${e.total}`)}function rr(e,n){return e===n?0:e===null?1:n===null?-1:e.localeCompare(n)}function or(e){let n=ye.safeParse(e.trim());if(n.success)return n.data;throw new Error(`Invalid --status value '${e}'. Expected ${ze(ae)}.`)}function sr(e){if(e===void 0)return;let n=Xn.safeParse(e.trim());if(n.success)return n.data;throw new Error(`Invalid --by value '${e}'. Expected 'host', 'provider', or 'project'.`)}function ar(e){try{return ve.parse(JSON.parse(e))}catch{throw new Error("Invalid --value. Expected a JSON value.")}}function lr(e){if(e===void 0)return"session";if(e==="turn"||e==="session")return e;throw new Error("Invalid --scope. Expected 'turn' or 'session'.")}function ge(e){if(jn(e.payload))return"question";if(Fn(e.payload))return"plugin";if(!Nn(e.payload))return e.payload.kind;switch(e.payload.subject.kind){case"command":return"command";case"file_change":return"file-change";case"permission_grant":return"permission";case"plan":return"plan";case"tool_use":return"tool-use";default:return Ge(e.payload.subject)}}function kt(e){if(He(e))return e;throw new Error(`Interaction ${e.id} is ${ge(e)} and cannot be resolved with this command.`)}function dr(e){if(Ue(e))return e;throw new Error(`Interaction ${e.id} is ${ge(e)} and cannot be answered with this command.`)}function ur(e){console.log(" Questions:");for(let n of e.payload.questions){let t=n.shortLabel?`${n.shortLabel}: `:"";console.log(` - ${t}${n.prompt}`),n.options&&n.options.length>0&&console.log(` Options: ${n.options.map(i=>i.label).join(", ")}`),n.allowFreeText&&console.log(" Free text: allowed")}if(e.resolution){console.log(""),console.log("Answers:");for(let n of e.payload.questions){let t=e.resolution.answers[n.id];if(!t)continue;let r=[...t.selected.map(o=>it({question:n,value:o})),...t.freeText?[t.freeText]:[]];console.log(` ${n.shortLabel??n.prompt}: ${r.join(", ")}`)}}}function cr(e){switch(e.payload.subject.kind){case"command":case"file_change":for(let n of Je(e))console.log(` ${n}`);break;case"permission_grant":e.payload.subject.toolName&&console.log(` Tool: ${e.payload.subject.toolName}`),mr(e.payload.subject.permissions);break;case"plan":e.payload.subject.planFilePath&&console.log(` Plan file: ${e.payload.subject.planFilePath}`),console.log(" Plan:");for(let n of e.payload.subject.plan.split(`
|
|
2
|
+
import{a as mt,b as H,c as Ze,d as Ye}from"./chunk-YTRZBZRZ.js";import{a as at,b as lt,c as dt,d as ut}from"./chunk-FYCUA6H6.js";import{a as Xe}from"./chunk-UCNQXYXP.js";import{c as Ie,f as Ce}from"./chunk-CZ4K4Z4T.js";import{a as ct,c as G,d as ne,e as ue}from"./chunk-XSBF3HQR.js";import{b as Hn}from"./chunk-N3HRBBF4.js";import{a as v,b as A,c as xe,d as Re,e as st,f as de,g as M,h as ze,i as Z,j as f}from"./chunk-DCRUVPRR.js";import"./chunk-NCQMSH7M.js";import"./chunk-WWZ7D6EQ.js";import{b as g}from"./chunk-F7XCHQA3.js";import{$ as it,B as le,D as Un,E as Kn,H as Gn,J as Jn,K as be,L as Qn,M as zn,N as Xn,O as Zn,Q as Ke,R as Se,S as Yn,T as et,V as Ge,X as nt,Y as Je,Z as tt,_ as Qe,aa as rt,ba as Pe,s as Mn,v as Ln,w as ae,x as ye,y as Wn,z as ee}from"./chunk-HDUE2YKX.js";import{E as Ve,G as Nn,H as jn,I as Fn,K as Bn,M as Vn,N as He,O as Ue,b as ve,f as An,h as $n,m as On,r as _n,s as qn,u as Dn}from"./chunk-NZY63D4X.js";import{a as K,e as W,f as $,g as we,h as w}from"./chunk-FZ76WJJG.js";import"./chunk-ZT24MY2V.js";import{e as ot}from"./chunk-L5UJ4QUD.js";import"./chunk-E7J2DJY7.js";import{a as u}from"./chunk-7LJFYNRQ.js";import"./chunk-5PWLIQO6.js";function pt(e,n){e.command("context [id]").description("Show the latest recorded context window usage and available breakdown").option("--self","Use the current thread").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),o=await g(n()).threads.context({threadId:r});if(v(i,o))return;let s=o.usage;if(!s){console.log("Context usage is not available yet.");return}let a=l=>l.toLocaleString("en-US");if(console.log(`${s.estimated?"Estimated context":"Context window"}: ${a(s.usedTokens)} / ${a(s.modelContextWindow)} tokens`),s.cost&&console.log(`Session cost: ${s.cost.amount} ${s.cost.currency}`),!!s.snapshot){console.log(`Captured: ${s.snapshot.capturedAt}`);for(let l of s.snapshot.categories){let m=l.kind==="used"?"":` (${l.kind})`;console.log(`${l.label}${m}: ${a(l.tokens)}`);for(let c of l.entries)console.log(` ${c.label}: ${a(c.tokens)}`)}}}))}function gt(e,n=[]){return[...n,e]}function _i(e){let n={};for(let t of e.set){let i=t.indexOf("="),r=i===-1?"":t.slice(0,i);if(r==="")throw new Error(`Invalid --set '${t}'. Expected <option-id>=<value>.`);let o=t.slice(i+1);if(e.options?.find(a=>a.id===r)?.type==="boolean"){if(o!=="true"&&o!=="false")throw new Error(`Session option '${r}' takes true or false, not '${o}'.`);n[r]=o==="true";continue}n[r]=o}for(let t of e.clear){if(Object.hasOwn(n,t))throw new Error(`Session option '${t}' cannot be both set and cleared.`);n[t]=null}return n}function ft(e){let n={};for(let t of e){let i=t.indexOf("="),r=i===-1?"":t.slice(0,i),o=t.slice(i+1);if(r===""||o==="")throw new Error(`Invalid --option '${t}'. Expected <option-id>=<value>.`);n[r]=o==="true"?!0:o==="false"?!1:o}return n}function qi(e){return e===null||e.length===0?["The agent has not advertised any commands for this thread."]:e.map(n=>{let t=n.argumentHint?` <${n.argumentHint}>`:"",i=n.description?` ${n.description}`:"";return`/${n.name}${t}${i}`})}function Di(e){return e===null||e.length===0?["The agent has not reported any session options for this thread."]:e.flatMap(n=>{let t=n.pendingValue===null?"":` -> ${String(n.pendingValue)} on the next turn`,i=`${n.id} (${n.label}): ${String(n.value)}${t}`;return n.type==="boolean"?[i]:[i,...n.values.map(r=>` ${r.id===n.value?"*":" "} ${r.id}${r.label===r.id?"":` ${r.label}`}`)]})}function ht(e,n){e.command("commands [id]").description("List the slash commands the thread's agent has advertised").option("--self","Use the current thread").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),s=(await g(n()).threads.timeline({threadId:r,summaryOnly:"true"})).providerCommands;if(!v(i,{commands:s}))for(let a of qi(s))console.log(a)})),e.command("options [id]").description("List the session options the thread's agent reports, or choose values applied on the thread's next turn").option("--self","Use the current thread").option("--set <option=value>","Choose a value for an option, applied on the next turn (repeatable)",gt).option("--clear <option>","Drop a choice that has not been applied yet (repeatable)",gt).option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),o=g(n()),s=async()=>(await o.threads.timeline({threadId:r,summaryOnly:"true"})).sessionOptions,a=await s(),l=i.set??[],m=i.clear??[];if((l.length>0||m.length>0)&&(await o.threads.update({threadId:r,sessionOptions:_i({options:a,set:l,clear:m})}),a=await s()),!v(i,{options:a}))for(let c of Di(a))console.log(c)}))}import{randomUUID as Qi}from"node:crypto";import{readFile as Mi}from"node:fs/promises";var N="use - to read stdin. Prefer this for multi-line text: inside double quotes the shell runs `backticks` and $(...) before bb sees them";async function Li(e){let n=[];for await(let t of e)n.push(typeof t=="string"?Buffer.from(t):t);return Buffer.concat(n).toString("utf8")}async function en(e){if(e.file===void 0)return e.inline;if(e.inline!==void 0)throw new K({code:"invalid_value",hint:null,message:`Provide only one of ${e.inlineLabel} or ${e.fileLabel}.`});let n=e.stdin??process.stdin;if(e.file==="-"&&n.isTTY)throw new K({code:"invalid_value",hint:`Pipe the text in, for example: cat prompt.md | bb ... ${e.fileLabel} -`,message:`${e.fileLabel} - reads stdin, but stdin is a terminal.`});let i=(e.file==="-"?await Li(n):await Mi(e.file,"utf8").catch(r=>{throw new K({code:"invalid_value",hint:null,message:`Could not read ${e.fileLabel} '${e.file}': ${r instanceof Error?r.message:String(r)}`})})).replace(/\r?\n+$/u,"");if(i.trim().length===0)throw new K({code:"invalid_value",hint:null,message:`${e.fileLabel} ${e.file==="-"?"stdin":`'${e.file}'`} is empty.`});return i}async function J(e){let n=await en(e);if(n!==void 0)return n;throw new K({code:"missing_required",hint:`Pass ${e.inlineLabel}, or ${e.fileLabel} <path> (use - to read stdin).`,message:`Missing ${e.inlineLabel}.`})}import{readFile as Wi}from"node:fs/promises";import{basename as Ni,isAbsolute as ji,win32 as nn}from"node:path";import{fileURLToPath as Fi}from"node:url";var Tt=2,tn=3,vt=4,yt=Ke/1e3,ke="Service tier id the provider lists for the model, such as default or fast (see `bb provider models`)",te="Permission mode: accept-edits, auto, or full",Ee="Which turn outcomes wake the parent thread: auto (every outcome), stuck (failed, interrupted, or blocked on an approval or question), or off",Ae="Send the message as the provider's /plan action so the agent proposes a plan for approval before executing";function $e(e){return e===void 0?void 0:Wn.parse(e)}function j(e){return[e.plan?On(e.message):{type:"text",text:e.message,mentions:[]},...(e.files??[]).map(n=>({type:"localFile",path:n})),...(e.images??[]).map(n=>({type:"localImage",path:n}))]}function Bi(e){if(ji(e)||nn.isAbsolute(e))return e;if(!e.toLowerCase().startsWith("file:"))return null;try{return Fi(e)}catch{throw new Error(`Invalid client attachment URL '${e}'.`)}}function Vi(e){let n=nn.isAbsolute(e)?nn.basename(e):Ni(e);if(n.length===0)throw new Error(`Attachment path '${e}' has no filename.`);return n}function Hi(e){return e.byteLength>=8&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71&&e[4]===13&&e[5]===10&&e[6]===26&&e[7]===10?"image/png":void 0}async function Ui(e,n){let{default:t}=await import("./mime-types-35XNWBDI.js"),i=t.lookup(e);return typeof i=="string"?i:Hi(n)??"application/octet-stream"}async function U(e){let n=e.input.map(o=>o.type==="localImage"||o.type==="localFile"?Bi(o.path):null);if(n.every(o=>o===null))return e.input;let t=await e.resolveProjectId(),i=new Map,r=o=>{let s=i.get(o);if(s)return s;let a=(async()=>{let l=await Wi(o),m=Vi(o);return(await e.sdk.projects.attachments.upload({clientFile:l,filename:m,mimeType:await Ui(o,l),projectId:t})).path})();return i.set(o,a),a};return Promise.all(e.input.map(async(o,s)=>{let a=n[s];return(o.type==="localImage"||o.type==="localFile")&&a?{...o,path:await r(a)}:o}))}function bt(e){return e===void 0?Ke:Ye({allowZero:!0,defaultUnit:"s",label:"--timeout",value:e})}function St(e){return e===void 0?Se:Ye({allowZero:!1,defaultUnit:"ms",label:"--poll-interval",value:e})}function Oe(e){if(e===void 0)return;let n=An.safeParse(e);if(n.success)return n.data;throw new Error(`Invalid service tier '${e}'. Expected a tier id the provider lists, such as default or fast.`)}function ie(e){if(e===void 0)return;let n=$n.safeParse(e);if(n.success)return n.data;throw new Error(`Invalid permission mode '${e}'. Expected accept-edits, auto, or full.`)}var Ki=/^\d{4}-\d{2}-\d{2}$/,Gi=/^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,3})?)?(Z|[+-]\d{2}:?\d{2})?$/,ce="Dispatch at an ISO 8601 timestamp (2026-08-25T09:00) or a duration from now (30s, 10m, 2h, 7d)";function _e(e,n){return new Error(`Invalid --send-at value '${e}'. ${n} Expected an ISO 8601 timestamp such as 2026-08-25T09:00 or a duration such as 30s, 10m, 2h, or 7d.`)}function me(e,n=Date.now()){let t=e.trim();if(t==="")throw _e(e,"It is empty.");let i=mt(t);if(i!==null&&i.unit!==null){let o=Math.round(n+i.amount*H(i.unit));if(o<=n)throw new Error(`--send-at must be in the future; '${e}' is zero time from now.`);return o}if(Ki.test(t))throw _e(e,"A date alone has no time of day, and the time zone it means is ambiguous.");if(!Gi.test(t))throw _e(e,"It is neither a timestamp nor a duration.");let r=Date.parse(t.replace(" ","T"));if(!Number.isFinite(r))throw _e(e,"It is not a real date.");if(r<=n)throw new Error(`--send-at must be in the future; '${e}' resolves to ${new Date(r).toLocaleString()}, which has already passed.`);return r}function Pt(e,n=Date.now()){if(e===null)return"-";let t=e-n;return t<=0?"due":`in ${Ji(t)}`}function Ji(e){return e<H("m")?`${Math.max(1,Math.round(e/H("s")))}s`:e<H("h")?`${Math.floor(e/H("m"))}m`:e<H("d")?`${Math.floor(e/H("h"))}h`:`${Math.floor(e/H("d"))}d`}function xt(e,n){e.command("update [id]").description("Update a thread").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").option("--title <title>","Set the thread title").option("--parent-thread <id>","Set the parent thread id").option("--clear-parent-thread","Clear the parent thread id").option("--section <id>","Move the thread into a section").option("--clear-section","Remove the thread from its section").option("--model <model>","Set the sticky model applied on the thread's next turn").option("--reasoning-level <level>","Set the sticky reasoning level applied on the thread's next turn: low, medium, high, xhigh, max (provider-dependent)").option("--visibility <visibility>","Thread visibility: visible or hidden").option("--parent-notifications <value>",Ee).action(f(async(t,i)=>{if(i.parentThread&&i.clearParentThread)throw new Error("Cannot combine --parent-thread with --clear-parent-thread.");if(i.section&&i.clearSection)throw new Error("Cannot combine --section with --clear-section.");let r=de(i.reasoningLevel),o=i.visibility===void 0?void 0:ee.parse(i.visibility),s=$e(i.parentNotifications);if(!i.parentThread&&!i.clearParentThread&&!i.section&&!i.clearSection&&!i.title&&!i.model&&!r&&!o&&!s)throw new Error("No changes requested. Provide --title, --parent-thread, --clear-parent-thread, --section, --clear-section, --model, --reasoning-level, --visibility, or --parent-notifications.");let a=w(t,i),l=$({flagName:"--parent-thread",value:i.parentThread}),m={};i.title&&(m.title=i.title),l?m.parentThreadId=l:i.clearParentThread&&(m.parentThreadId=null),i.section?m.sectionId=$({flagName:"--section",value:i.section}):i.clearSection&&(m.sectionId=null),i.model&&(m.model=i.model),r&&(m.reasoningLevel=r),o&&(m.visibility=o),s&&(m.parentNotifications=s);let p=await g(n()).threads.update({threadId:a,...m});v(i,p)||(console.log(`Thread ${p.id} updated`),i.title&&console.log(`Title: ${p.title??"<untitled>"}`),(i.parentThread||i.clearParentThread)&&console.log(p.parentThreadId?`Parent: ${p.parentThreadId}`:"No parent thread"),(i.section||i.clearSection)&&console.log(p.sectionId?`Section: ${p.sectionId}`:"No section"),i.model&&console.log(`Model: ${i.model}`),r&&console.log(`Reasoning level: ${r}`),o&&console.log(`Visibility: ${o}`),s&&console.log(`Parent notifications: ${s}`))})),e.command("archive [id]").description("Archive a thread").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),o=g(n()),s=[r];try{s=(await o.threads.archive({threadId:r})).archivedThreadIds}catch(l){throw M(`Failed to archive thread ${r}`,l)}if(v(i,{ok:!0,threadId:r,archivedThreadIds:s}))return;let a=s.filter(l=>l!==r).length;if(a===0){console.log(`Thread ${r} archived`);return}console.log(`Thread ${r} archived (${a} related thread${a===1?"":"s"} also archived)`)})),e.command("unarchive [id]").description("Unarchive a thread").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i);await g(n()).threads.unarchive({threadId:r}),!v(i,{ok:!0,threadId:r})&&console.log(`Thread ${r} unarchived`)})),e.command("restore-environment [id]").description("Restore the workspace of a thread whose environment was destroyed, when its environment provider supports restoring").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),o=g(n()),s;try{s=await o.threads.restoreEnvironment({threadId:r})}catch(a){throw M(`Failed to restore the workspace for thread ${r}`,a)}v(i,s)||console.log(`Thread ${r} is restoring its workspace (status: ${s.status})`)}));for(let{name:t,description:i,done:r}of[{name:"pin",description:"Pin a thread",done:"pinned"},{name:"unpin",description:"Unpin a thread",done:"unpinned"}])e.command(`${t} [id]`).description(i).option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(o,s)=>{let a=w(o,s),m=await g(n()).threads[t]({threadId:a});v(s,m)||console.log(`Thread ${m.id} ${r}`)}));e.command("delete <id>").description("Delete a thread permanently").option("--yes","Skip the confirmation prompt").option("--confirm-child-threads","Confirm deleting a thread with child threads").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=g(n());try{let o=await r.threads.get({threadId:t});if(!i.yes&&!await Re(`Delete thread "${o.title??o.titleFallback??o.id}" permanently? This cannot be undone.`)){console.log(`Thread ${t} deletion cancelled`);return}await r.threads.delete({threadId:t,childThreadsConfirmed:i.confirmChildThreads===!0})}catch(o){throw M(`Failed to delete thread ${t}`,o)}v(i,{ok:!0,threadId:t})||console.log(`Thread ${t} deleted`)})),e.command("edit-message [id]").description("Replace an accepted user message and rerun from that point").option("--message <text>","Replacement message text").option("--message-file <path>",`Read the replacement message from a file; ${N}`).option("--self","Target the current thread (from BB_THREAD_ID)").option("--expected-request-sequence <sequence>","Edit the message at this event sequence (default: the latest editable message)").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),o=await J({file:i.messageFile,fileLabel:"--message-file",inline:i.message,inlineLabel:"--message <text>"}),s=g(n()),a=i.expectedRequestSequence===void 0?void 0:Number(i.expectedRequestSequence);if(a!==void 0&&(!Number.isInteger(a)||a<0))throw new Error("--expected-request-sequence must be a non-negative integer.");let l=wt(r),m=await s.threads.editMessage({threadId:r,operationId:Qi(),...a!==void 0?{expectedRequestSequence:a}:{},input:j({message:o}),...l!==void 0?{senderThreadId:l}:{}});v(i,{threadId:r,...m})||console.log(`Thread ${r} message replaced; workspace changes were kept`)})),e.command("tell <id> [message]").aliases(["message","send"]).description("Send a follow-up message to a thread").option("--message-file <path>",`Read the message from a file instead of [message]; ${N}`).option("--json","Print machine-readable JSON output").option("--model <model>","Model ID for this message").option("--service-tier <tier>",ke).option("--reasoning-level <level>","Reasoning level id the model lists: low, medium, high, xhigh, max, or a provider-specific id").option("--permission-mode <mode>",te).option("--mode <mode>","Message mode: steer (default), queue, or auto (steer a live turn, else start one)").option("--send-at <when>",ce).option("--compact-first","Compact the idle thread's context first, then send this message when compaction finishes").option("--plan",Ae).option("--file <path>","Upload an absolute path or file: URL from this CLI machine or pass an uploaded attachment path (repeatable)",A,[]).option("--image <path>","Upload an absolute path or file: URL from this CLI machine or pass an uploaded attachment path (repeatable)",A,[]).action(f(async(t,i,r)=>{let o=await J({file:r.messageFile,fileLabel:"--message-file",inline:i,inlineLabel:"<message>"}),s=await zi({getUrl:n,threadId:t,message:o,mode:er(r.mode),model:r.model,permissionMode:ie(r.permissionMode),reasoningLevel:de(r.reasoningLevel),serviceTier:Oe(r.serviceTier),senderThreadId:wt(t),plan:r.plan,files:r.file,images:r.image,...r.sendAt===void 0?{}:{sendAt:me(r.sendAt)},compactFirst:r.compactFirst===!0});v(r,{threadId:t,...s})||console.log(r.compactFirst===!0?`Thread ${t} compacting; the message sends when compaction finishes`:Zi(t,s))})),e.command("retry [id]").description("Retry the failed turn on a thread").option("--self","Target the current thread (from BB_THREAD_ID)").option("--turn <requestId>","Retry this turn request id specifically; fails when it is not the thread's failed turn").option("--send-at <when>",ce).option("--reason <text>","Why it is being retried, shown on the queued row").option("--json","Print machine-readable JSON output").action(f(async(t,i)=>{let r=w(t,i),s=await g(n()).threads.retry({threadId:r,...i.turn===void 0?{}:{turnRequestId:i.turn},...i.sendAt===void 0?{}:{sendAt:me(i.sendAt)},...i.reason===void 0?{}:{reason:i.reason}});v(i,{threadId:r,...s})||console.log(Yi(r,s))}));for(let{name:t,description:i,method:r,done:o}of[{name:"stop",description:"Stop work and release the loaded agent runtime",method:"stop",done:"stopped"},{name:"compact",description:"Request compaction of an idle or errored thread's context",method:"compact",done:"context compaction requested"},{name:"clear",description:"Clear model context for an idle or failed thread",method:"clearContext",done:"context cleared"},{name:"cancel-plan",description:"Ask the provider to exit the active Plan mode",method:"cancelPlan",done:"exited Plan mode"},{name:"clear-goal",description:"Ask the provider to clear the active Goal",method:"clearGoal",done:"cleared its Goal"}])e.command(`${t} [id]`).description(i).option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(s,a)=>{let l=w(s,a);await g(n()).threads[r]({threadId:l}),!v(a,{ok:!0,threadId:l})&&console.log(`Thread ${l} ${o}`)}))}async function zi(e){let n=g(e.getUrl()),t=await U({input:j({message:e.message,plan:e.plan,files:e.files,images:e.images}),resolveProjectId:async()=>(await n.threads.get({threadId:e.threadId})).projectId,sdk:n}),i;try{i=await n.threads.send({threadId:e.threadId,input:t,mode:e.mode==="steer"?"steer-if-active":e.mode==="auto"?"auto":"queue-if-active",...e.model?{model:e.model}:{},...e.permissionMode?{permissionMode:e.permissionMode}:{},...e.reasoningLevel?{reasoningLevel:e.reasoningLevel}:{},...e.serviceTier?{serviceTier:e.serviceTier}:{},...e.senderThreadId?{senderThreadId:e.senderThreadId}:{},...e.sendAt===void 0?{}:{sendAt:e.sendAt},...e.compactFirst?{compactFirst:!0}:{}})}catch(r){throw await Xi(n,e.threadId,r)}return{...i,mode:e.mode}}async function Xi(e,n,t){if(!(t instanceof Pe))return t;let i=Gn.safeParse(t.body);if(!i.success||i.data.details.reason!=="destroyed")return t;let{canRestoreEnvironment:r}=await e.threads.get({threadId:n});return new Z(t.message,1,{code:i.data.code,hint:r?`Its workspace was removed. Restore it with \`bb thread restore-environment ${n}\`, then send again.`:"Its workspace was removed and its environment provider cannot restore it. Start a new thread to continue."})}function Zi(e,n){return n.delivery==="queued"?`Thread ${e} message queued (${pe(n.queuedMessage)}); it dispatches when that clears`:n.mode==="steer"?`Thread ${e} steered`:`Thread ${e} updated`}function Yi(e,n){let t=`turn ${n.turnRequestId} (attempt ${n.attempt})`;return n.delivery==="queued"?`Thread ${e} retry of ${t} queued (${pe(n)}); it dispatches when that clears`:`Thread ${e} retrying ${t}`}function pe(e){let n=e.waitingOn??{kind:"thread-busy"};switch(n.kind){case"time":return e.sendAt===null?"scheduled":`scheduled for ${new Date(e.sendAt).toLocaleString()}`;case"thread-busy":return"waiting for the current turn to finish";case"stopping":return"sending once the thread finishes stopping";case"turn-starting":return"waiting for the current turn to start";case"provisioning":return"waiting for the workspace";case"host-offline":return`waiting for ${n.hostName} to reconnect`;case"interaction":return"waiting for a pending interaction";case"plugin":return`${n.pluginId}: ${n.reason}`}}function wt(e){let n=W();if(!(!n||n===e))return n}function er(e){if(e===void 0)return"steer";let n=e.trim().toLowerCase();if(n==="steer"||n==="steer-if-active")return"steer";if(n==="queue"||n==="queue-if-active")return"queue";if(n==="auto")return"auto";throw new Error(`Invalid message mode '${e}'. Expected 'queue', 'steer', or 'auto'.`)}var nr={host:"Machine",provider:"Provider",project:"Project"};function Rt(e,n){e.command("count").description("Count threads without listing them; excludes archived and hidden threads").option("--status <status>",`Count threads in this status: ${ze(ae)}`).option("--host <id>","Count threads whose environment is on this machine").option("--provider <id>","Count threads running on this provider").option("--project <id>","Count threads in this project").option("--parent <id|none>",`Count children of this thread, or '${Jn}' for threads with no parent`).option("--by <dimension>","Group the count by host, provider, or project").option("--json","Print machine-readable JSON output").action(f(async t=>{let i=sr(t.by),r=await g(n()).threads.count({...t.status?{status:or(t.status)}:{},...t.host?{hostId:t.host}:{},...t.provider?{providerId:t.provider}:{},...t.project?{projectId:t.project}:{},...t.parent?{parentThreadId:t.parent}:{},...i?{groupBy:i}:{}});v(t,r)||tr(r,i)}))}function tr(e,n){if(e.groups===void 0||n===void 0){console.log(String(e.total));return}if(e.groups.length===0){console.log("No threads found");return}ir(e,n)}function ir(e,n){let i=[...e.groups??[]].sort((o,s)=>s.count-o.count||rr(o.key,s.key)).map(o=>[o.key??"-",String(o.count)]),r=[nr[n],"Count"];G({head:r,colWidths:ne(i,[r[0].length,r[1].length])},i),console.log(`Total: ${e.total}`)}function rr(e,n){return e===n?0:e===null?1:n===null?-1:e.localeCompare(n)}function or(e){let n=ye.safeParse(e.trim());if(n.success)return n.data;throw new Error(`Invalid --status value '${e}'. Expected ${ze(ae)}.`)}function sr(e){if(e===void 0)return;let n=Xn.safeParse(e.trim());if(n.success)return n.data;throw new Error(`Invalid --by value '${e}'. Expected 'host', 'provider', or 'project'.`)}function ar(e){try{return ve.parse(JSON.parse(e))}catch{throw new Error("Invalid --value. Expected a JSON value.")}}function lr(e){if(e===void 0)return"session";if(e==="turn"||e==="session")return e;throw new Error("Invalid --scope. Expected 'turn' or 'session'.")}function ge(e){if(jn(e.payload))return"question";if(Fn(e.payload))return"plugin";if(!Nn(e.payload))return e.payload.kind;switch(e.payload.subject.kind){case"command":return"command";case"file_change":return"file-change";case"permission_grant":return"permission";case"plan":return"plan";case"tool_use":return"tool-use";default:return Ge(e.payload.subject)}}function kt(e){if(He(e))return e;throw new Error(`Interaction ${e.id} is ${ge(e)} and cannot be resolved with this command.`)}function dr(e){if(Ue(e))return e;throw new Error(`Interaction ${e.id} is ${ge(e)} and cannot be answered with this command.`)}function ur(e){console.log(" Questions:");for(let n of e.payload.questions){let t=n.shortLabel?`${n.shortLabel}: `:"";console.log(` - ${t}${n.prompt}`),n.options&&n.options.length>0&&console.log(` Options: ${n.options.map(i=>i.label).join(", ")}`),n.allowFreeText&&console.log(" Free text: allowed")}if(e.resolution){console.log(""),console.log("Answers:");for(let n of e.payload.questions){let t=e.resolution.answers[n.id];if(!t)continue;let r=[...t.selected.map(o=>it({question:n,value:o})),...t.freeText?[t.freeText]:[]];console.log(` ${n.shortLabel??n.prompt}: ${r.join(", ")}`)}}}function cr(e){switch(e.payload.subject.kind){case"command":case"file_change":for(let n of Je(e))console.log(` ${n}`);break;case"permission_grant":e.payload.subject.toolName&&console.log(` Tool: ${e.payload.subject.toolName}`),mr(e.payload.subject.permissions);break;case"plan":e.payload.subject.planFilePath&&console.log(` Plan file: ${e.payload.subject.planFilePath}`),console.log(" Plan:");for(let n of e.payload.subject.plan.split(`
|
|
3
3
|
`))console.log(` ${n}`);break;case"tool_use":for(let n of Je(e))console.log(` ${n}`);break;default:Ge(e.payload.subject)}e.payload.reason&&console.log(` Prompt: ${e.payload.reason}`),console.log(` Decisions: ${e.payload.availableDecisions.join(", ")}`),e.resolution&&(console.log(""),console.log("Resolution:"),console.log(` Decision: ${e.resolution.decision}`),e.resolution.decision==="allow_for_session"?console.log(" Scope: session"):e.resolution.decision==="allow_once"&&console.log(" Scope: turn"))}function mr(e){let n=nt(e);if(n.length!==0){console.log(" Permissions:");for(let t of n)console.log(` - ${t}`)}}function pr(e){if(console.log(`Interaction: ${e.id}`),console.log(` Thread: ${e.threadId}`),console.log(` Kind: ${ge(e)}`),console.log(` Status: ${e.status}`),console.log(` Created: ${new Date(e.createdAt).toLocaleString()}`),e.resolvedAt!==null&&console.log(` Resolved: ${new Date(e.resolvedAt).toLocaleString()}`),e.statusReason&&console.log(` Reason: ${e.statusReason}`),e.status==="resolving"&&console.log(" Delivery: waiting for provider acknowledgement"),Ue(e)){ur(e);return}if(He(e)){cr(e);return}gr(e)}function gr(e){let n=Vn(e)?{pluginId:e.origin.pluginId,rendererId:e.origin.rendererId,raisedBy:"plugin"}:{pluginId:Ve(e.payload.kind).pluginId,rendererId:Ve(e.payload.kind).name,raisedBy:"agent"};console.log(` Title: ${e.payload.title}`),console.log(` Form: ${n.pluginId}/${n.rendererId} (raised by ${n.raisedBy})`),console.log(` Data: ${JSON.stringify(e.payload.data)}`),console.log(" Answer: bb thread interactions respond <interactionId> --value '<json>'")}async function Et(e){return g(e.getUrl()).threads.interactions.get({interactionId:e.interactionId,threadId:e.threadId})}function fr(e){let n=e.rawValue.indexOf("=");if(n===-1)return{questionId:null,value:e.rawValue};let t=e.rawValue.slice(0,n),i=e.rawValue.slice(n+1);if(t.length===0||i.length===0)throw new Error("Invalid --choice value. Expected questionId=value or a single-question shorthand value.");return{questionId:t,value:i}}function hr({entry:e,interaction:n,questionById:t}){if(e.questionId!==null){if(!t.has(e.questionId))throw new Error(`Answer references unknown question '${e.questionId}'.`);return e.questionId}if(n.payload.questions.length!==1)throw new Error("--choice shorthand can only be used for single-question interactions.");return n.payload.questions[0].id}function Tr({interaction:e,questionById:n,rawValue:t}){let i=t.indexOf("=");if(i!==-1){let r=t.slice(0,i);if(n.has(r))return{questionId:r,value:t.slice(i+1)};if(e.payload.questions.length>1)throw new Error(`Answer references unknown question '${r}'.`)}if(e.payload.questions.length===1)return{questionId:e.payload.questions[0].id,value:t};throw new Error("Multiple-question interactions require --text questionId=text.")}function vr(e,n,t){if(!new Set((e.options??[]).map(r=>r.value)).has(t))throw new Error(`Question '${e.id}' does not offer choice '${t}'.`);if(n.selected.includes(t))throw new Error(`Question '${e.id}' includes duplicate choice '${t}'.`);if(!e.multiSelect&&n.selected.length>0)throw new Error(`Question '${e.id}' accepts only one choice.`)}function yr(e,n,t){let i=t.trim();if(!e.allowFreeText)throw new Error(`Question '${e.id}' does not accept free text.`);if(i.length===0)throw new Error(`Question '${e.id}' free text cannot be empty.`);if(n.freeText!==void 0)throw new Error(`Question '${e.id}' has multiple free-text answers.`);return i}function br({choiceValues:e,interaction:n,textValues:t}){let i=dr(n),r=new Map(i.payload.questions.map(s=>[s.id,s])),o={};for(let s of e){let a=fr({rawValue:s}),l=hr({entry:a,interaction:i,questionById:r}),m=r.get(l);if(!m)throw new Error(`Answer references unknown question '${l}'.`);let c=o[l]??{selected:[]};vr(m,c,a.value),c.selected=[...c.selected,a.value],o[l]=c}for(let s of t){let a=Tr({interaction:i,questionById:r,rawValue:s}),l=r.get(a.questionId);if(!l)throw new Error(`Answer references unknown question '${a.questionId}'.`);let m=o[a.questionId]??{selected:[]};m.freeText=yr(l,m,a.value),o[a.questionId]=m}for(let s of i.payload.questions){let a=o[s.id];if(!a||a.selected.length===0&&a.freeText===void 0)throw new Error(`Missing answer for question '${s.id}'.`)}return{kind:"user_answer",answers:o}}async function rn(e){let n=await Et({getUrl:e.getUrl,interactionId:e.interactionId,threadId:e.threadId}),t=e.buildResolution(n),r=await g(e.getUrl()).threads.interactions.resolve({interactionId:e.interactionId,resolution:t,threadId:e.threadId}).catch(o=>{throw M(`Failed to ${e.failureAction} interaction ${e.interactionId}`,o)});if(e.json){v({json:e.json},r);return}console.log(e.successMessage({interactionId:e.interactionId,resolution:t,updated:r}))}function Sr(e,n){if(n==="approve"){if(e.payload.availableDecisions.includes("allow_once"))return"allow_once";if(e.payload.availableDecisions.includes("allow_for_session"))return"allow_for_session";throw new Error(`Interaction ${e.id} does not offer an approval decision.`)}if(e.payload.availableDecisions.includes("deny"))return"deny";throw new Error(`Interaction ${e.id} does not offer a deny decision.`)}function Pr(e,n){let t=kt(e);if(n==="approve"&&t.payload.subject.kind==="permission_grant")throw new Error(`Interaction ${e.id} is a permission grant; use bb thread interactions grant.`);let i=Sr(t,n);return Qe(t,i)}function wr(e,n){let t=kt(e);if(t.payload.subject.kind!=="permission_grant")throw new Error(`Interaction ${e.id} is ${ge(e)} and cannot be granted with this command.`);return Qe(t,n==="session"?"allow_for_session":"allow_once")}function xr(e){if(!Bn(e))throw new Error("Expected an approval resolution");return tt(e.decision)}function At(e){let n=e.updated.resolution??e.resolution,t=xr(n);return e.updated.status==="resolving"?`Interaction ${e.interactionId} submitted (${t}); delivering to provider`:`Interaction ${e.interactionId} ${t}`}function It(e){return e.updated.status==="resolving"?`Interaction ${e.interactionId} submitted (answered); delivering to provider`:`Interaction ${e.interactionId} answered`}function Ct(e,n,t,i){e.command(`${t} <interactionId> [id]`).description(i).option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(r,o,s)=>{let a=w(o,s);await rn({buildResolution:l=>Pr(l,t),failureAction:t,getUrl:n,interactionId:r,json:s.json,threadId:a,successMessage:At})}))}function $t(e,n){let t=e.command("interactions").description("Inspect and resolve thread interactions");t.command("list [id]").description("List interactions for a thread").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(i,r)=>{let o=w(i,r),a=await g(n()).threads.interactions.list({threadId:o});if(!v(r,a)){if(a.length===0){console.log("No interactions found");return}G({head:["ID","Kind","Status","Summary"],colWidths:[20,12,12,70],trimTrailingWhitespace:!0},a.map(l=>[l.id,ge(l),l.status,rt({interaction:l})]))}})),t.command("show <interactionId> [id]").description("Show an interaction").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(i,r,o)=>{let s=w(r,o),a=await Et({getUrl:n,interactionId:i,threadId:s});v(o,a)||pr(a)})),Ct(t,n,"approve","Approve a command, file-change, or plan interaction for this turn"),t.command("grant <interactionId> [id]").description("Grant a permission interaction").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").option("--scope <scope>","Grant scope: turn or session").action(f(async(i,r,o)=>{let s=w(r,o),a=lr(o.scope);await rn({buildResolution:l=>wr(l,a),failureAction:"grant",getUrl:n,interactionId:i,json:o.json,threadId:s,successMessage:At})})),t.command("answer <interactionId> [id]").description("Answer a user-question interaction").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").option("--choice <questionId=value>","Select an option value; repeat for multi-select answers",A,[]).option("--text <questionId=text>","Provide a free-text answer",A,[]).action(f(async(i,r,o)=>{let s=w(r,o);await rn({buildResolution:a=>br({choiceValues:o.choice??[],interaction:a,textValues:o.text??[]}),failureAction:"answer",getUrl:n,interactionId:i,json:o.json,threadId:s,successMessage:It})})),t.command("respond <interactionId> [id]").description("Answer a plugin form (a plugin's request or a provider's plugin-defined request) with a JSON value").option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").requiredOption("--value <json>","The form's answer as JSON, in the shape the plugin's form defines").action(f(async(i,r,o)=>{let s=w(r,o),a=ar(o.value),m=await g(n()).threads.interactions.respond({interactionId:i,threadId:s,value:a}).catch(c=>{throw M(`Failed to respond to interaction ${i}`,c)});v(o,m)||console.log(It({interactionId:i,updated:m}))})),Ct(t,n,"deny","Deny a command, file-change, plan, or permission interaction")}function Ot(e,n){e.command("list").description("List threads").option("--project <id>","Filter by project ID (defaults to all projects)").option("--environment <id>","Filter by environment ID").option("--machine <id-or-name>","Filter by machine ID or active machine name").option("--host <id-or-name>","Alias for --machine").option("--parent-thread <id>","Filter by parent thread ID").option("--thread <id>","Show only this thread ID, leaving out unknown or deleted IDs (repeatable, up to 200)",A,[]).option("--section <id>","Filter by thread section ID").option("--unsectioned","Show only threads outside sections").option("--archived","Show only archived threads").option("--include-hidden","Include hidden threads").option("--json","Print machine-readable JSON output").action(f(async t=>{let i=g(n()),r=$({flagName:"--project flag",value:t.project}),o=$({flagName:"--parent-thread",value:t.parentThread}),s=t.thread.flatMap(S=>$({flagName:"--thread",value:S})??[]),a=$({flagName:"--environment",value:t.environment}),l=Ie(t),m=l===void 0?void 0:l.trim().startsWith("host_")?$({flagName:"--machine",value:l}):await Ce({serverUrl:n(),target:l});if(t.section&&t.unsectioned)throw new Error("Cannot combine --section with --unsectioned.");let c=$({flagName:"--section",value:t.section}),p=await i.threads.list({...r?{projectId:r}:{},...a?{environmentId:a}:{},...m?{hostId:m}:{},...o?{parentThreadId:o}:{},...s.length>0?{threadIds:s}:{},...t.archived?{archived:!0}:{},...c?{sectionId:c}:{},...t.unsectioned?{unsectioned:!0}:{},...t.includeHidden?{includeHidden:!0}:{}});if(v(t,p))return;if(p.length===0){console.log("No threads found");return}let T=await i.projects.list({includePersonal:!1}),b=new Map(T.map(S=>[S.id,S.name]));Ir(p,b)}))}var Rr=60;function Ir(e,n){let t=e.map(i=>[i.id,ue(Cr(i),Rr),kr(i,n),Er(i)]);G({head:["ID","Title","Project","Status"],colWidths:ne(t,[4,5,7,12])},t)}function Cr(e){let n=e.title?.trim();if(n)return n;let t=e.titleFallback?.trim();return t||"-"}function kr(e,n){return e.projectId===le?"-":n.get(e.projectId)??e.projectId}function Er(e){let n=[];return e.archivedAt!==null&&n.push("archived"),e.pinnedAt!==null&&n.push("pinned"),n.length===0?e.status:`${e.status} (${n.join(", ")})`}import O from"node:path";function Dt(e,n){e.command("open").description("Open a BB thread, optionally with a file in its panel").usage("[id] [path] [options]").argument("[id]","Thread ID. Inside a BB thread, omit it to target the current thread; a lone argument that is not a thread ID opens that file in the current thread").argument("[path]","Thread-relative or absolute file path to open").option("--line <number>","Line number to focus").option("--split <placement>","Open in right, down, left, top, or replace placement; edge placements add panes through pane 8, then replace the focused pane").option("--json","Print machine-readable JSON output").action(f(async(t,i,r)=>{let o=Ar(t,i),s=$r(r.line),a=r.split===void 0?void 0:Qn.parse(r.split),l=a??"replace";if(o.inputPath===null&&s!==null)throw new Error("--line requires a file path.");let m=g(n()),c=o.inputPath===null?null:{...await Or({inputPath:o.inputPath,sdk:m,threadId:o.threadId}),lineNumber:s},p=await m.threads.open({threadId:o.threadId,...a===void 0?{}:{split:a},file:c});v(r,{threadId:o.threadId,split:l,file:c,delivered:p.delivered,inputPath:o.inputPath})||(xe(o.resolved),console.log(`Thread: ${o.threadId}`),console.log(`Split: ${l}`),c!==null&&(console.log(`Source: ${c.source}`),console.log(`Path: ${c.path}`),c.lineNumber!==null&&console.log(`Line: ${c.lineNumber}`)),console.log(`Delivered: ${p.delivered}`))}))}function Ar(e,n){let t=W();if(e!==void 0&&(n!==void 0||!t||Kn(e))){let i=we(e);return{threadId:i,inputPath:n??null,resolved:{id:i,source:"arg"}}}if(!t)throw new Error("Missing thread ID. Pass <threadId> [path], or run inside a BB thread.");return{threadId:t,inputPath:e??null,resolved:{id:t,source:"env"}}}function $r(e){if(e===void 0)return null;if(!/^[0-9]+$/.test(e))throw new Error("Invalid --line value. Pass a positive integer.");let n=Number(e);if(!Number.isSafeInteger(n)||n<=0)throw new Error("Invalid --line value. Pass a positive integer.");return n}async function Or(e){let n=e.inputPath.trim();if(n.length===0)throw new Error("Missing path. Pass <path>.");if(!O.isAbsolute(n))return{source:"workspace",path:on(n)};let t=O.resolve(n),i=qr(e.threadId);if(i&&_t(i,t))return{source:"thread-storage",path:on(qt(i,t))};let r=await _r(e.sdk,e.threadId);if(_t(r,t))return{source:"workspace",path:on(qt(r,t))};let o=i?"the target thread workspace or BB_THREAD_STORAGE":"the target thread workspace";throw new Error(`Absolute path must be inside ${o}.`)}async function _r(e,n){let t=await e.threads.get({threadId:n});if(t.environmentId===null)throw new Error(`Thread ${n} does not have an attached workspace.`);let i=await e.environments.get({environmentId:t.environmentId});if(i.path===null)throw new Error(`Thread ${n} does not have a local workspace path.`);return O.resolve(i.path)}function qr(e){if(W()!==e)return;let n=process.env.BB_THREAD_STORAGE?.trim();if(n)return O.resolve(n)}function _t(e,n){let t=O.relative(O.resolve(e),O.resolve(n));return t===""||!t.startsWith("..")&&!O.isAbsolute(t)}function qt(e,n){return O.relative(O.resolve(e),O.resolve(n)).split(O.sep).join("/")}function on(e){let n=O.normalize(e).split(O.sep).join("/");if(n.includes("\\")||O.posix.isAbsolute(n))throw new Error("Open path must be a relative file path without absolute path syntax.");let t=n.split("/");if(t.length===0||t.some(i=>i.length===0||i==="."||i===".."))throw new Error("Open path must be a relative file path without . or .. segments.");return t.join("/")}function Dr(e){let n=$({flagName:"<threadId> argument",value:e});if(n!==void 0)return{id:n,source:"arg"};let t=W();if(t!==void 0)return{id:t,source:"env"};throw new Error("Missing thread ID. Pass <threadId> or run inside a BB thread.")}function Mt(e,n){e.command("pane").description("Control an open thread pane in connected BB apps").usage("<maximize|restore|toggle|spotlight|clear-spotlight> [id] [options]").argument("<action>","Pane action: maximize, restore, toggle, spotlight, or clear-spotlight").argument("[id]","Thread ID. Omit inside a BB thread.").option("--json","Print machine-readable JSON output").action(f(async(t,i,r)=>{let o=zn.parse(t),s=Dr(i),a=await g(n()).threads.paneAction({action:o,threadId:s.id});v(r,{threadId:s.id,action:o,delivered:a.delivered})||(xe(s),console.log(`Thread: ${s.id}`),console.log(`Pane action: ${o}`),console.log(`Delivered: ${a.delivered}`))}))}var Lt=50;function Wt(e,n,t){if(e!==void 0){if(!/^\d+$/u.test(e)||Number(e)<1)throw new Error(`${n} must be a positive integer.`);if(t!==void 0&&Number(e)>t)throw new Error(`${n} must be at most ${t}.`);return e}}function sn(e){console.log(JSON.stringify(e,null,2))}var Nt=40;function Mr(e){let n=Date.now(),t=e.map(i=>[i.id,i.threadId,i.initiator==="user"?"":i.initiator==="system"?"System":i.senderThreadId??"Agent",ue(Lr(i.content),Nt),i.state,ue(i.failureReason===null?pe(i):`Failed: ${i.failureReason}`,Nt),Pt(i.sendAt,n)]);G({head:["ID","Thread","Sender","Message","State","Waiting on","Send at"],colWidths:ne(t,[2,6,6,7,5,10,7])},t);for(let i of e)i.failureReason!==null&&(console.log(`Failed ${i.id}: ${i.failureReason}`),console.log(`Retry: bb thread queue send ${i.threadId} ${i.id}`))}function Lr(e){let n=e.filter(t=>t.type==="text").map(t=>t.text).join(" ");return n.trim()===""?"(no text)":n}function Wr(e){let n=Ln.safeParse(e.trim());if(n.success)return n.data;throw new Error(`Invalid --wait-holder value '${e}'. Expected 'plugin:<plugin-id>'.`)}function jt(e,n){let t=e.command("section").description("Manage thread sections");t.command("list").description("List thread sections").option("--json","Print machine-readable JSON output").action(f(async o=>{let s=await g(n()).threadSections.list();if(!v(o,s)){if(s.length===0){console.log("No thread sections found");return}for(let a of s)console.log(`${a.id} ${a.name}`)}})),t.command("create <name>").description("Create a thread section").option("--json","Print machine-readable JSON output").action(f(async(o,s)=>{let a=await g(n()).threadSections.create({name:o});v(s,a)||console.log(`Thread section ${a.id} created: ${a.name}`)})),t.command("rename <id> <name>").description("Rename a thread section").option("--json","Print machine-readable JSON output").action(f(async(o,s,a)=>{let l=await g(n()).threadSections.update({id:o,name:s});v(a,l)||console.log(`Thread section ${l.id} renamed: ${l.name}`)})),t.command("delete <id>").description("Delete a thread section and remove its thread assignments").option("--yes","Skip the confirmation prompt").option("--json","Print machine-readable JSON output").action(f(async(o,s)=>{if(!s.yes&&!await Re(`Delete thread section ${o}?`))return;let a=await g(n()).threadSections.delete({id:o});v(s,a)||console.log(`Thread section ${a.id} deleted; ${a.updatedThreadCount} thread(s) unsectioned`)})),e.command("search <query>").description("Search threads and messages").option("--limit <count>",`Maximum results per group (1-${Lt})`).option("--json","Print machine-readable JSON output").action(f(async(o,s)=>{let a=await g(n()).threads.search({query:o,limitPerGroup:Wt(s.limit,"--limit",Lt)});v(s,a)||sn(a)})),e.command("history <id>").description("List a thread's prompt history").option("--limit <count>","Maximum history entries").option("--json","Print machine-readable JSON output").action(f(async(o,s)=>{let a=await g(n()).threads.promptHistory({threadId:o,limit:Wt(s.limit,"--limit")});v(s,a)||sn(a)}));for(let[o,s]of[["read",!0],["unread",!1]])e.command(`${o} [id]`).description(`Mark a thread ${o}`).option("--self","Target the current thread (from BB_THREAD_ID)").option("--json","Print machine-readable JSON output").action(f(async(a,l)=>{let m=w(a,l),c=g(n()),p=s?await c.threads.markRead({threadId:m}):await c.threads.markUnread({threadId:m});v(l,p)||console.log(`Thread ${m} marked ${o}`)}));e.command("reorder-pinned <id>").description("Move a pinned thread between adjacent pinned threads").option("--after <id>","Previous pinned thread, or omit for the start").option("--before <id>","Next pinned thread, or omit for the end").option("--json","Print machine-readable JSON output").action(f(async(o,s)=>{let a=await g(n()).threads.reorderPinned({threadId:o,previousThreadId:s.after??null,nextThreadId:s.before??null});v(s,a)||console.log(`Pinned thread ${o} reordered`)}));let i=e.command("queue").description("Manage queued thread messages");i.command("list [threadId]").description("List queued messages; omit the thread to list every one").option("--wait-holder <holder>","Filter to rows one plugin is holding: plugin:<plugin-id>").option("--json","Print machine-readable JSON output").action(f(async(o,s)=>{let a=g(n()),l=o===void 0?await a.threads.queue.list({...s.waitHolder?{waitHolder:Wr(s.waitHolder)}:{}}):await a.threads.queuedMessages.list({threadId:o});if(!v(s,l)){if(l.length===0){console.log("No queued messages found");return}Mr(l)}})),i.command("create <threadId> [message]").description("Create a queued message with text and attachments").option("--model <model>","Model override for the queued message").option("--message-file <path>",`Read the message from a file instead of [message]; ${N}`).option("--file <path>","Upload an absolute path or file: URL from this CLI machine or pass an uploaded attachment path (repeatable)",A,[]).option("--image <path>","Upload an absolute path or file: URL from this CLI machine or pass an uploaded attachment path (repeatable)",A,[]).option("--json","Print machine-readable JSON output").action(f(async(o,s,a)=>{let l=await J({file:a.messageFile,fileLabel:"--message-file",inline:s,inlineLabel:"<message>"}),m=g(n()),c=await U({input:j({message:l,files:a.file,images:a.image}),resolveProjectId:async()=>(await m.threads.get({threadId:o})).projectId,sdk:m}),p=await m.threads.queuedMessages.create({threadId:o,input:c,...a.model?{model:a.model}:{}});v(a,p)||console.log(`Queued message ${p.id} created for thread ${o}`)})),i.command("update <threadId> <messageId> [message]").description("Update a queued message in place").option("--message-file <path>",`Read the message from a file instead of [message]; ${N}`).option("--file <path>","Upload an absolute path or file: URL from this CLI machine or pass an uploaded attachment path (repeatable)",A,[]).option("--image <path>","Upload an absolute path or file: URL from this CLI machine or pass an uploaded attachment path (repeatable)",A,[]).option("--json","Print machine-readable JSON output").action(f(async(o,s,a,l)=>{let m=await J({file:l.messageFile,fileLabel:"--message-file",inline:a,inlineLabel:"<message>"}),c=g(n()),p=c.threads.queuedMessages,T=(await p.list({threadId:o})).find(x=>x.id===s);if(!T)throw new Error(`Queued message ${s} not found on thread ${o}.`);let b=await U({input:j({message:m,files:l.file,images:l.image}),resolveProjectId:async()=>(await c.threads.get({threadId:o})).projectId,sdk:c}),S=await p.update({threadId:o,queuedMessageId:s,expectedUpdatedAt:T.updatedAt,input:b});v(l,S)||console.log(`Queued message ${s} updated`)})),i.command("send <threadId> <messageId>").description("Send and remove a queued message").option("--mode <mode>","Delivery mode: auto or steer","auto").option("--json","Print machine-readable JSON output").action(f(async(o,s,a)=>{if(a.mode!=="auto"&&a.mode!=="steer")throw new Error("--mode must be auto or steer.");let l=await g(n()).threads.queuedMessages.send({threadId:o,queuedMessageId:s,mode:a.mode});if(!v(a,l)){if(l.delivery==="queued"){console.log(`Queued message ${s} is still queued (${pe(l.queuedMessage)})`);return}console.log(`Queued message ${s} sent`)}})),i.command("delete <threadId> <messageId>").description("Delete a queued message").option("--json","Print machine-readable JSON output").action(f(async(o,s,a)=>{let l=await g(n()).threads.queuedMessages.delete({threadId:o,queuedMessageId:s});v(a,l)||console.log(`Queued message ${s} deleted`)})),i.command("reorder <threadId> <messageId>").description("Move a queued message between adjacent messages").option("--after <id>","Previous queued message, or omit for the start").option("--before <id>","Next queued message, or omit for the end").option("--group-boundary <id>","Current group-boundary message id").option("--json","Print machine-readable JSON output").action(f(async(o,s,a)=>{let l=await g(n()).threads.queuedMessages.reorder({threadId:o,queuedMessageId:s,previousQueuedMessageId:a.after??null,nextQueuedMessageId:a.before??null,...a.groupBoundary?{groupBoundaryQueuedMessageId:a.groupBoundary}:{}});v(a,l)||console.log(`Queued message ${s} reordered`)})),i.command("group <threadId> <boundaryMessageId>").description("Set the grouped queued-message prefix").requiredOption("--prefix <ids>","Comma-separated expected grouped-prefix ids").option("--json","Print machine-readable JSON output").action(f(async(o,s,a)=>{let l=a.prefix.split(",").map(c=>c.trim()).filter(Boolean);if(l.length===0)throw new Error("--prefix must contain at least one message id.");let m=await g(n()).threads.queuedMessages.setGroupBoundary({threadId:o,groupBoundaryQueuedMessageId:s,expectedGroupedPrefixQueuedMessageIds:l});v(a,m)||console.log(`Queued message group boundary set to ${s}`)}));let r=e.command("tabs").description("Inspect and update persisted thread panel tabs");r.command("show <threadId>").description("Show persisted panel tabs").option("--json","Print machine-readable JSON output").action(f(async(o,s)=>{let a=await g(n()).threads.tabs.get({threadId:o});v(s,a)||sn(a)})),r.command("set <threadId>").description("Replace persisted panel tabs with revision checking").requiredOption("--expected-revision <number>","Current tab revision").requiredOption("--tabs-json <json>","JSON array of tab descriptors").option("--json","Print machine-readable JSON output").action(f(async(o,s)=>{let a=Zn.parse({expectedRevision:Number(s.expectedRevision),tabs:JSON.parse(s.tabsJson)}),l=await g(n()).threads.tabs.update({threadId:o,...a});v(s,l)||console.log(`Thread ${o} tabs updated to revision ${l.revision}`)}))}function P(e,n){throw new Error(n??`Unexpected value: ${String(e)}`)}var Nr=new Set(["sh","bash","zsh"]),jr=new Set(["&&","||","|",";",`
|
|
4
4
|
`]);function Fr(e){if(e.length<2)return e;let n=e[0];if(n!=="'"&&n!=='"'||e[e.length-1]!==n)return e;let t=e.slice(1,-1);if(n==="'")return t;let i="";for(let r=0;r<t.length;r+=1){let o=t[r];if(o==="\\"&&r+1<t.length){let s=t[r+1];if(s==="$"||s==="`"||s==='"'||s==="\\"||s===`
|
|
5
5
|
`){i+=s,r+=1;continue}}i+=o}return i}function Br(e){let n=e.split("/").pop()??e;return Nr.has(n)}function Vr(e){let n=e.trim();if(n.length===0)return;let t=/^(\S+)\s+(-lc|-c)\s+([\s\S]+)$/.exec(n);if(!t)return n;let i=t[1],r=t[3];return!i||!r||!Br(i)?n:Fr(r.trim())}var Hr=new Set(["$","`",'"',"\\",`
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from "node:module";import { dirname as __pathDirname } from "node:path";import { fileURLToPath as __fileURLToPath } from "node:url";const require = __createRequire(import.meta.url);const __filename = __fileURLToPath(import.meta.url);const __dirname = __pathDirname(__filename);
|
|
2
|
+
import{a as v}from"./chunk-N3HRBBF4.js";import{A as p,B as s,Q as h,R as E,S as c,T,U as y,Z as u,y as o}from"./chunk-NZY63D4X.js";import{a as t}from"./chunk-7LJFYNRQ.js";import"./chunk-5PWLIQO6.js";var i=t.object({id:t.string(),scope:T,threadId:t.string(),seq:t.number(),type:o,data:t.record(t.string(),t.unknown()),createdAt:t.number()}),R=new Set(["client/turn/requested"]),f={kind:"new-turn"},S=E.extend({senderThreadId:t.string().nullable().default(null),target:h.default(f),systemMessageKind:p.default("unlabeled"),systemMessageSubject:s.nullable().default(null)}).superRefine(c);function l(e){let{scope:r,threadId:a,type:n,...d}=e;return d}function I(e){let{scope:r,turnId:a,...n}=e;return n}function w(e){let r=T.safeParse(e.scope);if(!r.success)throw new Error("Stored thread event is missing valid scope");let a=r.data,n=v({type:e.type,data:e.data},{turnId:y(a)??null}),d=R.has(n.type)?S.parse(n.data):n.data;return u.parse({...I(d),...e.providerThreadId!=null?{providerThreadId:e.providerThreadId}:{},scope:a,threadId:e.threadId,type:n.type})}function g(e){let{event:r,...a}=e;return{...a,type:r.type,data:l(r)}}function m(e){return g({id:e.id,scope:e.scope,threadId:e.threadId,seq:e.seq,createdAt:e.createdAt,event:w({type:e.type,data:e.data,threadId:e.threadId,scope:e.scope})})}function x(e){let r=i.parse(e);return m(r)}var _=i.transform(e=>m(e));export{x as parseThreadEventRow};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire as __createRequire } from "node:module";import { dirname as __pathDirname } from "node:path";import { fileURLToPath as __fileURLToPath } from "node:url";const require = __createRequire(import.meta.url);const __filename = __fileURLToPath(import.meta.url);const __dirname = __pathDirname(__filename);
|
|
2
|
-
import{a as R,b as P}from"./chunk-ATDR5E2C.js";import{c as C,d as A}from"./chunk-XSBF3HQR.js";import{a as c,d as $,i as v,j as h}from"./chunk-ZWBRH7R6.js";import"./chunk-NCQMSH7M.js";import"./chunk-WWZ7D6EQ.js";import{b}from"./chunk-7EOZF4HA.js";import"./chunk-SDZLOCRA.js";import"./chunk-QE47NRKX.js";import"./chunk-5ZMA4MIX.js";import"./chunk-ZT24MY2V.js";import"./chunk-REEBSQ75.js";import"./chunk-E7J2DJY7.js";import"./chunk-7LJFYNRQ.js";import"./chunk-5PWLIQO6.js";var j="Download",l={"up-to-date":{icon:"CircleCheck",label:"Up to date",tone:"muted"},"in-progress":{icon:"Loading",label:"In progress",tone:"muted",inFlight:!0},"update-available":{icon:j,label:"Update available",tone:"muted"},"restart-required":{icon:"ArrowReloadHorizontal",label:"Downloaded",tone:"muted"},"not-installed":{icon:"Download",label:"Not installed",tone:"muted"},"update-manually":{icon:"Terminal",label:"Update in terminal",tone:"muted"},"latest-unknown":{icon:"CircleQuestion",label:"Latest unknown",tone:"muted"},failed:{icon:"CircleX",label:"Failed",tone:"error"},offline:{icon:"CircleX",label:"Offline",tone:"muted"}};var _=1e3,D=900*1e3,T=10;function L(t){return t.installed?t.needsUpdate||t.versionUnsupported?t.installAction===null?"update-manually":"update-available":t.latestVersion===null?"latest-unknown":"up-to-date":"not-installed"}function M(t){return l[L(t)].label}function H(t){let e=t.currentVersion??"unknown",n=t.latestVersion;return n!==null&&n!==t.currentVersion?`${e} -> ${n}`:e}function x(t){return t.installAction!==null&&(!t.installed||t.needsUpdate||t.versionUnsupported)}function E(t,e){return e===void 0?R(t,"persistent"):t.filter(n=>n.id===P(t,e))}async function I(t,e){return Promise.all(e.map(async n=>{if(n.status!=="connected")return{host:n,providerStatus:null,statusError:null};try{return{host:n,providerStatus:await t.hosts.providerCliStatus({hostId:n.id}),statusError:null}}catch(o){return{host:n,providerStatus:null,statusError:o instanceof Error?o.message:String(o)}}}))}function J(t){let e=[];for(let n of t)if(n.providerStatus!==null)for(let[o,a]of Object.entries(n.providerStatus))x(a)&&e.push({host:n.host,provider:o,status:a});return e}function B(t){let e=[[...t.appRow]];for(let n of t.entries){if(n.host.status!=="connected"){e.push([n.host.name,"-","offline"]);continue}if(n.providerStatus===null){e.push([n.host.name,"-",n.statusError??"status failed"]);continue}for(let o of Object.values(n.providerStatus))e.push([`${n.host.name} \xB7 ${o.displayName}`,H(o),M(o)])}C({head:["Target","Version","State"],colWidths:A(e,[6,7,5]),trimTrailingWhitespace:!0},e)}function S(t){return t.commit===null?t.version:`source checkout ${t.commit.slice(0,10)}`}function N(t){let e=t.available;if(e===null)return null;if(e.commit===null)return e.version;let n=e.commitCount??0;return`${e.commit.slice(0,10)} (+${String(n)} commit${n===1?"":"s"})`}function O(t){if(t.support.kind==="supported")return"";switch(t.support.reason){case"development":return"In-app updates are unavailable in development mode.";case"desktop":return"The desktop app updates itself; use its update controls.";case"unmanaged":return"In-app updates are off. Start bb with `npx bb-app start` or `pnpm start`, without `--no-in-app-updates`, to turn them on."}}function w(t){let e=S(t.to);switch(t.outcome){case"updated":return`Updated bb to ${e}.`;case"failed":return`Update to ${e} failed: ${t.message??"unknown error"}`}}async function V(t,e){try{return await t.system.appUpdate({force:e})}catch{return null}}function F(t){let{appUpdate:e,version:n}=t;if(e!==null&&(e.support.kind==="supported"||e.desktopUpdateSupported===!0)){let s=N(e),i=S(e.current),p=e.activity.phase!=="idle"?`Updating to ${e.activity.targetVersion}`:s===null?e.blocked?.reason==="fetch-failed"?`${l["latest-unknown"].label} (${e.blocked.message})`:e.blocked!==null?`${l["update-manually"].label} (${e.blocked.message})`:e.support.kind==="supported"&&e.support.mode==="npm"&&n.latestVersion===null?l["latest-unknown"].label:l["up-to-date"].label:e.blocked!==null?`${l["update-available"].label} (blocked: ${e.blocked.message})`:`${l["update-available"].label} (run: bb updates app apply)`;return["bb-app",s===null?i:`${i} -> ${s}`,p]}if(n.installKind==="source")return["bb-app",`source checkout ${n.currentCommit===null?`build ${n.currentVersion}`:n.currentCommit.slice(0,10)}`,"Latest unknown (update this checkout with Git; automatic update checks are off)"];let o=n.isDevelopment?"development mode":n.updateAvailable?`${l["update-available"].label} (run: ${n.upgradeCommand})`:n.latestVersion===null?l["latest-unknown"].label:l["up-to-date"].label;return["bb-app",n.latestVersion!==null&&n.latestVersion!==n.currentVersion?`${n.currentVersion} -> ${n.latestVersion}`:n.currentVersion,o]}function K(t){let e=S(t.current);if(t.support.kind!=="supported"&&t.desktopUpdateSupported!==!0){console.log(`bb-app ${e}`),console.log(O(t));return}let n=N(t);console.log(n===null?t.blocked!==null||t.activity.phase!=="idle"||t.lastResult!==null&&!t.lastResult.acknowledged&&t.lastResult.outcome==="failed"?`bb-app ${e}`:`bb-app ${e} is up to date.`:`bb-app ${e} -> ${n}`),t.activity.phase==="preparing"?console.log(`Updating to ${t.activity.targetVersion}: ${t.activity.step}`):t.activity.phase==="restarting"&&console.log(`Restarting into ${t.activity.targetVersion}`);let o=t.available?.subjects??[];for(let s of o.slice(0,T))console.log(` ${s}`);let a=(t.available?.commitCount??o.length)-Math.min(o.length,T);a>0&&console.log(` \u2026 ${String(a)} more`),t.blocked!==null?console.log(`Blocked: ${t.blocked.message}`):n!==null&&t.activity.phase==="idle"&&console.log("Run bb updates app apply to update and restart bb."),t.lastResult!==null&&!t.lastResult.acknowledged&&console.log(w(t.lastResult))}function W(t){return new Promise(e=>setTimeout(e,t))}async function q(t){let e=Date.now()+D,n=null,o=a=>{t.json||a===n||(n=a,console.log(a))};for(;Date.now()<e;){await W(_);let a=await V(t.sdk,!1);if(a===null){o("Restarting bb\u2026");continue}let s=a.lastResult;if(s!==null&&s.id!==t.previousResultId)return a;a.activity.phase==="preparing"?o(`${a.activity.step}\u2026`):a.activity.phase==="restarting"&&o("Restarting bb\u2026")}throw new v("Timed out waiting for the update to finish. Run bb updates app to check on it; if bb did not come back, check the terminal running it.",1)}function G(t,e){let n=t.command("app").description("Inspect and apply in-app updates to bb itself");n.command("status",{isDefault:!0}).description("Show whether bb can update itself and what is available").option("--json","Print machine-readable JSON output").action(h(async o=>{let s=await b(e()).system.appUpdate({force:!0});c(o,s)||K(s)})),n.command("apply").description("Download the available bb update and restart bb into it").option("--yes","Interrupt running threads without asking").option("--no-wait","Return once the update starts instead of following it").option("--json","Print machine-readable JSON output").action(h(async o=>{let a=b(e()),s=await a.system.appUpdate({force:!0});if(s.support.kind!=="supported"&&s.desktopUpdateSupported!==!0)throw new v(O(s),1);if(s.blocked!==null)throw new v(s.blocked.message,1);if(s.available===null){if(c(o,s))return;console.log(`bb-app ${S(s.current)} is up to date.`);return}let i=o.yes===!0;if(s.runningThreadCount>0&&!i){let f=s.runningThreadCount;if(i=await $(`${String(f)} thread${f===1?" is":"s are"} running. Updating restarts bb and interrupts ${f===1?"it":"them"}. Continue?`),!i){console.log("Update cancelled.");return}}let p=s.lastResult?.id??null,m=await a.system.applyAppUpdate({confirmInterruptingThreads:i});if(!o.wait){if(c(o,m))return;console.log(`Updating bb to ${s.available.version}. Run bb updates app to follow it.`);return}o.json||console.log(`Updating bb to ${s.available.version}`);let d=await q({json:o.json===!0,previousResultId:p,sdk:a}),r=d.lastResult;if(c(o,d)){r?.outcome!=="updated"&&(process.exitCode=1);return}if(r!==null){if(r.outcome!=="updated")throw new v(w(r),1);console.log(w(r))}})),n.command("dismiss").description("Mark the last update result as seen").option("--json","Print machine-readable JSON output").action(h(async o=>{let a=b(e()),s=await a.system.appUpdate(),i=s.lastResult;if(i===null||i.acknowledged){if(c(o,s))return;console.log("No update result to dismiss.");return}let p=await a.system.acknowledgeAppUpdate({id:i.id});c(o,p)||console.log("Dismissed the last update result.")}))}function nt(t,e){let n=t.command("updates").description("Inspect and apply bb and provider CLI updates");G(n,e),n.command("status",{isDefault:!0}).description("Show bb and provider CLI update status across machines").option("--machine <id-or-name>","Limit to one machine").option("--json","Print machine-readable JSON output").action(h(async o=>{let a=b(e()),[s,i,p]=await Promise.all([a.system.version(),V(a,!1),a.hosts.list()]),m=await I(a,E(p,o.machine));c(o,{app:s,appUpdate:i,machines:m.map(d=>({host:d.host,providerStatus:d.providerStatus,statusError:d.statusError}))})||B({appRow:F({appUpdate:i,version:s}),entries:m})})),n.command("apply").description("Run every available provider CLI install/update").option("--machine <id-or-name>","Limit to one machine").option("--json","Print machine-readable JSON output").action(h(async o=>{let a=b(e()),s=await a.hosts.list(),i=await I(a,E(s,o.machine)),p=J(i);if(p.length===0){if(c(o,{results:[]}))return;let r=i.some(f=>f.providerStatus!==null&&Object.values(f.providerStatus).some(u=>u.installed&&u.needsUpdate&&u.installAction===null));console.log(r?"No updates bb can apply. Run bb updates status for manual updates.":"Everything is up to date.");return}let m=[];for(let r of p){let f=r.status.installAction?.kind??"install";o.json||console.log(`${r.status.displayName} on ${r.host.name}: running ${f}\u2026`);try{let u=await a.hosts.installProviderCli({hostId:r.host.id,provider:r.provider,actionKind:f}),g=u.find(U=>U.type==="completed"),y=u.find(U=>U.type==="error"),k=g?.type==="completed"&&g.success;m.push({hostId:r.host.id,hostName:r.host.name,provider:r.provider,success:k,message:y?.type==="error"?y.message:null}),o.json||console.log(k?`${r.status.displayName} on ${r.host.name}: done`:`${r.status.displayName} on ${r.host.name}: failed${y?.type==="error"?` (${y.message})`:""}`)}catch(u){let g=u instanceof Error?u.message:String(u);m.push({hostId:r.host.id,hostName:r.host.name,provider:r.provider,success:!1,message:g}),o.json||console.log(`${r.status.displayName} on ${r.host.name}: failed (${g})`)}}if(c(o,{results:m}))return;let d=m.filter(r=>!r.success);if(d.length>0)throw new Error(`${d.length} update${d.length===1?"":"s"} failed.`)}))}export{L as providerState,nt as registerUpdatesCommands};
|
|
2
|
+
import{a as R,b as P}from"./chunk-CZ4K4Z4T.js";import{c as C,d as A}from"./chunk-XSBF3HQR.js";import{a as c,d as $,i as v,j as h}from"./chunk-DCRUVPRR.js";import"./chunk-NCQMSH7M.js";import"./chunk-WWZ7D6EQ.js";import{b}from"./chunk-F7XCHQA3.js";import"./chunk-HDUE2YKX.js";import"./chunk-NZY63D4X.js";import"./chunk-FZ76WJJG.js";import"./chunk-ZT24MY2V.js";import"./chunk-L5UJ4QUD.js";import"./chunk-E7J2DJY7.js";import"./chunk-7LJFYNRQ.js";import"./chunk-5PWLIQO6.js";var j="Download",l={"up-to-date":{icon:"CircleCheck",label:"Up to date",tone:"muted"},"in-progress":{icon:"Loading",label:"In progress",tone:"muted",inFlight:!0},"update-available":{icon:j,label:"Update available",tone:"muted"},"restart-required":{icon:"ArrowReloadHorizontal",label:"Downloaded",tone:"muted"},"not-installed":{icon:"Download",label:"Not installed",tone:"muted"},"update-manually":{icon:"Terminal",label:"Update in terminal",tone:"muted"},"latest-unknown":{icon:"CircleQuestion",label:"Latest unknown",tone:"muted"},failed:{icon:"CircleX",label:"Failed",tone:"error"},offline:{icon:"CircleX",label:"Offline",tone:"muted"}};var _=1e3,D=900*1e3,T=10;function L(t){return t.installed?t.needsUpdate||t.versionUnsupported?t.installAction===null?"update-manually":"update-available":t.latestVersion===null?"latest-unknown":"up-to-date":"not-installed"}function M(t){return l[L(t)].label}function H(t){let e=t.currentVersion??"unknown",n=t.latestVersion;return n!==null&&n!==t.currentVersion?`${e} -> ${n}`:e}function x(t){return t.installAction!==null&&(!t.installed||t.needsUpdate||t.versionUnsupported)}function E(t,e){return e===void 0?R(t,"persistent"):t.filter(n=>n.id===P(t,e))}async function I(t,e){return Promise.all(e.map(async n=>{if(n.status!=="connected")return{host:n,providerStatus:null,statusError:null};try{return{host:n,providerStatus:await t.hosts.providerCliStatus({hostId:n.id}),statusError:null}}catch(o){return{host:n,providerStatus:null,statusError:o instanceof Error?o.message:String(o)}}}))}function J(t){let e=[];for(let n of t)if(n.providerStatus!==null)for(let[o,a]of Object.entries(n.providerStatus))x(a)&&e.push({host:n.host,provider:o,status:a});return e}function B(t){let e=[[...t.appRow]];for(let n of t.entries){if(n.host.status!=="connected"){e.push([n.host.name,"-","offline"]);continue}if(n.providerStatus===null){e.push([n.host.name,"-",n.statusError??"status failed"]);continue}for(let o of Object.values(n.providerStatus))e.push([`${n.host.name} \xB7 ${o.displayName}`,H(o),M(o)])}C({head:["Target","Version","State"],colWidths:A(e,[6,7,5]),trimTrailingWhitespace:!0},e)}function S(t){return t.commit===null?t.version:`source checkout ${t.commit.slice(0,10)}`}function N(t){let e=t.available;if(e===null)return null;if(e.commit===null)return e.version;let n=e.commitCount??0;return`${e.commit.slice(0,10)} (+${String(n)} commit${n===1?"":"s"})`}function O(t){if(t.support.kind==="supported")return"";switch(t.support.reason){case"development":return"In-app updates are unavailable in development mode.";case"desktop":return"The desktop app updates itself; use its update controls.";case"unmanaged":return"In-app updates are off. Start bb with `npx bb-app start` or `pnpm start`, without `--no-in-app-updates`, to turn them on."}}function w(t){let e=S(t.to);switch(t.outcome){case"updated":return`Updated bb to ${e}.`;case"failed":return`Update to ${e} failed: ${t.message??"unknown error"}`}}async function V(t,e){try{return await t.system.appUpdate({force:e})}catch{return null}}function F(t){let{appUpdate:e,version:n}=t;if(e!==null&&(e.support.kind==="supported"||e.desktopUpdateSupported===!0)){let s=N(e),i=S(e.current),p=e.activity.phase!=="idle"?`Updating to ${e.activity.targetVersion}`:s===null?e.blocked?.reason==="fetch-failed"?`${l["latest-unknown"].label} (${e.blocked.message})`:e.blocked!==null?`${l["update-manually"].label} (${e.blocked.message})`:e.support.kind==="supported"&&e.support.mode==="npm"&&n.latestVersion===null?l["latest-unknown"].label:l["up-to-date"].label:e.blocked!==null?`${l["update-available"].label} (blocked: ${e.blocked.message})`:`${l["update-available"].label} (run: bb updates app apply)`;return["bb-app",s===null?i:`${i} -> ${s}`,p]}if(n.installKind==="source")return["bb-app",`source checkout ${n.currentCommit===null?`build ${n.currentVersion}`:n.currentCommit.slice(0,10)}`,"Latest unknown (update this checkout with Git; automatic update checks are off)"];let o=n.isDevelopment?"development mode":n.updateAvailable?`${l["update-available"].label} (run: ${n.upgradeCommand})`:n.latestVersion===null?l["latest-unknown"].label:l["up-to-date"].label;return["bb-app",n.latestVersion!==null&&n.latestVersion!==n.currentVersion?`${n.currentVersion} -> ${n.latestVersion}`:n.currentVersion,o]}function K(t){let e=S(t.current);if(t.support.kind!=="supported"&&t.desktopUpdateSupported!==!0){console.log(`bb-app ${e}`),console.log(O(t));return}let n=N(t);console.log(n===null?t.blocked!==null||t.activity.phase!=="idle"||t.lastResult!==null&&!t.lastResult.acknowledged&&t.lastResult.outcome==="failed"?`bb-app ${e}`:`bb-app ${e} is up to date.`:`bb-app ${e} -> ${n}`),t.activity.phase==="preparing"?console.log(`Updating to ${t.activity.targetVersion}: ${t.activity.step}`):t.activity.phase==="restarting"&&console.log(`Restarting into ${t.activity.targetVersion}`);let o=t.available?.subjects??[];for(let s of o.slice(0,T))console.log(` ${s}`);let a=(t.available?.commitCount??o.length)-Math.min(o.length,T);a>0&&console.log(` \u2026 ${String(a)} more`),t.blocked!==null?console.log(`Blocked: ${t.blocked.message}`):n!==null&&t.activity.phase==="idle"&&console.log("Run bb updates app apply to update and restart bb."),t.lastResult!==null&&!t.lastResult.acknowledged&&console.log(w(t.lastResult))}function W(t){return new Promise(e=>setTimeout(e,t))}async function q(t){let e=Date.now()+D,n=null,o=a=>{t.json||a===n||(n=a,console.log(a))};for(;Date.now()<e;){await W(_);let a=await V(t.sdk,!1);if(a===null){o("Restarting bb\u2026");continue}let s=a.lastResult;if(s!==null&&s.id!==t.previousResultId)return a;a.activity.phase==="preparing"?o(`${a.activity.step}\u2026`):a.activity.phase==="restarting"&&o("Restarting bb\u2026")}throw new v("Timed out waiting for the update to finish. Run bb updates app to check on it; if bb did not come back, check the terminal running it.",1)}function G(t,e){let n=t.command("app").description("Inspect and apply in-app updates to bb itself");n.command("status",{isDefault:!0}).description("Show whether bb can update itself and what is available").option("--json","Print machine-readable JSON output").action(h(async o=>{let s=await b(e()).system.appUpdate({force:!0});c(o,s)||K(s)})),n.command("apply").description("Download the available bb update and restart bb into it").option("--yes","Interrupt running threads without asking").option("--no-wait","Return once the update starts instead of following it").option("--json","Print machine-readable JSON output").action(h(async o=>{let a=b(e()),s=await a.system.appUpdate({force:!0});if(s.support.kind!=="supported"&&s.desktopUpdateSupported!==!0)throw new v(O(s),1);if(s.blocked!==null)throw new v(s.blocked.message,1);if(s.available===null){if(c(o,s))return;console.log(`bb-app ${S(s.current)} is up to date.`);return}let i=o.yes===!0;if(s.runningThreadCount>0&&!i){let f=s.runningThreadCount;if(i=await $(`${String(f)} thread${f===1?" is":"s are"} running. Updating restarts bb and interrupts ${f===1?"it":"them"}. Continue?`),!i){console.log("Update cancelled.");return}}let p=s.lastResult?.id??null,m=await a.system.applyAppUpdate({confirmInterruptingThreads:i});if(!o.wait){if(c(o,m))return;console.log(`Updating bb to ${s.available.version}. Run bb updates app to follow it.`);return}o.json||console.log(`Updating bb to ${s.available.version}`);let d=await q({json:o.json===!0,previousResultId:p,sdk:a}),r=d.lastResult;if(c(o,d)){r?.outcome!=="updated"&&(process.exitCode=1);return}if(r!==null){if(r.outcome!=="updated")throw new v(w(r),1);console.log(w(r))}})),n.command("dismiss").description("Mark the last update result as seen").option("--json","Print machine-readable JSON output").action(h(async o=>{let a=b(e()),s=await a.system.appUpdate(),i=s.lastResult;if(i===null||i.acknowledged){if(c(o,s))return;console.log("No update result to dismiss.");return}let p=await a.system.acknowledgeAppUpdate({id:i.id});c(o,p)||console.log("Dismissed the last update result.")}))}function nt(t,e){let n=t.command("updates").description("Inspect and apply bb and provider CLI updates");G(n,e),n.command("status",{isDefault:!0}).description("Show bb and provider CLI update status across machines").option("--machine <id-or-name>","Limit to one machine").option("--json","Print machine-readable JSON output").action(h(async o=>{let a=b(e()),[s,i,p]=await Promise.all([a.system.version(),V(a,!1),a.hosts.list()]),m=await I(a,E(p,o.machine));c(o,{app:s,appUpdate:i,machines:m.map(d=>({host:d.host,providerStatus:d.providerStatus,statusError:d.statusError}))})||B({appRow:F({appUpdate:i,version:s}),entries:m})})),n.command("apply").description("Run every available provider CLI install/update").option("--machine <id-or-name>","Limit to one machine").option("--json","Print machine-readable JSON output").action(h(async o=>{let a=b(e()),s=await a.hosts.list(),i=await I(a,E(s,o.machine)),p=J(i);if(p.length===0){if(c(o,{results:[]}))return;let r=i.some(f=>f.providerStatus!==null&&Object.values(f.providerStatus).some(u=>u.installed&&u.needsUpdate&&u.installAction===null));console.log(r?"No updates bb can apply. Run bb updates status for manual updates.":"Everything is up to date.");return}let m=[];for(let r of p){let f=r.status.installAction?.kind??"install";o.json||console.log(`${r.status.displayName} on ${r.host.name}: running ${f}\u2026`);try{let u=await a.hosts.installProviderCli({hostId:r.host.id,provider:r.provider,actionKind:f}),g=u.find(U=>U.type==="completed"),y=u.find(U=>U.type==="error"),k=g?.type==="completed"&&g.success;m.push({hostId:r.host.id,hostName:r.host.name,provider:r.provider,success:k,message:y?.type==="error"?y.message:null}),o.json||console.log(k?`${r.status.displayName} on ${r.host.name}: done`:`${r.status.displayName} on ${r.host.name}: failed${y?.type==="error"?` (${y.message})`:""}`)}catch(u){let g=u instanceof Error?u.message:String(u);m.push({hostId:r.host.id,hostName:r.host.name,provider:r.provider,success:!1,message:g}),o.json||console.log(`${r.status.displayName} on ${r.host.name}: failed (${g})`)}}if(c(o,{results:m}))return;let d=m.filter(r=>!r.success);if(d.length>0)throw new Error(`${d.length} update${d.length===1?"":"s"} failed.`)}))}export{L as providerState,nt as registerUpdatesCommands};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire as __createRequire } from "node:module";import { dirname as __pathDirname } from "node:path";import { fileURLToPath as __fileURLToPath } from "node:url";const require = __createRequire(import.meta.url);const __filename = __fileURLToPath(import.meta.url);const __dirname = __pathDirname(__filename);
|
|
2
|
-
import{a as n,j as r}from"./chunk-
|
|
2
|
+
import{a as n,j as r}from"./chunk-DCRUVPRR.js";import"./chunk-NCQMSH7M.js";import"./chunk-WWZ7D6EQ.js";import{b as e}from"./chunk-F7XCHQA3.js";import"./chunk-HDUE2YKX.js";import"./chunk-NZY63D4X.js";import"./chunk-FZ76WJJG.js";import"./chunk-ZT24MY2V.js";import"./chunk-L5UJ4QUD.js";import"./chunk-E7J2DJY7.js";import"./chunk-7LJFYNRQ.js";import"./chunk-5PWLIQO6.js";import{readFile as s}from"node:fs/promises";import{basename as d}from"node:path";function v(c,m){c.command("voice").description("Voice input utilities").command("transcribe <file>").description("Transcribe an audio file with BB's configured voice service").option("--prompt <text>","Optional transcription context").option("--type <mime>","Audio MIME type","audio/webm").option("--json","Print machine-readable JSON output").action(r(async(i,o)=>{let a=await s(i),p=new File([a],d(i),{type:o.type??"audio/webm"}),t=await e(m()).system.transcribeVoice({file:p,...o.prompt?{prompt:o.prompt}:{}});n(o,t)||console.log(t.text)}))}export{v as registerVoiceCommands};
|