dmux 5.1.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -143
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +99 -56
- package/dist/DmuxApp.js.map +1 -1
- package/dist/actions/implementations/closeAction.d.ts.map +1 -1
- package/dist/actions/implementations/closeAction.js +55 -21
- package/dist/actions/implementations/closeAction.js.map +1 -1
- package/dist/actions/implementations/index.d.ts +1 -0
- package/dist/actions/implementations/index.d.ts.map +1 -1
- package/dist/actions/implementations/index.js +3 -0
- package/dist/actions/implementations/index.js.map +1 -1
- package/dist/actions/implementations/mergeAction.d.ts.map +1 -1
- package/dist/actions/implementations/mergeAction.js +61 -20
- package/dist/actions/implementations/mergeAction.js.map +1 -1
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +6 -0
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/merge/conflictResolution.d.ts.map +1 -1
- package/dist/actions/merge/conflictResolution.js +19 -13
- package/dist/actions/merge/conflictResolution.js.map +1 -1
- package/dist/actions/merge/issueHandlers/mainDirtyHandler.d.ts.map +1 -1
- package/dist/actions/merge/issueHandlers/mainDirtyHandler.js +8 -6
- package/dist/actions/merge/issueHandlers/mainDirtyHandler.js.map +1 -1
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.d.ts +1 -1
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.d.ts.map +1 -1
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.js +9 -2
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.js.map +1 -1
- package/dist/actions/merge/mergeExecution.d.ts.map +1 -1
- package/dist/actions/merge/mergeExecution.js +2 -1
- package/dist/actions/merge/mergeExecution.js.map +1 -1
- package/dist/actions/merge/multiMergeOrchestrator.d.ts.map +1 -1
- package/dist/actions/merge/multiMergeOrchestrator.js +33 -14
- package/dist/actions/merge/multiMergeOrchestrator.js.map +1 -1
- package/dist/actions/types.d.ts +4 -2
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js +19 -1
- package/dist/actions/types.js.map +1 -1
- package/dist/components/dialogs/AgentChoiceDialog.d.ts +2 -1
- package/dist/components/dialogs/AgentChoiceDialog.d.ts.map +1 -1
- package/dist/components/dialogs/AgentChoiceDialog.js +4 -5
- package/dist/components/dialogs/AgentChoiceDialog.js.map +1 -1
- package/dist/components/dialogs/SettingsDialog.d.ts.map +1 -1
- package/dist/components/dialogs/SettingsDialog.js +3 -1
- package/dist/components/dialogs/SettingsDialog.js.map +1 -1
- package/dist/components/panes/MergePane.d.ts +1 -0
- package/dist/components/panes/MergePane.d.ts.map +1 -1
- package/dist/components/panes/MergePane.js +14 -3
- package/dist/components/panes/MergePane.js.map +1 -1
- package/dist/components/panes/PaneCard.d.ts +1 -3
- package/dist/components/panes/PaneCard.d.ts.map +1 -1
- package/dist/components/panes/PaneCard.js +54 -37
- package/dist/components/panes/PaneCard.js.map +1 -1
- package/dist/components/panes/PanesGrid.d.ts +1 -0
- package/dist/components/panes/PanesGrid.d.ts.map +1 -1
- package/dist/components/panes/PanesGrid.js +60 -78
- package/dist/components/panes/PanesGrid.js.map +1 -1
- package/dist/components/popups/agentChoicePopup.d.ts +2 -2
- package/dist/components/popups/agentChoicePopup.js +85 -56
- package/dist/components/popups/agentChoicePopup.js.map +1 -1
- package/dist/components/popups/diffPeekPopup.d.ts +7 -0
- package/dist/components/popups/diffPeekPopup.d.ts.map +1 -0
- package/dist/components/popups/diffPeekPopup.js +99 -0
- package/dist/components/popups/diffPeekPopup.js.map +1 -0
- package/dist/components/popups/enabledAgentsPopup.d.ts +7 -0
- package/dist/components/popups/enabledAgentsPopup.d.ts.map +1 -0
- package/dist/components/popups/enabledAgentsPopup.js +196 -0
- package/dist/components/popups/enabledAgentsPopup.js.map +1 -0
- package/dist/components/popups/kebabMenuPopup.js +2 -2
- package/dist/components/popups/kebabMenuPopup.js.map +1 -1
- package/dist/components/popups/mergeUncommittedChoicePopup.d.ts +7 -0
- package/dist/components/popups/mergeUncommittedChoicePopup.d.ts.map +1 -0
- package/dist/components/popups/mergeUncommittedChoicePopup.js +289 -0
- package/dist/components/popups/mergeUncommittedChoicePopup.js.map +1 -0
- package/dist/components/popups/newPanePopup.js +8 -0
- package/dist/components/popups/newPanePopup.js.map +1 -1
- package/dist/components/popups/projectSelectPopup.d.ts +7 -0
- package/dist/components/popups/projectSelectPopup.d.ts.map +1 -0
- package/dist/components/popups/projectSelectPopup.js +124 -0
- package/dist/components/popups/projectSelectPopup.js.map +1 -0
- package/dist/components/popups/reopenWorktreePopup.js +33 -3
- package/dist/components/popups/reopenWorktreePopup.js.map +1 -1
- package/dist/components/popups/settingsPopup.js +25 -8
- package/dist/components/popups/settingsPopup.js.map +1 -1
- package/dist/components/popups/shared/DirectoryList.d.ts +14 -0
- package/dist/components/popups/shared/DirectoryList.d.ts.map +1 -0
- package/dist/components/popups/shared/DirectoryList.js +46 -0
- package/dist/components/popups/shared/DirectoryList.js.map +1 -0
- package/dist/components/popups/shared/index.d.ts +1 -0
- package/dist/components/popups/shared/index.d.ts.map +1 -1
- package/dist/components/popups/shared/index.js +1 -0
- package/dist/components/popups/shared/index.js.map +1 -1
- package/dist/components/popups/shortcutsPopup.js +15 -12
- package/dist/components/popups/shortcutsPopup.js.map +1 -1
- package/dist/components/popups/singleAgentChoicePopup.d.ts +7 -0
- package/dist/components/popups/singleAgentChoicePopup.d.ts.map +1 -0
- package/dist/components/popups/singleAgentChoicePopup.js +95 -0
- package/dist/components/popups/singleAgentChoicePopup.js.map +1 -0
- package/dist/components/ui/FooterHelp.js +1 -1
- package/dist/components/ui/FooterHelp.js.map +1 -1
- package/dist/hooks/useActionSystem.d.ts +1 -1
- package/dist/hooks/useActionSystem.d.ts.map +1 -1
- package/dist/hooks/useActionSystem.js +1 -1
- package/dist/hooks/useActionSystem.js.map +1 -1
- package/dist/hooks/useAgentDetection.d.ts +2 -2
- package/dist/hooks/useAgentDetection.d.ts.map +1 -1
- package/dist/hooks/useAgentDetection.js +18 -88
- package/dist/hooks/useAgentDetection.js.map +1 -1
- package/dist/hooks/useAutoUpdater.d.ts.map +1 -1
- package/dist/hooks/useAutoUpdater.js +43 -26
- package/dist/hooks/useAutoUpdater.js.map +1 -1
- package/dist/hooks/useInputHandling.d.ts +5 -0
- package/dist/hooks/useInputHandling.d.ts.map +1 -1
- package/dist/hooks/useInputHandling.js +89 -16
- package/dist/hooks/useInputHandling.js.map +1 -1
- package/dist/hooks/useNavigation.d.ts +1 -1
- package/dist/hooks/useNavigation.d.ts.map +1 -1
- package/dist/hooks/useNavigation.js +26 -4
- package/dist/hooks/useNavigation.js.map +1 -1
- package/dist/hooks/usePaneCreation.d.ts +5 -2
- package/dist/hooks/usePaneCreation.d.ts.map +1 -1
- package/dist/hooks/usePaneCreation.js +123 -23
- package/dist/hooks/usePaneCreation.js.map +1 -1
- package/dist/hooks/usePaneSync.d.ts +1 -1
- package/dist/hooks/usePaneSync.d.ts.map +1 -1
- package/dist/hooks/usePaneSync.js +14 -1
- package/dist/hooks/usePaneSync.js.map +1 -1
- package/dist/hooks/usePanes.js +1 -1
- package/dist/hooks/usePanes.js.map +1 -1
- package/dist/hooks/useServices.d.ts +1 -1
- package/dist/hooks/useServices.d.ts.map +1 -1
- package/dist/hooks/useServices.js +2 -2
- package/dist/hooks/useServices.js.map +1 -1
- package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
- package/dist/hooks/useWorktreeActions.js +16 -8
- package/dist/hooks/useWorktreeActions.js.map +1 -1
- package/dist/index.js +199 -18
- package/dist/index.js.map +1 -1
- package/dist/layout/SpacerManager.d.ts.map +1 -1
- package/dist/layout/SpacerManager.js +2 -1
- package/dist/layout/SpacerManager.js.map +1 -1
- package/dist/server/embedded-assets.d.ts.map +1 -1
- package/dist/server/embedded-assets.js +37 -26
- package/dist/server/embedded-assets.js.map +1 -1
- package/dist/services/AutoUpdater.d.ts +4 -0
- package/dist/services/AutoUpdater.d.ts.map +1 -1
- package/dist/services/AutoUpdater.js +23 -0
- package/dist/services/AutoUpdater.js.map +1 -1
- package/dist/services/PaneEventService.d.ts.map +1 -1
- package/dist/services/PaneEventService.js +2 -5
- package/dist/services/PaneEventService.js.map +1 -1
- package/dist/services/PaneWorkerManager.d.ts.map +1 -1
- package/dist/services/PaneWorkerManager.js +2 -14
- package/dist/services/PaneWorkerManager.js.map +1 -1
- package/dist/services/PopupManager.d.ts +8 -2
- package/dist/services/PopupManager.d.ts.map +1 -1
- package/dist/services/PopupManager.js +149 -27
- package/dist/services/PopupManager.js.map +1 -1
- package/dist/services/TmuxService.d.ts +15 -1
- package/dist/services/TmuxService.d.ts.map +1 -1
- package/dist/services/TmuxService.js +29 -3
- package/dist/services/TmuxService.js.map +1 -1
- package/dist/services/WorktreeCleanupService.d.ts +22 -0
- package/dist/services/WorktreeCleanupService.d.ts.map +1 -0
- package/dist/services/WorktreeCleanupService.js +80 -0
- package/dist/services/WorktreeCleanupService.js.map +1 -0
- package/dist/types.d.ts +9 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/agentDetection.d.ts +15 -8
- package/dist/utils/agentDetection.d.ts.map +1 -1
- package/dist/utils/agentDetection.js +49 -73
- package/dist/utils/agentDetection.js.map +1 -1
- package/dist/utils/agentLaunch.d.ts +63 -1
- package/dist/utils/agentLaunch.d.ts.map +1 -1
- package/dist/utils/agentLaunch.js +497 -24
- package/dist/utils/agentLaunch.js.map +1 -1
- package/dist/utils/agentPromptDispatch.d.ts +33 -0
- package/dist/utils/agentPromptDispatch.d.ts.map +1 -0
- package/dist/utils/agentPromptDispatch.js +99 -0
- package/dist/utils/agentPromptDispatch.js.map +1 -0
- package/dist/utils/asciiArt.d.ts.map +1 -1
- package/dist/utils/asciiArt.js +6 -7
- package/dist/utils/asciiArt.js.map +1 -1
- package/dist/utils/attachAgent.d.ts +21 -0
- package/dist/utils/attachAgent.d.ts.map +1 -0
- package/dist/utils/attachAgent.js +128 -0
- package/dist/utils/attachAgent.js.map +1 -0
- package/dist/utils/conflictResolutionPane.d.ts +2 -1
- package/dist/utils/conflictResolutionPane.d.ts.map +1 -1
- package/dist/utils/conflictResolutionPane.js +69 -36
- package/dist/utils/conflictResolutionPane.js.map +1 -1
- package/dist/utils/devSource.d.ts +7 -0
- package/dist/utils/devSource.d.ts.map +1 -0
- package/dist/utils/devSource.js +19 -0
- package/dist/utils/devSource.js.map +1 -0
- package/dist/utils/devWatchCommand.d.ts +8 -0
- package/dist/utils/devWatchCommand.d.ts.map +1 -0
- package/dist/utils/devWatchCommand.js +14 -0
- package/dist/utils/devWatchCommand.js.map +1 -0
- package/dist/utils/dirScanner.d.ts +30 -0
- package/dist/utils/dirScanner.d.ts.map +1 -0
- package/dist/utils/dirScanner.js +99 -0
- package/dist/utils/dirScanner.js.map +1 -0
- package/dist/utils/geminiTrust.d.ts +8 -0
- package/dist/utils/geminiTrust.d.ts.map +1 -0
- package/dist/utils/geminiTrust.js +67 -0
- package/dist/utils/geminiTrust.js.map +1 -0
- package/dist/utils/generated-agents-doc.d.ts +1 -1
- package/dist/utils/generated-agents-doc.js +3 -3
- package/dist/utils/git.d.ts +13 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +20 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/hooks.js +1 -1
- package/dist/utils/hooks.js.map +1 -1
- package/dist/utils/hooksDocs.d.ts +2 -9
- package/dist/utils/hooksDocs.d.ts.map +1 -1
- package/dist/utils/hooksDocs.js +26 -6
- package/dist/utils/hooksDocs.js.map +1 -1
- package/dist/utils/mergeExecution.d.ts.map +1 -1
- package/dist/utils/mergeExecution.js +6 -3
- package/dist/utils/mergeExecution.js.map +1 -1
- package/dist/utils/paneCreation.d.ts +8 -2
- package/dist/utils/paneCreation.d.ts.map +1 -1
- package/dist/utils/paneCreation.js +129 -80
- package/dist/utils/paneCreation.js.map +1 -1
- package/dist/utils/paneGrouping.d.ts.map +1 -1
- package/dist/utils/paneGrouping.js +30 -0
- package/dist/utils/paneGrouping.js.map +1 -1
- package/dist/utils/projectActions.d.ts +5 -0
- package/dist/utils/projectActions.d.ts.map +1 -1
- package/dist/utils/projectActions.js +15 -4
- package/dist/utils/projectActions.js.map +1 -1
- package/dist/utils/promptStore.d.ts +7 -0
- package/dist/utils/promptStore.d.ts.map +1 -0
- package/dist/utils/promptStore.js +75 -0
- package/dist/utils/promptStore.js.map +1 -0
- package/dist/utils/reopenWorktree.d.ts +1 -1
- package/dist/utils/reopenWorktree.d.ts.map +1 -1
- package/dist/utils/reopenWorktree.js +26 -27
- package/dist/utils/reopenWorktree.js.map +1 -1
- package/dist/utils/runtimePaths.d.ts +2 -0
- package/dist/utils/runtimePaths.d.ts.map +1 -0
- package/dist/utils/runtimePaths.js +8 -0
- package/dist/utils/runtimePaths.js.map +1 -0
- package/dist/utils/settingsManager.d.ts.map +1 -1
- package/dist/utils/settingsManager.js +96 -4
- package/dist/utils/settingsManager.js.map +1 -1
- package/dist/utils/systemCheck.d.ts.map +1 -1
- package/dist/utils/systemCheck.js +0 -13
- package/dist/utils/systemCheck.js.map +1 -1
- package/dist/utils/welcomePane.d.ts +2 -1
- package/dist/utils/welcomePane.d.ts.map +1 -1
- package/dist/utils/welcomePane.js +3 -2
- package/dist/utils/welcomePane.js.map +1 -1
- package/dist/utils/welcomePaneManager.js +1 -1
- package/dist/utils/welcomePaneManager.js.map +1 -1
- package/dist/workers/PaneWorker.js.map +1 -1
- package/dist/workers/WorkerMessages.d.ts +2 -1
- package/dist/workers/WorkerMessages.d.ts.map +1 -1
- package/dist/workers/WorkerMessages.js.map +1 -1
- package/dist/workers/updateChecker.js +21 -6
- package/dist/workers/updateChecker.js.map +1 -1
- package/package.json +14 -12
- package/dist/components/popups/remotePopup.d.ts +0 -6
- package/dist/components/popups/remotePopup.d.ts.map +0 -1
- package/dist/components/popups/remotePopup.js +0 -166
- package/dist/components/popups/remotePopup.js.map +0 -1
- package/dist/hooks/useTunnelManagement.d.ts +0 -18
- package/dist/hooks/useTunnelManagement.d.ts.map +0 -1
- package/dist/hooks/useTunnelManagement.js +0 -55
- package/dist/hooks/useTunnelManagement.js.map +0 -1
- package/dist/server/actionsApi.d.ts +0 -37
- package/dist/server/actionsApi.d.ts.map +0 -1
- package/dist/server/actionsApi.js +0 -256
- package/dist/server/actionsApi.js.map +0 -1
- package/dist/server/index.d.ts +0 -21
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -100
- package/dist/server/index.js.map +0 -1
- package/dist/server/routes/actionsRoutes.d.ts +0 -2
- package/dist/server/routes/actionsRoutes.d.ts.map +0 -1
- package/dist/server/routes/actionsRoutes.js +0 -110
- package/dist/server/routes/actionsRoutes.js.map +0 -1
- package/dist/server/routes/healthRoutes.d.ts +0 -13
- package/dist/server/routes/healthRoutes.d.ts.map +0 -1
- package/dist/server/routes/healthRoutes.js +0 -70
- package/dist/server/routes/healthRoutes.js.map +0 -1
- package/dist/server/routes/index.d.ts +0 -8
- package/dist/server/routes/index.d.ts.map +0 -1
- package/dist/server/routes/index.js +0 -67
- package/dist/server/routes/index.js.map +0 -1
- package/dist/server/routes/keysRoutes.d.ts +0 -33
- package/dist/server/routes/keysRoutes.d.ts.map +0 -1
- package/dist/server/routes/keysRoutes.js +0 -128
- package/dist/server/routes/keysRoutes.js.map +0 -1
- package/dist/server/routes/panesRoutes.d.ts +0 -2
- package/dist/server/routes/panesRoutes.d.ts.map +0 -1
- package/dist/server/routes/panesRoutes.js +0 -414
- package/dist/server/routes/panesRoutes.js.map +0 -1
- package/dist/server/routes/settingsRoutes.d.ts +0 -94
- package/dist/server/routes/settingsRoutes.d.ts.map +0 -1
- package/dist/server/routes/settingsRoutes.js +0 -159
- package/dist/server/routes/settingsRoutes.js.map +0 -1
- package/dist/server/routes/streamRoutes.d.ts +0 -18
- package/dist/server/routes/streamRoutes.d.ts.map +0 -1
- package/dist/server/routes/streamRoutes.js +0 -87
- package/dist/server/routes/streamRoutes.js.map +0 -1
- package/dist/server/routes/tunnelRoutes.d.ts +0 -11
- package/dist/server/routes/tunnelRoutes.d.ts.map +0 -1
- package/dist/server/routes/tunnelRoutes.js +0 -28
- package/dist/server/routes/tunnelRoutes.js.map +0 -1
- package/dist/server/routes.d.ts +0 -17
- package/dist/server/routes.d.ts.map +0 -1
- package/dist/server/routes.js +0 -17
- package/dist/server/routes.js.map +0 -1
- package/dist/services/TunnelService.d.ts +0 -10
- package/dist/services/TunnelService.d.ts.map +0 -1
- package/dist/services/TunnelService.js +0 -98
- package/dist/services/TunnelService.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AgentName } from '../utils/agentLaunch.js';
|
|
1
2
|
export interface WorkerMessage {
|
|
2
3
|
id: string;
|
|
3
4
|
type: string;
|
|
@@ -14,7 +15,7 @@ export interface OutboundMessage extends WorkerMessage {
|
|
|
14
15
|
export interface WorkerConfig {
|
|
15
16
|
paneId: string;
|
|
16
17
|
tmuxPaneId: string;
|
|
17
|
-
agent?:
|
|
18
|
+
agent?: AgentName;
|
|
18
19
|
pollInterval?: number;
|
|
19
20
|
}
|
|
20
21
|
export interface StatusChangePayload {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerMessages.d.ts","sourceRoot":"","sources":["../../src/workers/WorkerMessages.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAGD,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;CACpG;AAGD,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,OAAO,GAAG,mBAAmB,GAAG,cAAc,CAAC;IACxH,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"WorkerMessages.d.ts","sourceRoot":"","sources":["../../src/workers/WorkerMessages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAGD,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;CACpG;AAGD,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,OAAO,GAAG,mBAAmB,GAAG,cAAc,CAAC;IACxH,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAAC;CAC/C;AAGD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;CACtB;AAGD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,cAAc,CAEhE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,eAAe,CAElE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerMessages.js","sourceRoot":"","sources":["../../src/workers/WorkerMessages.ts"],"names":[],"mappings":"AAAA,4CAA4C;
|
|
1
|
+
{"version":3,"file":"WorkerMessages.js","sourceRoot":"","sources":["../../src/workers/WorkerMessages.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAkD5C,cAAc;AACd,MAAM,UAAU,gBAAgB,CAAC,GAAQ;IACvC,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAQ;IACxC,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC/E,CAAC"}
|
|
@@ -1,12 +1,27 @@
|
|
|
1
|
-
import { parentPort } from 'worker_threads';
|
|
1
|
+
import { parentPort, workerData } from 'worker_threads';
|
|
2
2
|
import { AutoUpdater } from '../services/AutoUpdater.js';
|
|
3
|
-
import os from 'os';
|
|
4
|
-
import path from 'path';
|
|
5
3
|
async function checkForUpdates() {
|
|
6
4
|
try {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
const { configFile } = workerData;
|
|
6
|
+
if (!configFile) {
|
|
7
|
+
throw new Error('Missing config file path for update checker worker');
|
|
8
|
+
}
|
|
9
|
+
const autoUpdater = new AutoUpdater(configFile);
|
|
10
|
+
const shouldCheck = await autoUpdater.shouldCheckForUpdates();
|
|
11
|
+
let updateInfo = shouldCheck
|
|
12
|
+
? await autoUpdater.checkForUpdates()
|
|
13
|
+
: await autoUpdater.getCachedUpdateInfo();
|
|
14
|
+
// Keep showing a known update if today's check couldn't reach npm.
|
|
15
|
+
if (shouldCheck && updateInfo && updateInfo.latestVersion === 'unknown') {
|
|
16
|
+
const cachedUpdateInfo = await autoUpdater.getCachedUpdateInfo();
|
|
17
|
+
if (cachedUpdateInfo) {
|
|
18
|
+
updateInfo = cachedUpdateInfo;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// No cache yet: run an initial check even if interval says "not yet".
|
|
22
|
+
if (!updateInfo) {
|
|
23
|
+
updateInfo = await autoUpdater.checkForUpdates();
|
|
24
|
+
}
|
|
10
25
|
const shouldShow = await autoUpdater.shouldShowUpdateNotification(updateInfo);
|
|
11
26
|
if (shouldShow && updateInfo.hasUpdate) {
|
|
12
27
|
parentPort?.postMessage({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateChecker.js","sourceRoot":"","sources":["../../src/workers/updateChecker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"updateChecker.js","sourceRoot":"","sources":["../../src/workers/updateChecker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAMzD,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,GAAG,UAAqC,CAAC;QAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,qBAAqB,EAAE,CAAC;QAC9D,IAAI,UAAU,GAAG,WAAW;YAC1B,CAAC,CAAC,MAAM,WAAW,CAAC,eAAe,EAAE;YACrC,CAAC,CAAC,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;QAE5C,mEAAmE;QACnE,IAAI,WAAW,IAAI,UAAU,IAAI,UAAU,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACxE,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;YACjE,IAAI,gBAAgB,EAAE,CAAC;gBACrB,UAAU,GAAG,gBAAgB,CAAC;YAChC,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;QACnD,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;QAE9E,IAAI,UAAU,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACvC,UAAU,EAAE,WAAW,CAAC;gBACtB,IAAI,EAAE,kBAAkB;gBACxB,UAAU;aACX,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,UAAU,EAAE,WAAW,CAAC;gBACtB,IAAI,EAAE,WAAW;gBACjB,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,EAAE,WAAW,CAAC;YACtB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,kBAAkB;AAClB,eAAe,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dmux",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0",
|
|
4
4
|
"description": "Tmux pane manager with AI agent integration for parallel development workflows",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "Justin Schroeder",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"homepage": "https://github.com/formkit/dmux#readme",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
|
-
"url": "git+https://github.com/
|
|
11
|
+
"url": "git+https://github.com/standardagents/dmux.git"
|
|
12
12
|
},
|
|
13
13
|
"bugs": {
|
|
14
14
|
"url": "https://github.com/formkit/dmux/issues"
|
|
@@ -46,14 +46,12 @@
|
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"chalk": "^5.3.0",
|
|
48
48
|
"chokidar": "^4.0.3",
|
|
49
|
-
"h3": "^1.15.4",
|
|
50
49
|
"ink": "^5.0.1",
|
|
51
50
|
"ink-text-input": "^6.0.0",
|
|
52
51
|
"p-queue": "^9.0.0",
|
|
53
52
|
"qrcode-terminal": "^0.12.0",
|
|
54
53
|
"react": "^18.2.0",
|
|
55
54
|
"string-width": "^7.2.0",
|
|
56
|
-
"untun": "^0.1.3",
|
|
57
55
|
"vue": "^3.5.22"
|
|
58
56
|
},
|
|
59
57
|
"devDependencies": {
|
|
@@ -73,22 +71,26 @@
|
|
|
73
71
|
"vitest": "^1.6.1"
|
|
74
72
|
},
|
|
75
73
|
"scripts": {
|
|
76
|
-
"build": "pnpm run generate:hooks-docs && pnpm run build:frontend &&
|
|
74
|
+
"build": "pnpm run generate:hooks-docs && pnpm run build:frontend && tsc",
|
|
77
75
|
"build:frontend": "pnpm --filter dmux-frontend run build",
|
|
78
76
|
"build:docs": "pnpm --filter dmux-docs run build",
|
|
79
|
-
"embed:assets": "node scripts/embed-assets.js",
|
|
80
77
|
"generate:hooks-docs": "node scripts/generate-hooks-docs.js",
|
|
81
|
-
"
|
|
82
|
-
"dev": "
|
|
83
|
-
"
|
|
78
|
+
"hooks:install-local": "bash scripts/install-local-hooks.sh",
|
|
79
|
+
"dev:bootstrap": "pnpm run generate:hooks-docs && pnpm run hooks:install-local",
|
|
80
|
+
"clean": "rm -rf dist src/utils/generated-agents-doc.ts",
|
|
81
|
+
"dev": "pnpm run dev:bootstrap && tsc && DMUX_DEV=true DMUX_DEV_WATCH=false node dist/index.js",
|
|
82
|
+
"dev:watch": "pnpm run generate:hooks-docs && run-p --race dev:watch:compile dev:watch:run",
|
|
84
83
|
"dev:watch:compile": "tsc --watch --preserveWatchOutput --pretty false > /dev/null 2>&1",
|
|
85
|
-
"dev:watch:run": "
|
|
84
|
+
"dev:watch:run": "node scripts/dev-watch-run.js",
|
|
85
|
+
"dev:guard-runtime": "node scripts/guard-runtime-parity.js",
|
|
86
|
+
"dev:doctor": "node scripts/dev-doctor.js",
|
|
86
87
|
"dev:frontend": "pnpm --filter dmux-frontend run dev",
|
|
87
88
|
"dev:docs": "pnpm --filter dmux-docs run dev",
|
|
88
89
|
"start": "node dist/index.js",
|
|
89
|
-
"typecheck": "tsc --noEmit",
|
|
90
|
+
"typecheck": "pnpm run dev:guard-runtime && pnpm run generate:hooks-docs && tsc --noEmit",
|
|
91
|
+
"smoke:pack": "node scripts/smoke-pack-install.js",
|
|
90
92
|
"test": "vitest --run",
|
|
91
|
-
"prerelease": "run-s clean build typecheck",
|
|
93
|
+
"prerelease": "run-s clean build typecheck smoke:pack",
|
|
92
94
|
"release": "bumpp --commit --push --tag",
|
|
93
95
|
"release:minor": "bumpp minor --commit --push --tag",
|
|
94
96
|
"release:major": "bumpp major --commit --push --tag"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remotePopup.d.ts","sourceRoot":"","sources":["../../../src/components/popups/remotePopup.tsx"],"names":[],"mappings":";AACA;;GAEG"}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Remote Access Popup - Displays tunnel URL and QR code for remote access
|
|
4
|
-
*/
|
|
5
|
-
import React, { useState, useEffect, useMemo } from 'react';
|
|
6
|
-
import { render, Box, Text, useInput, useApp } from 'ink';
|
|
7
|
-
import * as fs from 'fs';
|
|
8
|
-
import { execSync } from 'child_process';
|
|
9
|
-
// @ts-ignore - No types available for qrcode-terminal
|
|
10
|
-
import qrcode from 'qrcode-terminal';
|
|
11
|
-
import { PopupWrapper } from './shared/index.js';
|
|
12
|
-
import { POPUP_CONFIG } from './config.js';
|
|
13
|
-
const RemotePopupApp = ({ resultFile, serverPort, statusFile }) => {
|
|
14
|
-
const { exit } = useApp();
|
|
15
|
-
const [tunnelUrl, setTunnelUrl] = useState(null);
|
|
16
|
-
const [error, setError] = useState(null);
|
|
17
|
-
const [isCreating, setIsCreating] = useState(true);
|
|
18
|
-
const [spinnerFrame, setSpinnerFrame] = useState(0);
|
|
19
|
-
const [copied, setCopied] = useState(false);
|
|
20
|
-
const closePopup = (wasCopied) => {
|
|
21
|
-
try {
|
|
22
|
-
fs.writeFileSync(resultFile, JSON.stringify({ closed: true, copied: wasCopied }));
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
console.error('[remotePopup] Failed to write result file:', error);
|
|
26
|
-
}
|
|
27
|
-
exit();
|
|
28
|
-
};
|
|
29
|
-
useInput((input, key) => {
|
|
30
|
-
if (key.escape || input === 'q') {
|
|
31
|
-
closePopup(false);
|
|
32
|
-
}
|
|
33
|
-
else if (input === 'c' && tunnelUrl) {
|
|
34
|
-
// Copy URL to clipboard
|
|
35
|
-
try {
|
|
36
|
-
// Try pbcopy (macOS)
|
|
37
|
-
execSync(`pbcopy`, { input: tunnelUrl, stdio: 'pipe' });
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
try {
|
|
41
|
-
// Try xclip (Linux)
|
|
42
|
-
execSync(`xclip -selection clipboard`, { input: tunnelUrl, stdio: 'pipe' });
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
// Clipboard not available
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
// Close popup after copying, mark as copied
|
|
49
|
-
closePopup(true);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
// Spinner animation
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
if (!isCreating)
|
|
55
|
-
return;
|
|
56
|
-
const spinnerInterval = setInterval(() => {
|
|
57
|
-
setSpinnerFrame((prev) => (prev + 1) % 10);
|
|
58
|
-
}, 80); // Update every 80ms
|
|
59
|
-
return () => clearInterval(spinnerInterval);
|
|
60
|
-
}, [isCreating]);
|
|
61
|
-
// Poll status file for tunnel creation result
|
|
62
|
-
useEffect(() => {
|
|
63
|
-
const pollInterval = setInterval(() => {
|
|
64
|
-
try {
|
|
65
|
-
if (fs.existsSync(statusFile)) {
|
|
66
|
-
const data = JSON.parse(fs.readFileSync(statusFile, 'utf-8'));
|
|
67
|
-
if (data.url) {
|
|
68
|
-
setTunnelUrl(data.url);
|
|
69
|
-
setIsCreating(false);
|
|
70
|
-
clearInterval(pollInterval);
|
|
71
|
-
}
|
|
72
|
-
else if (data.error) {
|
|
73
|
-
setError(data.error);
|
|
74
|
-
setIsCreating(false);
|
|
75
|
-
clearInterval(pollInterval);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
catch (err) {
|
|
80
|
-
// File might not exist yet or be incomplete, keep polling
|
|
81
|
-
}
|
|
82
|
-
}, 100); // Poll every 100ms
|
|
83
|
-
// Cleanup
|
|
84
|
-
return () => clearInterval(pollInterval);
|
|
85
|
-
}, [statusFile]);
|
|
86
|
-
// Generate QR code
|
|
87
|
-
const qrString = useMemo(() => {
|
|
88
|
-
if (!tunnelUrl)
|
|
89
|
-
return '';
|
|
90
|
-
let output = '';
|
|
91
|
-
qrcode.generate(tunnelUrl, { small: true }, (qr) => {
|
|
92
|
-
output = qr;
|
|
93
|
-
});
|
|
94
|
-
return output;
|
|
95
|
-
}, [tunnelUrl]);
|
|
96
|
-
// Spinner frames
|
|
97
|
-
const spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
98
|
-
const currentSpinner = spinnerFrames[spinnerFrame];
|
|
99
|
-
if (isCreating) {
|
|
100
|
-
return (React.createElement(PopupWrapper, { resultFile: resultFile, allowEscapeToCancel: false },
|
|
101
|
-
React.createElement(Box, { flexDirection: "column", padding: 1 },
|
|
102
|
-
React.createElement(Box, { marginBottom: 1 },
|
|
103
|
-
React.createElement(Text, { bold: true, color: POPUP_CONFIG.titleColor }, "Remote Access")),
|
|
104
|
-
React.createElement(Box, { marginBottom: 1 },
|
|
105
|
-
React.createElement(Text, { color: "yellow" },
|
|
106
|
-
currentSpinner,
|
|
107
|
-
" Creating tunnel...")),
|
|
108
|
-
React.createElement(Box, { marginBottom: 1 },
|
|
109
|
-
React.createElement(Text, { dimColor: true }, "This may take up to 30 seconds")),
|
|
110
|
-
React.createElement(Box, { marginTop: 1 },
|
|
111
|
-
React.createElement(Text, { dimColor: true }, "Press Esc to close")))));
|
|
112
|
-
}
|
|
113
|
-
if (error) {
|
|
114
|
-
return (React.createElement(PopupWrapper, { resultFile: resultFile, allowEscapeToCancel: false },
|
|
115
|
-
React.createElement(Box, { flexDirection: "column", padding: 1 },
|
|
116
|
-
React.createElement(Box, { marginBottom: 1 },
|
|
117
|
-
React.createElement(Text, { bold: true, color: POPUP_CONFIG.titleColor }, "Remote Access")),
|
|
118
|
-
React.createElement(Text, { color: "red" }, error),
|
|
119
|
-
React.createElement(Box, { marginTop: 1 },
|
|
120
|
-
React.createElement(Text, { dimColor: true }, "Press Esc to close")))));
|
|
121
|
-
}
|
|
122
|
-
if (!tunnelUrl) {
|
|
123
|
-
return (React.createElement(PopupWrapper, { resultFile: resultFile, allowEscapeToCancel: false },
|
|
124
|
-
React.createElement(Box, { flexDirection: "column", padding: 1 },
|
|
125
|
-
React.createElement(Box, { marginBottom: 1 },
|
|
126
|
-
React.createElement(Text, { bold: true, color: POPUP_CONFIG.titleColor }, "Remote Access")),
|
|
127
|
-
React.createElement(Text, { color: "red" }, "No tunnel URL available"),
|
|
128
|
-
React.createElement(Box, { marginTop: 1 },
|
|
129
|
-
React.createElement(Text, { dimColor: true }, "Press Esc to close")))));
|
|
130
|
-
}
|
|
131
|
-
return (React.createElement(PopupWrapper, { resultFile: resultFile, allowEscapeToCancel: false },
|
|
132
|
-
React.createElement(Box, { flexDirection: "column", padding: 1 },
|
|
133
|
-
React.createElement(Box, { marginBottom: 1 },
|
|
134
|
-
React.createElement(Text, { bold: true, color: POPUP_CONFIG.titleColor }, "Remote Access")),
|
|
135
|
-
React.createElement(Box, { flexDirection: "column", marginBottom: 1 },
|
|
136
|
-
React.createElement(Text, { dimColor: true }, "Scan to access dashboard:"),
|
|
137
|
-
React.createElement(Text, null, qrString),
|
|
138
|
-
React.createElement(Text, { dimColor: true }, tunnelUrl)),
|
|
139
|
-
copied && (React.createElement(Box, { marginTop: 1, marginBottom: 1 },
|
|
140
|
-
React.createElement(Text, { color: "green" }, "\u2713 Copied to clipboard!"))),
|
|
141
|
-
React.createElement(Box, { marginTop: 1 },
|
|
142
|
-
React.createElement(Text, { dimColor: true }, "Press [c] to copy URL \u2022 [Esc] to close")))));
|
|
143
|
-
};
|
|
144
|
-
// Main entry point
|
|
145
|
-
const main = async () => {
|
|
146
|
-
const resultFile = process.argv[2];
|
|
147
|
-
if (!resultFile) {
|
|
148
|
-
console.error('Error: Result file path required');
|
|
149
|
-
process.exit(1);
|
|
150
|
-
}
|
|
151
|
-
const dataFile = process.argv[3];
|
|
152
|
-
if (!dataFile) {
|
|
153
|
-
console.error('Error: Data file path required');
|
|
154
|
-
process.exit(1);
|
|
155
|
-
}
|
|
156
|
-
try {
|
|
157
|
-
const data = JSON.parse(fs.readFileSync(dataFile, 'utf-8'));
|
|
158
|
-
render(React.createElement(RemotePopupApp, { resultFile: resultFile, serverPort: data.serverPort, statusFile: data.statusFile }));
|
|
159
|
-
}
|
|
160
|
-
catch (error) {
|
|
161
|
-
console.error('Failed to read data file:', error);
|
|
162
|
-
process.exit(1);
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
main();
|
|
166
|
-
//# sourceMappingURL=remotePopup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remotePopup.js","sourceRoot":"","sources":["../../../src/components/popups/remotePopup.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hook to manage tunnel/network state in DmuxApp
|
|
3
|
-
* Handles: tunnel URL, creation status, spinner animation, copy feedback, local IP
|
|
4
|
-
*/
|
|
5
|
-
export declare function useTunnelManagement(): {
|
|
6
|
-
tunnelUrl: string | null;
|
|
7
|
-
setTunnelUrl: import("react").Dispatch<import("react").SetStateAction<string | null>>;
|
|
8
|
-
tunnelCreating: boolean;
|
|
9
|
-
setTunnelCreating: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
10
|
-
tunnelSpinnerFrame: number;
|
|
11
|
-
setTunnelSpinnerFrame: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
12
|
-
tunnelCopied: boolean;
|
|
13
|
-
setTunnelCopied: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
14
|
-
localIp: string;
|
|
15
|
-
setLocalIp: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
16
|
-
getSpinnerChar: () => string;
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=useTunnelManagement.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTunnelManagement.d.ts","sourceRoot":"","sources":["../../src/hooks/useTunnelManagement.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,mBAAmB;;;;;;;;;;;;EAqDlC"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect } from "react";
|
|
2
|
-
/**
|
|
3
|
-
* Hook to manage tunnel/network state in DmuxApp
|
|
4
|
-
* Handles: tunnel URL, creation status, spinner animation, copy feedback, local IP
|
|
5
|
-
*/
|
|
6
|
-
export function useTunnelManagement() {
|
|
7
|
-
const [tunnelUrl, setTunnelUrl] = useState(null);
|
|
8
|
-
const [tunnelCreating, setTunnelCreating] = useState(false);
|
|
9
|
-
const [tunnelSpinnerFrame, setTunnelSpinnerFrame] = useState(0);
|
|
10
|
-
const [tunnelCopied, setTunnelCopied] = useState(false);
|
|
11
|
-
const [localIp, setLocalIp] = useState("127.0.0.1");
|
|
12
|
-
// Spinner animation for tunnel creation
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
if (!tunnelCreating)
|
|
15
|
-
return;
|
|
16
|
-
const spinnerInterval = setInterval(() => {
|
|
17
|
-
setTunnelSpinnerFrame((prev) => (prev + 1) % 10);
|
|
18
|
-
}, 80); // Update every 80ms
|
|
19
|
-
return () => clearInterval(spinnerInterval);
|
|
20
|
-
}, [tunnelCreating]);
|
|
21
|
-
/**
|
|
22
|
-
* Get the current spinner frame character
|
|
23
|
-
*/
|
|
24
|
-
const getSpinnerChar = () => {
|
|
25
|
-
const spinnerFrames = [
|
|
26
|
-
"⠋",
|
|
27
|
-
"⠙",
|
|
28
|
-
"⠹",
|
|
29
|
-
"⠸",
|
|
30
|
-
"⠼",
|
|
31
|
-
"⠴",
|
|
32
|
-
"⠦",
|
|
33
|
-
"⠧",
|
|
34
|
-
"⠇",
|
|
35
|
-
"⠏",
|
|
36
|
-
];
|
|
37
|
-
return spinnerFrames[tunnelSpinnerFrame];
|
|
38
|
-
};
|
|
39
|
-
return {
|
|
40
|
-
// State
|
|
41
|
-
tunnelUrl,
|
|
42
|
-
setTunnelUrl,
|
|
43
|
-
tunnelCreating,
|
|
44
|
-
setTunnelCreating,
|
|
45
|
-
tunnelSpinnerFrame,
|
|
46
|
-
setTunnelSpinnerFrame,
|
|
47
|
-
tunnelCopied,
|
|
48
|
-
setTunnelCopied,
|
|
49
|
-
localIp,
|
|
50
|
-
setLocalIp,
|
|
51
|
-
// Helper functions
|
|
52
|
-
getSpinnerChar,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=useTunnelManagement.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTunnelManagement.js","sourceRoot":"","sources":["../../src/hooks/useTunnelManagement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE3C;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC/D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3D,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC/D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAS,WAAW,CAAC,CAAA;IAE3D,wCAAwC;IACxC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,cAAc;YAAE,OAAM;QAE3B,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACvC,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;QAClD,CAAC,EAAE,EAAE,CAAC,CAAA,CAAC,oBAAoB;QAE3B,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;IAC7C,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAA;IAEpB;;OAEG;IACH,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,MAAM,aAAa,GAAG;YACpB,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;YACH,GAAG;SACJ,CAAA;QACD,OAAO,aAAa,CAAC,kBAAkB,CAAC,CAAA;IAC1C,CAAC,CAAA;IAED,OAAO;QACL,QAAQ;QACR,SAAS;QACT,YAAY;QACZ,cAAc;QACd,iBAAiB;QACjB,kBAAkB;QAClB,qBAAqB;QACrB,YAAY;QACZ,eAAe;QACf,OAAO;QACP,UAAU;QAEV,mBAAmB;QACnB,cAAc;KACf,CAAA;AACH,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* REST API for Pane Actions
|
|
3
|
-
*
|
|
4
|
-
* Provides HTTP endpoints for executing standardized pane actions.
|
|
5
|
-
*/
|
|
6
|
-
import type { IncomingMessage, ServerResponse } from 'http';
|
|
7
|
-
/**
|
|
8
|
-
* Handle GET /api/actions
|
|
9
|
-
* List all available actions with metadata
|
|
10
|
-
*/
|
|
11
|
-
export declare function handleListActions(req: IncomingMessage, res: ServerResponse): Promise<void>;
|
|
12
|
-
/**
|
|
13
|
-
* Handle GET /api/panes/:paneId/actions
|
|
14
|
-
* Get available actions for a specific pane
|
|
15
|
-
*/
|
|
16
|
-
export declare function handleGetPaneActions(req: IncomingMessage, res: ServerResponse, paneId: string): Promise<void>;
|
|
17
|
-
/**
|
|
18
|
-
* Handle POST /api/panes/:paneId/actions/:actionId
|
|
19
|
-
* Execute an action on a pane
|
|
20
|
-
*/
|
|
21
|
-
export declare function handleExecuteAction(req: IncomingMessage, res: ServerResponse, paneId: string, actionId: string): Promise<void>;
|
|
22
|
-
/**
|
|
23
|
-
* Handle POST /api/callbacks/confirm/:callbackId
|
|
24
|
-
* Respond to a confirm dialog
|
|
25
|
-
*/
|
|
26
|
-
export declare function handleConfirmCallback(req: IncomingMessage, res: ServerResponse, callbackId: string): Promise<void>;
|
|
27
|
-
/**
|
|
28
|
-
* Handle POST /api/callbacks/choice/:callbackId
|
|
29
|
-
* Respond to a choice dialog
|
|
30
|
-
*/
|
|
31
|
-
export declare function handleChoiceCallback(req: IncomingMessage, res: ServerResponse, callbackId: string): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Handle POST /api/callbacks/input/:callbackId
|
|
34
|
-
* Respond to an input dialog
|
|
35
|
-
*/
|
|
36
|
-
export declare function handleInputCallback(req: IncomingMessage, res: ServerResponse, callbackId: string): Promise<void>;
|
|
37
|
-
//# sourceMappingURL=actionsApi.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"actionsApi.d.ts","sourceRoot":"","sources":["../../src/server/actionsApi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAM5D;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA4Ff;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|