@agimon-ai/po-web-dashboard 0.0.0-alpha.63 → 0.0.0-alpha.65

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.
Files changed (158) hide show
  1. package/dist/index.cjs +1 -0
  2. package/dist/index.d.mts +2 -2
  3. package/dist/index.mjs +2 -2
  4. package/dist/types/remoteAccess.cjs +6 -0
  5. package/dist/types/remoteAccess.cjs.map +1 -1
  6. package/dist/types/remoteAccess.d.mts +5 -0
  7. package/dist/types/remoteAccess.d.mts.map +1 -1
  8. package/dist/types/remoteAccess.mjs +6 -1
  9. package/dist/types/remoteAccess.mjs.map +1 -1
  10. package/dist/types.cjs +1 -0
  11. package/dist/types.d.mts +2 -2
  12. package/dist/types.mjs +2 -2
  13. package/dist/views.cjs +3 -0
  14. package/dist/views.d.mts +2 -1
  15. package/dist/views.mjs +2 -1
  16. package/dist/web/components/HomePage.cjs +80 -0
  17. package/dist/web/components/HomePage.cjs.map +1 -0
  18. package/dist/web/components/HomePage.d.mts +22 -0
  19. package/dist/web/components/HomePage.d.mts.map +1 -0
  20. package/dist/web/components/HomePage.mjs +79 -0
  21. package/dist/web/components/HomePage.mjs.map +1 -0
  22. package/dist/web/components/PluginPage.cjs +1 -1
  23. package/dist/web/components/PluginPage.mjs +1 -1
  24. package/dist/web/components/QrCode.cjs +1 -1
  25. package/dist/web/components/QrCode.mjs +1 -1
  26. package/dist/web/components/SessionMcp.cjs +1 -1
  27. package/dist/web/components/SessionMcp.mjs +1 -1
  28. package/dist/web/components/Story.fixture.cjs +1 -1
  29. package/dist/web/components/Story.fixture.mjs +1 -1
  30. package/dist/web/features/activity/ActivityDock.cjs +1 -1
  31. package/dist/web/features/activity/ActivityDock.mjs +1 -1
  32. package/dist/web/features/activity/ContextItemDialog.cjs +1 -1
  33. package/dist/web/features/activity/ContextItemDialog.mjs +1 -1
  34. package/dist/web/features/activity/ContextPanel.cjs +1 -1
  35. package/dist/web/features/activity/ContextPanel.mjs +1 -1
  36. package/dist/web/features/activity/DockTabs.cjs +9 -7
  37. package/dist/web/features/activity/DockTabs.cjs.map +1 -1
  38. package/dist/web/features/activity/DockTabs.d.mts +1 -1
  39. package/dist/web/features/activity/DockTabs.d.mts.map +1 -1
  40. package/dist/web/features/activity/DockTabs.mjs +9 -7
  41. package/dist/web/features/activity/DockTabs.mjs.map +1 -1
  42. package/dist/web/features/connection/RefusedCard.cjs +1 -1
  43. package/dist/web/features/connection/RefusedCard.mjs +1 -1
  44. package/dist/web/features/dialogs/DialogOverlay.cjs +1 -1
  45. package/dist/web/features/dialogs/DialogOverlay.mjs +1 -1
  46. package/dist/web/features/leader/CommandPalette.cjs +1 -1
  47. package/dist/web/features/leader/CommandPalette.mjs +1 -1
  48. package/dist/web/features/remote/DevProxyTargets.cjs +1 -1
  49. package/dist/web/features/remote/DevProxyTargets.mjs +1 -1
  50. package/dist/web/features/remote/PairedDeviceList.cjs +1 -1
  51. package/dist/web/features/remote/PairedDeviceList.mjs +1 -1
  52. package/dist/web/features/remote/PairingApprovalDialog.cjs +1 -1
  53. package/dist/web/features/remote/PairingApprovalDialog.mjs +1 -1
  54. package/dist/web/features/remote/RemoteAccessDialog.cjs +1 -1
  55. package/dist/web/features/remote/RemoteAccessDialog.mjs +1 -1
  56. package/dist/web/features/remote/RemoteAccessOptions.cjs +1 -1
  57. package/dist/web/features/remote/RemoteAccessOptions.mjs +1 -1
  58. package/dist/web/features/remote/RemoteAccessPairing.cjs +25 -2
  59. package/dist/web/features/remote/RemoteAccessPairing.cjs.map +1 -1
  60. package/dist/web/features/remote/RemoteAccessPairing.d.mts.map +1 -1
  61. package/dist/web/features/remote/RemoteAccessPairing.mjs +26 -3
  62. package/dist/web/features/remote/RemoteAccessPairing.mjs.map +1 -1
  63. package/dist/web/features/remote/TrustedDeviceList.cjs +1 -1
  64. package/dist/web/features/remote/TrustedDeviceList.mjs +1 -1
  65. package/dist/web/features/selection/SelectionBar.cjs +1 -1
  66. package/dist/web/features/selection/SelectionBar.mjs +1 -1
  67. package/dist/web/features/session/AgentLockPanel.cjs +1 -1
  68. package/dist/web/features/session/AgentLockPanel.mjs +1 -1
  69. package/dist/web/features/session/Composer.cjs +1 -1
  70. package/dist/web/features/session/Composer.mjs +1 -1
  71. package/dist/web/features/session/DormantPanel.cjs +1 -1
  72. package/dist/web/features/session/DormantPanel.mjs +1 -1
  73. package/dist/web/features/session/MentionPreviews.cjs +1 -1
  74. package/dist/web/features/session/MentionPreviews.mjs +1 -1
  75. package/dist/web/features/session/MessageMarkdown.cjs +1 -1
  76. package/dist/web/features/session/MessageMarkdown.mjs +1 -1
  77. package/dist/web/features/session/QueueSheet.cjs +1 -1
  78. package/dist/web/features/session/QueueSheet.mjs +1 -1
  79. package/dist/web/features/session/SessionActivity.cjs +1 -1
  80. package/dist/web/features/session/SessionActivity.mjs +1 -1
  81. package/dist/web/features/session/SessionTranscriptView.cjs +1 -1
  82. package/dist/web/features/session/SessionTranscriptView.mjs +1 -1
  83. package/dist/web/features/session/ThreadView.cjs +1 -1
  84. package/dist/web/features/session/ThreadView.mjs +1 -1
  85. package/dist/web/features/session/Timeline.cjs +1 -1
  86. package/dist/web/features/session/Timeline.mjs +1 -1
  87. package/dist/web/features/session/ToolCard.cjs +1 -1
  88. package/dist/web/features/session/ToolCard.mjs +1 -1
  89. package/dist/web/features/sessions/NewSessionDialog.cjs +1 -1
  90. package/dist/web/features/sessions/NewSessionDialog.mjs +1 -1
  91. package/dist/web/features/sessions/ResumeSessionDialog.cjs +1 -1
  92. package/dist/web/features/sessions/ResumeSessionDialog.mjs +1 -1
  93. package/dist/web/features/sessions/WelcomePanel.cjs +1 -1
  94. package/dist/web/features/sessions/WelcomePanel.mjs +1 -1
  95. package/dist/web/features/sessions/useSessionRail.cjs +7 -0
  96. package/dist/web/features/sessions/useSessionRail.cjs.map +1 -1
  97. package/dist/web/features/sessions/useSessionRail.d.mts.map +1 -1
  98. package/dist/web/features/sessions/useSessionRail.mjs +8 -1
  99. package/dist/web/features/sessions/useSessionRail.mjs.map +1 -1
  100. package/dist/web/features/settings/AppearanceSettings.cjs +1 -1
  101. package/dist/web/features/settings/AppearanceSettings.mjs +1 -1
  102. package/dist/web/features/settings/ContributedSettings.cjs +1 -1
  103. package/dist/web/features/settings/ContributedSettings.mjs +1 -1
  104. package/dist/web/features/settings/HostsSettings.cjs +1 -1
  105. package/dist/web/features/settings/HostsSettings.mjs +1 -1
  106. package/dist/web/features/settings/ImageSettings.cjs +1 -1
  107. package/dist/web/features/settings/ImageSettings.mjs +1 -1
  108. package/dist/web/features/settings/LoginFlowDialog.cjs +1 -1
  109. package/dist/web/features/settings/LoginFlowDialog.mjs +1 -1
  110. package/dist/web/features/settings/NotificationSettings.cjs +1 -1
  111. package/dist/web/features/settings/NotificationSettings.mjs +1 -1
  112. package/dist/web/features/settings/PluginSettings.cjs +1 -1
  113. package/dist/web/features/settings/PluginSettings.mjs +1 -1
  114. package/dist/web/features/settings/ProviderLogo.cjs +1 -1
  115. package/dist/web/features/settings/ProviderLogo.mjs +1 -1
  116. package/dist/web/features/settings/ProviderSettings.cjs +1 -1
  117. package/dist/web/features/settings/ProviderSettings.mjs +1 -1
  118. package/dist/web/features/settings/RemoteControlSettings.cjs +1 -1
  119. package/dist/web/features/settings/RemoteControlSettings.mjs +1 -1
  120. package/dist/web/features/settings/RepositoryInstructions.cjs +1 -1
  121. package/dist/web/features/settings/RepositoryInstructions.mjs +1 -1
  122. package/dist/web/features/settings/RepositorySettings.cjs +1 -1
  123. package/dist/web/features/settings/RepositorySettings.mjs +1 -1
  124. package/dist/web/features/settings/RepositoryWorkspace.cjs +1 -1
  125. package/dist/web/features/settings/RepositoryWorkspace.mjs +1 -1
  126. package/dist/web/features/settings/RunInContainerSection.cjs +1 -1
  127. package/dist/web/features/settings/RunInContainerSection.mjs +1 -1
  128. package/dist/web/features/settings/SessionMcpSettings.cjs +1 -1
  129. package/dist/web/features/settings/SessionMcpSettings.mjs +1 -1
  130. package/dist/web/features/settings/SettingsMenu.cjs +1 -1
  131. package/dist/web/features/settings/SettingsMenu.mjs +1 -1
  132. package/dist/web/features/settings/SettingsPanelHost.cjs +1 -1
  133. package/dist/web/features/settings/SettingsPanelHost.mjs +1 -1
  134. package/dist/web/features/settings/TemplateSettings.cjs +1 -1
  135. package/dist/web/features/settings/TemplateSettings.mjs +1 -1
  136. package/dist/web/features/settings/TunnelSettings.cjs +1 -1
  137. package/dist/web/features/settings/TunnelSettings.mjs +1 -1
  138. package/dist/web/features/status/TopBar.cjs +1 -1
  139. package/dist/web/features/status/TopBar.mjs +1 -1
  140. package/dist/web/lib/dashboardRoute.cjs +1 -1
  141. package/dist/web/lib/dashboardRoute.cjs.map +1 -1
  142. package/dist/web/lib/dashboardRoute.d.mts +2 -1
  143. package/dist/web/lib/dashboardRoute.d.mts.map +1 -1
  144. package/dist/web/lib/dashboardRoute.mjs +1 -1
  145. package/dist/web/lib/dashboardRoute.mjs.map +1 -1
  146. package/dist/web/lib/pluginRegistry.cjs +4 -1
  147. package/dist/web/lib/pluginRegistry.cjs.map +1 -1
  148. package/dist/web/lib/pluginRegistry.d.mts +4 -1
  149. package/dist/web/lib/pluginRegistry.d.mts.map +1 -1
  150. package/dist/web/lib/pluginRegistry.mjs +4 -1
  151. package/dist/web/lib/pluginRegistry.mjs.map +1 -1
  152. package/dist/web/stores/remoteAccessStore.cjs +11 -0
  153. package/dist/web/stores/remoteAccessStore.cjs.map +1 -1
  154. package/dist/web/stores/remoteAccessStore.d.mts +10 -0
  155. package/dist/web/stores/remoteAccessStore.d.mts.map +1 -1
  156. package/dist/web/stores/remoteAccessStore.mjs +11 -1
  157. package/dist/web/stores/remoteAccessStore.mjs.map +1 -1
  158. package/package.json +5 -5
package/dist/index.cjs CHANGED
@@ -175,6 +175,7 @@ exports.builtinCommandFrame = require_commands.builtinCommandFrame;
175
175
  exports.canSaveSettings = require_settingsDraft.canSaveSettings;
176
176
  exports.cancelDialog = require_sessionStore.cancelDialog;
177
177
  exports.cancelLogin = require_authApi.cancelLogin;
178
+ exports.choosePairTarget = require_remoteAccessStore.choosePairTarget;
178
179
  exports.claimDialogMenu = require_menuStore.claimDialogMenu;
179
180
  exports.clearComposerState = require_composerStore.clearComposerState;
180
181
  exports.clearDialog = require_sessionModel.clearDialog;
package/dist/index.d.mts CHANGED
@@ -69,7 +69,7 @@ import { DevProxyState, createDevProxyTarget, deleteDevProxyTarget, devProxyStor
69
69
  import { EMPTY_NEW_SESSION_DRAFT, NewSessionDraft, NewSessionState, closeNewSession, createPlainSession, newSessionDraftStore, newSessionStore, openNewSession, resetNewSessionStore, setNewSessionName } from "./web/stores/newSessionStore.mjs";
70
70
  import { PaletteState, closePalette, openPalette, paletteStore, setPalettePath, togglePalette } from "./web/stores/paletteStore.mjs";
71
71
  import { RailDialogState, ResumeDraft, ResumeTarget, ResumeView, closeResumeDialog, openResumeDialog, railDialogStore, railRestartStore, resetRailDialogStore, restartDashboardSession, restoreRemovedThread, resumeDashboardSession, resumeDraftStore, setResumeView, updateResumeDraft } from "./web/stores/railDialogStore.mjs";
72
- import { PasskeySupportView, RemoteAccessState, RemoteStep, addPasskey, approveDevice, closeRemoteDialog, denyDevice, newPairingCode, openRemoteDialog, refreshPasskeys, refreshRemoteState, remoteAccessStore, revokePairedDevice, revokeTrustedNativeDevice, showRemoteOptions, turnRemoteAccessOff, turnRemoteAccessOn, updateRemoteSettings } from "./web/stores/remoteAccessStore.mjs";
72
+ import { PairTarget, PasskeySupportView, RemoteAccessState, RemoteStep, addPasskey, approveDevice, choosePairTarget, closeRemoteDialog, denyDevice, newPairingCode, openRemoteDialog, refreshPasskeys, refreshRemoteState, remoteAccessStore, revokePairedDevice, revokeTrustedNativeDevice, showRemoteOptions, turnRemoteAccessOff, turnRemoteAccessOn, updateRemoteSettings } from "./web/stores/remoteAccessStore.mjs";
73
73
  import { TemplateConfiguration, configuredTemplate, ensureTemplateConfiguration, refreshTemplateConfiguration, saveTemplateDefault, templateStore, useTemplateConfiguration } from "./web/stores/templateStore.mjs";
74
74
  import { ThemeState, applyStoredTheme, availableThemes, selectTheme, themeStore } from "./web/stores/themeStore.mjs";
75
75
  import { ToolPromptState, markToolPromptFailed, resetToolPromptStore, toolPromptStore } from "./web/stores/toolPromptStore.mjs";
@@ -82,4 +82,4 @@ import { WorkspaceAdmissionDraft, admitDashboardWorkspace, admitDeclaredDashboar
82
82
  import { EMPTY_SETTINGS_DRAFT, SettingsDraftState, SettingsDraftTarget, discardSettingsDraft, loadSettingsDraft, saveSettingsDraft, setSettingsDraft, settingsDraftKey, settingsDraftStore } from "./web/stores/settingsDraftStore.mjs";
83
83
  import { dashboardStateFor, useDashboardState } from "./web/stores/dashboardStateStore.mjs";
84
84
  import { DashboardRendererProvider, DashboardRenderers } from "./web/lib/dashboardRenderers.mjs";
85
- export { ActivityGroup, AgentInfo, AssistantEntry, AttachPhase, BUILTIN_COMMANDS, BrowserNotificationDeliveryStatus, BrowserNotificationPermissionStatus, BrowserPerformanceEvent, BrowserPerformanceEventName, CommandInfo, CompletionItem, CompletionKind, CompletionTrigger, ComposerAttachment, ComposerContextAttachment, ComposerFileAttachment, ComposerImageAttachment, ComposerPromptClaim, ComposerSessionState, ComposerTextAttachment, ContextGroup, ContextGroupKind, ContextItem, ContextItemSource, ContextOwner, CreateSessionResult, DEFAULT_REPOSITORY_SETTINGS_SECTION, DEFAULT_SETTINGS_SECTION, DashboardRendererProvider, type DashboardRenderers, DashboardRoute, DevProxyState, DialogDraft, DialogMethod, DialogPromptClaim, DialogRequest, DockTab, EMPTY_NEW_SESSION_DRAFT, EMPTY_SETTINGS_DRAFT, EditorTextRequest, EntryKind, FetchItemDetailResult, FileLinkResolver, FileMention, GroupUnit, HOST_SLOTS, HistoryPage, ImageSettingsResult, InputSender, InstallDiagnostic, InstallDiagnosticKind, InstalledContextAction, InstalledHomeContribution, InstalledNativeTemplate, InstalledRepositorySettingsPanel, InstalledSettingsPanel, InstalledUserMessageAction, InstalledWebTemplate, IntercomEntry, LEGACY_WORKSPACE_ID, LeaderConflict, LeaderGroup, LeaderOption, LivePushStatus, LoginFlowResult, LogoutResult, MAX_COMPLETION_ITEMS, MAX_COMPOSER_ATTACHMENTS, MAX_COMPOSER_IMAGE_BYTES, MAX_COMPOSER_TEXT_BYTES, MAX_COMPOSER_TOTAL_IMAGE_BYTES, MAX_COMPOSER_TOTAL_TEXT_BYTES, MAX_COMPOSER_UPLOAD_BYTES, MenuClaim, MenuKind, MenuState, MinorMode, MinorModeAvailability, MinorModeSource, ModelChoice, NativeTemplateCatalog, NewSessionDraft, NewSessionState, NoticeEntry, PACKAGED_MINOR_MODES, PACKAGED_SELECTION_AXES, PairingResult, PaletteState, PasskeyOutcome, PasskeySupportView, PlannedWritesInput, ProfileIdentity, ProvidersResult, QueuedEntry, RailDialogState, RailRestartState, RailSessionInput, ReadConfigResult, ReadRepositorySettingsResult, ReduceSessionOptions, RemoteAccessState, RemoteStep, RemoveWorkspaceResult, RemovedSessionsResult, ResolvedFill, RestartSessionResult, RestoreRemovedSessionResult, ResumeDraft, ResumeSessionResult, ResumeTarget, ResumeView, ReviveSessionResult, RpcImage, STEP_UP_HEADER_NAME, Selection, SelectionAxis, SessionAsset, SessionGroupsResult, SessionHistoryResult, SessionMcpResult, SessionMcpViewState, SessionMeta, SessionRailModelInput, SessionSocket, SessionSocketHandlers, SessionState, SessionStats, SessionsState, SettingsDraftState, SettingsDraftTarget, SettingsSection, SettingsWorkspace, SettledEntry, SingleUnit, StateResult, StatusClock, StatusLineInput, StopSessionResult, StoredSessionAttachment, TRIGGER_CHARS, TargetResult, TargetsResult, TemplateConfiguration, ThemeState, ThreadTranscriptReader, TimelineEntry, TimelineUnit, ToolEntry, ToolPromptClaim, ToolPromptInput, ToolPromptState, TransientTabActions, UPDATE_REQUIRED_REASON, UiState, UiTraceRecord, UiTraceSink, UserEntry, UserImage, WebPluginCompositionPhase, WebPluginCompositionState, WebPluginMountState, WebPluginRegistry, WebTemplateCatalog, WebTemplateDecision, WebTemplateDiagnostic, WorkspaceAdmissionDraft, WorkspaceResult, WorkspaceSandboxRequest, WorkspacesResult, WorkspacesState, WriteConfigResult, abbreviateCwd, abortCommand, abortRun, acquireModelContext, activateWebPluginHost, activateWebPluginSession, activateWebPluginWorkspace, activeSessionId, activityGroupSlot, activityGroups, addDevProxyTarget, addPasskey, admitDashboardWorkspace, admitDeclaredDashboardWorkspaces, admitWorkspace, ansiSegments, answerDialogConfirm, answerDialogValue, answerLogin, appendComposerDraft, appendComposerQuote, appendQueued, appendUserPrompt, applyCaptureFrame, applyHistoryPage, applyProtocolQueue, applyProtocolTranscript, applySelectionAnswer, applySessionBacklog, applySessionFrame, applySessionLifecycle, applySessionRemoved, applySessionUpsert, applySessionsSnapshot, applyStoredTheme, applyThreadFrame, applyThreadTranscriptFrame, applyWorkspaceRemoved, applyWorkspaceUpsert, applyWorkspacesSnapshot, approveDevice, approvePairing, asWorkspace, assertionFor, attachComposerCapture, attachComposerContext, attachmentPrompt, availableThemes, beginSessionReplay, beginSessionTransfer, bindBundledNativeTemplates, bindBundledWebTemplates, bindDashboardTranscriptWatcher, bindFileLinkModes, bindHistoryReader, bindHostTransport, bindSessionActivityRenderer, bindSessionFileLinkModes, bindSessionProtocol, bindSessionTranscriptRenderer, bindSessionWebWorkspace, bindThreadReader, bindThreadRenderer, bindTransport, bindWebPluginCompositions, browserNotificationPermission, browserReadyDuration, buildRailWorkspaces, builtinCommandFrame, canSaveSettings, cancelDialog, cancelLogin, claimDialogMenu, clearComposerState, clearDialog, clearPendingMenu, clearQueueCommand, clearQueuedEntries, clearQueuedMessages, closeNewSession, closePalette, closeRemoteDialog, closeResumeDialog, closeTransientTab, collectNativeTemplates, collectWebTemplates, commandCompletions, compactCommand, completeSessionTransfer, composerStore, composerSubmissionStore, configuredTemplate, contextGroups, createDashboardTransport, createDevProxyTarget, createPagedTranscript, createPlainSession, createProtocolHubSocket, createProtocolLink, createSession, createSessionMcpClient, createToolCompletionTabs, createWebPluginRegistry, createWorkspaceSession, dashboardRouteFrom, dashboardStateFor, deleteDevProxyTarget, deleteQueuedMessage, deleteSessionGroup, deliverBrowserNotification, denyDevice, denyPairing, devProxyStore, dialogCancelled, dialogConfirmed, dialogDraftStore, dialogValue, disableLivePush, disableRemoteAccess, discardSettingsDraft, disconnectCaptures, discoverWorkspaceAdmission, discoverWorkspaces, dispatchChannelFrame, dispatchHeldSessionChannel, disposeModelContextAdapter, dockTabFor, dropComposerState, dropPluginSessionData, dropSessionStore, dropThreads, dropTransientTabs, emptySelection, enableLivePush, enableRemoteAccess, endSessionReplay, enqueueAutomaticCommand, ensureTemplateConfiguration, fetchContextItemDetail, fetchDevProxyTargets, fetchRemoteState, fetchWithStepUp, fileCompletions, fileLinkFor, fileLinkMentions, fileTabForPath, findTransientTab, flushBrowserTelemetry, flushUiTrace, focusPrompt, focusWorkspaceWebPlugins, followUpCommand, getAvailableModelsCommand, getAvailableThinkingLevelsCommand, getCommandsCommand, getSessionStatsCommand, getStateCommand, getWorkspace, globalSlotFills, groupSummary, groupTone, hasSessionProtocol, heldSessionChannels, heldThreads, heldVoiceSessions, holdSessionChannels, holdVoiceSession, imagesFromContent, inactiveTotal, initialSessionState, inlineTextBytes, installBrowserErrorReporting, installGlobalWebPlugins, installSessionWebPlugins, installWebPlugins, installWorkspaceWebPlugins, installedWebPlugins, invokeServerMethod, isDesktopClient, isSessionMcpActivity, isSupportedImageMimeType, leaderConflicts, leaderGroup, listDirectory, listPoFolders, listProviders, listRemovedSessions, listSessionHistory, listSessionMcpClients, listSessions, listSettingsModels, listSettingsRepositories, listWorkspaceHistory, listWorkspaces, livePushStatus, loadModelChoices, loadSessionAsset, loadSessionAvatar, loadSettingsDraft, localHostId, logoutProvider, markSocketClosed, markToolPromptFailed, markUpdateRequired, mediaKindFor, menuStore, mergeScopedPlugins, minorModes, mintPairingCode, nativeTemplateCatalog, newPairingCode, newSessionDraftStore, newSessionStore, noSessions, noteRender, noteStoreUpdate, notifyHubConnected, onCaptureStatus, onComposerSubmitted, onHubConnected, onSealedSignInRequired, openNewSession, openPalette, openRemoteDialog, openResumeDialog, openTransientTab, ownerLabel, ownersOf, paletteCommands, paletteStore, parseFileMentions, parseHostKey, parseSelection, passkeysAvailable, pendingCaptureSessions, pendingMenuFor, pendingSetupView, personaInitials, plannedSettingsWrites, pluginActivityGroups, pluginContextActions, pluginDockFaces, pluginFileLinks, pluginHomeContributions, pluginLeaderBindings, pluginMinorModes, pluginRepositorySettingsPanels, pluginSelectionAxes, pluginSessionContext, pluginSettingsPanels, pluginSettingsSections, pluginSlotProps, pluginToolRenderer, pluginUserMessageActions, pluginsAtScope, prependHistory, projectedGroups, promoteQueuedCommand, promoteQueuedMessage, promptCommand, protocolSocketUrl, publishComposerSubmission, qrMatrix, qualifyHostId, qualifyHostKey, queueFollowUp, queueFollowUpWithAck, railDialogStore, railRestartStore, railSessionStatus, readDormantTranscriptPage, readImageSettings, readLogin, readRepositorySettings, readSessionMcpActivity, readSessionMcpConfig, readSettingsConfig, recordBrowserError, recordBrowserPerformance, recordBrowserUiTrace, reduceSession, refreshDevProxyTargets, refreshPasskeys, refreshRemoteState, refreshSessionFacts, refreshSessionSelection, refreshSessionStats, refreshTemplateConfiguration, refreshWebPluginCompositions, registerPasskey, registerPromptInput, releaseDialogMenu, releaseProtocolTranscript, releaseSessionActivityRenderer, releaseSessionTranscriptRenderer, releaseThreadRenderer, releaseTransport, reloadWebTemplateDecision, rememberHostChannelKey, rememberedHostChannelKey, remoteAccessStore, removeDevProxyTarget, removeHostWebPlugins, removeQueuedCommand, removeQueuedEntry, removeSessionMcpSetup, removeSessionWebPlugins, removeWorkspace, removeWorkspaceWebPlugins, renameSession, renameSessionGroup, renderSessionActivity, renderSessionTranscript, renderThread, replaceQueuedEntries, requestBrowserNotificationPermission, requestLatestHistory, requestNewerHistory, requestOlderHistory, requestSessionProtocolFrame, resetComposerStore, resetDevProxyStore, resetMenuStore, resetNewSessionStore, resetRailDialogStore, resetSealedSessions, resetSessionStore, resetSessionStores, resetSessions, resetThreads, resetToolPromptStore, resetTransientTabs, resetWebPlugins, resetWorkspaceAdmission, resetWorkspaces, resolveNativeTemplate, resolveParentId, resolveWebTemplate, restartDashboardSession, restartSession, restoreComposerDrafts, restoreLivePushRegistration, restoreRemovedSession, restoreRemovedThread, restoreSealedSession, resubscribeThreads, resumeDashboardSession, resumeDraftStore, resumeQueueCommand, resumeQueuedMessages, resumeSession, resumeWorkspaceSession, retryWebPluginCompositions, reuseRailWorkspaces, reviveSession, revokeDevice, revokePairedDevice, revokeSessionMcpClient, revokeTrustedDevice, revokeTrustedNativeDevice, rewindCommand, rewindToMessage, runCommand, runningCount, sameRailEntries, sameRailEntry, saveComposerDrafts, saveRemoteSettings, saveSettingsDraft, saveTemplateDefault, sealedHttpSession, sealedProtocolSession, sealedSession, searchDirectories, searchSessionFiles, seedHistoryCursor, selectFastMode, selectModel, selectTheme, selectThinkingLevel, selectWorkspace, selectionAxes, selectionStatuses, sendFrame, sendFrameWithAck, sendHubFrame, sendSessionProtocolFrame, sessionMinorModes, sessionStatusClock, sessionStatusLine, sessionStoreFor, sessionToolRenderer, sessionWebPluginsInstalled, sessionsStore, setActiveSession, setAgentLock, setDockOpen, setDockTab, setHasNewerHistory, setModelCommand, setNewSessionName, setPalettePath, setPendingMenu, setResumeView, setSessionGroups, setSessionNameCommand, setSessionStreamed, setSettingsDraft, setThinkingLevelCommand, setTransientTabSession, setUiTraceSink, setWebPluginLoadDiagnostics, setWorkspaceInstructions, setWorkspaceSandbox, settingsDraftKey, settingsDraftStore, settingsKeyOf, settingsLockedReason, settingsSection, settingsSections, showRemoteOptions, signInWithPasskey, slotFills, splitHostId, startLogin, startPluginDefinitions, startWebPlugins, steerCommand, stopSession, streamedSessions, stripAnsi, submitCapture, submitComposerDraft, submitMessage, submitMessageWithAck, subscribeActivitySources, subscribeThread, subscribeWebPluginRegistry, summariseArgs, summaryValueEqual, tabComposerContext, templateStore, textFromContent, themeStore, threadStoreKey, timelineUnits, toQueuedEntries, toTimelineEntries, togglePalette, toolMessageProps, toolPromptClaim, toolPromptStore, totalTokens, traceProfilerRender, traceStore, transientTabsOf, transientTabsStore, transportForHost, triggerTokenAt, turnRemoteAccessOff, turnRemoteAccessOn, uiStore, unsubscribeThread, updateComposerState, updateDialogDraft, updateRemoteSettings, updateResumeDraft, updateWorkspaceAdmission, uploadSessionAttachment, useActiveSession, useActiveSessionMeta, useActivityGroups, useComposerState, useDashboardRoute, useDashboardState, useDialogDraft, useDockFaceBadges, useDockFaces, useFileLinks, useHasOlderHistory, useNoSessions, useOpenTab, usePluginSlotProps, useRailEntries, useRailEntry, useRenderTrace, useSessionMcp, useTemplateConfiguration, useToolPrompt, useTransientTabs, useWebPluginRegistry, validateComposerCapture, waitForSession, watchDashboardTranscript, watchHubThread, webPluginCompositionStore, webPluginDiagnostics, webPluginMountState, webPluginRegistryForHost, webPluginRegistryRevision, webPluginsInstalled, webTabs, webTemplateCatalog, workspaceAdmissionStore, workspaceName, workspaceSlotFills, workspacesStore, writeImageSettings, writeRepositorySelection, writeSettingsValue };
85
+ export { ActivityGroup, AgentInfo, AssistantEntry, AttachPhase, BUILTIN_COMMANDS, BrowserNotificationDeliveryStatus, BrowserNotificationPermissionStatus, BrowserPerformanceEvent, BrowserPerformanceEventName, CommandInfo, CompletionItem, CompletionKind, CompletionTrigger, ComposerAttachment, ComposerContextAttachment, ComposerFileAttachment, ComposerImageAttachment, ComposerPromptClaim, ComposerSessionState, ComposerTextAttachment, ContextGroup, ContextGroupKind, ContextItem, ContextItemSource, ContextOwner, CreateSessionResult, DEFAULT_REPOSITORY_SETTINGS_SECTION, DEFAULT_SETTINGS_SECTION, DashboardRendererProvider, type DashboardRenderers, DashboardRoute, DevProxyState, DialogDraft, DialogMethod, DialogPromptClaim, DialogRequest, DockTab, EMPTY_NEW_SESSION_DRAFT, EMPTY_SETTINGS_DRAFT, EditorTextRequest, EntryKind, FetchItemDetailResult, FileLinkResolver, FileMention, GroupUnit, HOST_SLOTS, HistoryPage, ImageSettingsResult, InputSender, InstallDiagnostic, InstallDiagnosticKind, InstalledContextAction, InstalledHomeContribution, InstalledNativeTemplate, InstalledRepositorySettingsPanel, InstalledSettingsPanel, InstalledUserMessageAction, InstalledWebTemplate, IntercomEntry, LEGACY_WORKSPACE_ID, LeaderConflict, LeaderGroup, LeaderOption, LivePushStatus, LoginFlowResult, LogoutResult, MAX_COMPLETION_ITEMS, MAX_COMPOSER_ATTACHMENTS, MAX_COMPOSER_IMAGE_BYTES, MAX_COMPOSER_TEXT_BYTES, MAX_COMPOSER_TOTAL_IMAGE_BYTES, MAX_COMPOSER_TOTAL_TEXT_BYTES, MAX_COMPOSER_UPLOAD_BYTES, MenuClaim, MenuKind, MenuState, MinorMode, MinorModeAvailability, MinorModeSource, ModelChoice, NativeTemplateCatalog, NewSessionDraft, NewSessionState, NoticeEntry, PACKAGED_MINOR_MODES, PACKAGED_SELECTION_AXES, PairTarget, PairingResult, PaletteState, PasskeyOutcome, PasskeySupportView, PlannedWritesInput, ProfileIdentity, ProvidersResult, QueuedEntry, RailDialogState, RailRestartState, RailSessionInput, ReadConfigResult, ReadRepositorySettingsResult, ReduceSessionOptions, RemoteAccessState, RemoteStep, RemoveWorkspaceResult, RemovedSessionsResult, ResolvedFill, RestartSessionResult, RestoreRemovedSessionResult, ResumeDraft, ResumeSessionResult, ResumeTarget, ResumeView, ReviveSessionResult, RpcImage, STEP_UP_HEADER_NAME, Selection, SelectionAxis, SessionAsset, SessionGroupsResult, SessionHistoryResult, SessionMcpResult, SessionMcpViewState, SessionMeta, SessionRailModelInput, SessionSocket, SessionSocketHandlers, SessionState, SessionStats, SessionsState, SettingsDraftState, SettingsDraftTarget, SettingsSection, SettingsWorkspace, SettledEntry, SingleUnit, StateResult, StatusClock, StatusLineInput, StopSessionResult, StoredSessionAttachment, TRIGGER_CHARS, TargetResult, TargetsResult, TemplateConfiguration, ThemeState, ThreadTranscriptReader, TimelineEntry, TimelineUnit, ToolEntry, ToolPromptClaim, ToolPromptInput, ToolPromptState, TransientTabActions, UPDATE_REQUIRED_REASON, UiState, UiTraceRecord, UiTraceSink, UserEntry, UserImage, WebPluginCompositionPhase, WebPluginCompositionState, WebPluginMountState, WebPluginRegistry, WebTemplateCatalog, WebTemplateDecision, WebTemplateDiagnostic, WorkspaceAdmissionDraft, WorkspaceResult, WorkspaceSandboxRequest, WorkspacesResult, WorkspacesState, WriteConfigResult, abbreviateCwd, abortCommand, abortRun, acquireModelContext, activateWebPluginHost, activateWebPluginSession, activateWebPluginWorkspace, activeSessionId, activityGroupSlot, activityGroups, addDevProxyTarget, addPasskey, admitDashboardWorkspace, admitDeclaredDashboardWorkspaces, admitWorkspace, ansiSegments, answerDialogConfirm, answerDialogValue, answerLogin, appendComposerDraft, appendComposerQuote, appendQueued, appendUserPrompt, applyCaptureFrame, applyHistoryPage, applyProtocolQueue, applyProtocolTranscript, applySelectionAnswer, applySessionBacklog, applySessionFrame, applySessionLifecycle, applySessionRemoved, applySessionUpsert, applySessionsSnapshot, applyStoredTheme, applyThreadFrame, applyThreadTranscriptFrame, applyWorkspaceRemoved, applyWorkspaceUpsert, applyWorkspacesSnapshot, approveDevice, approvePairing, asWorkspace, assertionFor, attachComposerCapture, attachComposerContext, attachmentPrompt, availableThemes, beginSessionReplay, beginSessionTransfer, bindBundledNativeTemplates, bindBundledWebTemplates, bindDashboardTranscriptWatcher, bindFileLinkModes, bindHistoryReader, bindHostTransport, bindSessionActivityRenderer, bindSessionFileLinkModes, bindSessionProtocol, bindSessionTranscriptRenderer, bindSessionWebWorkspace, bindThreadReader, bindThreadRenderer, bindTransport, bindWebPluginCompositions, browserNotificationPermission, browserReadyDuration, buildRailWorkspaces, builtinCommandFrame, canSaveSettings, cancelDialog, cancelLogin, choosePairTarget, claimDialogMenu, clearComposerState, clearDialog, clearPendingMenu, clearQueueCommand, clearQueuedEntries, clearQueuedMessages, closeNewSession, closePalette, closeRemoteDialog, closeResumeDialog, closeTransientTab, collectNativeTemplates, collectWebTemplates, commandCompletions, compactCommand, completeSessionTransfer, composerStore, composerSubmissionStore, configuredTemplate, contextGroups, createDashboardTransport, createDevProxyTarget, createPagedTranscript, createPlainSession, createProtocolHubSocket, createProtocolLink, createSession, createSessionMcpClient, createToolCompletionTabs, createWebPluginRegistry, createWorkspaceSession, dashboardRouteFrom, dashboardStateFor, deleteDevProxyTarget, deleteQueuedMessage, deleteSessionGroup, deliverBrowserNotification, denyDevice, denyPairing, devProxyStore, dialogCancelled, dialogConfirmed, dialogDraftStore, dialogValue, disableLivePush, disableRemoteAccess, discardSettingsDraft, disconnectCaptures, discoverWorkspaceAdmission, discoverWorkspaces, dispatchChannelFrame, dispatchHeldSessionChannel, disposeModelContextAdapter, dockTabFor, dropComposerState, dropPluginSessionData, dropSessionStore, dropThreads, dropTransientTabs, emptySelection, enableLivePush, enableRemoteAccess, endSessionReplay, enqueueAutomaticCommand, ensureTemplateConfiguration, fetchContextItemDetail, fetchDevProxyTargets, fetchRemoteState, fetchWithStepUp, fileCompletions, fileLinkFor, fileLinkMentions, fileTabForPath, findTransientTab, flushBrowserTelemetry, flushUiTrace, focusPrompt, focusWorkspaceWebPlugins, followUpCommand, getAvailableModelsCommand, getAvailableThinkingLevelsCommand, getCommandsCommand, getSessionStatsCommand, getStateCommand, getWorkspace, globalSlotFills, groupSummary, groupTone, hasSessionProtocol, heldSessionChannels, heldThreads, heldVoiceSessions, holdSessionChannels, holdVoiceSession, imagesFromContent, inactiveTotal, initialSessionState, inlineTextBytes, installBrowserErrorReporting, installGlobalWebPlugins, installSessionWebPlugins, installWebPlugins, installWorkspaceWebPlugins, installedWebPlugins, invokeServerMethod, isDesktopClient, isSessionMcpActivity, isSupportedImageMimeType, leaderConflicts, leaderGroup, listDirectory, listPoFolders, listProviders, listRemovedSessions, listSessionHistory, listSessionMcpClients, listSessions, listSettingsModels, listSettingsRepositories, listWorkspaceHistory, listWorkspaces, livePushStatus, loadModelChoices, loadSessionAsset, loadSessionAvatar, loadSettingsDraft, localHostId, logoutProvider, markSocketClosed, markToolPromptFailed, markUpdateRequired, mediaKindFor, menuStore, mergeScopedPlugins, minorModes, mintPairingCode, nativeTemplateCatalog, newPairingCode, newSessionDraftStore, newSessionStore, noSessions, noteRender, noteStoreUpdate, notifyHubConnected, onCaptureStatus, onComposerSubmitted, onHubConnected, onSealedSignInRequired, openNewSession, openPalette, openRemoteDialog, openResumeDialog, openTransientTab, ownerLabel, ownersOf, paletteCommands, paletteStore, parseFileMentions, parseHostKey, parseSelection, passkeysAvailable, pendingCaptureSessions, pendingMenuFor, pendingSetupView, personaInitials, plannedSettingsWrites, pluginActivityGroups, pluginContextActions, pluginDockFaces, pluginFileLinks, pluginHomeContributions, pluginLeaderBindings, pluginMinorModes, pluginRepositorySettingsPanels, pluginSelectionAxes, pluginSessionContext, pluginSettingsPanels, pluginSettingsSections, pluginSlotProps, pluginToolRenderer, pluginUserMessageActions, pluginsAtScope, prependHistory, projectedGroups, promoteQueuedCommand, promoteQueuedMessage, promptCommand, protocolSocketUrl, publishComposerSubmission, qrMatrix, qualifyHostId, qualifyHostKey, queueFollowUp, queueFollowUpWithAck, railDialogStore, railRestartStore, railSessionStatus, readDormantTranscriptPage, readImageSettings, readLogin, readRepositorySettings, readSessionMcpActivity, readSessionMcpConfig, readSettingsConfig, recordBrowserError, recordBrowserPerformance, recordBrowserUiTrace, reduceSession, refreshDevProxyTargets, refreshPasskeys, refreshRemoteState, refreshSessionFacts, refreshSessionSelection, refreshSessionStats, refreshTemplateConfiguration, refreshWebPluginCompositions, registerPasskey, registerPromptInput, releaseDialogMenu, releaseProtocolTranscript, releaseSessionActivityRenderer, releaseSessionTranscriptRenderer, releaseThreadRenderer, releaseTransport, reloadWebTemplateDecision, rememberHostChannelKey, rememberedHostChannelKey, remoteAccessStore, removeDevProxyTarget, removeHostWebPlugins, removeQueuedCommand, removeQueuedEntry, removeSessionMcpSetup, removeSessionWebPlugins, removeWorkspace, removeWorkspaceWebPlugins, renameSession, renameSessionGroup, renderSessionActivity, renderSessionTranscript, renderThread, replaceQueuedEntries, requestBrowserNotificationPermission, requestLatestHistory, requestNewerHistory, requestOlderHistory, requestSessionProtocolFrame, resetComposerStore, resetDevProxyStore, resetMenuStore, resetNewSessionStore, resetRailDialogStore, resetSealedSessions, resetSessionStore, resetSessionStores, resetSessions, resetThreads, resetToolPromptStore, resetTransientTabs, resetWebPlugins, resetWorkspaceAdmission, resetWorkspaces, resolveNativeTemplate, resolveParentId, resolveWebTemplate, restartDashboardSession, restartSession, restoreComposerDrafts, restoreLivePushRegistration, restoreRemovedSession, restoreRemovedThread, restoreSealedSession, resubscribeThreads, resumeDashboardSession, resumeDraftStore, resumeQueueCommand, resumeQueuedMessages, resumeSession, resumeWorkspaceSession, retryWebPluginCompositions, reuseRailWorkspaces, reviveSession, revokeDevice, revokePairedDevice, revokeSessionMcpClient, revokeTrustedDevice, revokeTrustedNativeDevice, rewindCommand, rewindToMessage, runCommand, runningCount, sameRailEntries, sameRailEntry, saveComposerDrafts, saveRemoteSettings, saveSettingsDraft, saveTemplateDefault, sealedHttpSession, sealedProtocolSession, sealedSession, searchDirectories, searchSessionFiles, seedHistoryCursor, selectFastMode, selectModel, selectTheme, selectThinkingLevel, selectWorkspace, selectionAxes, selectionStatuses, sendFrame, sendFrameWithAck, sendHubFrame, sendSessionProtocolFrame, sessionMinorModes, sessionStatusClock, sessionStatusLine, sessionStoreFor, sessionToolRenderer, sessionWebPluginsInstalled, sessionsStore, setActiveSession, setAgentLock, setDockOpen, setDockTab, setHasNewerHistory, setModelCommand, setNewSessionName, setPalettePath, setPendingMenu, setResumeView, setSessionGroups, setSessionNameCommand, setSessionStreamed, setSettingsDraft, setThinkingLevelCommand, setTransientTabSession, setUiTraceSink, setWebPluginLoadDiagnostics, setWorkspaceInstructions, setWorkspaceSandbox, settingsDraftKey, settingsDraftStore, settingsKeyOf, settingsLockedReason, settingsSection, settingsSections, showRemoteOptions, signInWithPasskey, slotFills, splitHostId, startLogin, startPluginDefinitions, startWebPlugins, steerCommand, stopSession, streamedSessions, stripAnsi, submitCapture, submitComposerDraft, submitMessage, submitMessageWithAck, subscribeActivitySources, subscribeThread, subscribeWebPluginRegistry, summariseArgs, summaryValueEqual, tabComposerContext, templateStore, textFromContent, themeStore, threadStoreKey, timelineUnits, toQueuedEntries, toTimelineEntries, togglePalette, toolMessageProps, toolPromptClaim, toolPromptStore, totalTokens, traceProfilerRender, traceStore, transientTabsOf, transientTabsStore, transportForHost, triggerTokenAt, turnRemoteAccessOff, turnRemoteAccessOn, uiStore, unsubscribeThread, updateComposerState, updateDialogDraft, updateRemoteSettings, updateResumeDraft, updateWorkspaceAdmission, uploadSessionAttachment, useActiveSession, useActiveSessionMeta, useActivityGroups, useComposerState, useDashboardRoute, useDashboardState, useDialogDraft, useDockFaceBadges, useDockFaces, useFileLinks, useHasOlderHistory, useNoSessions, useOpenTab, usePluginSlotProps, useRailEntries, useRailEntry, useRenderTrace, useSessionMcp, useTemplateConfiguration, useToolPrompt, useTransientTabs, useWebPluginRegistry, validateComposerCapture, waitForSession, watchDashboardTranscript, watchHubThread, webPluginCompositionStore, webPluginDiagnostics, webPluginMountState, webPluginRegistryForHost, webPluginRegistryRevision, webPluginsInstalled, webTabs, webTemplateCatalog, workspaceAdmissionStore, workspaceName, workspaceSlotFills, workspacesStore, writeImageSettings, writeRepositorySelection, writeSettingsValue };
package/dist/index.mjs CHANGED
@@ -64,7 +64,7 @@ import { EMPTY_NEW_SESSION_DRAFT, closeNewSession, createPlainSession, newSessio
64
64
  import { createPagedTranscript } from "./web/stores/pagedTranscriptStore.mjs";
65
65
  import { closePalette, openPalette, paletteStore, setPalettePath, togglePalette } from "./web/stores/paletteStore.mjs";
66
66
  import { closeResumeDialog, openResumeDialog, railDialogStore, railRestartStore, resetRailDialogStore, restartDashboardSession, restoreRemovedThread, resumeDashboardSession, resumeDraftStore, setResumeView, updateResumeDraft } from "./web/stores/railDialogStore.mjs";
67
- import { addPasskey, approveDevice, closeRemoteDialog, denyDevice, newPairingCode, openRemoteDialog, refreshPasskeys, refreshRemoteState, remoteAccessStore, revokePairedDevice, revokeTrustedNativeDevice, showRemoteOptions, turnRemoteAccessOff, turnRemoteAccessOn, updateRemoteSettings } from "./web/stores/remoteAccessStore.mjs";
67
+ import { addPasskey, approveDevice, choosePairTarget, closeRemoteDialog, denyDevice, newPairingCode, openRemoteDialog, refreshPasskeys, refreshRemoteState, remoteAccessStore, revokePairedDevice, revokeTrustedNativeDevice, showRemoteOptions, turnRemoteAccessOff, turnRemoteAccessOn, updateRemoteSettings } from "./web/stores/remoteAccessStore.mjs";
68
68
  import { dispatchHeldSessionChannel, heldSessionChannels, heldVoiceSessions, holdSessionChannels, holdVoiceSession } from "./web/stores/sessionChannelHoldsStore.mjs";
69
69
  import { configuredTemplate, ensureTemplateConfiguration, refreshTemplateConfiguration, saveTemplateDefault, templateStore, useTemplateConfiguration } from "./web/stores/templateStore.mjs";
70
70
  import { applyStoredTheme, availableThemes, selectTheme, themeStore } from "./web/stores/themeStore.mjs";
@@ -82,4 +82,4 @@ import { admitDashboardWorkspace, admitDeclaredDashboardWorkspaces, discoverWork
82
82
  import { dialogDraftStore, updateDialogDraft, useDialogDraft } from "./web/stores/dialogDraftStore.mjs";
83
83
  import { EMPTY_SETTINGS_DRAFT, discardSettingsDraft, loadSettingsDraft, saveSettingsDraft, setSettingsDraft, settingsDraftKey, settingsDraftStore } from "./web/stores/settingsDraftStore.mjs";
84
84
  import { dashboardStateFor, useDashboardState } from "./web/stores/dashboardStateStore.mjs";
85
- export { BUILTIN_COMMANDS, DEFAULT_REPOSITORY_SETTINGS_SECTION, DEFAULT_SETTINGS_SECTION, DashboardRendererProvider, EMPTY_NEW_SESSION_DRAFT, EMPTY_SETTINGS_DRAFT, HOST_SLOTS, LEGACY_WORKSPACE_ID, MAX_COMPLETION_ITEMS, MAX_COMPOSER_ATTACHMENTS, MAX_COMPOSER_IMAGE_BYTES, MAX_COMPOSER_TEXT_BYTES, MAX_COMPOSER_TOTAL_IMAGE_BYTES, MAX_COMPOSER_TOTAL_TEXT_BYTES, MAX_COMPOSER_UPLOAD_BYTES, PACKAGED_MINOR_MODES, PACKAGED_SELECTION_AXES, STEP_UP_HEADER_NAME, TRIGGER_CHARS, UPDATE_REQUIRED_REASON, abbreviateCwd, abortCommand, abortRun, acquireModelContext, activateWebPluginHost, activateWebPluginSession, activateWebPluginWorkspace, activeSessionId, activityGroupSlot, activityGroups, addDevProxyTarget, addPasskey, admitDashboardWorkspace, admitDeclaredDashboardWorkspaces, admitWorkspace, ansiSegments, answerDialogConfirm, answerDialogValue, answerLogin, appendComposerDraft, appendComposerQuote, appendQueued, appendUserPrompt, applyCaptureFrame, applyHistoryPage, applyProtocolQueue, applyProtocolTranscript, applySelectionAnswer, applySessionBacklog, applySessionFrame, applySessionLifecycle, applySessionRemoved, applySessionUpsert, applySessionsSnapshot, applyStoredTheme, applyThreadFrame, applyThreadTranscriptFrame, applyWorkspaceRemoved, applyWorkspaceUpsert, applyWorkspacesSnapshot, approveDevice, approvePairing, asWorkspace, assertionFor, attachComposerCapture, attachComposerContext, attachmentPrompt, availableThemes, beginSessionReplay, beginSessionTransfer, bindBundledNativeTemplates, bindBundledWebTemplates, bindDashboardTranscriptWatcher, bindFileLinkModes, bindHistoryReader, bindHostTransport, bindSessionActivityRenderer, bindSessionFileLinkModes, bindSessionProtocol, bindSessionTranscriptRenderer, bindSessionWebWorkspace, bindThreadReader, bindThreadRenderer, bindTransport, bindWebPluginCompositions, browserNotificationPermission, browserReadyDuration, buildRailWorkspaces, builtinCommandFrame, canSaveSettings, cancelDialog, cancelLogin, claimDialogMenu, clearComposerState, clearDialog, clearPendingMenu, clearQueueCommand, clearQueuedEntries, clearQueuedMessages, closeNewSession, closePalette, closeRemoteDialog, closeResumeDialog, closeTransientTab, collectNativeTemplates, collectWebTemplates, commandCompletions, compactCommand, completeSessionTransfer, composerStore, composerSubmissionStore, configuredTemplate, contextGroups, createDashboardTransport, createDevProxyTarget, createPagedTranscript, createPlainSession, createProtocolHubSocket, createProtocolLink, createSession, createSessionMcpClient, createToolCompletionTabs, createWebPluginRegistry, createWorkspaceSession, dashboardRouteFrom, dashboardStateFor, deleteDevProxyTarget, deleteQueuedMessage, deleteSessionGroup, deliverBrowserNotification, denyDevice, denyPairing, devProxyStore, dialogCancelled, dialogConfirmed, dialogDraftStore, dialogValue, disableLivePush, disableRemoteAccess, discardSettingsDraft, disconnectCaptures, discoverWorkspaceAdmission, discoverWorkspaces, dispatchChannelFrame, dispatchHeldSessionChannel, disposeModelContextAdapter, dockTabFor, dropComposerState, dropPluginSessionData, dropSessionStore, dropThreads, dropTransientTabs, emptySelection, enableLivePush, enableRemoteAccess, endSessionReplay, enqueueAutomaticCommand, ensureTemplateConfiguration, fetchContextItemDetail, fetchDevProxyTargets, fetchRemoteState, fetchWithStepUp, fileCompletions, fileLinkFor, fileLinkMentions, fileTabForPath, findTransientTab, flushBrowserTelemetry, flushUiTrace, focusPrompt, focusWorkspaceWebPlugins, followUpCommand, getAvailableModelsCommand, getAvailableThinkingLevelsCommand, getCommandsCommand, getSessionStatsCommand, getStateCommand, getWorkspace, globalSlotFills, groupSummary, groupTone, hasSessionProtocol, heldSessionChannels, heldThreads, heldVoiceSessions, holdSessionChannels, holdVoiceSession, imagesFromContent, inactiveTotal, initialSessionState, inlineTextBytes, installBrowserErrorReporting, installGlobalWebPlugins, installSessionWebPlugins, installWebPlugins, installWorkspaceWebPlugins, installedWebPlugins, invokeServerMethod, isDesktopClient, isSessionMcpActivity, isSupportedImageMimeType, leaderConflicts, leaderGroup, listDirectory, listPoFolders, listProviders, listRemovedSessions, listSessionHistory, listSessionMcpClients, listSessions, listSettingsModels, listSettingsRepositories, listWorkspaceHistory, listWorkspaces, livePushStatus, loadModelChoices, loadSessionAsset, loadSessionAvatar, loadSettingsDraft, localHostId, logoutProvider, markSocketClosed, markToolPromptFailed, markUpdateRequired, mediaKindFor, menuStore, mergeScopedPlugins, minorModes, mintPairingCode, nativeTemplateCatalog, newPairingCode, newSessionDraftStore, newSessionStore, noSessions, noteRender, noteStoreUpdate, notifyHubConnected, onCaptureStatus, onComposerSubmitted, onHubConnected, onSealedSignInRequired, openNewSession, openPalette, openRemoteDialog, openResumeDialog, openTransientTab, ownerLabel, ownersOf, paletteCommands, paletteStore, parseFileMentions, parseHostKey, parseSelection, passkeysAvailable, pendingCaptureSessions, pendingMenuFor, pendingSetupView, personaInitials, plannedSettingsWrites, pluginActivityGroups, pluginContextActions, pluginDockFaces, pluginFileLinks, pluginHomeContributions, pluginLeaderBindings, pluginMinorModes, pluginRepositorySettingsPanels, pluginSelectionAxes, pluginSessionContext, pluginSettingsPanels, pluginSettingsSections, pluginSlotProps, pluginToolRenderer, pluginUserMessageActions, pluginsAtScope, prependHistory, projectedGroups, promoteQueuedCommand, promoteQueuedMessage, promptCommand, protocolSocketUrl, publishComposerSubmission, qrMatrix, qualifyHostId, qualifyHostKey, queueFollowUp, queueFollowUpWithAck, railDialogStore, railRestartStore, railSessionStatus, readDormantTranscriptPage, readImageSettings, readLogin, readRepositorySettings, readSessionMcpActivity, readSessionMcpConfig, readSettingsConfig, recordBrowserError, recordBrowserPerformance, recordBrowserUiTrace, reduceSession, refreshDevProxyTargets, refreshPasskeys, refreshRemoteState, refreshSessionFacts, refreshSessionSelection, refreshSessionStats, refreshTemplateConfiguration, refreshWebPluginCompositions, registerPasskey, registerPromptInput, releaseDialogMenu, releaseProtocolTranscript, releaseSessionActivityRenderer, releaseSessionTranscriptRenderer, releaseThreadRenderer, releaseTransport, reloadWebTemplateDecision, rememberHostChannelKey, rememberedHostChannelKey, remoteAccessStore, removeDevProxyTarget, removeHostWebPlugins, removeQueuedCommand, removeQueuedEntry, removeSessionMcpSetup, removeSessionWebPlugins, removeWorkspace, removeWorkspaceWebPlugins, renameSession, renameSessionGroup, renderSessionActivity, renderSessionTranscript, renderThread, replaceQueuedEntries, requestBrowserNotificationPermission, requestLatestHistory, requestNewerHistory, requestOlderHistory, requestSessionProtocolFrame, resetComposerStore, resetDevProxyStore, resetMenuStore, resetNewSessionStore, resetRailDialogStore, resetSealedSessions, resetSessionStore, resetSessionStores, resetSessions, resetThreads, resetToolPromptStore, resetTransientTabs, resetWebPlugins, resetWorkspaceAdmission, resetWorkspaces, resolveNativeTemplate, resolveParentId, resolveWebTemplate, restartDashboardSession, restartSession, restoreComposerDrafts, restoreLivePushRegistration, restoreRemovedSession, restoreRemovedThread, restoreSealedSession, resubscribeThreads, resumeDashboardSession, resumeDraftStore, resumeQueueCommand, resumeQueuedMessages, resumeSession, resumeWorkspaceSession, retryWebPluginCompositions, reuseRailWorkspaces, reviveSession, revokeDevice, revokePairedDevice, revokeSessionMcpClient, revokeTrustedDevice, revokeTrustedNativeDevice, rewindCommand, rewindToMessage, runCommand, runningCount, sameRailEntries, sameRailEntry, saveComposerDrafts, saveRemoteSettings, saveSettingsDraft, saveTemplateDefault, sealedHttpSession, sealedProtocolSession, sealedSession, searchDirectories, searchSessionFiles, seedHistoryCursor, selectFastMode, selectModel, selectTheme, selectThinkingLevel, selectWorkspace, selectionAxes, selectionStatuses, sendFrame, sendFrameWithAck, sendHubFrame, sendSessionProtocolFrame, sessionMinorModes, sessionStatusClock, sessionStatusLine, sessionStoreFor, sessionToolRenderer, sessionWebPluginsInstalled, sessionsStore, setActiveSession, setAgentLock, setDockOpen, setDockTab, setHasNewerHistory, setModelCommand, setNewSessionName, setPalettePath, setPendingMenu, setResumeView, setSessionGroups, setSessionNameCommand, setSessionStreamed, setSettingsDraft, setThinkingLevelCommand, setTransientTabSession, setUiTraceSink, setWebPluginLoadDiagnostics, setWorkspaceInstructions, setWorkspaceSandbox, settingsDraftKey, settingsDraftStore, settingsKeyOf, settingsLockedReason, settingsSection, settingsSections, showRemoteOptions, signInWithPasskey, slotFills, splitHostId, startLogin, startPluginDefinitions, startWebPlugins, steerCommand, stopSession, streamedSessions, stripAnsi, submitCapture, submitComposerDraft, submitMessage, submitMessageWithAck, subscribeActivitySources, subscribeThread, subscribeWebPluginRegistry, summariseArgs, summaryValueEqual, tabComposerContext, templateStore, textFromContent, themeStore, threadStoreKey, timelineUnits, toQueuedEntries, toTimelineEntries, togglePalette, toolMessageProps, toolPromptClaim, toolPromptStore, totalTokens, traceProfilerRender, traceStore, transientTabsOf, transientTabsStore, transportForHost, triggerTokenAt, turnRemoteAccessOff, turnRemoteAccessOn, uiStore, unsubscribeThread, updateComposerState, updateDialogDraft, updateRemoteSettings, updateResumeDraft, updateWorkspaceAdmission, uploadSessionAttachment, useActiveSession, useActiveSessionMeta, useActivityGroups, useComposerState, useDashboardRoute, useDashboardState, useDialogDraft, useDockFaceBadges, useDockFaces, useFileLinks, useHasOlderHistory, useNoSessions, useOpenTab, usePluginSlotProps, useRailEntries, useRailEntry, useRenderTrace, useSessionMcp, useTemplateConfiguration, useToolPrompt, useTransientTabs, useWebPluginRegistry, validateComposerCapture, waitForSession, watchDashboardTranscript, watchHubThread, webPluginCompositionStore, webPluginDiagnostics, webPluginMountState, webPluginRegistryForHost, webPluginRegistryRevision, webPluginsInstalled, webTabs, webTemplateCatalog, workspaceAdmissionStore, workspaceName, workspaceSlotFills, workspacesStore, writeImageSettings, writeRepositorySelection, writeSettingsValue };
85
+ export { BUILTIN_COMMANDS, DEFAULT_REPOSITORY_SETTINGS_SECTION, DEFAULT_SETTINGS_SECTION, DashboardRendererProvider, EMPTY_NEW_SESSION_DRAFT, EMPTY_SETTINGS_DRAFT, HOST_SLOTS, LEGACY_WORKSPACE_ID, MAX_COMPLETION_ITEMS, MAX_COMPOSER_ATTACHMENTS, MAX_COMPOSER_IMAGE_BYTES, MAX_COMPOSER_TEXT_BYTES, MAX_COMPOSER_TOTAL_IMAGE_BYTES, MAX_COMPOSER_TOTAL_TEXT_BYTES, MAX_COMPOSER_UPLOAD_BYTES, PACKAGED_MINOR_MODES, PACKAGED_SELECTION_AXES, STEP_UP_HEADER_NAME, TRIGGER_CHARS, UPDATE_REQUIRED_REASON, abbreviateCwd, abortCommand, abortRun, acquireModelContext, activateWebPluginHost, activateWebPluginSession, activateWebPluginWorkspace, activeSessionId, activityGroupSlot, activityGroups, addDevProxyTarget, addPasskey, admitDashboardWorkspace, admitDeclaredDashboardWorkspaces, admitWorkspace, ansiSegments, answerDialogConfirm, answerDialogValue, answerLogin, appendComposerDraft, appendComposerQuote, appendQueued, appendUserPrompt, applyCaptureFrame, applyHistoryPage, applyProtocolQueue, applyProtocolTranscript, applySelectionAnswer, applySessionBacklog, applySessionFrame, applySessionLifecycle, applySessionRemoved, applySessionUpsert, applySessionsSnapshot, applyStoredTheme, applyThreadFrame, applyThreadTranscriptFrame, applyWorkspaceRemoved, applyWorkspaceUpsert, applyWorkspacesSnapshot, approveDevice, approvePairing, asWorkspace, assertionFor, attachComposerCapture, attachComposerContext, attachmentPrompt, availableThemes, beginSessionReplay, beginSessionTransfer, bindBundledNativeTemplates, bindBundledWebTemplates, bindDashboardTranscriptWatcher, bindFileLinkModes, bindHistoryReader, bindHostTransport, bindSessionActivityRenderer, bindSessionFileLinkModes, bindSessionProtocol, bindSessionTranscriptRenderer, bindSessionWebWorkspace, bindThreadReader, bindThreadRenderer, bindTransport, bindWebPluginCompositions, browserNotificationPermission, browserReadyDuration, buildRailWorkspaces, builtinCommandFrame, canSaveSettings, cancelDialog, cancelLogin, choosePairTarget, claimDialogMenu, clearComposerState, clearDialog, clearPendingMenu, clearQueueCommand, clearQueuedEntries, clearQueuedMessages, closeNewSession, closePalette, closeRemoteDialog, closeResumeDialog, closeTransientTab, collectNativeTemplates, collectWebTemplates, commandCompletions, compactCommand, completeSessionTransfer, composerStore, composerSubmissionStore, configuredTemplate, contextGroups, createDashboardTransport, createDevProxyTarget, createPagedTranscript, createPlainSession, createProtocolHubSocket, createProtocolLink, createSession, createSessionMcpClient, createToolCompletionTabs, createWebPluginRegistry, createWorkspaceSession, dashboardRouteFrom, dashboardStateFor, deleteDevProxyTarget, deleteQueuedMessage, deleteSessionGroup, deliverBrowserNotification, denyDevice, denyPairing, devProxyStore, dialogCancelled, dialogConfirmed, dialogDraftStore, dialogValue, disableLivePush, disableRemoteAccess, discardSettingsDraft, disconnectCaptures, discoverWorkspaceAdmission, discoverWorkspaces, dispatchChannelFrame, dispatchHeldSessionChannel, disposeModelContextAdapter, dockTabFor, dropComposerState, dropPluginSessionData, dropSessionStore, dropThreads, dropTransientTabs, emptySelection, enableLivePush, enableRemoteAccess, endSessionReplay, enqueueAutomaticCommand, ensureTemplateConfiguration, fetchContextItemDetail, fetchDevProxyTargets, fetchRemoteState, fetchWithStepUp, fileCompletions, fileLinkFor, fileLinkMentions, fileTabForPath, findTransientTab, flushBrowserTelemetry, flushUiTrace, focusPrompt, focusWorkspaceWebPlugins, followUpCommand, getAvailableModelsCommand, getAvailableThinkingLevelsCommand, getCommandsCommand, getSessionStatsCommand, getStateCommand, getWorkspace, globalSlotFills, groupSummary, groupTone, hasSessionProtocol, heldSessionChannels, heldThreads, heldVoiceSessions, holdSessionChannels, holdVoiceSession, imagesFromContent, inactiveTotal, initialSessionState, inlineTextBytes, installBrowserErrorReporting, installGlobalWebPlugins, installSessionWebPlugins, installWebPlugins, installWorkspaceWebPlugins, installedWebPlugins, invokeServerMethod, isDesktopClient, isSessionMcpActivity, isSupportedImageMimeType, leaderConflicts, leaderGroup, listDirectory, listPoFolders, listProviders, listRemovedSessions, listSessionHistory, listSessionMcpClients, listSessions, listSettingsModels, listSettingsRepositories, listWorkspaceHistory, listWorkspaces, livePushStatus, loadModelChoices, loadSessionAsset, loadSessionAvatar, loadSettingsDraft, localHostId, logoutProvider, markSocketClosed, markToolPromptFailed, markUpdateRequired, mediaKindFor, menuStore, mergeScopedPlugins, minorModes, mintPairingCode, nativeTemplateCatalog, newPairingCode, newSessionDraftStore, newSessionStore, noSessions, noteRender, noteStoreUpdate, notifyHubConnected, onCaptureStatus, onComposerSubmitted, onHubConnected, onSealedSignInRequired, openNewSession, openPalette, openRemoteDialog, openResumeDialog, openTransientTab, ownerLabel, ownersOf, paletteCommands, paletteStore, parseFileMentions, parseHostKey, parseSelection, passkeysAvailable, pendingCaptureSessions, pendingMenuFor, pendingSetupView, personaInitials, plannedSettingsWrites, pluginActivityGroups, pluginContextActions, pluginDockFaces, pluginFileLinks, pluginHomeContributions, pluginLeaderBindings, pluginMinorModes, pluginRepositorySettingsPanels, pluginSelectionAxes, pluginSessionContext, pluginSettingsPanels, pluginSettingsSections, pluginSlotProps, pluginToolRenderer, pluginUserMessageActions, pluginsAtScope, prependHistory, projectedGroups, promoteQueuedCommand, promoteQueuedMessage, promptCommand, protocolSocketUrl, publishComposerSubmission, qrMatrix, qualifyHostId, qualifyHostKey, queueFollowUp, queueFollowUpWithAck, railDialogStore, railRestartStore, railSessionStatus, readDormantTranscriptPage, readImageSettings, readLogin, readRepositorySettings, readSessionMcpActivity, readSessionMcpConfig, readSettingsConfig, recordBrowserError, recordBrowserPerformance, recordBrowserUiTrace, reduceSession, refreshDevProxyTargets, refreshPasskeys, refreshRemoteState, refreshSessionFacts, refreshSessionSelection, refreshSessionStats, refreshTemplateConfiguration, refreshWebPluginCompositions, registerPasskey, registerPromptInput, releaseDialogMenu, releaseProtocolTranscript, releaseSessionActivityRenderer, releaseSessionTranscriptRenderer, releaseThreadRenderer, releaseTransport, reloadWebTemplateDecision, rememberHostChannelKey, rememberedHostChannelKey, remoteAccessStore, removeDevProxyTarget, removeHostWebPlugins, removeQueuedCommand, removeQueuedEntry, removeSessionMcpSetup, removeSessionWebPlugins, removeWorkspace, removeWorkspaceWebPlugins, renameSession, renameSessionGroup, renderSessionActivity, renderSessionTranscript, renderThread, replaceQueuedEntries, requestBrowserNotificationPermission, requestLatestHistory, requestNewerHistory, requestOlderHistory, requestSessionProtocolFrame, resetComposerStore, resetDevProxyStore, resetMenuStore, resetNewSessionStore, resetRailDialogStore, resetSealedSessions, resetSessionStore, resetSessionStores, resetSessions, resetThreads, resetToolPromptStore, resetTransientTabs, resetWebPlugins, resetWorkspaceAdmission, resetWorkspaces, resolveNativeTemplate, resolveParentId, resolveWebTemplate, restartDashboardSession, restartSession, restoreComposerDrafts, restoreLivePushRegistration, restoreRemovedSession, restoreRemovedThread, restoreSealedSession, resubscribeThreads, resumeDashboardSession, resumeDraftStore, resumeQueueCommand, resumeQueuedMessages, resumeSession, resumeWorkspaceSession, retryWebPluginCompositions, reuseRailWorkspaces, reviveSession, revokeDevice, revokePairedDevice, revokeSessionMcpClient, revokeTrustedDevice, revokeTrustedNativeDevice, rewindCommand, rewindToMessage, runCommand, runningCount, sameRailEntries, sameRailEntry, saveComposerDrafts, saveRemoteSettings, saveSettingsDraft, saveTemplateDefault, sealedHttpSession, sealedProtocolSession, sealedSession, searchDirectories, searchSessionFiles, seedHistoryCursor, selectFastMode, selectModel, selectTheme, selectThinkingLevel, selectWorkspace, selectionAxes, selectionStatuses, sendFrame, sendFrameWithAck, sendHubFrame, sendSessionProtocolFrame, sessionMinorModes, sessionStatusClock, sessionStatusLine, sessionStoreFor, sessionToolRenderer, sessionWebPluginsInstalled, sessionsStore, setActiveSession, setAgentLock, setDockOpen, setDockTab, setHasNewerHistory, setModelCommand, setNewSessionName, setPalettePath, setPendingMenu, setResumeView, setSessionGroups, setSessionNameCommand, setSessionStreamed, setSettingsDraft, setThinkingLevelCommand, setTransientTabSession, setUiTraceSink, setWebPluginLoadDiagnostics, setWorkspaceInstructions, setWorkspaceSandbox, settingsDraftKey, settingsDraftStore, settingsKeyOf, settingsLockedReason, settingsSection, settingsSections, showRemoteOptions, signInWithPasskey, slotFills, splitHostId, startLogin, startPluginDefinitions, startWebPlugins, steerCommand, stopSession, streamedSessions, stripAnsi, submitCapture, submitComposerDraft, submitMessage, submitMessageWithAck, subscribeActivitySources, subscribeThread, subscribeWebPluginRegistry, summariseArgs, summaryValueEqual, tabComposerContext, templateStore, textFromContent, themeStore, threadStoreKey, timelineUnits, toQueuedEntries, toTimelineEntries, togglePalette, toolMessageProps, toolPromptClaim, toolPromptStore, totalTokens, traceProfilerRender, traceStore, transientTabsOf, transientTabsStore, transportForHost, triggerTokenAt, turnRemoteAccessOff, turnRemoteAccessOn, uiStore, unsubscribeThread, updateComposerState, updateDialogDraft, updateRemoteSettings, updateResumeDraft, updateWorkspaceAdmission, uploadSessionAttachment, useActiveSession, useActiveSessionMeta, useActivityGroups, useComposerState, useDashboardRoute, useDashboardState, useDialogDraft, useDockFaceBadges, useDockFaces, useFileLinks, useHasOlderHistory, useNoSessions, useOpenTab, usePluginSlotProps, useRailEntries, useRailEntry, useRenderTrace, useSessionMcp, useTemplateConfiguration, useToolPrompt, useTransientTabs, useWebPluginRegistry, validateComposerCapture, waitForSession, watchDashboardTranscript, watchHubThread, webPluginCompositionStore, webPluginDiagnostics, webPluginMountState, webPluginRegistryForHost, webPluginRegistryRevision, webPluginsInstalled, webTabs, webTemplateCatalog, workspaceAdmissionStore, workspaceName, workspaceSlotFills, workspacesStore, writeImageSettings, writeRepositorySelection, writeSettingsValue };
@@ -22,6 +22,11 @@ const REMOTE_PUSH_KEY_ROUTE = `${REMOTE_PUSH_ROUTE}/key`;
22
22
  const PROTOCOL_SOCKET_ROUTE = "/api/ws";
23
23
  /** The pairing page a scanned QR opens. Unauthenticated on the tunnel listener. */
24
24
  const PAIRING_PAGE_ROUTE = "/pair";
25
+ /**
26
+ * The phone app's form of the same QR: its `po` scheme wrapping the encoded HTTPS pairing URL, so a
27
+ * phone camera opens Po instead of the browser. The app unwraps it and checks the inner URL as usual.
28
+ */
29
+ const NATIVE_PAIRING_LINK_PREFIX = "po://pair?link=";
25
30
  /** Where the pairing page posts the scanned code. Unauthenticated on the tunnel listener. */
26
31
  const PAIRING_CLAIM_ROUTE = "/api/remote/pair";
27
32
  /** Polled until the host approves or denies. Unauthenticated on the tunnel listener. */
@@ -67,6 +72,7 @@ exports.BUNDLE_MINIMUM_REVISION_PARAM = BUNDLE_MINIMUM_REVISION_PARAM;
67
72
  exports.BUNDLE_SIGNING_KEY_PARAM = BUNDLE_SIGNING_KEY_PARAM;
68
73
  exports.COOKIE_CEILING_SECONDS = COOKIE_CEILING_SECONDS;
69
74
  exports.DEVICE_COOKIE = DEVICE_COOKIE;
75
+ exports.NATIVE_PAIRING_LINK_PREFIX = NATIVE_PAIRING_LINK_PREFIX;
70
76
  exports.PAIRING_CLAIM_ROUTE = PAIRING_CLAIM_ROUTE;
71
77
  exports.PAIRING_CODE_TTL_MS = PAIRING_CODE_TTL_MS;
72
78
  exports.PAIRING_PAGE_ROUTE = PAIRING_PAGE_ROUTE;
@@ -1 +1 @@
1
- {"version":3,"file":"remoteAccess.cjs","names":[],"sources":["../../src/types/remoteAccess.ts"],"sourcesContent":["/**\n * Wire vocabulary for remote access, shared by the hub routes and the cockpit.\n *\n * Remote access binds a second loopback listener that a tunnel points at, and\n * everything arriving there must prove it holds a paired session. The\n * discriminator is the listening socket, not a header: a tunnel connects from\n * 127.0.0.1 like every local client, and there is no header a remote caller\n * cannot forge.\n */\n\n/** REST surface for the remote-access control plane; local callers only, except turn-off and revoke. */\nexport const REMOTE_API_ROUTE = '/api/remote';\n/** Direct endpoint that establishes one scoped end-to-end channel. */\nexport const REMOTE_CHANNEL_ROUTE = `${REMOTE_API_ROUTE}/channel`;\n/** The only authenticated HTTP gateway exposed on the tunnel listener. */\nexport const REMOTE_HTTP_ROUTE = `${REMOTE_API_ROUTE}/request`;\n/** Device-bound, sealed routes for ephemeral live Web Push registration. */\n/** Trusted native devices; `DELETE ${TRUSTED_DEVICES_ROUTE}/:id` revokes one. Mirrors po-core's constant. */\nexport const TRUSTED_DEVICES_ROUTE = `${REMOTE_API_ROUTE}/trusted-devices`;\nexport const REMOTE_PUSH_ROUTE = `${REMOTE_API_ROUTE}/push`;\nexport const REMOTE_PUSH_KEY_ROUTE = `${REMOTE_PUSH_ROUTE}/key`;\nexport const PROTOCOL_SOCKET_ROUTE = '/api/ws';\n/** The pairing page a scanned QR opens. Unauthenticated on the tunnel listener. */\nexport const PAIRING_PAGE_ROUTE = '/pair';\n/** Where the pairing page posts the scanned code. Unauthenticated on the tunnel listener. */\nexport const PAIRING_CLAIM_ROUTE = '/api/remote/pair';\n/** Polled until the host approves or denies. Unauthenticated on the tunnel listener. */\nexport const PAIRING_STATUS_ROUTE = '/api/remote/pair/status';\n/** Query parameter naming the pairing request; a path parameter would force a wildcard into the allowlist. */\nexport const PAIRING_STATUS_QUERY = 'request';\n/** URL-fragment fields authenticated by seeing the host's physical QR. */\nexport const BUNDLE_SIGNING_KEY_PARAM = 's';\nexport const BUNDLE_MINIMUM_REVISION_PARAM = 'r';\n\n/**\n * Session cookie base name. Rendered `__Host-po_device` by hono's `host`\n * prefix, which refuses the cookie unless it is Secure, Path=/, and\n * Domain-less, so a sibling subdomain can neither read nor overwrite it.\n */\nexport const DEVICE_COOKIE = 'po_device';\n\n/**\n * Passkey ceremonies exposed directly on the pairing surface.\n *\n * Sign-in is unauthenticated because it creates a session. Registration requires\n * the paired device cookie issued after host approval, but remains direct so the\n * self-contained pairing page can offer enrolment before loading the cockpit.\n */\nexport const PASSKEY_AUTH_BEGIN_ROUTE = '/api/remote/passkeys/authenticate/begin';\nexport const PASSKEY_AUTH_FINISH_ROUTE = '/api/remote/passkeys/authenticate/finish';\nexport const PASSKEY_REGISTER_BEGIN_ROUTE = '/api/remote/passkeys/register/begin';\nexport const PASSKEY_REGISTER_FINISH_ROUTE = '/api/remote/passkeys/register/finish';\n\n/** Header carrying a step-up assertion for an action that needs more than a live session. */\nexport const STEP_UP_HEADER = 'x-po-assertion';\n\n/** The vite dev server port; the origin allowlist and vite.config.ts share this. */\nexport const WEB_DEV_SERVER_PORT = 7534;\n\n/** How long a scanned pairing code stays claimable. */\nexport const PAIRING_CODE_TTL_MS = 120_000;\n/** How long the host has to approve or deny a claimed request. */\nexport const PAIRING_REQUEST_TTL_MS = 180_000;\n/** Cookie lifetime when session expiry is switched off; a session cookie can outlive the laptop. */\nexport const COOKIE_CEILING_SECONDS = 30 * 24 * 60 * 60;\n\nexport type TunnelKind = 'quick' | 'named';\nexport type RemoteChannelScope = 'session' | 'protocol' | 'http';\n\n/**\n * How the tunnel is established.\n *\n * `named` carries a hostname rather than discovering one, which is why it is\n * the mode that supports passkeys, a service worker, and durable pairing: all\n * three are bound to the origin, and a quick tunnel's hostname rotates on every\n * start. The token is referenced by path, never stored inline, because it is a\n * Cloudflare account credential and an inlined one ends up in a bug report.\n */\nexport type TunnelConfig =\n | { kind: 'quick' }\n | { kind: 'named'; hostname: string; name?: string; tokenFile?: string; configFile?: string };\n\n/** Nullable numbers are not used: a disabled toggle keeps its value so flipping it back restores it. */\nexport interface RemoteAccessSettings {\n /** Close the tunnel on a timer. */\n autoCloseEnabled: boolean;\n autoCloseMinutes: number;\n /** Expire paired sessions on idle and on total age. */\n sessionExpiryEnabled: boolean;\n idleMinutes: number;\n absoluteHours: number;\n tunnel: TunnelConfig;\n}\n\nexport interface BundlePairingTrust {\n publicKey: string;\n fingerprint: string;\n revision: number;\n}\n\nexport type RemoteAccessStatus = 'off' | 'starting' | 'on' | 'failed';\n\nexport interface PairedDeviceView {\n id: string;\n label: string;\n userAgent: string;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n lastSeenAt: string;\n /** True for the device making the request, so the UI can say \"this device\". */\n self: boolean;\n}\n\nexport type TrustedDevicePlatform = 'ios' | 'android';\n\n/** What local and remote callers see of a trusted native device: no keys. Mirrors po-core's view. */\nexport interface TrustedDeviceView {\n id: string;\n label: string;\n platform: TrustedDevicePlatform;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n lastSeenAt: string;\n /** True when the calling session signed in with this device's key. */\n self: boolean;\n}\n\nexport interface PairingRequestView {\n id: string;\n userAgent: string;\n /**\n * The address Cloudflare's edge reported. Display only: any local process can\n * reach the tunnel listener directly and set this header to anything, so it\n * never gates a decision. The UI labels it \"reported by the edge\".\n */\n edgeIp: string;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n expiresAt: string;\n}\n\nexport interface RemoteAccessStateView {\n status: RemoteAccessStatus;\n /** Present once the tunnel reports its hostname. */\n publicUrl?: string;\n /** ISO 8601, present while the tunnel is up. */\n startedAt?: string;\n /** ISO 8601, absent when auto-close is switched off. */\n closesAt?: string;\n /** Why the tunnel failed, once it has. */\n error?: string;\n devices: PairedDeviceView[];\n /** Populated for local callers only; a paired phone must not see approval prompts. */\n pending: PairingRequestView[];\n /** Shown to local and remote callers, so a paired device can revoke a lost one. */\n trustedDevices: TrustedDeviceView[];\n settings: RemoteAccessSettings;\n}\n\nexport type PairingStatus = 'pending' | 'approved' | 'denied' | 'expired' | 'consumed';\n\nexport type TunnelFailure = 'not_installed' | 'spawn_failed' | 'timeout' | 'self_test_failed' | 'exited';\n\nexport interface TunnelStartInput {\n /** The loopback port the tunnel should publish. */\n port: number;\n config: TunnelConfig;\n /** Arms the exact public origin before the launcher probes through it. */\n acceptOrigin?: (origin: string) => void;\n /** Cancels startup and asks the launcher to stop any process it has spawned. */\n signal?: AbortSignal;\n}\n\nexport type TunnelStartResult =\n | { ok: true; publicOrigin: string; stop: () => Promise<void> }\n | { ok: false; failure: TunnelFailure; message: string };\n\n/**\n * Starting a tunnel, as a port rather than a concrete process.\n *\n * Declared here so a test can inject a fake without pulling in the cloudflared\n * adapter, and so `WebServerOptions` can name the seam without reaching across\n * a layer to do it.\n */\nexport type TunnelLauncher = (input: TunnelStartInput) => Promise<TunnelStartResult>;\n\n/** Hub frame announcing remote-access state; sent to local and remote pages. */\nexport const REMOTE_STATE_TYPE = 'remote_state';\n/** Hub frame announcing a device waiting for approval; sent to local pages only. */\nexport const REMOTE_PAIRING_REQUEST_TYPE = 'remote_pairing_request';\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,mBAAmB;;AAEhC,MAAa,uBAAuB,GAAG,iBAAiB;;AAExD,MAAa,oBAAoB,GAAG,iBAAiB;;;AAGrD,MAAa,wBAAwB,GAAG,iBAAiB;AACzD,MAAa,oBAAoB,GAAG,iBAAiB;AACrD,MAAa,wBAAwB,GAAG,kBAAkB;AAC1D,MAAa,wBAAwB;;AAErC,MAAa,qBAAqB;;AAElC,MAAa,sBAAsB;;AAEnC,MAAa,uBAAuB;;AAEpC,MAAa,uBAAuB;;AAEpC,MAAa,2BAA2B;AACxC,MAAa,gCAAgC;;;;;;AAO7C,MAAa,gBAAgB;;;;;;;;AAS7B,MAAa,2BAA2B;AACxC,MAAa,4BAA4B;AACzC,MAAa,+BAA+B;AAC5C,MAAa,gCAAgC;;AAG7C,MAAa,iBAAiB;;AAG9B,MAAa,sBAAsB;;AAGnC,MAAa,sBAAsB;;AAEnC,MAAa,yBAAyB;;AAEtC,MAAa,yBAAyB;;AA8HtC,MAAa,oBAAoB;;AAEjC,MAAa,8BAA8B"}
1
+ {"version":3,"file":"remoteAccess.cjs","names":[],"sources":["../../src/types/remoteAccess.ts"],"sourcesContent":["/**\n * Wire vocabulary for remote access, shared by the hub routes and the cockpit.\n *\n * Remote access binds a second loopback listener that a tunnel points at, and\n * everything arriving there must prove it holds a paired session. The\n * discriminator is the listening socket, not a header: a tunnel connects from\n * 127.0.0.1 like every local client, and there is no header a remote caller\n * cannot forge.\n */\n\n/** REST surface for the remote-access control plane; local callers only, except turn-off and revoke. */\nexport const REMOTE_API_ROUTE = '/api/remote';\n/** Direct endpoint that establishes one scoped end-to-end channel. */\nexport const REMOTE_CHANNEL_ROUTE = `${REMOTE_API_ROUTE}/channel`;\n/** The only authenticated HTTP gateway exposed on the tunnel listener. */\nexport const REMOTE_HTTP_ROUTE = `${REMOTE_API_ROUTE}/request`;\n/** Device-bound, sealed routes for ephemeral live Web Push registration. */\n/** Trusted native devices; `DELETE ${TRUSTED_DEVICES_ROUTE}/:id` revokes one. Mirrors po-core's constant. */\nexport const TRUSTED_DEVICES_ROUTE = `${REMOTE_API_ROUTE}/trusted-devices`;\nexport const REMOTE_PUSH_ROUTE = `${REMOTE_API_ROUTE}/push`;\nexport const REMOTE_PUSH_KEY_ROUTE = `${REMOTE_PUSH_ROUTE}/key`;\nexport const PROTOCOL_SOCKET_ROUTE = '/api/ws';\n/** The pairing page a scanned QR opens. Unauthenticated on the tunnel listener. */\nexport const PAIRING_PAGE_ROUTE = '/pair';\n/**\n * The phone app's form of the same QR: its `po` scheme wrapping the encoded HTTPS pairing URL, so a\n * phone camera opens Po instead of the browser. The app unwraps it and checks the inner URL as usual.\n */\nexport const NATIVE_PAIRING_LINK_PREFIX = 'po://pair?link=';\n/** Where the pairing page posts the scanned code. Unauthenticated on the tunnel listener. */\nexport const PAIRING_CLAIM_ROUTE = '/api/remote/pair';\n/** Polled until the host approves or denies. Unauthenticated on the tunnel listener. */\nexport const PAIRING_STATUS_ROUTE = '/api/remote/pair/status';\n/** Query parameter naming the pairing request; a path parameter would force a wildcard into the allowlist. */\nexport const PAIRING_STATUS_QUERY = 'request';\n/** URL-fragment fields authenticated by seeing the host's physical QR. */\nexport const BUNDLE_SIGNING_KEY_PARAM = 's';\nexport const BUNDLE_MINIMUM_REVISION_PARAM = 'r';\n\n/**\n * Session cookie base name. Rendered `__Host-po_device` by hono's `host`\n * prefix, which refuses the cookie unless it is Secure, Path=/, and\n * Domain-less, so a sibling subdomain can neither read nor overwrite it.\n */\nexport const DEVICE_COOKIE = 'po_device';\n\n/**\n * Passkey ceremonies exposed directly on the pairing surface.\n *\n * Sign-in is unauthenticated because it creates a session. Registration requires\n * the paired device cookie issued after host approval, but remains direct so the\n * self-contained pairing page can offer enrolment before loading the cockpit.\n */\nexport const PASSKEY_AUTH_BEGIN_ROUTE = '/api/remote/passkeys/authenticate/begin';\nexport const PASSKEY_AUTH_FINISH_ROUTE = '/api/remote/passkeys/authenticate/finish';\nexport const PASSKEY_REGISTER_BEGIN_ROUTE = '/api/remote/passkeys/register/begin';\nexport const PASSKEY_REGISTER_FINISH_ROUTE = '/api/remote/passkeys/register/finish';\n\n/** Header carrying a step-up assertion for an action that needs more than a live session. */\nexport const STEP_UP_HEADER = 'x-po-assertion';\n\n/** The vite dev server port; the origin allowlist and vite.config.ts share this. */\nexport const WEB_DEV_SERVER_PORT = 7534;\n\n/** How long a scanned pairing code stays claimable. */\nexport const PAIRING_CODE_TTL_MS = 120_000;\n/** How long the host has to approve or deny a claimed request. */\nexport const PAIRING_REQUEST_TTL_MS = 180_000;\n/** Cookie lifetime when session expiry is switched off; a session cookie can outlive the laptop. */\nexport const COOKIE_CEILING_SECONDS = 30 * 24 * 60 * 60;\n\nexport type TunnelKind = 'quick' | 'named';\nexport type RemoteChannelScope = 'session' | 'protocol' | 'http';\n\n/**\n * How the tunnel is established.\n *\n * `named` carries a hostname rather than discovering one, which is why it is\n * the mode that supports passkeys, a service worker, and durable pairing: all\n * three are bound to the origin, and a quick tunnel's hostname rotates on every\n * start. The token is referenced by path, never stored inline, because it is a\n * Cloudflare account credential and an inlined one ends up in a bug report.\n */\nexport type TunnelConfig =\n | { kind: 'quick' }\n | { kind: 'named'; hostname: string; name?: string; tokenFile?: string; configFile?: string };\n\n/** Nullable numbers are not used: a disabled toggle keeps its value so flipping it back restores it. */\nexport interface RemoteAccessSettings {\n /** Close the tunnel on a timer. */\n autoCloseEnabled: boolean;\n autoCloseMinutes: number;\n /** Expire paired sessions on idle and on total age. */\n sessionExpiryEnabled: boolean;\n idleMinutes: number;\n absoluteHours: number;\n tunnel: TunnelConfig;\n}\n\nexport interface BundlePairingTrust {\n publicKey: string;\n fingerprint: string;\n revision: number;\n}\n\nexport type RemoteAccessStatus = 'off' | 'starting' | 'on' | 'failed';\n\nexport interface PairedDeviceView {\n id: string;\n label: string;\n userAgent: string;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n lastSeenAt: string;\n /** True for the device making the request, so the UI can say \"this device\". */\n self: boolean;\n}\n\nexport type TrustedDevicePlatform = 'ios' | 'android';\n\n/** What local and remote callers see of a trusted native device: no keys. Mirrors po-core's view. */\nexport interface TrustedDeviceView {\n id: string;\n label: string;\n platform: TrustedDevicePlatform;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n lastSeenAt: string;\n /** True when the calling session signed in with this device's key. */\n self: boolean;\n}\n\nexport interface PairingRequestView {\n id: string;\n userAgent: string;\n /**\n * The address Cloudflare's edge reported. Display only: any local process can\n * reach the tunnel listener directly and set this header to anything, so it\n * never gates a decision. The UI labels it \"reported by the edge\".\n */\n edgeIp: string;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n expiresAt: string;\n}\n\nexport interface RemoteAccessStateView {\n status: RemoteAccessStatus;\n /** Present once the tunnel reports its hostname. */\n publicUrl?: string;\n /** ISO 8601, present while the tunnel is up. */\n startedAt?: string;\n /** ISO 8601, absent when auto-close is switched off. */\n closesAt?: string;\n /** Why the tunnel failed, once it has. */\n error?: string;\n devices: PairedDeviceView[];\n /** Populated for local callers only; a paired phone must not see approval prompts. */\n pending: PairingRequestView[];\n /** Shown to local and remote callers, so a paired device can revoke a lost one. */\n trustedDevices: TrustedDeviceView[];\n settings: RemoteAccessSettings;\n}\n\nexport type PairingStatus = 'pending' | 'approved' | 'denied' | 'expired' | 'consumed';\n\nexport type TunnelFailure = 'not_installed' | 'spawn_failed' | 'timeout' | 'self_test_failed' | 'exited';\n\nexport interface TunnelStartInput {\n /** The loopback port the tunnel should publish. */\n port: number;\n config: TunnelConfig;\n /** Arms the exact public origin before the launcher probes through it. */\n acceptOrigin?: (origin: string) => void;\n /** Cancels startup and asks the launcher to stop any process it has spawned. */\n signal?: AbortSignal;\n}\n\nexport type TunnelStartResult =\n | { ok: true; publicOrigin: string; stop: () => Promise<void> }\n | { ok: false; failure: TunnelFailure; message: string };\n\n/**\n * Starting a tunnel, as a port rather than a concrete process.\n *\n * Declared here so a test can inject a fake without pulling in the cloudflared\n * adapter, and so `WebServerOptions` can name the seam without reaching across\n * a layer to do it.\n */\nexport type TunnelLauncher = (input: TunnelStartInput) => Promise<TunnelStartResult>;\n\n/** Hub frame announcing remote-access state; sent to local and remote pages. */\nexport const REMOTE_STATE_TYPE = 'remote_state';\n/** Hub frame announcing a device waiting for approval; sent to local pages only. */\nexport const REMOTE_PAIRING_REQUEST_TYPE = 'remote_pairing_request';\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,mBAAmB;;AAEhC,MAAa,uBAAuB,GAAG,iBAAiB;;AAExD,MAAa,oBAAoB,GAAG,iBAAiB;;;AAGrD,MAAa,wBAAwB,GAAG,iBAAiB;AACzD,MAAa,oBAAoB,GAAG,iBAAiB;AACrD,MAAa,wBAAwB,GAAG,kBAAkB;AAC1D,MAAa,wBAAwB;;AAErC,MAAa,qBAAqB;;;;;AAKlC,MAAa,6BAA6B;;AAE1C,MAAa,sBAAsB;;AAEnC,MAAa,uBAAuB;;AAEpC,MAAa,uBAAuB;;AAEpC,MAAa,2BAA2B;AACxC,MAAa,gCAAgC;;;;;;AAO7C,MAAa,gBAAgB;;;;;;;;AAS7B,MAAa,2BAA2B;AACxC,MAAa,4BAA4B;AACzC,MAAa,+BAA+B;AAC5C,MAAa,gCAAgC;;AAG7C,MAAa,iBAAiB;;AAG9B,MAAa,sBAAsB;;AAGnC,MAAa,sBAAsB;;AAEnC,MAAa,yBAAyB;;AAEtC,MAAa,yBAAyB;;AA8HtC,MAAa,oBAAoB;;AAEjC,MAAa,8BAA8B"}
@@ -22,6 +22,11 @@ export declare const REMOTE_PUSH_KEY_ROUTE = "/api/remote/push/key";
22
22
  export declare const PROTOCOL_SOCKET_ROUTE = "/api/ws";
23
23
  /** The pairing page a scanned QR opens. Unauthenticated on the tunnel listener. */
24
24
  export declare const PAIRING_PAGE_ROUTE = "/pair";
25
+ /**
26
+ * The phone app's form of the same QR: its `po` scheme wrapping the encoded HTTPS pairing URL, so a
27
+ * phone camera opens Po instead of the browser. The app unwraps it and checks the inner URL as usual.
28
+ */
29
+ export declare const NATIVE_PAIRING_LINK_PREFIX = "po://pair?link=";
25
30
  /** Where the pairing page posts the scanned code. Unauthenticated on the tunnel listener. */
26
31
  export declare const PAIRING_CLAIM_ROUTE = "/api/remote/pair";
27
32
  /** Polled until the host approves or denies. Unauthenticated on the tunnel listener. */
@@ -1 +1 @@
1
- {"version":3,"file":"remoteAccess.d.mts","names":[],"sources":["../../src/types/remoteAccess.ts"],"mappings":";;;;;;;;;;;qBAWa;;qBAEA;;qBAEA;;;qBAGA;qBACA;qBACA;qBACA;;qBAEA;;qBAEA;;qBAEA;;qBAEA;;qBAEA;qBACA;;;;;;qBAOA;;;;;;;;qBASA;qBACA;qBACA;qBACA;;qBAGA;;qBAGA;;qBAGA;;qBAEA;;qBAEA;YAED;YACA;;;;;;;;;;YAWA;EACN;;EACA;EAAe;EAAkB;EAAe;EAAoB;;;iBAGzD;;EAEf;EACA;;EAEA;EACA;EACA;EACA,QAAQ;;iBAGO;EACf;EACA;EACA;;YAGU;iBAEK;EACf;EACA;EACA;;EAEA;;EAEA;;EAEA;;YAGU;;iBAGK;EACf;EACA;EACA,UAAU;;EAEV;;EAEA;;EAEA;;iBAGe;EACf;EACA;;;;;;EAMA;;EAEA;;EAEA;;iBAGe;EACf,QAAQ;;EAER;;EAEA;;EAEA;;EAEA;EACA,SAAS;;EAET,SAAS;;EAET,gBAAgB;EAChB,UAAU;;YAGA;YAEA;iBAEK;;EAEf;EACA,QAAQ;;EAER,gBAAgB;;EAEhB,SAAS;;YAGC;EACN;EAAU;EAAsB,YAAY;;EAC5C;EAAW,SAAS;EAAe;;;;;;;;;YAS7B,kBAAkB,OAAO,qBAAqB,QAAQ;;qBAGrD;;qBAEA"}
1
+ {"version":3,"file":"remoteAccess.d.mts","names":[],"sources":["../../src/types/remoteAccess.ts"],"mappings":";;;;;;;;;;;qBAWa;;qBAEA;;qBAEA;;;qBAGA;qBACA;qBACA;qBACA;;qBAEA;;;;;qBAKA;;qBAEA;;qBAEA;;qBAEA;;qBAEA;qBACA;;;;;;qBAOA;;;;;;;;qBASA;qBACA;qBACA;qBACA;;qBAGA;;qBAGA;;qBAGA;;qBAEA;;qBAEA;YAED;YACA;;;;;;;;;;YAWA;EACN;;EACA;EAAe;EAAkB;EAAe;EAAoB;;;iBAGzD;;EAEf;EACA;;EAEA;EACA;EACA;EACA,QAAQ;;iBAGO;EACf;EACA;EACA;;YAGU;iBAEK;EACf;EACA;EACA;;EAEA;;EAEA;;EAEA;;YAGU;;iBAGK;EACf;EACA;EACA,UAAU;;EAEV;;EAEA;;EAEA;;iBAGe;EACf;EACA;;;;;;EAMA;;EAEA;;EAEA;;iBAGe;EACf,QAAQ;;EAER;;EAEA;;EAEA;;EAEA;EACA,SAAS;;EAET,SAAS;;EAET,gBAAgB;EAChB,UAAU;;YAGA;YAEA;iBAEK;;EAEf;EACA,QAAQ;;EAER,gBAAgB;;EAEhB,SAAS;;YAGC;EACN;EAAU;EAAsB,YAAY;;EAC5C;EAAW,SAAS;EAAe;;;;;;;;;YAS7B,kBAAkB,OAAO,qBAAqB,QAAQ;;qBAGrD;;qBAEA"}
@@ -22,6 +22,11 @@ const REMOTE_PUSH_KEY_ROUTE = `${REMOTE_PUSH_ROUTE}/key`;
22
22
  const PROTOCOL_SOCKET_ROUTE = "/api/ws";
23
23
  /** The pairing page a scanned QR opens. Unauthenticated on the tunnel listener. */
24
24
  const PAIRING_PAGE_ROUTE = "/pair";
25
+ /**
26
+ * The phone app's form of the same QR: its `po` scheme wrapping the encoded HTTPS pairing URL, so a
27
+ * phone camera opens Po instead of the browser. The app unwraps it and checks the inner URL as usual.
28
+ */
29
+ const NATIVE_PAIRING_LINK_PREFIX = "po://pair?link=";
25
30
  /** Where the pairing page posts the scanned code. Unauthenticated on the tunnel listener. */
26
31
  const PAIRING_CLAIM_ROUTE = "/api/remote/pair";
27
32
  /** Polled until the host approves or denies. Unauthenticated on the tunnel listener. */
@@ -63,6 +68,6 @@ const REMOTE_STATE_TYPE = "remote_state";
63
68
  /** Hub frame announcing a device waiting for approval; sent to local pages only. */
64
69
  const REMOTE_PAIRING_REQUEST_TYPE = "remote_pairing_request";
65
70
  //#endregion
66
- export { BUNDLE_MINIMUM_REVISION_PARAM, BUNDLE_SIGNING_KEY_PARAM, COOKIE_CEILING_SECONDS, DEVICE_COOKIE, PAIRING_CLAIM_ROUTE, PAIRING_CODE_TTL_MS, PAIRING_PAGE_ROUTE, PAIRING_REQUEST_TTL_MS, PAIRING_STATUS_QUERY, PAIRING_STATUS_ROUTE, PASSKEY_AUTH_BEGIN_ROUTE, PASSKEY_AUTH_FINISH_ROUTE, PASSKEY_REGISTER_BEGIN_ROUTE, PASSKEY_REGISTER_FINISH_ROUTE, PROTOCOL_SOCKET_ROUTE, REMOTE_API_ROUTE, REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_PUSH_KEY_ROUTE, REMOTE_PUSH_ROUTE, REMOTE_STATE_TYPE, STEP_UP_HEADER, TRUSTED_DEVICES_ROUTE, WEB_DEV_SERVER_PORT };
71
+ export { BUNDLE_MINIMUM_REVISION_PARAM, BUNDLE_SIGNING_KEY_PARAM, COOKIE_CEILING_SECONDS, DEVICE_COOKIE, NATIVE_PAIRING_LINK_PREFIX, PAIRING_CLAIM_ROUTE, PAIRING_CODE_TTL_MS, PAIRING_PAGE_ROUTE, PAIRING_REQUEST_TTL_MS, PAIRING_STATUS_QUERY, PAIRING_STATUS_ROUTE, PASSKEY_AUTH_BEGIN_ROUTE, PASSKEY_AUTH_FINISH_ROUTE, PASSKEY_REGISTER_BEGIN_ROUTE, PASSKEY_REGISTER_FINISH_ROUTE, PROTOCOL_SOCKET_ROUTE, REMOTE_API_ROUTE, REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_PUSH_KEY_ROUTE, REMOTE_PUSH_ROUTE, REMOTE_STATE_TYPE, STEP_UP_HEADER, TRUSTED_DEVICES_ROUTE, WEB_DEV_SERVER_PORT };
67
72
 
68
73
  //# sourceMappingURL=remoteAccess.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"remoteAccess.mjs","names":[],"sources":["../../src/types/remoteAccess.ts"],"sourcesContent":["/**\n * Wire vocabulary for remote access, shared by the hub routes and the cockpit.\n *\n * Remote access binds a second loopback listener that a tunnel points at, and\n * everything arriving there must prove it holds a paired session. The\n * discriminator is the listening socket, not a header: a tunnel connects from\n * 127.0.0.1 like every local client, and there is no header a remote caller\n * cannot forge.\n */\n\n/** REST surface for the remote-access control plane; local callers only, except turn-off and revoke. */\nexport const REMOTE_API_ROUTE = '/api/remote';\n/** Direct endpoint that establishes one scoped end-to-end channel. */\nexport const REMOTE_CHANNEL_ROUTE = `${REMOTE_API_ROUTE}/channel`;\n/** The only authenticated HTTP gateway exposed on the tunnel listener. */\nexport const REMOTE_HTTP_ROUTE = `${REMOTE_API_ROUTE}/request`;\n/** Device-bound, sealed routes for ephemeral live Web Push registration. */\n/** Trusted native devices; `DELETE ${TRUSTED_DEVICES_ROUTE}/:id` revokes one. Mirrors po-core's constant. */\nexport const TRUSTED_DEVICES_ROUTE = `${REMOTE_API_ROUTE}/trusted-devices`;\nexport const REMOTE_PUSH_ROUTE = `${REMOTE_API_ROUTE}/push`;\nexport const REMOTE_PUSH_KEY_ROUTE = `${REMOTE_PUSH_ROUTE}/key`;\nexport const PROTOCOL_SOCKET_ROUTE = '/api/ws';\n/** The pairing page a scanned QR opens. Unauthenticated on the tunnel listener. */\nexport const PAIRING_PAGE_ROUTE = '/pair';\n/** Where the pairing page posts the scanned code. Unauthenticated on the tunnel listener. */\nexport const PAIRING_CLAIM_ROUTE = '/api/remote/pair';\n/** Polled until the host approves or denies. Unauthenticated on the tunnel listener. */\nexport const PAIRING_STATUS_ROUTE = '/api/remote/pair/status';\n/** Query parameter naming the pairing request; a path parameter would force a wildcard into the allowlist. */\nexport const PAIRING_STATUS_QUERY = 'request';\n/** URL-fragment fields authenticated by seeing the host's physical QR. */\nexport const BUNDLE_SIGNING_KEY_PARAM = 's';\nexport const BUNDLE_MINIMUM_REVISION_PARAM = 'r';\n\n/**\n * Session cookie base name. Rendered `__Host-po_device` by hono's `host`\n * prefix, which refuses the cookie unless it is Secure, Path=/, and\n * Domain-less, so a sibling subdomain can neither read nor overwrite it.\n */\nexport const DEVICE_COOKIE = 'po_device';\n\n/**\n * Passkey ceremonies exposed directly on the pairing surface.\n *\n * Sign-in is unauthenticated because it creates a session. Registration requires\n * the paired device cookie issued after host approval, but remains direct so the\n * self-contained pairing page can offer enrolment before loading the cockpit.\n */\nexport const PASSKEY_AUTH_BEGIN_ROUTE = '/api/remote/passkeys/authenticate/begin';\nexport const PASSKEY_AUTH_FINISH_ROUTE = '/api/remote/passkeys/authenticate/finish';\nexport const PASSKEY_REGISTER_BEGIN_ROUTE = '/api/remote/passkeys/register/begin';\nexport const PASSKEY_REGISTER_FINISH_ROUTE = '/api/remote/passkeys/register/finish';\n\n/** Header carrying a step-up assertion for an action that needs more than a live session. */\nexport const STEP_UP_HEADER = 'x-po-assertion';\n\n/** The vite dev server port; the origin allowlist and vite.config.ts share this. */\nexport const WEB_DEV_SERVER_PORT = 7534;\n\n/** How long a scanned pairing code stays claimable. */\nexport const PAIRING_CODE_TTL_MS = 120_000;\n/** How long the host has to approve or deny a claimed request. */\nexport const PAIRING_REQUEST_TTL_MS = 180_000;\n/** Cookie lifetime when session expiry is switched off; a session cookie can outlive the laptop. */\nexport const COOKIE_CEILING_SECONDS = 30 * 24 * 60 * 60;\n\nexport type TunnelKind = 'quick' | 'named';\nexport type RemoteChannelScope = 'session' | 'protocol' | 'http';\n\n/**\n * How the tunnel is established.\n *\n * `named` carries a hostname rather than discovering one, which is why it is\n * the mode that supports passkeys, a service worker, and durable pairing: all\n * three are bound to the origin, and a quick tunnel's hostname rotates on every\n * start. The token is referenced by path, never stored inline, because it is a\n * Cloudflare account credential and an inlined one ends up in a bug report.\n */\nexport type TunnelConfig =\n | { kind: 'quick' }\n | { kind: 'named'; hostname: string; name?: string; tokenFile?: string; configFile?: string };\n\n/** Nullable numbers are not used: a disabled toggle keeps its value so flipping it back restores it. */\nexport interface RemoteAccessSettings {\n /** Close the tunnel on a timer. */\n autoCloseEnabled: boolean;\n autoCloseMinutes: number;\n /** Expire paired sessions on idle and on total age. */\n sessionExpiryEnabled: boolean;\n idleMinutes: number;\n absoluteHours: number;\n tunnel: TunnelConfig;\n}\n\nexport interface BundlePairingTrust {\n publicKey: string;\n fingerprint: string;\n revision: number;\n}\n\nexport type RemoteAccessStatus = 'off' | 'starting' | 'on' | 'failed';\n\nexport interface PairedDeviceView {\n id: string;\n label: string;\n userAgent: string;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n lastSeenAt: string;\n /** True for the device making the request, so the UI can say \"this device\". */\n self: boolean;\n}\n\nexport type TrustedDevicePlatform = 'ios' | 'android';\n\n/** What local and remote callers see of a trusted native device: no keys. Mirrors po-core's view. */\nexport interface TrustedDeviceView {\n id: string;\n label: string;\n platform: TrustedDevicePlatform;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n lastSeenAt: string;\n /** True when the calling session signed in with this device's key. */\n self: boolean;\n}\n\nexport interface PairingRequestView {\n id: string;\n userAgent: string;\n /**\n * The address Cloudflare's edge reported. Display only: any local process can\n * reach the tunnel listener directly and set this header to anything, so it\n * never gates a decision. The UI labels it \"reported by the edge\".\n */\n edgeIp: string;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n expiresAt: string;\n}\n\nexport interface RemoteAccessStateView {\n status: RemoteAccessStatus;\n /** Present once the tunnel reports its hostname. */\n publicUrl?: string;\n /** ISO 8601, present while the tunnel is up. */\n startedAt?: string;\n /** ISO 8601, absent when auto-close is switched off. */\n closesAt?: string;\n /** Why the tunnel failed, once it has. */\n error?: string;\n devices: PairedDeviceView[];\n /** Populated for local callers only; a paired phone must not see approval prompts. */\n pending: PairingRequestView[];\n /** Shown to local and remote callers, so a paired device can revoke a lost one. */\n trustedDevices: TrustedDeviceView[];\n settings: RemoteAccessSettings;\n}\n\nexport type PairingStatus = 'pending' | 'approved' | 'denied' | 'expired' | 'consumed';\n\nexport type TunnelFailure = 'not_installed' | 'spawn_failed' | 'timeout' | 'self_test_failed' | 'exited';\n\nexport interface TunnelStartInput {\n /** The loopback port the tunnel should publish. */\n port: number;\n config: TunnelConfig;\n /** Arms the exact public origin before the launcher probes through it. */\n acceptOrigin?: (origin: string) => void;\n /** Cancels startup and asks the launcher to stop any process it has spawned. */\n signal?: AbortSignal;\n}\n\nexport type TunnelStartResult =\n | { ok: true; publicOrigin: string; stop: () => Promise<void> }\n | { ok: false; failure: TunnelFailure; message: string };\n\n/**\n * Starting a tunnel, as a port rather than a concrete process.\n *\n * Declared here so a test can inject a fake without pulling in the cloudflared\n * adapter, and so `WebServerOptions` can name the seam without reaching across\n * a layer to do it.\n */\nexport type TunnelLauncher = (input: TunnelStartInput) => Promise<TunnelStartResult>;\n\n/** Hub frame announcing remote-access state; sent to local and remote pages. */\nexport const REMOTE_STATE_TYPE = 'remote_state';\n/** Hub frame announcing a device waiting for approval; sent to local pages only. */\nexport const REMOTE_PAIRING_REQUEST_TYPE = 'remote_pairing_request';\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,mBAAmB;;AAEhC,MAAa,uBAAuB,GAAG,iBAAiB;;AAExD,MAAa,oBAAoB,GAAG,iBAAiB;;;AAGrD,MAAa,wBAAwB,GAAG,iBAAiB;AACzD,MAAa,oBAAoB,GAAG,iBAAiB;AACrD,MAAa,wBAAwB,GAAG,kBAAkB;AAC1D,MAAa,wBAAwB;;AAErC,MAAa,qBAAqB;;AAElC,MAAa,sBAAsB;;AAEnC,MAAa,uBAAuB;;AAEpC,MAAa,uBAAuB;;AAEpC,MAAa,2BAA2B;AACxC,MAAa,gCAAgC;;;;;;AAO7C,MAAa,gBAAgB;;;;;;;;AAS7B,MAAa,2BAA2B;AACxC,MAAa,4BAA4B;AACzC,MAAa,+BAA+B;AAC5C,MAAa,gCAAgC;;AAG7C,MAAa,iBAAiB;;AAG9B,MAAa,sBAAsB;;AAGnC,MAAa,sBAAsB;;AAEnC,MAAa,yBAAyB;;AAEtC,MAAa,yBAAyB;;AA8HtC,MAAa,oBAAoB;;AAEjC,MAAa,8BAA8B"}
1
+ {"version":3,"file":"remoteAccess.mjs","names":[],"sources":["../../src/types/remoteAccess.ts"],"sourcesContent":["/**\n * Wire vocabulary for remote access, shared by the hub routes and the cockpit.\n *\n * Remote access binds a second loopback listener that a tunnel points at, and\n * everything arriving there must prove it holds a paired session. The\n * discriminator is the listening socket, not a header: a tunnel connects from\n * 127.0.0.1 like every local client, and there is no header a remote caller\n * cannot forge.\n */\n\n/** REST surface for the remote-access control plane; local callers only, except turn-off and revoke. */\nexport const REMOTE_API_ROUTE = '/api/remote';\n/** Direct endpoint that establishes one scoped end-to-end channel. */\nexport const REMOTE_CHANNEL_ROUTE = `${REMOTE_API_ROUTE}/channel`;\n/** The only authenticated HTTP gateway exposed on the tunnel listener. */\nexport const REMOTE_HTTP_ROUTE = `${REMOTE_API_ROUTE}/request`;\n/** Device-bound, sealed routes for ephemeral live Web Push registration. */\n/** Trusted native devices; `DELETE ${TRUSTED_DEVICES_ROUTE}/:id` revokes one. Mirrors po-core's constant. */\nexport const TRUSTED_DEVICES_ROUTE = `${REMOTE_API_ROUTE}/trusted-devices`;\nexport const REMOTE_PUSH_ROUTE = `${REMOTE_API_ROUTE}/push`;\nexport const REMOTE_PUSH_KEY_ROUTE = `${REMOTE_PUSH_ROUTE}/key`;\nexport const PROTOCOL_SOCKET_ROUTE = '/api/ws';\n/** The pairing page a scanned QR opens. Unauthenticated on the tunnel listener. */\nexport const PAIRING_PAGE_ROUTE = '/pair';\n/**\n * The phone app's form of the same QR: its `po` scheme wrapping the encoded HTTPS pairing URL, so a\n * phone camera opens Po instead of the browser. The app unwraps it and checks the inner URL as usual.\n */\nexport const NATIVE_PAIRING_LINK_PREFIX = 'po://pair?link=';\n/** Where the pairing page posts the scanned code. Unauthenticated on the tunnel listener. */\nexport const PAIRING_CLAIM_ROUTE = '/api/remote/pair';\n/** Polled until the host approves or denies. Unauthenticated on the tunnel listener. */\nexport const PAIRING_STATUS_ROUTE = '/api/remote/pair/status';\n/** Query parameter naming the pairing request; a path parameter would force a wildcard into the allowlist. */\nexport const PAIRING_STATUS_QUERY = 'request';\n/** URL-fragment fields authenticated by seeing the host's physical QR. */\nexport const BUNDLE_SIGNING_KEY_PARAM = 's';\nexport const BUNDLE_MINIMUM_REVISION_PARAM = 'r';\n\n/**\n * Session cookie base name. Rendered `__Host-po_device` by hono's `host`\n * prefix, which refuses the cookie unless it is Secure, Path=/, and\n * Domain-less, so a sibling subdomain can neither read nor overwrite it.\n */\nexport const DEVICE_COOKIE = 'po_device';\n\n/**\n * Passkey ceremonies exposed directly on the pairing surface.\n *\n * Sign-in is unauthenticated because it creates a session. Registration requires\n * the paired device cookie issued after host approval, but remains direct so the\n * self-contained pairing page can offer enrolment before loading the cockpit.\n */\nexport const PASSKEY_AUTH_BEGIN_ROUTE = '/api/remote/passkeys/authenticate/begin';\nexport const PASSKEY_AUTH_FINISH_ROUTE = '/api/remote/passkeys/authenticate/finish';\nexport const PASSKEY_REGISTER_BEGIN_ROUTE = '/api/remote/passkeys/register/begin';\nexport const PASSKEY_REGISTER_FINISH_ROUTE = '/api/remote/passkeys/register/finish';\n\n/** Header carrying a step-up assertion for an action that needs more than a live session. */\nexport const STEP_UP_HEADER = 'x-po-assertion';\n\n/** The vite dev server port; the origin allowlist and vite.config.ts share this. */\nexport const WEB_DEV_SERVER_PORT = 7534;\n\n/** How long a scanned pairing code stays claimable. */\nexport const PAIRING_CODE_TTL_MS = 120_000;\n/** How long the host has to approve or deny a claimed request. */\nexport const PAIRING_REQUEST_TTL_MS = 180_000;\n/** Cookie lifetime when session expiry is switched off; a session cookie can outlive the laptop. */\nexport const COOKIE_CEILING_SECONDS = 30 * 24 * 60 * 60;\n\nexport type TunnelKind = 'quick' | 'named';\nexport type RemoteChannelScope = 'session' | 'protocol' | 'http';\n\n/**\n * How the tunnel is established.\n *\n * `named` carries a hostname rather than discovering one, which is why it is\n * the mode that supports passkeys, a service worker, and durable pairing: all\n * three are bound to the origin, and a quick tunnel's hostname rotates on every\n * start. The token is referenced by path, never stored inline, because it is a\n * Cloudflare account credential and an inlined one ends up in a bug report.\n */\nexport type TunnelConfig =\n | { kind: 'quick' }\n | { kind: 'named'; hostname: string; name?: string; tokenFile?: string; configFile?: string };\n\n/** Nullable numbers are not used: a disabled toggle keeps its value so flipping it back restores it. */\nexport interface RemoteAccessSettings {\n /** Close the tunnel on a timer. */\n autoCloseEnabled: boolean;\n autoCloseMinutes: number;\n /** Expire paired sessions on idle and on total age. */\n sessionExpiryEnabled: boolean;\n idleMinutes: number;\n absoluteHours: number;\n tunnel: TunnelConfig;\n}\n\nexport interface BundlePairingTrust {\n publicKey: string;\n fingerprint: string;\n revision: number;\n}\n\nexport type RemoteAccessStatus = 'off' | 'starting' | 'on' | 'failed';\n\nexport interface PairedDeviceView {\n id: string;\n label: string;\n userAgent: string;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n lastSeenAt: string;\n /** True for the device making the request, so the UI can say \"this device\". */\n self: boolean;\n}\n\nexport type TrustedDevicePlatform = 'ios' | 'android';\n\n/** What local and remote callers see of a trusted native device: no keys. Mirrors po-core's view. */\nexport interface TrustedDeviceView {\n id: string;\n label: string;\n platform: TrustedDevicePlatform;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n lastSeenAt: string;\n /** True when the calling session signed in with this device's key. */\n self: boolean;\n}\n\nexport interface PairingRequestView {\n id: string;\n userAgent: string;\n /**\n * The address Cloudflare's edge reported. Display only: any local process can\n * reach the tunnel listener directly and set this header to anything, so it\n * never gates a decision. The UI labels it \"reported by the edge\".\n */\n edgeIp: string;\n /** ISO 8601. */\n createdAt: string;\n /** ISO 8601. */\n expiresAt: string;\n}\n\nexport interface RemoteAccessStateView {\n status: RemoteAccessStatus;\n /** Present once the tunnel reports its hostname. */\n publicUrl?: string;\n /** ISO 8601, present while the tunnel is up. */\n startedAt?: string;\n /** ISO 8601, absent when auto-close is switched off. */\n closesAt?: string;\n /** Why the tunnel failed, once it has. */\n error?: string;\n devices: PairedDeviceView[];\n /** Populated for local callers only; a paired phone must not see approval prompts. */\n pending: PairingRequestView[];\n /** Shown to local and remote callers, so a paired device can revoke a lost one. */\n trustedDevices: TrustedDeviceView[];\n settings: RemoteAccessSettings;\n}\n\nexport type PairingStatus = 'pending' | 'approved' | 'denied' | 'expired' | 'consumed';\n\nexport type TunnelFailure = 'not_installed' | 'spawn_failed' | 'timeout' | 'self_test_failed' | 'exited';\n\nexport interface TunnelStartInput {\n /** The loopback port the tunnel should publish. */\n port: number;\n config: TunnelConfig;\n /** Arms the exact public origin before the launcher probes through it. */\n acceptOrigin?: (origin: string) => void;\n /** Cancels startup and asks the launcher to stop any process it has spawned. */\n signal?: AbortSignal;\n}\n\nexport type TunnelStartResult =\n | { ok: true; publicOrigin: string; stop: () => Promise<void> }\n | { ok: false; failure: TunnelFailure; message: string };\n\n/**\n * Starting a tunnel, as a port rather than a concrete process.\n *\n * Declared here so a test can inject a fake without pulling in the cloudflared\n * adapter, and so `WebServerOptions` can name the seam without reaching across\n * a layer to do it.\n */\nexport type TunnelLauncher = (input: TunnelStartInput) => Promise<TunnelStartResult>;\n\n/** Hub frame announcing remote-access state; sent to local and remote pages. */\nexport const REMOTE_STATE_TYPE = 'remote_state';\n/** Hub frame announcing a device waiting for approval; sent to local pages only. */\nexport const REMOTE_PAIRING_REQUEST_TYPE = 'remote_pairing_request';\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,mBAAmB;;AAEhC,MAAa,uBAAuB,GAAG,iBAAiB;;AAExD,MAAa,oBAAoB,GAAG,iBAAiB;;;AAGrD,MAAa,wBAAwB,GAAG,iBAAiB;AACzD,MAAa,oBAAoB,GAAG,iBAAiB;AACrD,MAAa,wBAAwB,GAAG,kBAAkB;AAC1D,MAAa,wBAAwB;;AAErC,MAAa,qBAAqB;;;;;AAKlC,MAAa,6BAA6B;;AAE1C,MAAa,sBAAsB;;AAEnC,MAAa,uBAAuB;;AAEpC,MAAa,uBAAuB;;AAEpC,MAAa,2BAA2B;AACxC,MAAa,gCAAgC;;;;;;AAO7C,MAAa,gBAAgB;;;;;;;;AAS7B,MAAa,2BAA2B;AACxC,MAAa,4BAA4B;AACzC,MAAa,+BAA+B;AAC5C,MAAa,gCAAgC;;AAG7C,MAAa,iBAAiB;;AAG9B,MAAa,sBAAsB;;AAGnC,MAAa,sBAAsB;;AAEnC,MAAa,yBAAyB;;AAEtC,MAAa,yBAAyB;;AA8HtC,MAAa,oBAAoB;;AAEjC,MAAa,8BAA8B"}
package/dist/types.cjs CHANGED
@@ -35,6 +35,7 @@ exports.HUB_ROLE = require_hub.HUB_ROLE;
35
35
  exports.MAX_SESSION_FILE_BYTES = require_media.MAX_SESSION_FILE_BYTES;
36
36
  exports.MEDIA_TYPES = require_media.MEDIA_TYPES;
37
37
  exports.MINOR_MODE_ENTRY_TYPE = require_hub.MINOR_MODE_ENTRY_TYPE;
38
+ exports.NATIVE_PAIRING_LINK_PREFIX = require_remoteAccess.NATIVE_PAIRING_LINK_PREFIX;
38
39
  exports.PAIRING_CLAIM_ROUTE = require_remoteAccess.PAIRING_CLAIM_ROUTE;
39
40
  exports.PAIRING_CODE_TTL_MS = require_remoteAccess.PAIRING_CODE_TTL_MS;
40
41
  exports.PAIRING_PAGE_ROUTE = require_remoteAccess.PAIRING_PAGE_ROUTE;
package/dist/types.d.mts CHANGED
@@ -3,9 +3,9 @@ import { AGENT_MODEL_ENTRY_TYPE, API_SESSION_QUERY_PARAM, CONTEXT_ENTRY_TYPE, Co
3
3
  import { AUTH_LOGINS_API_ROUTE, AUTH_PROVIDERS_API_ROUTE, AuthMethodType, AuthRuntime, AuthRuntimeProvider, LoginEvent, LoginFlowSnapshot, LoginFlowStatus, LoginInteraction, LoginPrompt, LoginPromptView, LoginSelectOption, ProviderAuthMethod, ProviderAuthSummary } from "./types/auth.mjs";
4
4
  import { DEV_PROXY_API_ROUTE, DEV_PROXY_PREFIX, DEV_PROXY_TARGETS_ROUTE, DevProxyStateView, DevProxyTarget } from "./types/devProxy.mjs";
5
5
  import { MAX_SESSION_FILE_BYTES, MEDIA_TYPES, MediaKind, MediaType, SESSION_FILE_EXPECTED_SHA256_HEADER, SESSION_FILE_ROUTE, SESSION_FILE_SHA256_HEADER, sessionFileUrl } from "./types/media.mjs";
6
- import { BUNDLE_MINIMUM_REVISION_PARAM, BUNDLE_SIGNING_KEY_PARAM, BundlePairingTrust, COOKIE_CEILING_SECONDS, DEVICE_COOKIE, PAIRING_CLAIM_ROUTE, PAIRING_CODE_TTL_MS, PAIRING_PAGE_ROUTE, PAIRING_REQUEST_TTL_MS, PAIRING_STATUS_QUERY, PAIRING_STATUS_ROUTE, PASSKEY_AUTH_BEGIN_ROUTE, PASSKEY_AUTH_FINISH_ROUTE, PASSKEY_REGISTER_BEGIN_ROUTE, PASSKEY_REGISTER_FINISH_ROUTE, PROTOCOL_SOCKET_ROUTE, PairedDeviceView, PairingRequestView, PairingStatus, REMOTE_API_ROUTE, REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_PUSH_KEY_ROUTE, REMOTE_PUSH_ROUTE, REMOTE_STATE_TYPE, RemoteAccessSettings, RemoteAccessStateView, RemoteAccessStatus, RemoteChannelScope, STEP_UP_HEADER, TRUSTED_DEVICES_ROUTE, TrustedDevicePlatform, TrustedDeviceView, TunnelConfig, TunnelFailure, TunnelKind, TunnelLauncher, TunnelStartInput, TunnelStartResult, WEB_DEV_SERVER_PORT } from "./types/remoteAccess.mjs";
6
+ import { BUNDLE_MINIMUM_REVISION_PARAM, BUNDLE_SIGNING_KEY_PARAM, BundlePairingTrust, COOKIE_CEILING_SECONDS, DEVICE_COOKIE, NATIVE_PAIRING_LINK_PREFIX, PAIRING_CLAIM_ROUTE, PAIRING_CODE_TTL_MS, PAIRING_PAGE_ROUTE, PAIRING_REQUEST_TTL_MS, PAIRING_STATUS_QUERY, PAIRING_STATUS_ROUTE, PASSKEY_AUTH_BEGIN_ROUTE, PASSKEY_AUTH_FINISH_ROUTE, PASSKEY_REGISTER_BEGIN_ROUTE, PASSKEY_REGISTER_FINISH_ROUTE, PROTOCOL_SOCKET_ROUTE, PairedDeviceView, PairingRequestView, PairingStatus, REMOTE_API_ROUTE, REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_PUSH_KEY_ROUTE, REMOTE_PUSH_ROUTE, REMOTE_STATE_TYPE, RemoteAccessSettings, RemoteAccessStateView, RemoteAccessStatus, RemoteChannelScope, STEP_UP_HEADER, TRUSTED_DEVICES_ROUTE, TrustedDevicePlatform, TrustedDeviceView, TunnelConfig, TunnelFailure, TunnelKind, TunnelLauncher, TunnelStartInput, TunnelStartResult, WEB_DEV_SERVER_PORT } from "./types/remoteAccess.mjs";
7
7
  import { CreateSessionMcpClientInput, CreatedSessionMcpClient, SessionMcpClient, SessionMcpConfig, SessionMcpRouting, SessionMcpScope, SessionMcpSkill, SessionMcpTool } from "./types/sessionMcp.mjs";
8
8
  import { RepositoryCatalogOption, RepositorySelectionChanges, RepositorySelectionValue, RepositorySelectionWriteRequest, RepositorySettingsView, SETTINGS_CONFIG_API_ROUTE, SETTINGS_IMAGES_API_ROUTE, SETTINGS_MODELS_API_ROUTE, SETTINGS_REPOSITORIES_API_ROUTE, SETTINGS_REPOSITORY_API_ROUTE, SETTINGS_REPOSITORY_SELECTION_API_ROUTE, SETTINGS_VALUE_API_ROUTE, SettingsBatchWriteRequest, SettingsConfigView, SettingsErrorView, SettingsImagesView, SettingsImagesWriteRequest, SettingsKeyScope, SettingsModel, SettingsOrigin, SettingsRepository, SettingsScope, SettingsValueView, SettingsWriteRequest } from "./types/settings.mjs";
9
9
  import { WebServer, WebServerOptions } from "./types/bridge.mjs";
10
10
  import { PoNotificationEntry, parsePoNotificationEntry } from "./types/notification.mjs";
11
- export { AGENT_MODEL_ENTRY_TYPE, API_SESSION_QUERY_PARAM, ATTACHED_TYPE, ATTACH_ERROR_TYPE, ATTACH_TYPE, AUTH_LOGINS_API_ROUTE, AUTH_PROVIDERS_API_ROUTE, AuthMethodType, AuthRuntime, AuthRuntimeProvider, BRIDGE_STATUS_TYPE, BUNDLE_MINIMUM_REVISION_PARAM, BUNDLE_SIGNING_KEY_PARAM, BridgeState, BridgeStatusFrame, BundlePairingTrust, CONTEXT_ENTRY_TYPE, COOKIE_CEILING_SECONDS, ContextGroupKind, ContextGroupProjection, ContextItemProjection, ContextItemSource, ContextProjection, CreateSessionMcpClientInput, CreatedSessionMcpClient, DEVICE_COOKIE, DEV_PROXY_API_ROUTE, DEV_PROXY_PREFIX, DEV_PROXY_TARGETS_ROUTE, DIALOG_ANSWERED_TYPE, DIRECTORIES_API_ROUTE, DIRECTORY_CHILDREN_API_ROUTE, DevProxyStateView, DevProxyTarget, DirectoryListing, HISTORY_PAGE_SIZE, HISTORY_PAGE_TYPE, HISTORY_REQUEST_TYPE, HUB_HELLO_TYPE, HUB_PROTOCOL_VERSION, HUB_ROLE, HistoryPageFrame, HistoryRequestFrame, HubHelloFrame, LoginEvent, LoginFlowSnapshot, LoginFlowStatus, LoginInteraction, LoginPrompt, LoginPromptView, LoginSelectOption, MAX_SESSION_FILE_BYTES, MEDIA_TYPES, MINOR_MODE_ENTRY_TYPE, MediaKind, MediaType, MinorModeActionProjection, MinorModeProjection, MinorModeRecordProjection, PAIRING_CLAIM_ROUTE, PAIRING_CODE_TTL_MS, PAIRING_PAGE_ROUTE, PAIRING_REQUEST_TTL_MS, PAIRING_STATUS_QUERY, PAIRING_STATUS_ROUTE, PASSKEY_AUTH_BEGIN_ROUTE, PASSKEY_AUTH_FINISH_ROUTE, PASSKEY_REGISTER_BEGIN_ROUTE, PASSKEY_REGISTER_FINISH_ROUTE, PO_FOLDERS_API_ROUTE, PROFILE_IDENTITY_ENTRY_TYPE, PROTOCOL_SOCKET_ROUTE, PairedDeviceView, PairingRequestView, PairingStatus, PiSessionHistoryItem, PoNotificationEntry, ProviderAuthMethod, ProviderAuthSummary, REMOTE_API_ROUTE, REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_PUSH_KEY_ROUTE, REMOTE_PUSH_ROUTE, REMOTE_STATE_TYPE, REPLAY_TYPE, RESOURCE_CATALOG_ENTRY_TYPE, RemoteAccessSettings, RemoteAccessStateView, RemoteAccessStatus, RemoteChannelScope, RemovedSessionItem, RepositoryCatalogOption, RepositorySelectionChanges, RepositorySelectionValue, RepositorySelectionWriteRequest, RepositorySettingsView, SESSIONS_API_ROUTE, SESSION_COMMAND_TYPE, SESSION_FILE_EXPECTED_SHA256_HEADER, SESSION_FILE_ROUTE, SESSION_FILE_SHA256_HEADER, SETTINGS_CONFIG_API_ROUTE, SETTINGS_IMAGES_API_ROUTE, SETTINGS_MODELS_API_ROUTE, SETTINGS_REPOSITORIES_API_ROUTE, SETTINGS_REPOSITORY_API_ROUTE, SETTINGS_REPOSITORY_SELECTION_API_ROUTE, SETTINGS_VALUE_API_ROUTE, STEP_UP_HEADER, SessionCommandFrame, SessionFrame, SessionGitStatus, SessionMcpClient, SessionMcpConfig, SessionMcpRouting, SessionMcpScope, SessionMcpSkill, SessionMcpTool, SessionNativeComposition, SessionPhase, SessionProfile, SessionSummary, SessionWebComposition, SettingsBatchWriteRequest, SettingsConfigView, SettingsErrorView, SettingsImagesView, SettingsImagesWriteRequest, SettingsKeyScope, SettingsModel, SettingsOrigin, SettingsRepository, SettingsScope, SettingsValueView, SettingsWriteRequest, TRUSTED_DEVICES_ROUTE, TrustedDevicePlatform, TrustedDeviceView, TunnelConfig, TunnelFailure, TunnelKind, TunnelLauncher, TunnelStartInput, TunnelStartResult, WEB_DEV_SERVER_PORT, WORKSPACES_API_ROUTE, WORKSPACE_SANDBOX_STATES, WebServer, WebServerOptions, WorkspaceSandboxState, WorkspaceSummary, bridgeStatus, hubHello, parsePoNotificationEntry, sessionCommand, sessionFileUrl };
11
+ export { AGENT_MODEL_ENTRY_TYPE, API_SESSION_QUERY_PARAM, ATTACHED_TYPE, ATTACH_ERROR_TYPE, ATTACH_TYPE, AUTH_LOGINS_API_ROUTE, AUTH_PROVIDERS_API_ROUTE, AuthMethodType, AuthRuntime, AuthRuntimeProvider, BRIDGE_STATUS_TYPE, BUNDLE_MINIMUM_REVISION_PARAM, BUNDLE_SIGNING_KEY_PARAM, BridgeState, BridgeStatusFrame, BundlePairingTrust, CONTEXT_ENTRY_TYPE, COOKIE_CEILING_SECONDS, ContextGroupKind, ContextGroupProjection, ContextItemProjection, ContextItemSource, ContextProjection, CreateSessionMcpClientInput, CreatedSessionMcpClient, DEVICE_COOKIE, DEV_PROXY_API_ROUTE, DEV_PROXY_PREFIX, DEV_PROXY_TARGETS_ROUTE, DIALOG_ANSWERED_TYPE, DIRECTORIES_API_ROUTE, DIRECTORY_CHILDREN_API_ROUTE, DevProxyStateView, DevProxyTarget, DirectoryListing, HISTORY_PAGE_SIZE, HISTORY_PAGE_TYPE, HISTORY_REQUEST_TYPE, HUB_HELLO_TYPE, HUB_PROTOCOL_VERSION, HUB_ROLE, HistoryPageFrame, HistoryRequestFrame, HubHelloFrame, LoginEvent, LoginFlowSnapshot, LoginFlowStatus, LoginInteraction, LoginPrompt, LoginPromptView, LoginSelectOption, MAX_SESSION_FILE_BYTES, MEDIA_TYPES, MINOR_MODE_ENTRY_TYPE, MediaKind, MediaType, MinorModeActionProjection, MinorModeProjection, MinorModeRecordProjection, NATIVE_PAIRING_LINK_PREFIX, PAIRING_CLAIM_ROUTE, PAIRING_CODE_TTL_MS, PAIRING_PAGE_ROUTE, PAIRING_REQUEST_TTL_MS, PAIRING_STATUS_QUERY, PAIRING_STATUS_ROUTE, PASSKEY_AUTH_BEGIN_ROUTE, PASSKEY_AUTH_FINISH_ROUTE, PASSKEY_REGISTER_BEGIN_ROUTE, PASSKEY_REGISTER_FINISH_ROUTE, PO_FOLDERS_API_ROUTE, PROFILE_IDENTITY_ENTRY_TYPE, PROTOCOL_SOCKET_ROUTE, PairedDeviceView, PairingRequestView, PairingStatus, PiSessionHistoryItem, PoNotificationEntry, ProviderAuthMethod, ProviderAuthSummary, REMOTE_API_ROUTE, REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_PUSH_KEY_ROUTE, REMOTE_PUSH_ROUTE, REMOTE_STATE_TYPE, REPLAY_TYPE, RESOURCE_CATALOG_ENTRY_TYPE, RemoteAccessSettings, RemoteAccessStateView, RemoteAccessStatus, RemoteChannelScope, RemovedSessionItem, RepositoryCatalogOption, RepositorySelectionChanges, RepositorySelectionValue, RepositorySelectionWriteRequest, RepositorySettingsView, SESSIONS_API_ROUTE, SESSION_COMMAND_TYPE, SESSION_FILE_EXPECTED_SHA256_HEADER, SESSION_FILE_ROUTE, SESSION_FILE_SHA256_HEADER, SETTINGS_CONFIG_API_ROUTE, SETTINGS_IMAGES_API_ROUTE, SETTINGS_MODELS_API_ROUTE, SETTINGS_REPOSITORIES_API_ROUTE, SETTINGS_REPOSITORY_API_ROUTE, SETTINGS_REPOSITORY_SELECTION_API_ROUTE, SETTINGS_VALUE_API_ROUTE, STEP_UP_HEADER, SessionCommandFrame, SessionFrame, SessionGitStatus, SessionMcpClient, SessionMcpConfig, SessionMcpRouting, SessionMcpScope, SessionMcpSkill, SessionMcpTool, SessionNativeComposition, SessionPhase, SessionProfile, SessionSummary, SessionWebComposition, SettingsBatchWriteRequest, SettingsConfigView, SettingsErrorView, SettingsImagesView, SettingsImagesWriteRequest, SettingsKeyScope, SettingsModel, SettingsOrigin, SettingsRepository, SettingsScope, SettingsValueView, SettingsWriteRequest, TRUSTED_DEVICES_ROUTE, TrustedDevicePlatform, TrustedDeviceView, TunnelConfig, TunnelFailure, TunnelKind, TunnelLauncher, TunnelStartInput, TunnelStartResult, WEB_DEV_SERVER_PORT, WORKSPACES_API_ROUTE, WORKSPACE_SANDBOX_STATES, WebServer, WebServerOptions, WorkspaceSandboxState, WorkspaceSummary, bridgeStatus, hubHello, parsePoNotificationEntry, sessionCommand, sessionFileUrl };
package/dist/types.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  import { AUTH_LOGINS_API_ROUTE, AUTH_PROVIDERS_API_ROUTE } from "./types/auth.mjs";
2
- import { BUNDLE_MINIMUM_REVISION_PARAM, BUNDLE_SIGNING_KEY_PARAM, COOKIE_CEILING_SECONDS, DEVICE_COOKIE, PAIRING_CLAIM_ROUTE, PAIRING_CODE_TTL_MS, PAIRING_PAGE_ROUTE, PAIRING_REQUEST_TTL_MS, PAIRING_STATUS_QUERY, PAIRING_STATUS_ROUTE, PASSKEY_AUTH_BEGIN_ROUTE, PASSKEY_AUTH_FINISH_ROUTE, PASSKEY_REGISTER_BEGIN_ROUTE, PASSKEY_REGISTER_FINISH_ROUTE, PROTOCOL_SOCKET_ROUTE, REMOTE_API_ROUTE, REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_PUSH_KEY_ROUTE, REMOTE_PUSH_ROUTE, REMOTE_STATE_TYPE, STEP_UP_HEADER, TRUSTED_DEVICES_ROUTE, WEB_DEV_SERVER_PORT } from "./types/remoteAccess.mjs";
2
+ import { BUNDLE_MINIMUM_REVISION_PARAM, BUNDLE_SIGNING_KEY_PARAM, COOKIE_CEILING_SECONDS, DEVICE_COOKIE, NATIVE_PAIRING_LINK_PREFIX, PAIRING_CLAIM_ROUTE, PAIRING_CODE_TTL_MS, PAIRING_PAGE_ROUTE, PAIRING_REQUEST_TTL_MS, PAIRING_STATUS_QUERY, PAIRING_STATUS_ROUTE, PASSKEY_AUTH_BEGIN_ROUTE, PASSKEY_AUTH_FINISH_ROUTE, PASSKEY_REGISTER_BEGIN_ROUTE, PASSKEY_REGISTER_FINISH_ROUTE, PROTOCOL_SOCKET_ROUTE, REMOTE_API_ROUTE, REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_PUSH_KEY_ROUTE, REMOTE_PUSH_ROUTE, REMOTE_STATE_TYPE, STEP_UP_HEADER, TRUSTED_DEVICES_ROUTE, WEB_DEV_SERVER_PORT } from "./types/remoteAccess.mjs";
3
3
  import { DEV_PROXY_API_ROUTE, DEV_PROXY_PREFIX, DEV_PROXY_TARGETS_ROUTE } from "./types/devProxy.mjs";
4
4
  import { MAX_SESSION_FILE_BYTES, MEDIA_TYPES, SESSION_FILE_EXPECTED_SHA256_HEADER, SESSION_FILE_ROUTE, SESSION_FILE_SHA256_HEADER, sessionFileUrl } from "./types/media.mjs";
5
5
  import { AGENT_MODEL_ENTRY_TYPE, API_SESSION_QUERY_PARAM, CONTEXT_ENTRY_TYPE, DIALOG_ANSWERED_TYPE, DIRECTORIES_API_ROUTE, DIRECTORY_CHILDREN_API_ROUTE, HISTORY_PAGE_SIZE, HISTORY_PAGE_TYPE, HISTORY_REQUEST_TYPE, HUB_HELLO_TYPE, HUB_PROTOCOL_VERSION, HUB_ROLE, MINOR_MODE_ENTRY_TYPE, PO_FOLDERS_API_ROUTE, PROFILE_IDENTITY_ENTRY_TYPE, RESOURCE_CATALOG_ENTRY_TYPE, SESSIONS_API_ROUTE, SESSION_COMMAND_TYPE, WORKSPACES_API_ROUTE, WORKSPACE_SANDBOX_STATES, hubHello, sessionCommand } from "./types/hub.mjs";
6
6
  import { parsePoNotificationEntry } from "./types/notification.mjs";
7
7
  import { SETTINGS_CONFIG_API_ROUTE, SETTINGS_IMAGES_API_ROUTE, SETTINGS_MODELS_API_ROUTE, SETTINGS_REPOSITORIES_API_ROUTE, SETTINGS_REPOSITORY_API_ROUTE, SETTINGS_REPOSITORY_SELECTION_API_ROUTE, SETTINGS_VALUE_API_ROUTE } from "./types/settings.mjs";
8
8
  import { ATTACHED_TYPE, ATTACH_ERROR_TYPE, ATTACH_TYPE, BRIDGE_STATUS_TYPE, REPLAY_TYPE, bridgeStatus } from "./types/session.mjs";
9
- export { AGENT_MODEL_ENTRY_TYPE, API_SESSION_QUERY_PARAM, ATTACHED_TYPE, ATTACH_ERROR_TYPE, ATTACH_TYPE, AUTH_LOGINS_API_ROUTE, AUTH_PROVIDERS_API_ROUTE, BRIDGE_STATUS_TYPE, BUNDLE_MINIMUM_REVISION_PARAM, BUNDLE_SIGNING_KEY_PARAM, CONTEXT_ENTRY_TYPE, COOKIE_CEILING_SECONDS, DEVICE_COOKIE, DEV_PROXY_API_ROUTE, DEV_PROXY_PREFIX, DEV_PROXY_TARGETS_ROUTE, DIALOG_ANSWERED_TYPE, DIRECTORIES_API_ROUTE, DIRECTORY_CHILDREN_API_ROUTE, HISTORY_PAGE_SIZE, HISTORY_PAGE_TYPE, HISTORY_REQUEST_TYPE, HUB_HELLO_TYPE, HUB_PROTOCOL_VERSION, HUB_ROLE, MAX_SESSION_FILE_BYTES, MEDIA_TYPES, MINOR_MODE_ENTRY_TYPE, PAIRING_CLAIM_ROUTE, PAIRING_CODE_TTL_MS, PAIRING_PAGE_ROUTE, PAIRING_REQUEST_TTL_MS, PAIRING_STATUS_QUERY, PAIRING_STATUS_ROUTE, PASSKEY_AUTH_BEGIN_ROUTE, PASSKEY_AUTH_FINISH_ROUTE, PASSKEY_REGISTER_BEGIN_ROUTE, PASSKEY_REGISTER_FINISH_ROUTE, PO_FOLDERS_API_ROUTE, PROFILE_IDENTITY_ENTRY_TYPE, PROTOCOL_SOCKET_ROUTE, REMOTE_API_ROUTE, REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_PUSH_KEY_ROUTE, REMOTE_PUSH_ROUTE, REMOTE_STATE_TYPE, REPLAY_TYPE, RESOURCE_CATALOG_ENTRY_TYPE, SESSIONS_API_ROUTE, SESSION_COMMAND_TYPE, SESSION_FILE_EXPECTED_SHA256_HEADER, SESSION_FILE_ROUTE, SESSION_FILE_SHA256_HEADER, SETTINGS_CONFIG_API_ROUTE, SETTINGS_IMAGES_API_ROUTE, SETTINGS_MODELS_API_ROUTE, SETTINGS_REPOSITORIES_API_ROUTE, SETTINGS_REPOSITORY_API_ROUTE, SETTINGS_REPOSITORY_SELECTION_API_ROUTE, SETTINGS_VALUE_API_ROUTE, STEP_UP_HEADER, TRUSTED_DEVICES_ROUTE, WEB_DEV_SERVER_PORT, WORKSPACES_API_ROUTE, WORKSPACE_SANDBOX_STATES, bridgeStatus, hubHello, parsePoNotificationEntry, sessionCommand, sessionFileUrl };
9
+ export { AGENT_MODEL_ENTRY_TYPE, API_SESSION_QUERY_PARAM, ATTACHED_TYPE, ATTACH_ERROR_TYPE, ATTACH_TYPE, AUTH_LOGINS_API_ROUTE, AUTH_PROVIDERS_API_ROUTE, BRIDGE_STATUS_TYPE, BUNDLE_MINIMUM_REVISION_PARAM, BUNDLE_SIGNING_KEY_PARAM, CONTEXT_ENTRY_TYPE, COOKIE_CEILING_SECONDS, DEVICE_COOKIE, DEV_PROXY_API_ROUTE, DEV_PROXY_PREFIX, DEV_PROXY_TARGETS_ROUTE, DIALOG_ANSWERED_TYPE, DIRECTORIES_API_ROUTE, DIRECTORY_CHILDREN_API_ROUTE, HISTORY_PAGE_SIZE, HISTORY_PAGE_TYPE, HISTORY_REQUEST_TYPE, HUB_HELLO_TYPE, HUB_PROTOCOL_VERSION, HUB_ROLE, MAX_SESSION_FILE_BYTES, MEDIA_TYPES, MINOR_MODE_ENTRY_TYPE, NATIVE_PAIRING_LINK_PREFIX, PAIRING_CLAIM_ROUTE, PAIRING_CODE_TTL_MS, PAIRING_PAGE_ROUTE, PAIRING_REQUEST_TTL_MS, PAIRING_STATUS_QUERY, PAIRING_STATUS_ROUTE, PASSKEY_AUTH_BEGIN_ROUTE, PASSKEY_AUTH_FINISH_ROUTE, PASSKEY_REGISTER_BEGIN_ROUTE, PASSKEY_REGISTER_FINISH_ROUTE, PO_FOLDERS_API_ROUTE, PROFILE_IDENTITY_ENTRY_TYPE, PROTOCOL_SOCKET_ROUTE, REMOTE_API_ROUTE, REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, REMOTE_PAIRING_REQUEST_TYPE, REMOTE_PUSH_KEY_ROUTE, REMOTE_PUSH_ROUTE, REMOTE_STATE_TYPE, REPLAY_TYPE, RESOURCE_CATALOG_ENTRY_TYPE, SESSIONS_API_ROUTE, SESSION_COMMAND_TYPE, SESSION_FILE_EXPECTED_SHA256_HEADER, SESSION_FILE_ROUTE, SESSION_FILE_SHA256_HEADER, SETTINGS_CONFIG_API_ROUTE, SETTINGS_IMAGES_API_ROUTE, SETTINGS_MODELS_API_ROUTE, SETTINGS_REPOSITORIES_API_ROUTE, SETTINGS_REPOSITORY_API_ROUTE, SETTINGS_REPOSITORY_SELECTION_API_ROUTE, SETTINGS_VALUE_API_ROUTE, STEP_UP_HEADER, TRUSTED_DEVICES_ROUTE, WEB_DEV_SERVER_PORT, WORKSPACES_API_ROUTE, WORKSPACE_SANDBOX_STATES, bridgeStatus, hubHello, parsePoNotificationEntry, sessionCommand, sessionFileUrl };
package/dist/views.cjs CHANGED
@@ -1,5 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_ToolRendererBoundary = require("./web/lib/ToolRendererBoundary.cjs");
3
+ const require_HomePage = require("./web/components/HomePage.cjs");
3
4
  const require_MascotMark = require("./web/components/MascotMark.cjs");
4
5
  const require_PluginPage = require("./web/components/PluginPage.cjs");
5
6
  const require_PluginSurface = require("./web/components/PluginSurface.cjs");
@@ -67,6 +68,8 @@ exports.DevProxyTargets = require_DevProxyTargets.DevProxyTargets;
67
68
  exports.DialogOverlay = require_DialogOverlay.DialogOverlay;
68
69
  exports.DockTabs = require_DockTabs.DockTabs;
69
70
  exports.DormantPanel = require_DormantPanel.DormantPanel;
71
+ exports.HomePage = require_HomePage.HomePage;
72
+ exports.HomeView = require_HomePage.HomeView;
70
73
  exports.HostsSettings = require_HostsSettings.HostsSettings;
71
74
  exports.ImageSettings = require_ImageSettings.ImageSettings;
72
75
  exports.LoginFlowDialog = require_LoginFlowDialog.LoginFlowDialog;
package/dist/views.d.mts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { ToolRendererBoundary } from "./web/lib/ToolRendererBoundary.mjs";
2
+ import { HomePage, HomeView, HomeViewProps } from "./web/components/HomePage.mjs";
2
3
  import { MascotMark, MascotMarkProps } from "./web/components/MascotMark.mjs";
3
4
  import { PluginPage } from "./web/components/PluginPage.mjs";
4
5
  import { PluginSurface } from "./web/components/PluginSurface.mjs";
@@ -53,4 +54,4 @@ import { SettingsPanelHost } from "./web/features/settings/SettingsPanelHost.mjs
53
54
  import { TemplateSettings } from "./web/features/settings/TemplateSettings.mjs";
54
55
  import { TunnelSettings } from "./web/features/settings/TunnelSettings.mjs";
55
56
  import { TopBar } from "./web/features/status/TopBar.mjs";
56
- export { ActivityDock, AppearanceSettings, CockpitHost, CommandPalette, Composer, ComposerPrompt, ContextItemDialog, ContextItemDialogProps, ContextPanel, ContextPanelView, ContributedSettings, DevProxyTargets, DialogOverlay, DockFaceSnapshot, DockTabs, DormantPanel, HostsSettings, HostsSettingsProps, ImageSettings, LoginFlowDialog, METHOD_LABEL, MascotMark, MascotMarkProps, MentionPreviewAsset, MentionPreviews, MessageFileLinkHandler, MessageMarkdown, ModelPopup, NewSessionDialog, NotificationSettings, PairedDeviceList, PairingApprovalDialog, PluginPage, PluginSettings, PluginSurface, ProviderSettings, QrCode, QrCodeProps, QueueSheet, RefusedCard, RemoteAccessDialog, RemoteAccessOptions, RemoteAccessPairing, RemoteControlSettings, RepositorySettings, RepositoryWorkspace, ResumeSessionDialog, SelectionBar, SessionActivity, SessionActivityView, SessionMcp, SessionMcpSettings, SessionMcpTools, SessionRailDialogs, SessionTranscriptView, SettingsMenu, SettingsPanelHost, TemplateSettings, ThreadView, Timeline, ToolCard, ToolRendererBoundary, TopBar, Transcript, TrustedDeviceList, TrustedDeviceListView, TrustedDeviceListViewProps, TunnelSettings, WelcomePanel, addComposerFiles, appearedFaces, hostKeyFor, isQuickTunnel, nestedToolCard, readComposerFiles, sessionActivity, useNewSessionActions, useSessionRail };
57
+ export { ActivityDock, AppearanceSettings, CockpitHost, CommandPalette, Composer, ComposerPrompt, ContextItemDialog, ContextItemDialogProps, ContextPanel, ContextPanelView, ContributedSettings, DevProxyTargets, DialogOverlay, DockFaceSnapshot, DockTabs, DormantPanel, HomePage, HomeView, HomeViewProps, HostsSettings, HostsSettingsProps, ImageSettings, LoginFlowDialog, METHOD_LABEL, MascotMark, MascotMarkProps, MentionPreviewAsset, MentionPreviews, MessageFileLinkHandler, MessageMarkdown, ModelPopup, NewSessionDialog, NotificationSettings, PairedDeviceList, PairingApprovalDialog, PluginPage, PluginSettings, PluginSurface, ProviderSettings, QrCode, QrCodeProps, QueueSheet, RefusedCard, RemoteAccessDialog, RemoteAccessOptions, RemoteAccessPairing, RemoteControlSettings, RepositorySettings, RepositoryWorkspace, ResumeSessionDialog, SelectionBar, SessionActivity, SessionActivityView, SessionMcp, SessionMcpSettings, SessionMcpTools, SessionRailDialogs, SessionTranscriptView, SettingsMenu, SettingsPanelHost, TemplateSettings, ThreadView, Timeline, ToolCard, ToolRendererBoundary, TopBar, Transcript, TrustedDeviceList, TrustedDeviceListView, TrustedDeviceListViewProps, TunnelSettings, WelcomePanel, addComposerFiles, appearedFaces, hostKeyFor, isQuickTunnel, nestedToolCard, readComposerFiles, sessionActivity, useNewSessionActions, useSessionRail };
package/dist/views.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  import { ToolRendererBoundary } from "./web/lib/ToolRendererBoundary.mjs";
2
+ import { HomePage, HomeView } from "./web/components/HomePage.mjs";
2
3
  import { MascotMark } from "./web/components/MascotMark.mjs";
3
4
  import { PluginPage } from "./web/components/PluginPage.mjs";
4
5
  import { PluginSurface } from "./web/components/PluginSurface.mjs";
@@ -53,4 +54,4 @@ import { SettingsMenu } from "./web/features/settings/SettingsMenu.mjs";
53
54
  import { RepositoryWorkspace } from "./web/features/settings/RepositoryWorkspace.mjs";
54
55
  import { SettingsPanelHost } from "./web/features/settings/SettingsPanelHost.mjs";
55
56
  import { TopBar } from "./web/features/status/TopBar.mjs";
56
- export { ActivityDock, AppearanceSettings, CommandPalette, Composer, ComposerPrompt, ContextItemDialog, ContextPanel, ContextPanelView, ContributedSettings, DevProxyTargets, DialogOverlay, DockTabs, DormantPanel, HostsSettings, ImageSettings, LoginFlowDialog, METHOD_LABEL, MascotMark, MentionPreviewAsset, MentionPreviews, MessageMarkdown, ModelPopup, NewSessionDialog, NotificationSettings, PairedDeviceList, PairingApprovalDialog, PluginPage, PluginSettings, PluginSurface, ProviderSettings, QrCode, QueueSheet, RefusedCard, RemoteAccessDialog, RemoteAccessOptions, RemoteAccessPairing, RemoteControlSettings, RepositorySettings, RepositoryWorkspace, ResumeSessionDialog, SelectionBar, SessionActivity, SessionMcp, SessionMcpSettings, SessionMcpTools, SessionRailDialogs, SessionTranscriptView, SettingsMenu, SettingsPanelHost, TemplateSettings, ThreadView, Timeline, ToolCard, ToolRendererBoundary, TopBar, Transcript, TrustedDeviceList, TrustedDeviceListView, TunnelSettings, WelcomePanel, addComposerFiles, appearedFaces, hostKeyFor, isQuickTunnel, nestedToolCard, readComposerFiles, sessionActivity, useNewSessionActions, useSessionRail };
57
+ export { ActivityDock, AppearanceSettings, CommandPalette, Composer, ComposerPrompt, ContextItemDialog, ContextPanel, ContextPanelView, ContributedSettings, DevProxyTargets, DialogOverlay, DockTabs, DormantPanel, HomePage, HomeView, HostsSettings, ImageSettings, LoginFlowDialog, METHOD_LABEL, MascotMark, MentionPreviewAsset, MentionPreviews, MessageMarkdown, ModelPopup, NewSessionDialog, NotificationSettings, PairedDeviceList, PairingApprovalDialog, PluginPage, PluginSettings, PluginSurface, ProviderSettings, QrCode, QueueSheet, RefusedCard, RemoteAccessDialog, RemoteAccessOptions, RemoteAccessPairing, RemoteControlSettings, RepositorySettings, RepositoryWorkspace, ResumeSessionDialog, SelectionBar, SessionActivity, SessionMcp, SessionMcpSettings, SessionMcpTools, SessionRailDialogs, SessionTranscriptView, SettingsMenu, SettingsPanelHost, TemplateSettings, ThreadView, Timeline, ToolCard, ToolRendererBoundary, TopBar, Transcript, TrustedDeviceList, TrustedDeviceListView, TunnelSettings, WelcomePanel, addComposerFiles, appearedFaces, hostKeyFor, isQuickTunnel, nestedToolCard, readComposerFiles, sessionActivity, useNewSessionActions, useSessionRail };
@@ -0,0 +1,80 @@
1
+ const require_pluginRegistry = require("../lib/pluginRegistry.cjs");
2
+ const require_ToolRendererBoundary = require("../lib/ToolRendererBoundary.cjs");
3
+ const require_usePluginSlotProps = require("../stores/usePluginSlotProps.cjs");
4
+ let react = require("react");
5
+ let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+ //#region src/web/components/HomePage.tsx
8
+ /** Home's frame: a 2/3 main column and a 1/3 side column on wide screens, stacked below that. */
9
+ function HomeView({ main, side, onShowSessions, navigationToggle = "mobile" }) {
10
+ const empty = main.length === 0 && side.length === 0;
11
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
12
+ "aria-label": "Home",
13
+ "data-testid": "home-page",
14
+ className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto bg-po-bg font-sans text-base text-po-text",
15
+ children: [onShowSessions ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16
+ className: `shrink-0 px-3 pt-2 ${navigationToggle === "mobile" ? "md:hidden" : ""}`,
17
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
18
+ variant: "ghost",
19
+ size: "icon-md",
20
+ "data-testid": "mobile-sessions-open",
21
+ title: "Show sessions",
22
+ "aria-label": "Show sessions",
23
+ onClick: onShowSessions,
24
+ className: "text-po-dim",
25
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.FolderIcon, { className: "size-4" })
26
+ })
27
+ }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
28
+ className: "mx-auto flex w-full max-w-6xl flex-col gap-6 px-4 py-6 md:px-8 md:py-8",
29
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", {
30
+ className: "text-2xl font-semibold text-po-hi",
31
+ children: "Home"
32
+ }), empty ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.EmptyState, {
33
+ title: "Nothing on Home yet",
34
+ description: "Apps you add show up here."
35
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
36
+ className: "grid grid-cols-1 items-start gap-4 xl:grid-cols-3",
37
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
38
+ "data-testid": "home-main",
39
+ className: `flex min-w-0 flex-col gap-4 ${side.length > 0 ? "xl:col-span-2" : "xl:col-span-3"}`,
40
+ children: main
41
+ }), side.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
42
+ "data-testid": "home-side",
43
+ className: "flex min-w-0 flex-col gap-4",
44
+ children: side
45
+ }) : null]
46
+ })]
47
+ })]
48
+ });
49
+ }
50
+ /**
51
+ * The Home screen at `/`: every global plugin's `home-apps` card. A card asks for the narrow
52
+ * column with `data: { column: 'side' }`; each renders behind its own boundary.
53
+ */
54
+ function HomePage({ onShowSessions, navigationToggle }) {
55
+ const props = require_usePluginSlotProps.usePluginSlotProps(null);
56
+ const main = [];
57
+ const side = [];
58
+ for (const fill of require_pluginRegistry.globalSlotFills(require_pluginRegistry.HOST_SLOTS.homeApps)) {
59
+ const component = fill.component;
60
+ if (component === void 0) continue;
61
+ const key = `${fill.pluginId}:${fill.id}`;
62
+ const card = (0, react.createElement)(require_ToolRendererBoundary.ToolRendererBoundary, {
63
+ key,
64
+ toolName: key,
65
+ children: (failed) => failed ? null : (0, react.createElement)(component, props)
66
+ });
67
+ (fill.data?.column === "side" ? side : main).push(card);
68
+ }
69
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HomeView, {
70
+ main,
71
+ side,
72
+ ...onShowSessions === void 0 ? {} : { onShowSessions },
73
+ ...navigationToggle === void 0 ? {} : { navigationToggle }
74
+ });
75
+ }
76
+ //#endregion
77
+ exports.HomePage = HomePage;
78
+ exports.HomeView = HomeView;
79
+
80
+ //# sourceMappingURL=HomePage.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomePage.cjs","names":["Button","FolderIcon","EmptyState","usePluginSlotProps","globalSlotFills","HOST_SLOTS","createElement","ToolRendererBoundary"],"sources":["../../../src/web/components/HomePage.tsx"],"sourcesContent":["import { Button, EmptyState, FolderIcon } from '@agimon-ai/po-web-components';\nimport { createElement, type ReactNode } from 'react';\n\nimport { globalSlotFills, HOST_SLOTS } from '../lib/pluginRegistry';\nimport { ToolRendererBoundary } from '../lib/ToolRendererBoundary';\nimport { usePluginSlotProps } from '../stores/usePluginSlotProps';\n\nexport interface HomeViewProps {\n /** Cards for the wide column, in slot order. */\n main: readonly ReactNode[];\n /** Cards for the narrow column; the column is left out when there are none. */\n side: readonly ReactNode[];\n onShowSessions?: () => void;\n navigationToggle?: 'mobile' | 'always';\n}\n\n/** Home's frame: a 2/3 main column and a 1/3 side column on wide screens, stacked below that. */\nexport function HomeView({ main, side, onShowSessions, navigationToggle = 'mobile' }: HomeViewProps) {\n const empty = main.length === 0 && side.length === 0;\n return (\n <section\n aria-label=\"Home\"\n data-testid=\"home-page\"\n className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto bg-po-bg font-sans text-base text-po-text\"\n >\n {onShowSessions ? (\n <div className={`shrink-0 px-3 pt-2 ${navigationToggle === 'mobile' ? 'md:hidden' : ''}`}>\n <Button\n variant=\"ghost\"\n size=\"icon-md\"\n data-testid=\"mobile-sessions-open\"\n title=\"Show sessions\"\n aria-label=\"Show sessions\"\n onClick={onShowSessions}\n className=\"text-po-dim\"\n >\n <FolderIcon className=\"size-4\" />\n </Button>\n </div>\n ) : null}\n <div className=\"mx-auto flex w-full max-w-6xl flex-col gap-6 px-4 py-6 md:px-8 md:py-8\">\n <h1 className=\"text-2xl font-semibold text-po-hi\">Home</h1>\n {empty ? (\n <EmptyState title=\"Nothing on Home yet\" description=\"Apps you add show up here.\" />\n ) : (\n <div className=\"grid grid-cols-1 items-start gap-4 xl:grid-cols-3\">\n <div\n data-testid=\"home-main\"\n className={`flex min-w-0 flex-col gap-4 ${side.length > 0 ? 'xl:col-span-2' : 'xl:col-span-3'}`}\n >\n {main}\n </div>\n {side.length > 0 ? (\n <div data-testid=\"home-side\" className=\"flex min-w-0 flex-col gap-4\">\n {side}\n </div>\n ) : null}\n </div>\n )}\n </div>\n </section>\n );\n}\n\n/**\n * The Home screen at `/`: every global plugin's `home-apps` card. A card asks for the narrow\n * column with `data: { column: 'side' }`; each renders behind its own boundary.\n */\nexport function HomePage({\n onShowSessions,\n navigationToggle,\n}: {\n onShowSessions?: () => void;\n navigationToggle?: 'mobile' | 'always';\n}) {\n const props = usePluginSlotProps(null);\n const main: ReactNode[] = [];\n const side: ReactNode[] = [];\n for (const fill of globalSlotFills(HOST_SLOTS.homeApps)) {\n const component = fill.component;\n if (component === undefined) continue;\n const key = `${fill.pluginId}:${fill.id}`;\n const card = createElement(ToolRendererBoundary, {\n key,\n toolName: key,\n children: (failed: boolean) => (failed ? null : createElement(component, props)),\n });\n const column = (fill.data as { column?: unknown } | undefined)?.column;\n (column === 'side' ? side : main).push(card);\n }\n return (\n <HomeView\n main={main}\n side={side}\n {...(onShowSessions === undefined ? {} : { onShowSessions })}\n {...(navigationToggle === undefined ? {} : { navigationToggle })}\n />\n );\n}\n"],"mappings":";;;;;;;;AAiBA,SAAgB,SAAS,EAAE,MAAM,MAAM,gBAAgB,mBAAmB,YAA2B;CACnG,MAAM,QAAQ,KAAK,WAAW,KAAK,KAAK,WAAW;CACnD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;EACE,cAAW;EACX,eAAY;EACZ,WAAU;EAHZ,UAAA,CAKG,iBACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAW,sBAAsB,qBAAqB,WAAW,cAAc;GAClF,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACA,6BAAAA,QAAD;IACE,SAAQ;IACR,MAAK;IACL,eAAY;IACZ,OAAM;IACN,cAAW;IACX,SAAS;IACT,WAAU;IAEV,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,YAAD,EAAY,WAAU,SAAU,CAAA;GAC1B,CAAA;EACL,CAAA,IACH,MACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;IAAI,WAAU;IAAoC,UAAA;GAAQ,CAAA,GACzD,QACC,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,YAAD;IAAY,OAAM;IAAsB,aAAY;GAA8B,CAAA,IAElF,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KACE,eAAY;KACZ,WAAW,+BAA+B,KAAK,SAAS,IAAI,kBAAkB;KAE7E,UAAA;IACE,CAAA,GACJ,KAAK,SAAS,IACb,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,eAAY;KAAY,WAAU;KACpC,UAAA;IACE,CAAA,IACH,IACD;GAEJ,CAAA,CAAA;EACE,CAAA,CAAA;;AAEb;;;;;AAMA,SAAgB,SAAS,EACvB,gBACA,oBAIC;CACD,MAAM,QAAQC,2BAAAA,mBAAmB,IAAI;CACrC,MAAM,OAAoB,CAAC;CAC3B,MAAM,OAAoB,CAAC;CAC3B,KAAK,MAAM,QAAQC,uBAAAA,gBAAgBC,uBAAAA,WAAW,QAAQ,GAAG;EACvD,MAAM,YAAY,KAAK;EACvB,IAAI,cAAc,KAAA,GAAW;EAC7B,MAAM,MAAM,GAAG,KAAK,SAAS,GAAG,KAAK;EACrC,MAAM,QAAA,GAAOC,MAAAA,cAAAA,CAAcC,6BAAAA,sBAAsB;GAC/C;GACA,UAAU;GACV,WAAW,WAAqB,SAAS,QAAA,GAAOD,MAAAA,cAAAA,CAAc,WAAW,KAAK;EAChF,CAAC;EAED,CADgB,KAAK,MAA2C,WACpD,SAAS,OAAO,KAAA,CAAM,KAAK,IAAI;CAC7C;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EACQ;EACA;EACN,GAAK,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe;EAC1D,GAAK,qBAAqB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB;CAC/D,CAAA;AAEL"}
@@ -0,0 +1,22 @@
1
+ import { ReactNode } from "react";
2
+ //#region src/web/components/HomePage.d.ts
3
+ export interface HomeViewProps {
4
+ /** Cards for the wide column, in slot order. */
5
+ main: readonly ReactNode[];
6
+ /** Cards for the narrow column; the column is left out when there are none. */
7
+ side: readonly ReactNode[];
8
+ onShowSessions?: () => void;
9
+ navigationToggle?: 'mobile' | 'always';
10
+ }
11
+ /** Home's frame: a 2/3 main column and a 1/3 side column on wide screens, stacked below that. */
12
+ export declare function HomeView({ main, side, onShowSessions, navigationToggle }: HomeViewProps): import("react").JSX.Element;
13
+ /**
14
+ * The Home screen at `/`: every global plugin's `home-apps` card. A card asks for the narrow
15
+ * column with `data: { column: 'side' }`; each renders behind its own boundary.
16
+ */
17
+ export declare function HomePage({ onShowSessions, navigationToggle }: {
18
+ onShowSessions?: () => void;
19
+ navigationToggle?: 'mobile' | 'always';
20
+ }): import("react").JSX.Element;
21
+ //#endregion
22
+ //# sourceMappingURL=HomePage.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomePage.d.mts","names":[],"sources":["../../../src/web/components/HomePage.tsx"],"mappings":";;iBAOiB;;EAEf,eAAe;;EAEf,eAAe;EACf;EACA;;;wBAIc,WAAW,MAAM,MAAM,gBAAgB,oBAA+B,gCAAa,IAAA;;;;;wBAmDnF,WACd,gBACA;EAEA;EACA;oBACD,IAAA"}