octocms 0.4.13 → 0.4.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/AdminApp.d.ts +1 -1
- package/dist/admin/AdminApp.js +2 -2
- package/dist/admin/AdminApp.js.map +1 -1
- package/dist/admin/actions/agent.d.ts +3 -3
- package/dist/admin/actions/agent.js.map +1 -1
- package/dist/admin/actions/media.d.ts.map +1 -1
- package/dist/admin/actions/media.js +3 -1
- package/dist/admin/actions/media.js.map +1 -1
- package/dist/admin/pages/AdminErrorView.d.ts.map +1 -1
- package/dist/admin/pages/AdminErrorView.js +9 -9
- package/dist/admin/pages/AdminErrorView.js.map +1 -1
- package/dist/admin/pages/AdminLayout.d.ts +1 -1
- package/dist/admin/pages/AdminLayout.d.ts.map +1 -1
- package/dist/admin/pages/AdminLayout.js +2 -2
- package/dist/admin/pages/AdminLayout.js.map +1 -1
- package/dist/admin/pages/ChatPage.d.ts +3 -3
- package/dist/admin/pages/ChatPage.d.ts.map +1 -1
- package/dist/admin/pages/ChatPage.js +8 -5
- package/dist/admin/pages/ChatPage.js.map +1 -1
- package/dist/admin/pages/CollectionPage.d.ts.map +1 -1
- package/dist/admin/pages/CollectionPage.js +5 -1
- package/dist/admin/pages/CollectionPage.js.map +1 -1
- package/dist/admin/pages/ContentModelPage.d.ts.map +1 -1
- package/dist/admin/pages/ContentModelPage.js +5 -1
- package/dist/admin/pages/ContentModelPage.js.map +1 -1
- package/dist/admin/pages/ContentPage.d.ts.map +1 -1
- package/dist/admin/pages/ContentPage.js +5 -1
- package/dist/admin/pages/ContentPage.js.map +1 -1
- package/dist/admin/pages/ContentTypePage.d.ts.map +1 -1
- package/dist/admin/pages/ContentTypePage.js +6 -2
- package/dist/admin/pages/ContentTypePage.js.map +1 -1
- package/dist/admin/pages/EntryPage.d.ts.map +1 -1
- package/dist/admin/pages/EntryPage.js +5 -1
- package/dist/admin/pages/EntryPage.js.map +1 -1
- package/dist/admin/pages/MediaAssetPage.d.ts.map +1 -1
- package/dist/admin/pages/MediaAssetPage.js +6 -2
- package/dist/admin/pages/MediaAssetPage.js.map +1 -1
- package/dist/admin/pages/MediaPage.d.ts.map +1 -1
- package/dist/admin/pages/MediaPage.js +6 -2
- package/dist/admin/pages/MediaPage.js.map +1 -1
- package/dist/admin/theme/toggle.d.ts.map +1 -1
- package/dist/admin/theme/toggle.js +27 -27
- package/dist/admin/theme/toggle.js.map +1 -1
- package/dist/agent/chatSetup.d.ts +19 -0
- package/dist/agent/chatSetup.d.ts.map +1 -0
- package/dist/agent/chatSetup.js +119 -0
- package/dist/agent/chatSetup.js.map +1 -0
- package/dist/agent/featureFlag.d.ts +3 -3
- package/dist/agent/featureFlag.js.map +1 -1
- package/dist/agent/index.cjs +75 -5309
- package/dist/agent/index.cjs.map +1 -1
- package/dist/{agentDocs-M3R2CPUQ.js → agentDocs-QZ4NOQVH.js} +2 -2
- package/dist/{chunk-DCDFWNC6.js → chunk-I7VNI2IG.js} +4 -7
- package/dist/{chunk-DCDFWNC6.js.map → chunk-I7VNI2IG.js.map} +1 -1
- package/dist/chunk-TOUAHFDW.js +7 -0
- package/dist/{chunk-NAHOP7TG.js.map → chunk-TOUAHFDW.js.map} +1 -1
- package/dist/cli/index.js +4 -4
- package/dist/cli/lib/templates.js +3 -6
- package/dist/cli/lib/templates.js.map +1 -1
- package/dist/components/Chat/ChatAgentSetup.d.ts +7 -0
- package/dist/components/Chat/ChatAgentSetup.d.ts.map +1 -0
- package/dist/components/Chat/ChatAgentSetup.js +37 -0
- package/dist/components/Chat/ChatAgentSetup.js.map +1 -0
- package/dist/components/Chat/ChatPage.d.ts +6 -1
- package/dist/components/Chat/ChatPage.d.ts.map +1 -1
- package/dist/components/Chat/ChatPage.js +123 -128
- package/dist/components/Chat/ChatPage.js.map +1 -1
- package/dist/components/Chat/ChatSidebar.d.ts +10 -0
- package/dist/components/Chat/ChatSidebar.d.ts.map +1 -0
- package/dist/components/Chat/ChatSidebar.js +45 -0
- package/dist/components/Chat/ChatSidebar.js.map +1 -0
- package/dist/components/Chat/Composer.d.ts.map +1 -1
- package/dist/components/Chat/Composer.js +28 -45
- package/dist/components/Chat/Composer.js.map +1 -1
- package/dist/components/Chat/Message.d.ts.map +1 -1
- package/dist/components/Chat/Message.js +40 -39
- package/dist/components/Chat/Message.js.map +1 -1
- package/dist/components/Chat/ProposalCard.d.ts.map +1 -1
- package/dist/components/Chat/ProposalCard.js +56 -67
- package/dist/components/Chat/ProposalCard.js.map +1 -1
- package/dist/components/Chat/ToolCallCard.d.ts.map +1 -1
- package/dist/components/Chat/ToolCallCard.js +29 -38
- package/dist/components/Chat/ToolCallCard.js.map +1 -1
- package/dist/components/Chat/chatStorage.d.ts +64 -0
- package/dist/components/Chat/chatStorage.d.ts.map +1 -0
- package/dist/components/Chat/chatStorage.js +154 -0
- package/dist/components/Chat/chatStorage.js.map +1 -0
- package/dist/components/Chat/useChatHistory.d.ts +12 -0
- package/dist/components/Chat/useChatHistory.d.ts.map +1 -0
- package/dist/components/Chat/useChatHistory.js +196 -0
- package/dist/components/Chat/useChatHistory.js.map +1 -0
- package/dist/components/Chat/useChatStream.d.ts +6 -0
- package/dist/components/Chat/useChatStream.d.ts.map +1 -1
- package/dist/components/Chat/useChatStream.js +31 -2
- package/dist/components/Chat/useChatStream.js.map +1 -1
- package/dist/components/CommandK/CommandK.d.ts +1 -1
- package/dist/components/CommandK/CommandK.d.ts.map +1 -1
- package/dist/components/CommandK/CommandK.js +100 -116
- package/dist/components/CommandK/CommandK.js.map +1 -1
- package/dist/components/CommandK/parts.d.ts.map +1 -1
- package/dist/components/CommandK/parts.js +9 -11
- package/dist/components/CommandK/parts.js.map +1 -1
- package/dist/components/ContentModel/ConditionalBranchesEditor.d.ts.map +1 -1
- package/dist/components/ContentModel/ConditionalBranchesEditor.js +40 -45
- package/dist/components/ContentModel/ConditionalBranchesEditor.js.map +1 -1
- package/dist/components/ContentModel/ContentModelList.d.ts.map +1 -1
- package/dist/components/ContentModel/ContentModelList.js +65 -80
- package/dist/components/ContentModel/ContentModelList.js.map +1 -1
- package/dist/components/ContentModel/ContentTypeDetail.d.ts.map +1 -1
- package/dist/components/ContentModel/ContentTypeDetail.js +253 -280
- package/dist/components/ContentModel/ContentTypeDetail.js.map +1 -1
- package/dist/components/ContentModel/CreateContentTypeDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/CreateContentTypeDialog.js +42 -30
- package/dist/components/ContentModel/CreateContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/DeleteContentTypeDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/DeleteContentTypeDialog.js +14 -15
- package/dist/components/ContentModel/DeleteContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/DeleteFieldDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/DeleteFieldDialog.js +27 -20
- package/dist/components/ContentModel/DeleteFieldDialog.js.map +1 -1
- package/dist/components/ContentModel/EditContentTypeDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/EditContentTypeDialog.js +46 -34
- package/dist/components/ContentModel/EditContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/FieldDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/FieldDialog.js +95 -84
- package/dist/components/ContentModel/FieldDialog.js.map +1 -1
- package/dist/components/ContentModel/RichTextOptionsEditor.d.ts.map +1 -1
- package/dist/components/ContentModel/RichTextOptionsEditor.js +90 -81
- package/dist/components/ContentModel/RichTextOptionsEditor.js.map +1 -1
- package/dist/components/ContentModel/SchemaImpactList.d.ts.map +1 -1
- package/dist/components/ContentModel/SchemaImpactList.js +19 -36
- package/dist/components/ContentModel/SchemaImpactList.js.map +1 -1
- package/dist/components/ContentModel/SchemaOptionFieldInput.d.ts.map +1 -1
- package/dist/components/ContentModel/SchemaOptionFieldInput.js +63 -84
- package/dist/components/ContentModel/SchemaOptionFieldInput.js.map +1 -1
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.d.ts +3 -0
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.d.ts.map +1 -0
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.js +15 -0
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.js.map +1 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.d.ts +3 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.d.ts.map +1 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.js +11 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.js.map +1 -0
- package/dist/components/ContentModel/skeletons/FieldTableSkeleton.js +3 -3
- package/dist/components/ContentModel/skeletons/FieldTableSkeleton.js.map +1 -1
- package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.d.ts.map +1 -1
- package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.js +4 -12
- package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.js.map +1 -1
- package/dist/components/Dashboard/DashboardContent.d.ts.map +1 -1
- package/dist/components/Dashboard/DashboardContent.js +87 -114
- package/dist/components/Dashboard/DashboardContent.js.map +1 -1
- package/dist/components/Dashboard/RecentPullRequests.d.ts.map +1 -1
- package/dist/components/Dashboard/RecentPullRequests.js +33 -45
- package/dist/components/Dashboard/RecentPullRequests.js.map +1 -1
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.d.ts +2 -7
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.d.ts.map +1 -1
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.js +5 -20
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.js.map +1 -1
- package/dist/components/Dashboard/skeletons/ContentTableSkeleton.js +9 -9
- package/dist/components/Dashboard/skeletons/ContentTableSkeleton.js.map +1 -1
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.d.ts +3 -0
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.d.ts.map +1 -0
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.js +10 -0
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.js.map +1 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.d.ts +9 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.d.ts.map +1 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.js +16 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.js.map +1 -0
- package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.d.ts.map +1 -1
- package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.js +7 -18
- package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.js.map +1 -1
- package/dist/components/DiffView/DiffHunk.d.ts.map +1 -1
- package/dist/components/DiffView/DiffHunk.js +12 -40
- package/dist/components/DiffView/DiffHunk.js.map +1 -1
- package/dist/components/DiffView/DiffView.d.ts.map +1 -1
- package/dist/components/DiffView/DiffView.js +33 -52
- package/dist/components/DiffView/DiffView.js.map +1 -1
- package/dist/components/EditPost/EditPost.d.ts.map +1 -1
- package/dist/components/EditPost/EditPost.js +139 -200
- package/dist/components/EditPost/EditPost.js.map +1 -1
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.d.ts +3 -0
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.d.ts.map +1 -0
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.js +21 -0
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.js.map +1 -0
- package/dist/components/EditPost/skeletons/EntryFormSkeleton.d.ts.map +1 -1
- package/dist/components/EditPost/skeletons/EntryFormSkeleton.js +1 -9
- package/dist/components/EditPost/skeletons/EntryFormSkeleton.js.map +1 -1
- package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.d.ts.map +1 -1
- package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.js +12 -20
- package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.js.map +1 -1
- package/dist/components/ErrorBoundary/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/{ErrorBoundary.js → ErrorBoundary/ErrorBoundary.js} +15 -21
- package/dist/components/ErrorBoundary/ErrorBoundary.js.map +1 -0
- package/dist/components/HistorySection/HistorySection.d.ts.map +1 -1
- package/dist/components/HistorySection/HistorySection.js +23 -42
- package/dist/components/HistorySection/HistorySection.js.map +1 -1
- package/dist/components/InlineEntryEditor/InlineEntryEditor.d.ts.map +1 -1
- package/dist/components/InlineEntryEditor/InlineEntryEditor.js +120 -123
- package/dist/components/InlineEntryEditor/InlineEntryEditor.js.map +1 -1
- package/dist/components/Layout/BranchSelectorDialog.d.ts +9 -0
- package/dist/components/Layout/BranchSelectorDialog.d.ts.map +1 -0
- package/dist/components/Layout/BranchSelectorDialog.js +130 -0
- package/dist/components/Layout/BranchSelectorDialog.js.map +1 -0
- package/dist/components/Layout/CreateBranchDialog.d.ts.map +1 -0
- package/dist/components/{CreateBranchDialog.js → Layout/CreateBranchDialog.js} +16 -16
- package/dist/components/Layout/CreateBranchDialog.js.map +1 -0
- package/dist/components/Layout/Layout.d.ts.map +1 -1
- package/dist/components/Layout/Layout.js +18 -26
- package/dist/components/Layout/Layout.js.map +1 -1
- package/dist/components/Layout/LeftNavItem.d.ts.map +1 -1
- package/dist/components/Layout/LeftNavItem.js +7 -7
- package/dist/components/Layout/LeftNavItem.js.map +1 -1
- package/dist/components/Layout/Page.d.ts +16 -0
- package/dist/components/Layout/Page.d.ts.map +1 -0
- package/dist/components/Layout/Page.js +47 -0
- package/dist/components/Layout/Page.js.map +1 -0
- package/dist/components/Layout/TopHeader.d.ts +1 -1
- package/dist/components/Layout/TopHeader.d.ts.map +1 -1
- package/dist/components/Layout/TopHeader.js +70 -165
- package/dist/components/Layout/TopHeader.js.map +1 -1
- package/dist/components/Layout/UserAccountDialog.d.ts +12 -0
- package/dist/components/Layout/UserAccountDialog.d.ts.map +1 -0
- package/dist/components/Layout/UserAccountDialog.js +48 -0
- package/dist/components/Layout/UserAccountDialog.js.map +1 -0
- package/dist/components/Layout/skeletons/AgentNavSkeleton.js +1 -1
- package/dist/components/Layout/skeletons/AgentNavSkeleton.js.map +1 -1
- package/dist/components/Layout/skeletons/BranchChipSkeleton.d.ts.map +1 -1
- package/dist/components/Layout/skeletons/BranchChipSkeleton.js +1 -8
- package/dist/components/Layout/skeletons/BranchChipSkeleton.js.map +1 -1
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.d.ts +3 -0
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.js +11 -0
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.js.map +1 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.d.ts +19 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.js +31 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.js.map +1 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.d.ts +9 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.js +15 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.js.map +1 -0
- package/dist/components/Layout/skeletons/TopHeaderSkeleton.d.ts.map +1 -1
- package/dist/components/Layout/skeletons/TopHeaderSkeleton.js +10 -17
- package/dist/components/Layout/skeletons/TopHeaderSkeleton.js.map +1 -1
- package/dist/components/Layout/skeletons/routeSkeletons.d.ts +16 -0
- package/dist/components/Layout/skeletons/routeSkeletons.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/routeSkeletons.js +48 -0
- package/dist/components/Layout/skeletons/routeSkeletons.js.map +1 -0
- package/dist/components/LinkedBySection/LinkedBySection.js +13 -13
- package/dist/components/LinkedBySection/LinkedBySection.js.map +1 -1
- package/dist/components/MediaAsset/MediaAsset.d.ts +1 -1
- package/dist/components/MediaAsset/MediaAsset.d.ts.map +1 -1
- package/dist/components/MediaAsset/MediaAsset.js +126 -136
- package/dist/components/MediaAsset/MediaAsset.js.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.d.ts +3 -0
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.d.ts.map +1 -0
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.js +21 -0
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.js.map +1 -0
- package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.d.ts.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.js +26 -22
- package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.js.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.d.ts.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.js +1 -9
- package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.js.map +1 -1
- package/dist/components/MediaManager/CreateFolderDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/CreateFolderDialog.js +15 -8
- package/dist/components/MediaManager/CreateFolderDialog.js.map +1 -1
- package/dist/components/MediaManager/DeleteFolderDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/DeleteFolderDialog.js +1 -2
- package/dist/components/MediaManager/DeleteFolderDialog.js.map +1 -1
- package/dist/components/MediaManager/MarkdownImageEditToolbar.d.ts.map +1 -1
- package/dist/components/MediaManager/MarkdownImageEditToolbar.js +7 -9
- package/dist/components/MediaManager/MarkdownImageEditToolbar.js.map +1 -1
- package/dist/components/MediaManager/MarkdownInsertImageDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/MarkdownInsertImageDialog.js +6 -9
- package/dist/components/MediaManager/MarkdownInsertImageDialog.js.map +1 -1
- package/dist/components/MediaManager/MediaLeftPanel.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaLeftPanel.js +21 -23
- package/dist/components/MediaManager/MediaLeftPanel.js.map +1 -1
- package/dist/components/MediaManager/MediaListTable.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaListTable.js +15 -21
- package/dist/components/MediaManager/MediaListTable.js.map +1 -1
- package/dist/components/MediaManager/MediaManager.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaManager.js +101 -151
- package/dist/components/MediaManager/MediaManager.js.map +1 -1
- package/dist/components/MediaManager/MediaSelectDialog.js +22 -64
- package/dist/components/MediaManager/MediaSelectDialog.js.map +1 -1
- package/dist/components/MediaManager/MediaUploadBar.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaUploadBar.js +9 -10
- package/dist/components/MediaManager/MediaUploadBar.js.map +1 -1
- package/dist/components/MediaManager/MediaUploadDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaUploadDialog.js +18 -11
- package/dist/components/MediaManager/MediaUploadDialog.js.map +1 -1
- package/dist/components/MediaManager/MediaViewModeSwitcher.d.ts +8 -0
- package/dist/components/MediaManager/MediaViewModeSwitcher.d.ts.map +1 -0
- package/dist/components/MediaManager/MediaViewModeSwitcher.js +14 -0
- package/dist/components/MediaManager/MediaViewModeSwitcher.js.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaGridSkeleton.d.ts.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaGridSkeleton.js +4 -12
- package/dist/components/MediaManager/skeletons/MediaGridSkeleton.js.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.d.ts.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.js +5 -13
- package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.js.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.d.ts.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.js +7 -15
- package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.js.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.d.ts +3 -0
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.d.ts.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.js +15 -0
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.js.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.d.ts +3 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.d.ts.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.js +21 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.js.map +1 -0
- package/dist/components/public/MarkdownContent.d.ts.map +1 -1
- package/dist/components/public/MarkdownContent.js +1 -2
- package/dist/components/public/MarkdownContent.js.map +1 -1
- package/dist/components/public/RichTextContent.d.ts.map +1 -1
- package/dist/components/public/RichTextContent.js +19 -8
- package/dist/components/public/RichTextContent.js.map +1 -1
- package/dist/components/public/SearchBox.d.ts.map +1 -1
- package/dist/components/public/SearchBox.js +32 -60
- package/dist/components/public/SearchBox.js.map +1 -1
- package/dist/components/public/index.cjs +6 -413
- package/dist/components/public/index.cjs.map +1 -1
- package/dist/components/skeletons/MainSlotSkeleton.d.ts +0 -7
- package/dist/components/skeletons/MainSlotSkeleton.d.ts.map +1 -1
- package/dist/components/skeletons/MainSlotSkeleton.js +4 -17
- package/dist/components/skeletons/MainSlotSkeleton.js.map +1 -1
- package/dist/components/skeletons/blocks.d.ts.map +1 -1
- package/dist/components/skeletons/blocks.js +15 -7
- package/dist/components/skeletons/blocks.js.map +1 -1
- package/dist/components/skeletons/index.d.ts +4 -4
- package/dist/components/skeletons/index.d.ts.map +1 -1
- package/dist/components/skeletons/index.js +1 -2
- package/dist/components/skeletons/index.js.map +1 -1
- package/dist/components/skeletons/primitives.d.ts +2 -2
- package/dist/components/skeletons/primitives.d.ts.map +1 -1
- package/dist/components/skeletons/primitives.js +3 -3
- package/dist/components/skeletons/primitives.js.map +1 -1
- package/dist/components/test/dndTestUtils.d.ts +7 -0
- package/dist/components/test/dndTestUtils.d.ts.map +1 -0
- package/dist/components/test/dndTestUtils.js +15 -0
- package/dist/components/test/dndTestUtils.js.map +1 -0
- package/dist/components/ui/Avatar/Avatar.d.ts +5 -0
- package/dist/components/ui/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/ui/Avatar/Avatar.js +63 -0
- package/dist/components/ui/Avatar/Avatar.js.map +1 -0
- package/dist/components/ui/{branch-chip.d.ts → BranchChip/BranchChip.d.ts} +2 -5
- package/dist/components/ui/BranchChip/BranchChip.d.ts.map +1 -0
- package/dist/components/ui/BranchChip/BranchChip.js +47 -0
- package/dist/components/ui/BranchChip/BranchChip.js.map +1 -0
- package/dist/components/ui/Button/Button.d.ts +15 -0
- package/dist/components/ui/Button/Button.d.ts.map +1 -0
- package/dist/components/ui/Button/Button.js +49 -0
- package/dist/components/ui/Button/Button.js.map +1 -0
- package/dist/components/ui/Card/Card.d.ts +6 -0
- package/dist/components/ui/Card/Card.d.ts.map +1 -0
- package/dist/components/ui/{card.js → Card/Card.js} +12 -22
- package/dist/components/ui/Card/Card.js.map +1 -0
- package/dist/components/ui/{chip.d.ts → Chip/Chip.d.ts} +1 -1
- package/dist/components/ui/Chip/Chip.d.ts.map +1 -0
- package/dist/components/ui/Chip/Chip.js +24 -0
- package/dist/components/ui/Chip/Chip.js.map +1 -0
- package/dist/components/ui/Dialog/Dialog.d.ts +32 -0
- package/dist/components/ui/Dialog/Dialog.d.ts.map +1 -0
- package/dist/components/ui/Dialog/Dialog.js +194 -0
- package/dist/components/ui/Dialog/Dialog.js.map +1 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.d.ts +66 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.d.ts.map +1 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.js +308 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/components/ui/{field.d.ts → FormField/Field.d.ts} +1 -1
- package/dist/components/ui/FormField/Field.d.ts.map +1 -0
- package/dist/components/ui/FormField/Field.js +41 -0
- package/dist/components/ui/FormField/Field.js.map +1 -0
- package/dist/components/{FieldShell.d.ts → ui/FormField/FieldShell.d.ts} +2 -2
- package/dist/components/ui/FormField/FieldShell.d.ts.map +1 -0
- package/dist/components/ui/FormField/FieldShell.js +29 -0
- package/dist/components/ui/FormField/FieldShell.js.map +1 -0
- package/dist/components/ui/FormField/FormBooleanField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormBooleanField.js +56 -0
- package/dist/components/ui/FormField/FormBooleanField.js.map +1 -0
- package/dist/components/ui/FormField/FormColorField.d.ts.map +1 -0
- package/dist/components/{FormColorField.js → ui/FormField/FormColorField.js} +10 -13
- package/dist/components/ui/FormField/FormColorField.js.map +1 -0
- package/dist/components/{FormConditionalField.d.ts → ui/FormField/FormConditionalField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormConditionalField.d.ts.map +1 -0
- package/dist/components/{FormConditionalField.js → ui/FormField/FormConditionalField.js} +61 -58
- package/dist/components/ui/FormField/FormConditionalField.js.map +1 -0
- package/dist/components/ui/FormField/FormDatetimeField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormDatetimeField.js +48 -0
- package/dist/components/ui/FormField/FormDatetimeField.js.map +1 -0
- package/dist/components/{FormFields.d.ts → ui/FormField/FormFields.d.ts} +1 -1
- package/dist/components/ui/FormField/FormFields.d.ts.map +1 -0
- package/dist/components/{FormFields.js → ui/FormField/FormFields.js} +6 -6
- package/dist/components/ui/FormField/FormFields.js.map +1 -0
- package/dist/components/{FormImageField.d.ts → ui/FormField/FormImageField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormImageField.d.ts.map +1 -0
- package/dist/components/{FormImageField.js → ui/FormField/FormImageField.js} +25 -30
- package/dist/components/ui/FormField/FormImageField.js.map +1 -0
- package/dist/components/ui/FormField/FormJsonField.d.ts.map +1 -0
- package/dist/components/{FormJsonField.js → ui/FormField/FormJsonField.js} +7 -10
- package/dist/components/ui/FormField/FormJsonField.js.map +1 -0
- package/dist/components/ui/FormField/FormMarkdownField.d.ts.map +1 -0
- package/dist/components/{FormMarkdownField.js → ui/FormField/FormMarkdownField.js} +11 -20
- package/dist/components/ui/FormField/FormMarkdownField.js.map +1 -0
- package/dist/components/ui/FormField/FormNumberField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormNumberField.js +38 -0
- package/dist/components/ui/FormField/FormNumberField.js.map +1 -0
- package/dist/components/{FormReferenceField.d.ts → ui/FormField/FormReferenceField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormReferenceField.d.ts.map +1 -0
- package/dist/components/{FormReferenceField.js → ui/FormField/FormReferenceField.js} +109 -118
- package/dist/components/ui/FormField/FormReferenceField.js.map +1 -0
- package/dist/components/{FormRichTextField.d.ts → ui/FormField/FormRichTextField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormRichTextField.d.ts.map +1 -0
- package/dist/components/{FormRichTextField.js → ui/FormField/FormRichTextField.js} +28 -33
- package/dist/components/ui/FormField/FormRichTextField.js.map +1 -0
- package/dist/components/{FormSelectField.d.ts → ui/FormField/FormSelectField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormSelectField.d.ts.map +1 -0
- package/dist/components/{FormSelectField.js → ui/FormField/FormSelectField.js} +11 -23
- package/dist/components/ui/FormField/FormSelectField.js.map +1 -0
- package/dist/components/ui/FormField/FormSlugField.d.ts.map +1 -0
- package/dist/components/{FormSlugField.js → ui/FormField/FormSlugField.js} +21 -26
- package/dist/components/ui/FormField/FormSlugField.js.map +1 -0
- package/dist/components/ui/FormField/FormStringField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormStringField.js +23 -0
- package/dist/components/ui/FormField/FormStringField.js.map +1 -0
- package/dist/components/ui/FormField/FormStringListField.d.ts.map +1 -0
- package/dist/components/{FormStringListField.js → ui/FormField/FormStringListField.js} +14 -25
- package/dist/components/ui/FormField/FormStringListField.js.map +1 -0
- package/dist/components/ui/FormField/FormTextField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormTextField.js +35 -0
- package/dist/components/ui/FormField/FormTextField.js.map +1 -0
- package/dist/components/ui/FormField/FormUrlField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormUrlField.js +26 -0
- package/dist/components/ui/FormField/FormUrlField.js.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ComponentEmbedEditor.d.ts +1 -1
- package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.d.ts.map +1 -0
- package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.js +165 -0
- package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/ConditionEmbedEditor.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ConditionEmbedEditor.js +25 -39
- package/dist/components/ui/FormField/richtext/ConditionEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/ImageEmbedEditor.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ImageEmbedEditor.js +77 -56
- package/dist/components/ui/FormField/richtext/ImageEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/ReferenceEmbedEditor.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ReferenceEmbedEditor.js +55 -43
- package/dist/components/ui/FormField/richtext/ReferenceEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/SlashCommandMenu.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/SlashCommandMenu.js +21 -33
- package/dist/components/ui/FormField/richtext/SlashCommandMenu.js.map +1 -0
- package/dist/components/ui/FormField/richtext/VariableEmbedEditor.d.ts.map +1 -0
- package/dist/components/ui/FormField/richtext/VariableEmbedEditor.js +61 -0
- package/dist/components/ui/FormField/richtext/VariableEmbedEditor.js.map +1 -0
- package/dist/components/ui/Icon/Icon.d.ts +77 -0
- package/dist/components/ui/Icon/Icon.d.ts.map +1 -0
- package/dist/components/ui/Icon/Icon.js +618 -0
- package/dist/components/ui/Icon/Icon.js.map +1 -0
- package/dist/components/ui/{input.d.ts → Input/Input.d.ts} +1 -1
- package/dist/components/ui/Input/Input.d.ts.map +1 -0
- package/dist/components/ui/Input/Input.js +25 -0
- package/dist/components/ui/Input/Input.js.map +1 -0
- package/dist/components/ui/{kbd.d.ts → Kbd/Kbd.d.ts} +1 -1
- package/dist/components/ui/Kbd/Kbd.d.ts.map +1 -0
- package/dist/components/ui/Kbd/Kbd.js +19 -0
- package/dist/components/ui/Kbd/Kbd.js.map +1 -0
- package/dist/components/ui/Label/Label.d.ts +3 -0
- package/dist/components/ui/Label/Label.d.ts.map +1 -0
- package/dist/components/ui/Label/Label.js +20 -0
- package/dist/components/ui/Label/Label.js.map +1 -0
- package/dist/components/ui/Portal/Portal.d.ts +8 -0
- package/dist/components/ui/Portal/Portal.d.ts.map +1 -0
- package/dist/components/ui/Portal/Portal.js +14 -0
- package/dist/components/ui/Portal/Portal.js.map +1 -0
- package/dist/components/ui/Select/Select.d.ts +33 -0
- package/dist/components/ui/Select/Select.d.ts.map +1 -0
- package/dist/components/ui/Select/Select.js +280 -0
- package/dist/components/ui/Select/Select.js.map +1 -0
- package/dist/components/ui/Slot/Slot.d.ts +6 -0
- package/dist/components/ui/Slot/Slot.d.ts.map +1 -0
- package/dist/components/ui/Slot/Slot.js +39 -0
- package/dist/components/ui/Slot/Slot.js.map +1 -0
- package/dist/components/ui/{status-badge.d.ts → StatusBadge/StatusBadge.d.ts} +2 -2
- package/dist/components/ui/StatusBadge/StatusBadge.d.ts.map +1 -0
- package/dist/components/ui/{status-badge.js → StatusBadge/StatusBadge.js} +8 -9
- package/dist/components/ui/StatusBadge/StatusBadge.js.map +1 -0
- package/dist/components/ui/Switcher/Switcher.d.ts +9 -0
- package/dist/components/ui/Switcher/Switcher.d.ts.map +1 -0
- package/dist/components/ui/Switcher/Switcher.js +75 -0
- package/dist/components/ui/Switcher/Switcher.js.map +1 -0
- package/dist/components/ui/{table.d.ts → Table/Table.d.ts} +1 -1
- package/dist/components/ui/Table/Table.d.ts.map +1 -0
- package/dist/components/ui/{table.js → Table/Table.js} +11 -29
- package/dist/components/ui/Table/Table.js.map +1 -0
- package/dist/components/ui/Tabs/Tabs.d.ts +16 -0
- package/dist/components/ui/Tabs/Tabs.d.ts.map +1 -0
- package/dist/components/ui/Tabs/Tabs.js +96 -0
- package/dist/components/ui/Tabs/Tabs.js.map +1 -0
- package/dist/components/ui/{textarea.d.ts → Textarea/Textarea.d.ts} +1 -1
- package/dist/components/ui/Textarea/Textarea.d.ts.map +1 -0
- package/dist/components/ui/Textarea/Textarea.js +16 -0
- package/dist/components/ui/Textarea/Textarea.js.map +1 -0
- package/dist/components/ui/Toast/Toast.d.ts +21 -0
- package/dist/components/ui/Toast/Toast.d.ts.map +1 -0
- package/dist/components/ui/Toast/Toast.js +98 -0
- package/dist/components/ui/Toast/Toast.js.map +1 -0
- package/dist/components/ui/{toaster.d.ts → Toaster/Toaster.d.ts} +1 -1
- package/dist/components/ui/Toaster/Toaster.d.ts.map +1 -0
- package/dist/components/ui/Toaster/Toaster.js +27 -0
- package/dist/components/ui/Toaster/Toaster.js.map +1 -0
- package/dist/components/ui/index.d.ts +45 -31
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +76 -36
- package/dist/components/ui/index.js.map +1 -1
- package/dist/config.cjs +4 -99
- package/dist/config.cjs.map +1 -1
- package/dist/defineConfig.cjs +0 -2
- package/dist/defineConfig.cjs.map +1 -1
- package/dist/globals.css +9648 -430
- package/dist/hooks/useComposedRefs.d.ts +5 -0
- package/dist/hooks/useComposedRefs.d.ts.map +1 -0
- package/dist/hooks/useComposedRefs.js +23 -0
- package/dist/hooks/useComposedRefs.js.map +1 -0
- package/dist/hooks/useControllableState.d.ts +8 -0
- package/dist/hooks/useControllableState.d.ts.map +1 -0
- package/dist/hooks/useControllableState.js +28 -0
- package/dist/hooks/useControllableState.js.map +1 -0
- package/dist/hooks/usePopoverContent.d.ts +26 -0
- package/dist/hooks/usePopoverContent.d.ts.map +1 -0
- package/dist/hooks/usePopoverContent.js +44 -0
- package/dist/hooks/usePopoverContent.js.map +1 -0
- package/dist/hooks/useToast.d.ts +4 -4
- package/dist/hooks/useToast.d.ts.map +1 -1
- package/dist/hooks/useToast.js +1 -3
- package/dist/hooks/useToast.js.map +1 -1
- package/dist/index.cjs +11 -9506
- package/dist/index.cjs.map +1 -1
- package/dist/{init-KWH66PKY.js → init-KNIWQGJL.js} +3 -18
- package/dist/init-KNIWQGJL.js.map +1 -0
- package/dist/lib/configStore.cjs +1 -3
- package/dist/lib/configStore.cjs.map +1 -1
- package/dist/lib/slugField.d.ts.map +1 -1
- package/dist/lib/slugField.js +3 -3
- package/dist/lib/slugField.js.map +1 -1
- package/dist/lib/slugify.d.ts +13 -0
- package/dist/lib/slugify.d.ts.map +1 -0
- package/dist/lib/slugify.js +8 -0
- package/dist/lib/slugify.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -9
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +29 -3
- package/dist/lib/utils.js.map +1 -1
- package/dist/query.cjs +58 -9011
- package/dist/query.cjs.map +1 -1
- package/dist/types.cjs +0 -2
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/{update-QNJRYPMC.js → update-QALIQG76.js} +2 -2
- package/dist/withOctoCMS.cjs +2 -36
- package/dist/withOctoCMS.cjs.map +1 -1
- package/globals.css +9648 -430
- package/package.json +1 -16
- package/dist/chunk-NAHOP7TG.js +0 -7
- package/dist/components/ContentModel/ContentModelList.skeleton.d.ts +0 -5
- package/dist/components/ContentModel/ContentModelList.skeleton.d.ts.map +0 -1
- package/dist/components/ContentModel/ContentModelList.skeleton.js +0 -16
- package/dist/components/ContentModel/ContentModelList.skeleton.js.map +0 -1
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.d.ts +0 -5
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.d.ts.map +0 -1
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.js +0 -22
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.js.map +0 -1
- package/dist/components/ContentTypes.d.ts +0 -7
- package/dist/components/ContentTypes.d.ts.map +0 -1
- package/dist/components/ContentTypes.js +0 -132
- package/dist/components/ContentTypes.js.map +0 -1
- package/dist/components/CreateBranchDialog.d.ts.map +0 -1
- package/dist/components/CreateBranchDialog.js.map +0 -1
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.d.ts +0 -3
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.d.ts.map +0 -1
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.js +0 -10
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.js.map +0 -1
- package/dist/components/Dashboard/DashboardContent.list.skeleton.d.ts +0 -7
- package/dist/components/Dashboard/DashboardContent.list.skeleton.d.ts.map +0 -1
- package/dist/components/Dashboard/DashboardContent.list.skeleton.js +0 -22
- package/dist/components/Dashboard/DashboardContent.list.skeleton.js.map +0 -1
- package/dist/components/Dashboard/DashboardContent.skeleton.d.ts +0 -2
- package/dist/components/Dashboard/DashboardContent.skeleton.d.ts.map +0 -1
- package/dist/components/Dashboard/DashboardContent.skeleton.js +0 -13
- package/dist/components/Dashboard/DashboardContent.skeleton.js.map +0 -1
- package/dist/components/EditPost/EditPost.skeleton.d.ts +0 -5
- package/dist/components/EditPost/EditPost.skeleton.d.ts.map +0 -1
- package/dist/components/EditPost/EditPost.skeleton.js +0 -34
- package/dist/components/EditPost/EditPost.skeleton.js.map +0 -1
- package/dist/components/ErrorBoundary.d.ts.map +0 -1
- package/dist/components/ErrorBoundary.js.map +0 -1
- package/dist/components/FieldHintAndError.d.ts +0 -8
- package/dist/components/FieldHintAndError.d.ts.map +0 -1
- package/dist/components/FieldHintAndError.js +0 -14
- package/dist/components/FieldHintAndError.js.map +0 -1
- package/dist/components/FieldLabel.d.ts +0 -11
- package/dist/components/FieldLabel.d.ts.map +0 -1
- package/dist/components/FieldLabel.js +0 -17
- package/dist/components/FieldLabel.js.map +0 -1
- package/dist/components/FieldShell.d.ts.map +0 -1
- package/dist/components/FieldShell.js +0 -29
- package/dist/components/FieldShell.js.map +0 -1
- package/dist/components/FileExplorer/FileExplorer.d.ts +0 -8
- package/dist/components/FileExplorer/FileExplorer.d.ts.map +0 -1
- package/dist/components/FileExplorer/FileExplorer.js +0 -68
- package/dist/components/FileExplorer/FileExplorer.js.map +0 -1
- package/dist/components/FormBooleanField.d.ts.map +0 -1
- package/dist/components/FormBooleanField.js +0 -52
- package/dist/components/FormBooleanField.js.map +0 -1
- package/dist/components/FormColorField.d.ts.map +0 -1
- package/dist/components/FormColorField.js.map +0 -1
- package/dist/components/FormConditionalField.d.ts.map +0 -1
- package/dist/components/FormConditionalField.js.map +0 -1
- package/dist/components/FormDatetimeField.d.ts.map +0 -1
- package/dist/components/FormDatetimeField.js +0 -42
- package/dist/components/FormDatetimeField.js.map +0 -1
- package/dist/components/FormFields.d.ts.map +0 -1
- package/dist/components/FormFields.js.map +0 -1
- package/dist/components/FormImageField.d.ts.map +0 -1
- package/dist/components/FormImageField.js.map +0 -1
- package/dist/components/FormJsonField.d.ts.map +0 -1
- package/dist/components/FormJsonField.js.map +0 -1
- package/dist/components/FormMarkdownField.d.ts.map +0 -1
- package/dist/components/FormMarkdownField.js.map +0 -1
- package/dist/components/FormNumberField.d.ts.map +0 -1
- package/dist/components/FormNumberField.js +0 -43
- package/dist/components/FormNumberField.js.map +0 -1
- package/dist/components/FormReferenceField.d.ts.map +0 -1
- package/dist/components/FormReferenceField.js.map +0 -1
- package/dist/components/FormRichTextField.d.ts.map +0 -1
- package/dist/components/FormRichTextField.js.map +0 -1
- package/dist/components/FormSelectField.d.ts.map +0 -1
- package/dist/components/FormSelectField.js.map +0 -1
- package/dist/components/FormSlugField.d.ts.map +0 -1
- package/dist/components/FormSlugField.js.map +0 -1
- package/dist/components/FormStringField.d.ts.map +0 -1
- package/dist/components/FormStringField.js +0 -28
- package/dist/components/FormStringField.js.map +0 -1
- package/dist/components/FormStringListField.d.ts.map +0 -1
- package/dist/components/FormStringListField.js.map +0 -1
- package/dist/components/FormTextField.d.ts.map +0 -1
- package/dist/components/FormTextField.js +0 -40
- package/dist/components/FormTextField.js.map +0 -1
- package/dist/components/FormUrlField.d.ts.map +0 -1
- package/dist/components/FormUrlField.js +0 -31
- package/dist/components/FormUrlField.js.map +0 -1
- package/dist/components/Layout/PageBar.d.ts +0 -10
- package/dist/components/Layout/PageBar.d.ts.map +0 -1
- package/dist/components/Layout/PageBar.js +0 -43
- package/dist/components/Layout/PageBar.js.map +0 -1
- package/dist/components/Layout/PageShell.d.ts +0 -30
- package/dist/components/Layout/PageShell.d.ts.map +0 -1
- package/dist/components/Layout/PageShell.js +0 -33
- package/dist/components/Layout/PageShell.js.map +0 -1
- package/dist/components/MediaAsset/MediaAsset.skeleton.d.ts +0 -3
- package/dist/components/MediaAsset/MediaAsset.skeleton.d.ts.map +0 -1
- package/dist/components/MediaAsset/MediaAsset.skeleton.js +0 -42
- package/dist/components/MediaAsset/MediaAsset.skeleton.js.map +0 -1
- package/dist/components/MediaManager/MediaManager.skeleton.d.ts +0 -3
- package/dist/components/MediaManager/MediaManager.skeleton.d.ts.map +0 -1
- package/dist/components/MediaManager/MediaManager.skeleton.js +0 -30
- package/dist/components/MediaManager/MediaManager.skeleton.js.map +0 -1
- package/dist/components/StatusBadge.d.ts +0 -2
- package/dist/components/StatusBadge.d.ts.map +0 -1
- package/dist/components/StatusBadge.js +0 -7
- package/dist/components/StatusBadge.js.map +0 -1
- package/dist/components/richtext/ComponentEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ComponentEmbedEditor.js +0 -153
- package/dist/components/richtext/ComponentEmbedEditor.js.map +0 -1
- package/dist/components/richtext/ConditionEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ConditionEmbedEditor.js.map +0 -1
- package/dist/components/richtext/ImageEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ImageEmbedEditor.js.map +0 -1
- package/dist/components/richtext/ReferenceEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ReferenceEmbedEditor.js.map +0 -1
- package/dist/components/richtext/SlashCommandMenu.d.ts.map +0 -1
- package/dist/components/richtext/SlashCommandMenu.js.map +0 -1
- package/dist/components/richtext/VariableEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/VariableEmbedEditor.js +0 -58
- package/dist/components/richtext/VariableEmbedEditor.js.map +0 -1
- package/dist/components/ui/avatar-stack.d.ts +0 -13
- package/dist/components/ui/avatar-stack.d.ts.map +0 -1
- package/dist/components/ui/avatar-stack.js +0 -27
- package/dist/components/ui/avatar-stack.js.map +0 -1
- package/dist/components/ui/avatar.d.ts +0 -7
- package/dist/components/ui/avatar.d.ts.map +0 -1
- package/dist/components/ui/avatar.js +0 -45
- package/dist/components/ui/avatar.js.map +0 -1
- package/dist/components/ui/banner.d.ts +0 -13
- package/dist/components/ui/banner.d.ts.map +0 -1
- package/dist/components/ui/banner.js +0 -24
- package/dist/components/ui/banner.js.map +0 -1
- package/dist/components/ui/branch-chip.d.ts.map +0 -1
- package/dist/components/ui/branch-chip.js +0 -58
- package/dist/components/ui/branch-chip.js.map +0 -1
- package/dist/components/ui/button.d.ts +0 -14
- package/dist/components/ui/button.d.ts.map +0 -1
- package/dist/components/ui/button.js +0 -65
- package/dist/components/ui/button.js.map +0 -1
- package/dist/components/ui/card.d.ts +0 -7
- package/dist/components/ui/card.d.ts.map +0 -1
- package/dist/components/ui/card.js.map +0 -1
- package/dist/components/ui/chip.d.ts.map +0 -1
- package/dist/components/ui/chip.js +0 -44
- package/dist/components/ui/chip.js.map +0 -1
- package/dist/components/ui/dialog.d.ts +0 -20
- package/dist/components/ui/dialog.d.ts.map +0 -1
- package/dist/components/ui/dialog.js +0 -93
- package/dist/components/ui/dialog.js.map +0 -1
- package/dist/components/ui/dropdown-menu.d.ts +0 -28
- package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
- package/dist/components/ui/dropdown-menu.js +0 -165
- package/dist/components/ui/dropdown-menu.js.map +0 -1
- package/dist/components/ui/empty.d.ts +0 -11
- package/dist/components/ui/empty.d.ts.map +0 -1
- package/dist/components/ui/empty.js +0 -24
- package/dist/components/ui/empty.js.map +0 -1
- package/dist/components/ui/field.d.ts.map +0 -1
- package/dist/components/ui/field.js +0 -52
- package/dist/components/ui/field.js.map +0 -1
- package/dist/components/ui/input.d.ts.map +0 -1
- package/dist/components/ui/input.js +0 -51
- package/dist/components/ui/input.js.map +0 -1
- package/dist/components/ui/kbd.d.ts.map +0 -1
- package/dist/components/ui/kbd.js +0 -30
- package/dist/components/ui/kbd.js.map +0 -1
- package/dist/components/ui/label.d.ts +0 -6
- package/dist/components/ui/label.d.ts.map +0 -1
- package/dist/components/ui/label.js +0 -20
- package/dist/components/ui/label.js.map +0 -1
- package/dist/components/ui/publish-button.d.ts +0 -7
- package/dist/components/ui/publish-button.d.ts.map +0 -1
- package/dist/components/ui/publish-button.js +0 -50
- package/dist/components/ui/publish-button.js.map +0 -1
- package/dist/components/ui/select.d.ts +0 -14
- package/dist/components/ui/select.d.ts.map +0 -1
- package/dist/components/ui/select.js +0 -132
- package/dist/components/ui/select.js.map +0 -1
- package/dist/components/ui/sonner.d.ts +0 -6
- package/dist/components/ui/sonner.d.ts.map +0 -1
- package/dist/components/ui/sonner.js +0 -37
- package/dist/components/ui/sonner.js.map +0 -1
- package/dist/components/ui/status-badge.d.ts.map +0 -1
- package/dist/components/ui/status-badge.js.map +0 -1
- package/dist/components/ui/table.d.ts.map +0 -1
- package/dist/components/ui/table.js.map +0 -1
- package/dist/components/ui/tabs-pill.d.ts +0 -17
- package/dist/components/ui/tabs-pill.d.ts.map +0 -1
- package/dist/components/ui/tabs-pill.js +0 -67
- package/dist/components/ui/tabs-pill.js.map +0 -1
- package/dist/components/ui/tabs.d.ts +0 -8
- package/dist/components/ui/tabs.d.ts.map +0 -1
- package/dist/components/ui/tabs.js +0 -59
- package/dist/components/ui/tabs.js.map +0 -1
- package/dist/components/ui/textarea.d.ts.map +0 -1
- package/dist/components/ui/textarea.js +0 -25
- package/dist/components/ui/textarea.js.map +0 -1
- package/dist/components/ui/toast-card.d.ts +0 -15
- package/dist/components/ui/toast-card.d.ts.map +0 -1
- package/dist/components/ui/toast-card.js +0 -90
- package/dist/components/ui/toast-card.js.map +0 -1
- package/dist/components/ui/toast.d.ts +0 -16
- package/dist/components/ui/toast.d.ts.map +0 -1
- package/dist/components/ui/toast.js +0 -95
- package/dist/components/ui/toast.js.map +0 -1
- package/dist/components/ui/toaster.d.ts.map +0 -1
- package/dist/components/ui/toaster.js +0 -30
- package/dist/components/ui/toaster.js.map +0 -1
- package/dist/init-KWH66PKY.js.map +0 -1
- /package/dist/{agentDocs-M3R2CPUQ.js.map → agentDocs-QZ4NOQVH.js.map} +0 -0
- /package/dist/components/{ErrorBoundary.d.ts → ErrorBoundary/ErrorBoundary.d.ts} +0 -0
- /package/dist/components/{CreateBranchDialog.d.ts → Layout/CreateBranchDialog.d.ts} +0 -0
- /package/dist/components/{FormBooleanField.d.ts → ui/FormField/FormBooleanField.d.ts} +0 -0
- /package/dist/components/{FormColorField.d.ts → ui/FormField/FormColorField.d.ts} +0 -0
- /package/dist/components/{FormDatetimeField.d.ts → ui/FormField/FormDatetimeField.d.ts} +0 -0
- /package/dist/components/{FormJsonField.d.ts → ui/FormField/FormJsonField.d.ts} +0 -0
- /package/dist/components/{FormMarkdownField.d.ts → ui/FormField/FormMarkdownField.d.ts} +0 -0
- /package/dist/components/{FormNumberField.d.ts → ui/FormField/FormNumberField.d.ts} +0 -0
- /package/dist/components/{FormSlugField.d.ts → ui/FormField/FormSlugField.d.ts} +0 -0
- /package/dist/components/{FormStringField.d.ts → ui/FormField/FormStringField.d.ts} +0 -0
- /package/dist/components/{FormStringListField.d.ts → ui/FormField/FormStringListField.d.ts} +0 -0
- /package/dist/components/{FormTextField.d.ts → ui/FormField/FormTextField.d.ts} +0 -0
- /package/dist/components/{FormUrlField.d.ts → ui/FormField/FormUrlField.d.ts} +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/ConditionEmbedEditor.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/ImageEmbedEditor.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/ReferenceEmbedEditor.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/SlashCommandMenu.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/VariableEmbedEditor.d.ts +0 -0
- /package/dist/{update-QNJRYPMC.js.map → update-QALIQG76.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../components/Chat/ToolCallCard.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../components/Chat/ToolCallCard.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { Icon } from '../ui';\n\nimport { cn } from '../../lib/utils';\n\nimport type { ChatToolCall } from './types';\n\ntype Props = {\n call: ChatToolCall;\n};\n\nexport function ToolCallCard({ call }: Props) {\n const [expanded, setExpanded] = useState(false);\n const status = call.result ? (call.result.isError ? 'error' : 'ok') : 'pending';\n\n const inputPreview = formatInputPreview(call.parsedInput, call.inputJson);\n const resultPreview = call.result ? truncate(call.result.content, 280) : 'Running…';\n\n return (\n <div className={cn('octo-tool-call-card', status === 'error' && 'octo-tool-call-card octo-tool-call-card--error')}>\n <button type=\"button\" onClick={() => setExpanded((v) => !v)} className=\"octo-tool-call-card__toggle\">\n <Icon.ChevronRight\n className={cn(\n 'octo-tool-call-card__chevron octo-icon-xs',\n expanded && 'octo-tool-call-card__chevron octo-tool-call-card__chevron--open',\n )}\n />\n <Icon.Wrench className=\"octo-tool-call-card__icon octo-icon-xs\" />\n <span className=\"octo-tool-call-card__name\">{call.name}</span>\n <span className=\"octo-tool-call-card__preview\">{inputPreview}</span>\n {status === 'pending' && <span className=\"octo-tool-call-card__status\">…</span>}\n {status === 'ok' && <Icon.CheckCircle2 className=\"octo-icon-xs octo-tool-call-card__status octo-u-text-ok\" />}\n {status === 'error' && (\n <Icon.AlertCircle className=\"octo-icon-xs octo-tool-call-card__status octo-u-text-danger\" />\n )}\n </button>\n {expanded && (\n <div className=\"octo-tool-call-card__body\">\n <div>\n <div className=\"octo-tool-call-card__section-label\">Input</div>\n <pre className=\"octo-tool-call-card__pre\">{prettyJson(call.parsedInput, call.inputJson)}</pre>\n </div>\n {call.result && (\n <div>\n <div className=\"octo-tool-call-card__section-label\">Result</div>\n <pre className=\"octo-tool-call-card__pre\">{prettyResult(resultPreview, call.result.content)}</pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction formatInputPreview(parsed: unknown, raw: string): string {\n if (parsed && typeof parsed === 'object') {\n const obj = parsed as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length === 0) return '{}';\n const first = keys[0];\n const value = obj[first];\n return `${first}=${formatScalar(value)}${keys.length > 1 ? ', …' : ''}`;\n }\n return truncate(raw || '', 60);\n}\n\nfunction formatScalar(v: unknown): string {\n if (typeof v === 'string') return JSON.stringify(truncate(v, 40));\n if (typeof v === 'number' || typeof v === 'boolean' || v === null) return String(v);\n return '…';\n}\n\nfunction prettyJson(parsed: unknown, raw: string): string {\n if (parsed === undefined) return raw || '(no input yet)';\n try {\n return JSON.stringify(parsed, null, 2);\n } catch {\n return raw || String(parsed);\n }\n}\n\nfunction prettyResult(_preview: string, content: string): string {\n try {\n const parsed = JSON.parse(content);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return content;\n }\n}\n\nfunction truncate(s: string, n: number): string {\n if (!s) return '';\n return s.length <= n ? s : `${s.slice(0, n - 1)}…`;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { NormalizedMessage } from '../../agent/providers/types';
|
|
2
|
+
import type { ChatEntry, ChatMeta, ProposalUiState, UsageSummary } from './types';
|
|
3
|
+
export declare const SESSIONS_STORAGE_KEY = "octocms:chat-sessions";
|
|
4
|
+
export declare const ACTIVE_ID_STORAGE_KEY = "octocms:chat-active-id";
|
|
5
|
+
export declare const MAX_CHAT_SESSIONS = 50;
|
|
6
|
+
export declare const TITLE_MAX_LEN = 48;
|
|
7
|
+
/** Debounce window used by `useChatHistory` before writing localStorage. */
|
|
8
|
+
export declare const PERSIST_DEBOUNCE_MS = 400;
|
|
9
|
+
export type PersistedChatStatus = 'idle' | 'error' | 'budget_exceeded' | 'stopped';
|
|
10
|
+
export type PersistedChatState = {
|
|
11
|
+
entries: ChatEntry[];
|
|
12
|
+
history: NormalizedMessage[];
|
|
13
|
+
meta: ChatMeta | null;
|
|
14
|
+
usage: UsageSummary;
|
|
15
|
+
status: PersistedChatStatus;
|
|
16
|
+
error: string | null;
|
|
17
|
+
budgetReason: 'input_tokens' | 'output_tokens' | 'spend' | 'max_turns' | 'proposal_cap' | null;
|
|
18
|
+
proposals: Record<string, ProposalUiState>;
|
|
19
|
+
};
|
|
20
|
+
export type StoredChatSession = {
|
|
21
|
+
id: string;
|
|
22
|
+
title: string;
|
|
23
|
+
updatedAt: number;
|
|
24
|
+
state: PersistedChatState;
|
|
25
|
+
};
|
|
26
|
+
export type ChatSessionListItem = {
|
|
27
|
+
id: string;
|
|
28
|
+
title: string;
|
|
29
|
+
updatedAt: number;
|
|
30
|
+
};
|
|
31
|
+
type ChatSessionsFile = {
|
|
32
|
+
version: 1;
|
|
33
|
+
sessions: StoredChatSession[];
|
|
34
|
+
};
|
|
35
|
+
export type StreamStateForPersist = {
|
|
36
|
+
entries: ChatEntry[];
|
|
37
|
+
history: NormalizedMessage[];
|
|
38
|
+
meta: ChatMeta | null;
|
|
39
|
+
usage: UsageSummary;
|
|
40
|
+
status: 'idle' | 'streaming' | 'error' | 'budget_exceeded' | 'stopped';
|
|
41
|
+
error: string | null;
|
|
42
|
+
budgetReason: PersistedChatState['budgetReason'];
|
|
43
|
+
proposals: Record<string, ProposalUiState>;
|
|
44
|
+
};
|
|
45
|
+
export declare function deriveTitle(entries: ChatEntry[]): string;
|
|
46
|
+
export declare function toPersistedState(state: StreamStateForPersist): PersistedChatState | null;
|
|
47
|
+
export declare function trimSessions(sessions: StoredChatSession[], max?: number): StoredChatSession[];
|
|
48
|
+
export declare function toSessionListItems(sessions: StoredChatSession[]): ChatSessionListItem[];
|
|
49
|
+
export declare function readSessionsFile(): ChatSessionsFile;
|
|
50
|
+
export declare function writeSessionsFile(file: ChatSessionsFile): void;
|
|
51
|
+
export declare function readActiveId(): string | null;
|
|
52
|
+
export declare function writeActiveId(id: string | null): void;
|
|
53
|
+
export declare function getSession(id: string): StoredChatSession | null;
|
|
54
|
+
export declare function upsertSession(session: StoredChatSession): void;
|
|
55
|
+
export declare function removeStoredSession(id: string): void;
|
|
56
|
+
/** @deprecated Use `removeStoredSession` — kept as alias for older imports. */
|
|
57
|
+
export declare const deleteSession: typeof removeStoredSession;
|
|
58
|
+
export declare function listSessionItems(): ChatSessionListItem[];
|
|
59
|
+
export declare function createSessionId(): string;
|
|
60
|
+
export declare function getOrCreateActiveChatId(): string;
|
|
61
|
+
export declare function setActiveChatId(id: string): void;
|
|
62
|
+
export declare function clearReservedActiveChatId(): void;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=chatStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatStorage.d.ts","sourceRoot":"","sources":["../../../components/Chat/chatStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__spreadProps,
|
|
3
|
+
__spreadValues
|
|
4
|
+
} from "../../chunk-B5LE2OEC.js";
|
|
5
|
+
const SESSIONS_STORAGE_KEY = "octocms:chat-sessions";
|
|
6
|
+
const ACTIVE_ID_STORAGE_KEY = "octocms:chat-active-id";
|
|
7
|
+
const MAX_CHAT_SESSIONS = 50;
|
|
8
|
+
const TITLE_MAX_LEN = 48;
|
|
9
|
+
const PERSIST_DEBOUNCE_MS = 400;
|
|
10
|
+
const EMPTY_FILE = { version: 1, sessions: [] };
|
|
11
|
+
function deriveTitle(entries) {
|
|
12
|
+
const firstUser = entries.find((e) => e.kind === "user");
|
|
13
|
+
if (!firstUser || firstUser.kind !== "user") return "Untitled chat";
|
|
14
|
+
const text = firstUser.text.trim();
|
|
15
|
+
if (!text) return "Untitled chat";
|
|
16
|
+
if (text.length <= TITLE_MAX_LEN) return text;
|
|
17
|
+
return `${text.slice(0, TITLE_MAX_LEN - 1)}\u2026`;
|
|
18
|
+
}
|
|
19
|
+
function toPersistedState(state) {
|
|
20
|
+
if (state.entries.length === 0 || state.status === "streaming") return null;
|
|
21
|
+
const entries = state.entries.map((e) => {
|
|
22
|
+
if (e.kind !== "assistant") return e;
|
|
23
|
+
return __spreadProps(__spreadValues({}, e), { streaming: false });
|
|
24
|
+
});
|
|
25
|
+
const status = state.status;
|
|
26
|
+
return {
|
|
27
|
+
entries,
|
|
28
|
+
history: state.history,
|
|
29
|
+
meta: state.meta,
|
|
30
|
+
usage: state.usage,
|
|
31
|
+
status,
|
|
32
|
+
error: state.error,
|
|
33
|
+
budgetReason: state.budgetReason,
|
|
34
|
+
proposals: state.proposals
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function trimSessions(sessions, max = MAX_CHAT_SESSIONS) {
|
|
38
|
+
if (sessions.length <= max) return sessions;
|
|
39
|
+
const sorted = [...sessions].sort((a, b) => b.updatedAt - a.updatedAt);
|
|
40
|
+
return sorted.slice(0, max);
|
|
41
|
+
}
|
|
42
|
+
function toSessionListItems(sessions) {
|
|
43
|
+
return [...sessions].sort((a, b) => b.updatedAt - a.updatedAt).map(({ id, title, updatedAt }) => ({ id, title, updatedAt }));
|
|
44
|
+
}
|
|
45
|
+
function parseSessionsFile(raw) {
|
|
46
|
+
if (!raw) return EMPTY_FILE;
|
|
47
|
+
try {
|
|
48
|
+
const parsed = JSON.parse(raw);
|
|
49
|
+
if (typeof parsed !== "object" || parsed === null || parsed.version !== 1 || !Array.isArray(parsed.sessions)) {
|
|
50
|
+
return EMPTY_FILE;
|
|
51
|
+
}
|
|
52
|
+
return parsed;
|
|
53
|
+
} catch (e) {
|
|
54
|
+
return EMPTY_FILE;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function readSessionsFile() {
|
|
58
|
+
if (typeof window === "undefined") return EMPTY_FILE;
|
|
59
|
+
return parseSessionsFile(window.localStorage.getItem(SESSIONS_STORAGE_KEY));
|
|
60
|
+
}
|
|
61
|
+
function writeSessionsFile(file) {
|
|
62
|
+
if (typeof window === "undefined") return;
|
|
63
|
+
let sessions = trimSessions(file.sessions);
|
|
64
|
+
for (; ; ) {
|
|
65
|
+
try {
|
|
66
|
+
window.localStorage.setItem(SESSIONS_STORAGE_KEY, JSON.stringify({ version: 1, sessions }));
|
|
67
|
+
return;
|
|
68
|
+
} catch (err) {
|
|
69
|
+
const isQuota = err instanceof DOMException && (err.name === "QuotaExceededError" || err.code === 22);
|
|
70
|
+
if (!isQuota || sessions.length === 0) return;
|
|
71
|
+
sessions = sessions.slice(0, -1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function readActiveId() {
|
|
76
|
+
if (typeof window === "undefined") return null;
|
|
77
|
+
const id = window.localStorage.getItem(ACTIVE_ID_STORAGE_KEY);
|
|
78
|
+
return id && id.length > 0 ? id : null;
|
|
79
|
+
}
|
|
80
|
+
function writeActiveId(id) {
|
|
81
|
+
if (typeof window === "undefined") return;
|
|
82
|
+
try {
|
|
83
|
+
if (id) window.localStorage.setItem(ACTIVE_ID_STORAGE_KEY, id);
|
|
84
|
+
else window.localStorage.removeItem(ACTIVE_ID_STORAGE_KEY);
|
|
85
|
+
} catch (e) {
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function getSession(id) {
|
|
89
|
+
var _a;
|
|
90
|
+
const file = readSessionsFile();
|
|
91
|
+
return (_a = file.sessions.find((s) => s.id === id)) != null ? _a : null;
|
|
92
|
+
}
|
|
93
|
+
function upsertSession(session) {
|
|
94
|
+
const file = readSessionsFile();
|
|
95
|
+
const idx = file.sessions.findIndex((s) => s.id === session.id);
|
|
96
|
+
const next = idx === -1 ? [...file.sessions, session] : file.sessions.map((s, i) => i === idx ? session : s);
|
|
97
|
+
writeSessionsFile({ version: 1, sessions: next });
|
|
98
|
+
}
|
|
99
|
+
function removeStoredSession(id) {
|
|
100
|
+
const file = readSessionsFile();
|
|
101
|
+
writeSessionsFile({ version: 1, sessions: file.sessions.filter((s) => s.id !== id) });
|
|
102
|
+
}
|
|
103
|
+
const deleteSession = removeStoredSession;
|
|
104
|
+
function listSessionItems() {
|
|
105
|
+
return toSessionListItems(readSessionsFile().sessions);
|
|
106
|
+
}
|
|
107
|
+
function createSessionId() {
|
|
108
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
109
|
+
return crypto.randomUUID();
|
|
110
|
+
}
|
|
111
|
+
return `chat_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
|
|
112
|
+
}
|
|
113
|
+
let reservedActiveId = null;
|
|
114
|
+
function getOrCreateActiveChatId() {
|
|
115
|
+
const stored = readActiveId();
|
|
116
|
+
if (stored) return stored;
|
|
117
|
+
if (reservedActiveId) return reservedActiveId;
|
|
118
|
+
const id = createSessionId();
|
|
119
|
+
reservedActiveId = id;
|
|
120
|
+
writeActiveId(id);
|
|
121
|
+
return id;
|
|
122
|
+
}
|
|
123
|
+
function setActiveChatId(id) {
|
|
124
|
+
reservedActiveId = id;
|
|
125
|
+
writeActiveId(id);
|
|
126
|
+
}
|
|
127
|
+
function clearReservedActiveChatId() {
|
|
128
|
+
reservedActiveId = null;
|
|
129
|
+
}
|
|
130
|
+
export {
|
|
131
|
+
ACTIVE_ID_STORAGE_KEY,
|
|
132
|
+
MAX_CHAT_SESSIONS,
|
|
133
|
+
PERSIST_DEBOUNCE_MS,
|
|
134
|
+
SESSIONS_STORAGE_KEY,
|
|
135
|
+
TITLE_MAX_LEN,
|
|
136
|
+
clearReservedActiveChatId,
|
|
137
|
+
createSessionId,
|
|
138
|
+
deleteSession,
|
|
139
|
+
deriveTitle,
|
|
140
|
+
getOrCreateActiveChatId,
|
|
141
|
+
getSession,
|
|
142
|
+
listSessionItems,
|
|
143
|
+
readActiveId,
|
|
144
|
+
readSessionsFile,
|
|
145
|
+
removeStoredSession,
|
|
146
|
+
setActiveChatId,
|
|
147
|
+
toPersistedState,
|
|
148
|
+
toSessionListItems,
|
|
149
|
+
trimSessions,
|
|
150
|
+
upsertSession,
|
|
151
|
+
writeActiveId,
|
|
152
|
+
writeSessionsFile
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=chatStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../components/Chat/chatStorage.ts"],"sourcesContent":["import type { NormalizedMessage } from '../../agent/providers/types';\n\nimport type { ChatEntry, ChatMeta, ProposalUiState, UsageSummary } from './types';\n\nexport const SESSIONS_STORAGE_KEY = 'octocms:chat-sessions';\nexport const ACTIVE_ID_STORAGE_KEY = 'octocms:chat-active-id';\nexport const MAX_CHAT_SESSIONS = 50;\nexport const TITLE_MAX_LEN = 48;\n/** Debounce window used by `useChatHistory` before writing localStorage. */\nexport const PERSIST_DEBOUNCE_MS = 400;\n\nexport type PersistedChatStatus = 'idle' | 'error' | 'budget_exceeded' | 'stopped';\n\nexport type PersistedChatState = {\n entries: ChatEntry[];\n history: NormalizedMessage[];\n meta: ChatMeta | null;\n usage: UsageSummary;\n status: PersistedChatStatus;\n error: string | null;\n budgetReason: 'input_tokens' | 'output_tokens' | 'spend' | 'max_turns' | 'proposal_cap' | null;\n proposals: Record<string, ProposalUiState>;\n};\n\nexport type StoredChatSession = {\n id: string;\n title: string;\n updatedAt: number;\n state: PersistedChatState;\n};\n\nexport type ChatSessionListItem = {\n id: string;\n title: string;\n updatedAt: number;\n};\n\ntype ChatSessionsFile = {\n version: 1;\n sessions: StoredChatSession[];\n};\n\nconst EMPTY_FILE: ChatSessionsFile = { version: 1, sessions: [] };\n\nexport type StreamStateForPersist = {\n entries: ChatEntry[];\n history: NormalizedMessage[];\n meta: ChatMeta | null;\n usage: UsageSummary;\n status: 'idle' | 'streaming' | 'error' | 'budget_exceeded' | 'stopped';\n error: string | null;\n budgetReason: PersistedChatState['budgetReason'];\n proposals: Record<string, ProposalUiState>;\n};\n\nexport function deriveTitle(entries: ChatEntry[]): string {\n const firstUser = entries.find((e) => e.kind === 'user');\n if (!firstUser || firstUser.kind !== 'user') return 'Untitled chat';\n const text = firstUser.text.trim();\n if (!text) return 'Untitled chat';\n if (text.length <= TITLE_MAX_LEN) return text;\n return `${text.slice(0, TITLE_MAX_LEN - 1)}…`;\n}\n\nexport function toPersistedState(state: StreamStateForPersist): PersistedChatState | null {\n if (state.entries.length === 0 || state.status === 'streaming') return null;\n\n const entries = state.entries.map((e) => {\n if (e.kind !== 'assistant') return e;\n return { ...e, streaming: false };\n });\n\n const status = state.status as PersistedChatStatus;\n\n return {\n entries,\n history: state.history,\n meta: state.meta,\n usage: state.usage,\n status,\n error: state.error,\n budgetReason: state.budgetReason,\n proposals: state.proposals,\n };\n}\n\nexport function trimSessions(sessions: StoredChatSession[], max: number = MAX_CHAT_SESSIONS): StoredChatSession[] {\n if (sessions.length <= max) return sessions;\n const sorted = [...sessions].sort((a, b) => b.updatedAt - a.updatedAt);\n return sorted.slice(0, max);\n}\n\nexport function toSessionListItems(sessions: StoredChatSession[]): ChatSessionListItem[] {\n return [...sessions]\n .sort((a, b) => b.updatedAt - a.updatedAt)\n .map(({ id, title, updatedAt }) => ({ id, title, updatedAt }));\n}\n\nfunction parseSessionsFile(raw: string | null): ChatSessionsFile {\n if (!raw) return EMPTY_FILE;\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (\n typeof parsed !== 'object' ||\n parsed === null ||\n (parsed as ChatSessionsFile).version !== 1 ||\n !Array.isArray((parsed as ChatSessionsFile).sessions)\n ) {\n return EMPTY_FILE;\n }\n return parsed as ChatSessionsFile;\n } catch {\n return EMPTY_FILE;\n }\n}\n\nexport function readSessionsFile(): ChatSessionsFile {\n if (typeof window === 'undefined') return EMPTY_FILE;\n return parseSessionsFile(window.localStorage.getItem(SESSIONS_STORAGE_KEY));\n}\n\nexport function writeSessionsFile(file: ChatSessionsFile): void {\n if (typeof window === 'undefined') return;\n let sessions = trimSessions(file.sessions);\n for (;;) {\n try {\n window.localStorage.setItem(SESSIONS_STORAGE_KEY, JSON.stringify({ version: 1, sessions }));\n return;\n } catch (err) {\n const isQuota = err instanceof DOMException && (err.name === 'QuotaExceededError' || err.code === 22);\n if (!isQuota || sessions.length === 0) return;\n sessions = sessions.slice(0, -1);\n }\n }\n}\n\nexport function readActiveId(): string | null {\n if (typeof window === 'undefined') return null;\n const id = window.localStorage.getItem(ACTIVE_ID_STORAGE_KEY);\n return id && id.length > 0 ? id : null;\n}\n\nexport function writeActiveId(id: string | null): void {\n if (typeof window === 'undefined') return;\n try {\n if (id) window.localStorage.setItem(ACTIVE_ID_STORAGE_KEY, id);\n else window.localStorage.removeItem(ACTIVE_ID_STORAGE_KEY);\n } catch {\n /* quota / private mode */\n }\n}\n\nexport function getSession(id: string): StoredChatSession | null {\n const file = readSessionsFile();\n return file.sessions.find((s) => s.id === id) ?? null;\n}\n\nexport function upsertSession(session: StoredChatSession): void {\n const file = readSessionsFile();\n const idx = file.sessions.findIndex((s) => s.id === session.id);\n const next = idx === -1 ? [...file.sessions, session] : file.sessions.map((s, i) => (i === idx ? session : s));\n writeSessionsFile({ version: 1, sessions: next });\n}\n\nexport function removeStoredSession(id: string): void {\n const file = readSessionsFile();\n writeSessionsFile({ version: 1, sessions: file.sessions.filter((s) => s.id !== id) });\n}\n\n/** @deprecated Use `removeStoredSession` — kept as alias for older imports. */\nexport const deleteSession = removeStoredSession;\n\nexport function listSessionItems(): ChatSessionListItem[] {\n return toSessionListItems(readSessionsFile().sessions);\n}\n\nexport function createSessionId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `chat_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\n/** In-flight active id for this tab (avoids duplicate ids before localStorage write). */\nlet reservedActiveId: string | null = null;\n\nexport function getOrCreateActiveChatId(): string {\n const stored = readActiveId();\n if (stored) return stored;\n if (reservedActiveId) return reservedActiveId;\n const id = createSessionId();\n reservedActiveId = id;\n writeActiveId(id);\n return id;\n}\n\nexport function setActiveChatId(id: string): void {\n reservedActiveId = id;\n writeActiveId(id);\n}\n\nexport function clearReservedActiveChatId(): void {\n reservedActiveId = null;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ChatSessionListItem, type PersistedChatState } from './chatStorage';
|
|
2
|
+
import { type UseChatStreamReturn } from './useChatStream';
|
|
3
|
+
export type UseChatHistoryReturn = UseChatStreamReturn & {
|
|
4
|
+
sessions: ChatSessionListItem[];
|
|
5
|
+
activeId: string | null;
|
|
6
|
+
newConversation: () => void;
|
|
7
|
+
selectSession: (id: string) => void;
|
|
8
|
+
deleteSession: (id: string) => void;
|
|
9
|
+
};
|
|
10
|
+
export declare function useChatHistory(endpoint?: string): UseChatHistoryReturn;
|
|
11
|
+
export type { PersistedChatState };
|
|
12
|
+
//# sourceMappingURL=useChatHistory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChatHistory.d.ts","sourceRoot":"","sources":["../../../components/Chat/useChatHistory.ts"],"names":[],"mappings":"AAIA,OAAO,EAcL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAqB1E,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAMF,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAsKtE;AAED,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
__spreadProps,
|
|
4
|
+
__spreadValues
|
|
5
|
+
} from "../../chunk-B5LE2OEC.js";
|
|
6
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
7
|
+
import {
|
|
8
|
+
clearReservedActiveChatId,
|
|
9
|
+
createSessionId,
|
|
10
|
+
removeStoredSession,
|
|
11
|
+
deriveTitle,
|
|
12
|
+
getOrCreateActiveChatId,
|
|
13
|
+
getSession,
|
|
14
|
+
listSessionItems,
|
|
15
|
+
PERSIST_DEBOUNCE_MS,
|
|
16
|
+
readActiveId,
|
|
17
|
+
SESSIONS_STORAGE_KEY,
|
|
18
|
+
setActiveChatId,
|
|
19
|
+
upsertSession,
|
|
20
|
+
writeActiveId
|
|
21
|
+
} from "./chatStorage";
|
|
22
|
+
import { useChatStream } from "./useChatStream";
|
|
23
|
+
let persistTimer = null;
|
|
24
|
+
let persistSuspended = 0;
|
|
25
|
+
function cancelScheduledPersist() {
|
|
26
|
+
if (persistTimer) {
|
|
27
|
+
clearTimeout(persistTimer);
|
|
28
|
+
persistTimer = null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function schedulePersist(fn) {
|
|
32
|
+
cancelScheduledPersist();
|
|
33
|
+
persistTimer = setTimeout(() => {
|
|
34
|
+
persistTimer = null;
|
|
35
|
+
fn();
|
|
36
|
+
}, PERSIST_DEBOUNCE_MS);
|
|
37
|
+
}
|
|
38
|
+
function refreshSessionsList() {
|
|
39
|
+
return listSessionItems();
|
|
40
|
+
}
|
|
41
|
+
function useChatHistory(endpoint) {
|
|
42
|
+
const stream = useChatStream(endpoint);
|
|
43
|
+
const [sessions, setSessions] = useState([]);
|
|
44
|
+
const [activeId, setActiveId] = useState(null);
|
|
45
|
+
const activeIdRef = useRef(null);
|
|
46
|
+
const mountedRef = useRef(false);
|
|
47
|
+
activeIdRef.current = activeId;
|
|
48
|
+
const ensureActiveId = useCallback(() => {
|
|
49
|
+
if (activeIdRef.current) return activeIdRef.current;
|
|
50
|
+
const id = getOrCreateActiveChatId();
|
|
51
|
+
activeIdRef.current = id;
|
|
52
|
+
setActiveId(id);
|
|
53
|
+
return id;
|
|
54
|
+
}, []);
|
|
55
|
+
const persistNow = useCallback(() => {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
if (persistSuspended > 0) return;
|
|
58
|
+
const id = (_a = readActiveId()) != null ? _a : activeIdRef.current;
|
|
59
|
+
if (!id) return;
|
|
60
|
+
const snapshot = stream.getSnapshot();
|
|
61
|
+
if (!snapshot) return;
|
|
62
|
+
const existing = getSession(id);
|
|
63
|
+
const title = (_b = existing == null ? void 0 : existing.title) != null ? _b : deriveTitle(snapshot.entries);
|
|
64
|
+
const session = {
|
|
65
|
+
id,
|
|
66
|
+
title,
|
|
67
|
+
updatedAt: Date.now(),
|
|
68
|
+
state: snapshot
|
|
69
|
+
};
|
|
70
|
+
upsertSession(session);
|
|
71
|
+
setSessions(refreshSessionsList());
|
|
72
|
+
}, [stream]);
|
|
73
|
+
const schedulePersistCallback = useCallback(() => {
|
|
74
|
+
schedulePersist(persistNow);
|
|
75
|
+
}, [persistNow]);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
setSessions(refreshSessionsList());
|
|
78
|
+
const storedActive = readActiveId();
|
|
79
|
+
if (storedActive) {
|
|
80
|
+
const stored = getSession(storedActive);
|
|
81
|
+
if (stored) {
|
|
82
|
+
activeIdRef.current = storedActive;
|
|
83
|
+
setActiveId(storedActive);
|
|
84
|
+
stream.hydrate(stored.state);
|
|
85
|
+
} else {
|
|
86
|
+
writeActiveId(null);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
mountedRef.current = true;
|
|
90
|
+
return () => {
|
|
91
|
+
cancelScheduledPersist();
|
|
92
|
+
};
|
|
93
|
+
}, []);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (!mountedRef.current) return;
|
|
96
|
+
if (stream.status === "streaming") return;
|
|
97
|
+
if (stream.entries.length === 0) return;
|
|
98
|
+
ensureActiveId();
|
|
99
|
+
schedulePersistCallback();
|
|
100
|
+
}, [
|
|
101
|
+
stream.entries,
|
|
102
|
+
stream.history,
|
|
103
|
+
stream.status,
|
|
104
|
+
stream.proposals,
|
|
105
|
+
stream.usage,
|
|
106
|
+
stream.error,
|
|
107
|
+
stream.budgetReason,
|
|
108
|
+
ensureActiveId,
|
|
109
|
+
schedulePersistCallback
|
|
110
|
+
]);
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
const onStorage = (e) => {
|
|
113
|
+
if (e.key === SESSIONS_STORAGE_KEY) setSessions(refreshSessionsList());
|
|
114
|
+
};
|
|
115
|
+
window.addEventListener("storage", onStorage);
|
|
116
|
+
return () => window.removeEventListener("storage", onStorage);
|
|
117
|
+
}, []);
|
|
118
|
+
const newConversation = useCallback(() => {
|
|
119
|
+
cancelScheduledPersist();
|
|
120
|
+
persistNow();
|
|
121
|
+
stream.reset();
|
|
122
|
+
clearReservedActiveChatId();
|
|
123
|
+
const id = createSessionId();
|
|
124
|
+
setActiveChatId(id);
|
|
125
|
+
activeIdRef.current = id;
|
|
126
|
+
setActiveId(id);
|
|
127
|
+
}, [stream, persistNow]);
|
|
128
|
+
const selectSession = useCallback(
|
|
129
|
+
(id) => {
|
|
130
|
+
if (id === activeIdRef.current) return;
|
|
131
|
+
cancelScheduledPersist();
|
|
132
|
+
persistNow();
|
|
133
|
+
const stored = getSession(id);
|
|
134
|
+
if (!stored) return;
|
|
135
|
+
stream.hydrate(stored.state);
|
|
136
|
+
setActiveChatId(id);
|
|
137
|
+
activeIdRef.current = id;
|
|
138
|
+
setActiveId(id);
|
|
139
|
+
},
|
|
140
|
+
[stream, persistNow]
|
|
141
|
+
);
|
|
142
|
+
const deleteSession = useCallback(
|
|
143
|
+
(id) => {
|
|
144
|
+
var _a;
|
|
145
|
+
persistSuspended += 1;
|
|
146
|
+
cancelScheduledPersist();
|
|
147
|
+
const active = (_a = activeIdRef.current) != null ? _a : readActiveId();
|
|
148
|
+
const wasActive = active === id;
|
|
149
|
+
removeStoredSession(id);
|
|
150
|
+
if (wasActive) {
|
|
151
|
+
stream.reset();
|
|
152
|
+
}
|
|
153
|
+
const nextList = refreshSessionsList();
|
|
154
|
+
if (wasActive) {
|
|
155
|
+
if (nextList.length > 0) {
|
|
156
|
+
const newest = nextList[0];
|
|
157
|
+
const stored = getSession(newest.id);
|
|
158
|
+
if (stored) {
|
|
159
|
+
stream.hydrate(stored.state);
|
|
160
|
+
setActiveChatId(newest.id);
|
|
161
|
+
activeIdRef.current = newest.id;
|
|
162
|
+
setActiveId(newest.id);
|
|
163
|
+
}
|
|
164
|
+
} else {
|
|
165
|
+
clearReservedActiveChatId();
|
|
166
|
+
const newId = createSessionId();
|
|
167
|
+
setActiveChatId(newId);
|
|
168
|
+
activeIdRef.current = newId;
|
|
169
|
+
setActiveId(newId);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
setSessions(refreshSessionsList());
|
|
173
|
+
persistSuspended -= 1;
|
|
174
|
+
},
|
|
175
|
+
[stream]
|
|
176
|
+
);
|
|
177
|
+
const send = useCallback(
|
|
178
|
+
async (text, files) => {
|
|
179
|
+
ensureActiveId();
|
|
180
|
+
await stream.send(text, files);
|
|
181
|
+
},
|
|
182
|
+
[stream, ensureActiveId]
|
|
183
|
+
);
|
|
184
|
+
return __spreadProps(__spreadValues({}, stream), {
|
|
185
|
+
send,
|
|
186
|
+
sessions,
|
|
187
|
+
activeId,
|
|
188
|
+
newConversation,
|
|
189
|
+
selectSession,
|
|
190
|
+
deleteSession
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
export {
|
|
194
|
+
useChatHistory
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=useChatHistory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../components/Chat/useChatHistory.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport {\n clearReservedActiveChatId,\n createSessionId,\n removeStoredSession,\n deriveTitle,\n getOrCreateActiveChatId,\n getSession,\n listSessionItems,\n PERSIST_DEBOUNCE_MS,\n readActiveId,\n SESSIONS_STORAGE_KEY,\n setActiveChatId,\n upsertSession,\n writeActiveId,\n type ChatSessionListItem,\n type PersistedChatState,\n type StoredChatSession,\n} from './chatStorage';\nimport { useChatStream, type UseChatStreamReturn } from './useChatStream';\n\n/** One debounced writer per tab — avoids duplicate sessions under React Strict Mode. */\nlet persistTimer: ReturnType<typeof setTimeout> | null = null;\nlet persistSuspended = 0;\n\nfunction cancelScheduledPersist(): void {\n if (persistTimer) {\n clearTimeout(persistTimer);\n persistTimer = null;\n }\n}\n\nfunction schedulePersist(fn: () => void): void {\n cancelScheduledPersist();\n persistTimer = setTimeout(() => {\n persistTimer = null;\n fn();\n }, PERSIST_DEBOUNCE_MS);\n}\n\nexport type UseChatHistoryReturn = UseChatStreamReturn & {\n sessions: ChatSessionListItem[];\n activeId: string | null;\n newConversation: () => void;\n selectSession: (id: string) => void;\n deleteSession: (id: string) => void;\n};\n\nfunction refreshSessionsList(): ChatSessionListItem[] {\n return listSessionItems();\n}\n\nexport function useChatHistory(endpoint?: string): UseChatHistoryReturn {\n const stream = useChatStream(endpoint);\n const [sessions, setSessions] = useState<ChatSessionListItem[]>([]);\n const [activeId, setActiveId] = useState<string | null>(null);\n const activeIdRef = useRef<string | null>(null);\n const mountedRef = useRef(false);\n\n activeIdRef.current = activeId;\n\n const ensureActiveId = useCallback((): string => {\n if (activeIdRef.current) return activeIdRef.current;\n const id = getOrCreateActiveChatId();\n activeIdRef.current = id;\n setActiveId(id);\n return id;\n }, []);\n\n const persistNow = useCallback(() => {\n if (persistSuspended > 0) return;\n const id = readActiveId() ?? activeIdRef.current;\n if (!id) return;\n const snapshot = stream.getSnapshot();\n if (!snapshot) return;\n const existing = getSession(id);\n const title = existing?.title ?? deriveTitle(snapshot.entries);\n const session: StoredChatSession = {\n id,\n title,\n updatedAt: Date.now(),\n state: snapshot,\n };\n upsertSession(session);\n setSessions(refreshSessionsList());\n }, [stream]);\n\n const schedulePersistCallback = useCallback(() => {\n schedulePersist(persistNow);\n }, [persistNow]);\n\n // Initial load from localStorage\n useEffect(() => {\n setSessions(refreshSessionsList());\n const storedActive = readActiveId();\n if (storedActive) {\n const stored = getSession(storedActive);\n if (stored) {\n activeIdRef.current = storedActive;\n setActiveId(storedActive);\n stream.hydrate(stored.state);\n } else {\n writeActiveId(null);\n }\n }\n mountedRef.current = true;\n return () => {\n cancelScheduledPersist();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only hydrate\n }, []);\n\n // Debounced persist when conversation state settles\n useEffect(() => {\n if (!mountedRef.current) return;\n if (stream.status === 'streaming') return;\n if (stream.entries.length === 0) return;\n ensureActiveId();\n schedulePersistCallback();\n }, [\n stream.entries,\n stream.history,\n stream.status,\n stream.proposals,\n stream.usage,\n stream.error,\n stream.budgetReason,\n ensureActiveId,\n schedulePersistCallback,\n ]);\n\n // Cross-tab session list refresh\n useEffect(() => {\n const onStorage = (e: StorageEvent) => {\n if (e.key === SESSIONS_STORAGE_KEY) setSessions(refreshSessionsList());\n };\n window.addEventListener('storage', onStorage);\n return () => window.removeEventListener('storage', onStorage);\n }, []);\n\n const newConversation = useCallback(() => {\n cancelScheduledPersist();\n persistNow();\n stream.reset();\n clearReservedActiveChatId();\n const id = createSessionId();\n setActiveChatId(id);\n activeIdRef.current = id;\n setActiveId(id);\n }, [stream, persistNow]);\n\n const selectSession = useCallback(\n (id: string) => {\n if (id === activeIdRef.current) return;\n cancelScheduledPersist();\n persistNow();\n const stored = getSession(id);\n if (!stored) return;\n stream.hydrate(stored.state);\n setActiveChatId(id);\n activeIdRef.current = id;\n setActiveId(id);\n },\n [stream, persistNow],\n );\n\n const deleteSession = useCallback(\n (id: string) => {\n persistSuspended += 1;\n cancelScheduledPersist();\n const active = activeIdRef.current ?? readActiveId();\n const wasActive = active === id;\n removeStoredSession(id);\n if (wasActive) {\n stream.reset();\n }\n const nextList = refreshSessionsList();\n if (wasActive) {\n if (nextList.length > 0) {\n const newest = nextList[0];\n const stored = getSession(newest.id);\n if (stored) {\n stream.hydrate(stored.state);\n setActiveChatId(newest.id);\n activeIdRef.current = newest.id;\n setActiveId(newest.id);\n }\n } else {\n clearReservedActiveChatId();\n const newId = createSessionId();\n setActiveChatId(newId);\n activeIdRef.current = newId;\n setActiveId(newId);\n }\n }\n setSessions(refreshSessionsList());\n persistSuspended -= 1;\n },\n [stream],\n );\n\n const send = useCallback(\n async (text: string, files?: File[]) => {\n ensureActiveId();\n await stream.send(text, files);\n },\n [stream, ensureActiveId],\n );\n\n return {\n ...stream,\n send,\n sessions,\n activeId,\n newConversation,\n selectSession,\n deleteSession,\n };\n}\n\nexport type { PersistedChatState };\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AttachmentDiagnostic } from '../../agent/attachments';
|
|
2
2
|
import type { NormalizedMessage } from '../../agent/providers/types';
|
|
3
3
|
import type { Proposal } from '../../agent/proposals';
|
|
4
|
+
import type { PersistedChatState } from './chatStorage';
|
|
4
5
|
import type { ChatEntry, ChatMeta, ProposalUiState, UsageSummary } from './types';
|
|
5
6
|
type State = {
|
|
6
7
|
entries: ChatEntry[];
|
|
@@ -19,6 +20,8 @@ type State = {
|
|
|
19
20
|
};
|
|
20
21
|
export type UseChatStreamReturn = {
|
|
21
22
|
entries: ChatEntry[];
|
|
23
|
+
/** Wire history sent to the chat API on the next request. */
|
|
24
|
+
history: NormalizedMessage[];
|
|
22
25
|
meta: ChatMeta | null;
|
|
23
26
|
usage: UsageSummary;
|
|
24
27
|
status: State['status'];
|
|
@@ -38,7 +41,10 @@ export type UseChatStreamReturn = {
|
|
|
38
41
|
acceptProposal(proposalId: string): Promise<void>;
|
|
39
42
|
rejectProposal(proposalId: string, reason?: string): Promise<void>;
|
|
40
43
|
acceptAllPending(assistantEntryId: string): Promise<void>;
|
|
44
|
+
hydrate(snapshot: PersistedChatState): void;
|
|
45
|
+
getSnapshot(): PersistedChatState | null;
|
|
41
46
|
};
|
|
42
47
|
export declare function useChatStream(endpoint?: string): UseChatStreamReturn;
|
|
48
|
+
export type { PersistedChatState };
|
|
43
49
|
export type { Proposal };
|
|
44
50
|
//# sourceMappingURL=useChatStream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatStream.d.ts","sourceRoot":"","sources":["../../../components/Chat/useChatStream.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAgC,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEhH,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,0EAA0E;IAC1E,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAAC;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yCAAyC;IACzC,YAAY,EAAE,cAAc,GAAG,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC;IAC/F,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,4EAA4E;IAC5E,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;CAC/C,CAAC;
|
|
1
|
+
{"version":3,"file":"useChatStream.d.ts","sourceRoot":"","sources":["../../../components/Chat/useChatStream.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAgC,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEhH,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,0EAA0E;IAC1E,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAAC;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yCAAyC;IACzC,YAAY,EAAE,cAAc,GAAG,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC;IAC/F,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,4EAA4E;IAC5E,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;CAC/C,CAAC;AAmPF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,6DAA6D;IAC7D,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;OAKG;IACH,IAAI,IAAI,IAAI,CAAC;IACb,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5C,WAAW,IAAI,kBAAkB,GAAG,IAAI,CAAC;CAC1C,CAAC;AAEF,wBAAgB,aAAa,CAAC,QAAQ,GAAE,MAAqB,GAAG,mBAAmB,CAsSlF;AAED,YAAY,EAAE,kBAAkB,EAAE,CAAC;AA2CnC,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { useQueryClient } from "@tanstack/react-query";
|
|
|
7
7
|
import { useCallback, useEffect, useReducer, useRef } from "react";
|
|
8
8
|
import { acceptProposalAction, rejectProposalAction } from "../../admin/actions/agent";
|
|
9
9
|
import { invalidateAfterMutationAsync } from "../../admin/query/invalidate";
|
|
10
|
+
import { toPersistedState } from "./chatStorage";
|
|
10
11
|
const ZERO_USAGE = { inputTokens: 0, outputTokens: 0, cachedInputTokens: 0, totalCostUSD: 0 };
|
|
11
12
|
const initial = {
|
|
12
13
|
entries: [],
|
|
@@ -23,6 +24,18 @@ function reducer(state, action) {
|
|
|
23
24
|
switch (action.type) {
|
|
24
25
|
case "reset":
|
|
25
26
|
return __spreadProps(__spreadValues({}, initial), { meta: state.meta });
|
|
27
|
+
case "hydrate":
|
|
28
|
+
return __spreadProps(__spreadValues({}, initial), {
|
|
29
|
+
entries: action.snapshot.entries,
|
|
30
|
+
history: action.snapshot.history,
|
|
31
|
+
meta: action.snapshot.meta,
|
|
32
|
+
usage: action.snapshot.usage,
|
|
33
|
+
status: action.snapshot.status,
|
|
34
|
+
error: action.snapshot.error,
|
|
35
|
+
budgetReason: action.snapshot.budgetReason,
|
|
36
|
+
proposals: action.snapshot.proposals,
|
|
37
|
+
attachmentDiagnostics: []
|
|
38
|
+
});
|
|
26
39
|
case "submit": {
|
|
27
40
|
const userEntry = __spreadValues({
|
|
28
41
|
id: action.entryId,
|
|
@@ -197,12 +210,25 @@ function useChatStream(endpoint = "/api/agent") {
|
|
|
197
210
|
const stateRef = useRef(state);
|
|
198
211
|
stateRef.current = state;
|
|
199
212
|
const inFlightRef = useRef(null);
|
|
200
|
-
const
|
|
213
|
+
const abortInFlight = useCallback(() => {
|
|
201
214
|
if (inFlightRef.current) {
|
|
202
215
|
inFlightRef.current.controller.abort();
|
|
203
216
|
inFlightRef.current = null;
|
|
204
217
|
}
|
|
218
|
+
}, []);
|
|
219
|
+
const reset = useCallback(() => {
|
|
220
|
+
abortInFlight();
|
|
205
221
|
dispatch({ type: "reset" });
|
|
222
|
+
}, [abortInFlight]);
|
|
223
|
+
const hydrate = useCallback(
|
|
224
|
+
(snapshot) => {
|
|
225
|
+
abortInFlight();
|
|
226
|
+
dispatch({ type: "hydrate", snapshot });
|
|
227
|
+
},
|
|
228
|
+
[abortInFlight]
|
|
229
|
+
);
|
|
230
|
+
const getSnapshot = useCallback(() => {
|
|
231
|
+
return toPersistedState(stateRef.current);
|
|
206
232
|
}, []);
|
|
207
233
|
useEffect(() => {
|
|
208
234
|
return () => {
|
|
@@ -383,6 +409,7 @@ function useChatStream(endpoint = "/api/agent") {
|
|
|
383
409
|
);
|
|
384
410
|
return {
|
|
385
411
|
entries: state.entries,
|
|
412
|
+
history: state.history,
|
|
386
413
|
meta: state.meta,
|
|
387
414
|
usage: state.usage,
|
|
388
415
|
status: state.status,
|
|
@@ -395,7 +422,9 @@ function useChatStream(endpoint = "/api/agent") {
|
|
|
395
422
|
stop,
|
|
396
423
|
acceptProposal,
|
|
397
424
|
rejectProposal,
|
|
398
|
-
acceptAllPending
|
|
425
|
+
acceptAllPending,
|
|
426
|
+
hydrate,
|
|
427
|
+
getSnapshot
|
|
399
428
|
};
|
|
400
429
|
}
|
|
401
430
|
function buildMultipartBody(messages, files) {
|