@stigmer/react 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/billing/AutoRechargeCard.d.ts +38 -0
- package/billing/AutoRechargeCard.d.ts.map +1 -0
- package/billing/AutoRechargeCard.js +90 -0
- package/billing/AutoRechargeCard.js.map +1 -0
- package/billing/BillingSection.d.ts +32 -0
- package/billing/BillingSection.d.ts.map +1 -0
- package/billing/BillingSection.js +81 -0
- package/billing/BillingSection.js.map +1 -0
- package/billing/CreditBalanceCard.d.ts +25 -0
- package/billing/CreditBalanceCard.d.ts.map +1 -0
- package/billing/CreditBalanceCard.js +28 -0
- package/billing/CreditBalanceCard.js.map +1 -0
- package/billing/CreditLedgerTable.d.ts +22 -0
- package/billing/CreditLedgerTable.d.ts.map +1 -0
- package/billing/CreditLedgerTable.js +75 -0
- package/billing/CreditLedgerTable.js.map +1 -0
- package/billing/CreditPackGrid.d.ts +31 -0
- package/billing/CreditPackGrid.d.ts.map +1 -0
- package/billing/CreditPackGrid.js +35 -0
- package/billing/CreditPackGrid.js.map +1 -0
- package/billing/LowBalanceBanner.d.ts +26 -0
- package/billing/LowBalanceBanner.d.ts.map +1 -0
- package/billing/LowBalanceBanner.js +33 -0
- package/billing/LowBalanceBanner.js.map +1 -0
- package/billing/PaymentMethodCard.d.ts +35 -0
- package/billing/PaymentMethodCard.d.ts.map +1 -0
- package/billing/PaymentMethodCard.js +48 -0
- package/billing/PaymentMethodCard.js.map +1 -0
- package/billing/credit-packs.d.ts +25 -0
- package/billing/credit-packs.d.ts.map +1 -0
- package/billing/credit-packs.js +39 -0
- package/billing/credit-packs.js.map +1 -0
- package/billing/format.d.ts +39 -0
- package/billing/format.d.ts.map +1 -0
- package/billing/format.js +90 -0
- package/billing/format.js.map +1 -0
- package/billing/index.d.ts +32 -0
- package/billing/index.d.ts.map +1 -0
- package/billing/index.js +21 -0
- package/billing/index.js.map +1 -0
- package/billing/useBillingAccount.d.ts +40 -0
- package/billing/useBillingAccount.d.ts.map +1 -0
- package/billing/useBillingAccount.js +35 -0
- package/billing/useBillingAccount.js.map +1 -0
- package/billing/useBillingUsageReport.d.ts +42 -0
- package/billing/useBillingUsageReport.d.ts.map +1 -0
- package/billing/useBillingUsageReport.js +43 -0
- package/billing/useBillingUsageReport.js.map +1 -0
- package/billing/useCreateBillingPortalSession.d.ts +35 -0
- package/billing/useCreateBillingPortalSession.d.ts.map +1 -0
- package/billing/useCreateBillingPortalSession.js +50 -0
- package/billing/useCreateBillingPortalSession.js.map +1 -0
- package/billing/useCreateCheckoutSession.d.ts +54 -0
- package/billing/useCreateCheckoutSession.d.ts.map +1 -0
- package/billing/useCreateCheckoutSession.js +58 -0
- package/billing/useCreateCheckoutSession.js.map +1 -0
- package/billing/useCreditLedger.d.ts +48 -0
- package/billing/useCreditLedger.d.ts.map +1 -0
- package/billing/useCreditLedger.js +39 -0
- package/billing/useCreditLedger.js.map +1 -0
- package/billing/useCustomerModelPricing.d.ts +41 -0
- package/billing/useCustomerModelPricing.d.ts.map +1 -0
- package/billing/useCustomerModelPricing.js +37 -0
- package/billing/useCustomerModelPricing.js.map +1 -0
- package/billing/useSetAutoRechargeConfig.d.ts +50 -0
- package/billing/useSetAutoRechargeConfig.d.ts.map +1 -0
- package/billing/useSetAutoRechargeConfig.js +53 -0
- package/billing/useSetAutoRechargeConfig.js.map +1 -0
- package/composer/ComposerToolbar.js +1 -1
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/SessionComposer.d.ts +1 -1
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +19 -4
- package/composer/SessionComposer.js.map +1 -1
- package/composer/__tests__/SessionComposer-memo.test.d.ts +2 -0
- package/composer/__tests__/SessionComposer-memo.test.d.ts.map +1 -0
- package/composer/__tests__/SessionComposer-memo.test.js +23 -0
- package/composer/__tests__/SessionComposer-memo.test.js.map +1 -0
- package/execution/ApprovalCard.d.ts +5 -1
- package/execution/ApprovalCard.d.ts.map +1 -1
- package/execution/ApprovalCard.js +7 -3
- package/execution/ApprovalCard.js.map +1 -1
- package/execution/ExecutionPhaseBadge.d.ts +1 -1
- package/execution/ExecutionPhaseBadge.d.ts.map +1 -1
- package/execution/ExecutionPhaseBadge.js +3 -2
- package/execution/ExecutionPhaseBadge.js.map +1 -1
- package/execution/MessageEntry.d.ts +7 -3
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +19 -8
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.d.ts +84 -3
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +113 -65
- package/execution/MessageThread.js.map +1 -1
- package/execution/SetupProgress.d.ts +1 -1
- package/execution/SetupProgress.d.ts.map +1 -1
- package/execution/SetupProgress.js +3 -3
- package/execution/SetupProgress.js.map +1 -1
- package/execution/SubAgentSection.d.ts +5 -1
- package/execution/SubAgentSection.d.ts.map +1 -1
- package/execution/SubAgentSection.js +13 -7
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/ThreadSkeleton.d.ts +22 -0
- package/execution/ThreadSkeleton.d.ts.map +1 -0
- package/execution/ThreadSkeleton.js +26 -0
- package/execution/ThreadSkeleton.js.map +1 -0
- package/execution/ToolCallGroup.d.ts +16 -1
- package/execution/ToolCallGroup.d.ts.map +1 -1
- package/execution/ToolCallGroup.js +31 -3
- package/execution/ToolCallGroup.js.map +1 -1
- package/execution/UsageWidget.d.ts +1 -1
- package/execution/__tests__/message-entry.test.d.ts +2 -0
- package/execution/__tests__/message-entry.test.d.ts.map +1 -0
- package/execution/__tests__/message-entry.test.js +178 -0
- package/execution/__tests__/message-entry.test.js.map +1 -0
- package/execution/__tests__/thread-keys.test.d.ts +2 -0
- package/execution/__tests__/thread-keys.test.d.ts.map +1 -0
- package/execution/__tests__/thread-keys.test.js +289 -0
- package/execution/__tests__/thread-keys.test.js.map +1 -0
- package/execution/__tests__/thread-memoization.test.d.ts +2 -0
- package/execution/__tests__/thread-memoization.test.d.ts.map +1 -0
- package/execution/__tests__/thread-memoization.test.js +262 -0
- package/execution/__tests__/thread-memoization.test.js.map +1 -0
- package/execution/__tests__/thread-skeleton.test.d.ts +2 -0
- package/execution/__tests__/thread-skeleton.test.d.ts.map +1 -0
- package/execution/__tests__/thread-skeleton.test.js +35 -0
- package/execution/__tests__/thread-skeleton.test.js.map +1 -0
- package/execution/__tests__/useExecutionStream.test.js +73 -10
- package/execution/__tests__/useExecutionStream.test.js.map +1 -1
- package/execution/__tests__/useSessionVariables-stability.test.d.ts +2 -0
- package/execution/__tests__/useSessionVariables-stability.test.d.ts.map +1 -0
- package/execution/__tests__/useSessionVariables-stability.test.js +69 -0
- package/execution/__tests__/useSessionVariables-stability.test.js.map +1 -0
- package/execution/__tests__/virtualized-thread.test.d.ts +2 -0
- package/execution/__tests__/virtualized-thread.test.d.ts.map +1 -0
- package/execution/__tests__/virtualized-thread.test.js +274 -0
- package/execution/__tests__/virtualized-thread.test.js.map +1 -0
- package/execution/index.d.ts +2 -0
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +1 -0
- package/execution/index.js.map +1 -1
- package/execution/useExecutionStream.d.ts +35 -10
- package/execution/useExecutionStream.d.ts.map +1 -1
- package/execution/useExecutionStream.js +79 -40
- package/execution/useExecutionStream.js.map +1 -1
- package/execution/useSessionVariables.d.ts.map +1 -1
- package/execution/useSessionVariables.js +4 -3
- package/execution/useSessionVariables.js.map +1 -1
- package/github/useGitHubConnection.d.ts.map +1 -1
- package/github/useGitHubConnection.js +5 -4
- package/github/useGitHubConnection.js.map +1 -1
- package/identity-account/index.d.ts +2 -0
- package/identity-account/index.d.ts.map +1 -0
- package/identity-account/index.js +2 -0
- package/identity-account/index.js.map +1 -0
- package/identity-account/useIdentityAccountGate.d.ts +81 -0
- package/identity-account/useIdentityAccountGate.d.ts.map +1 -0
- package/identity-account/useIdentityAccountGate.js +100 -0
- package/identity-account/useIdentityAccountGate.js.map +1 -0
- package/index.d.ts +10 -4
- package/index.d.ts.map +1 -1
- package/index.js +8 -2
- package/index.js.map +1 -1
- package/internal/FetchCacheProvider.d.ts +44 -0
- package/internal/FetchCacheProvider.d.ts.map +1 -0
- package/internal/FetchCacheProvider.js +61 -0
- package/internal/FetchCacheProvider.js.map +1 -0
- package/internal/JumpToLatestButton.d.ts +14 -0
- package/internal/JumpToLatestButton.d.ts.map +1 -0
- package/internal/JumpToLatestButton.js +19 -0
- package/internal/JumpToLatestButton.js.map +1 -0
- package/internal/ThreadItemWrapper.d.ts +20 -0
- package/internal/ThreadItemWrapper.d.ts.map +1 -0
- package/internal/ThreadItemWrapper.js +44 -0
- package/internal/ThreadItemWrapper.js.map +1 -0
- package/internal/VirtualizedThread.d.ts +25 -0
- package/internal/VirtualizedThread.d.ts.map +1 -0
- package/internal/VirtualizedThread.js +58 -0
- package/internal/VirtualizedThread.js.map +1 -0
- package/internal/__tests__/fetch-cache.test.d.ts +2 -0
- package/internal/__tests__/fetch-cache.test.d.ts.map +1 -0
- package/internal/__tests__/fetch-cache.test.js +182 -0
- package/internal/__tests__/fetch-cache.test.js.map +1 -0
- package/internal/__tests__/stream-controller.test.d.ts +2 -0
- package/internal/__tests__/stream-controller.test.d.ts.map +1 -0
- package/internal/__tests__/stream-controller.test.js +294 -0
- package/internal/__tests__/stream-controller.test.js.map +1 -0
- package/internal/__tests__/thread-animation.test.d.ts +2 -0
- package/internal/__tests__/thread-animation.test.d.ts.map +1 -0
- package/internal/__tests__/thread-animation.test.js +79 -0
- package/internal/__tests__/thread-animation.test.js.map +1 -0
- package/internal/__tests__/useAutoScroll.test.d.ts +2 -0
- package/internal/__tests__/useAutoScroll.test.d.ts.map +1 -0
- package/internal/__tests__/useAutoScroll.test.js +188 -0
- package/internal/__tests__/useAutoScroll.test.js.map +1 -0
- package/internal/__tests__/useFetch-cache.test.d.ts +2 -0
- package/internal/__tests__/useFetch-cache.test.d.ts.map +1 -0
- package/internal/__tests__/useFetch-cache.test.js +137 -0
- package/internal/__tests__/useFetch-cache.test.js.map +1 -0
- package/internal/dev/__tests__/use-key-stability.test.d.ts +2 -0
- package/internal/dev/__tests__/use-key-stability.test.d.ts.map +1 -0
- package/internal/dev/__tests__/use-key-stability.test.js +72 -0
- package/internal/dev/__tests__/use-key-stability.test.js.map +1 -0
- package/internal/dev/__tests__/use-render-tracer.test.d.ts +2 -0
- package/internal/dev/__tests__/use-render-tracer.test.d.ts.map +1 -0
- package/internal/dev/__tests__/use-render-tracer.test.js +55 -0
- package/internal/dev/__tests__/use-render-tracer.test.js.map +1 -0
- package/internal/dev/dom-counter.d.ts +14 -0
- package/internal/dev/dom-counter.d.ts.map +1 -0
- package/internal/dev/dom-counter.js +39 -0
- package/internal/dev/dom-counter.js.map +1 -0
- package/internal/dev/index.d.ts +6 -0
- package/internal/dev/index.d.ts.map +1 -0
- package/internal/dev/index.js +6 -0
- package/internal/dev/index.js.map +1 -0
- package/internal/dev/profiler-wrapper.d.ts +16 -0
- package/internal/dev/profiler-wrapper.d.ts.map +1 -0
- package/internal/dev/profiler-wrapper.js +31 -0
- package/internal/dev/profiler-wrapper.js.map +1 -0
- package/internal/dev/use-key-stability.d.ts +22 -0
- package/internal/dev/use-key-stability.d.ts.map +1 -0
- package/internal/dev/use-key-stability.js +67 -0
- package/internal/dev/use-key-stability.js.map +1 -0
- package/internal/dev/use-render-tracer.d.ts +13 -0
- package/internal/dev/use-render-tracer.d.ts.map +1 -0
- package/internal/dev/use-render-tracer.js +57 -0
- package/internal/dev/use-render-tracer.js.map +1 -0
- package/internal/dev/use-stream-rate.d.ts +23 -0
- package/internal/dev/use-stream-rate.d.ts.map +1 -0
- package/internal/dev/use-stream-rate.js +94 -0
- package/internal/dev/use-stream-rate.js.map +1 -0
- package/internal/fetch-cache.d.ts +72 -0
- package/internal/fetch-cache.d.ts.map +1 -0
- package/internal/fetch-cache.js +118 -0
- package/internal/fetch-cache.js.map +1 -0
- package/internal/store/__tests__/conversation-store.test.d.ts +2 -0
- package/internal/store/__tests__/conversation-store.test.d.ts.map +1 -0
- package/internal/store/__tests__/conversation-store.test.js +200 -0
- package/internal/store/__tests__/conversation-store.test.js.map +1 -0
- package/internal/store/__tests__/structural-share.test.d.ts +2 -0
- package/internal/store/__tests__/structural-share.test.d.ts.map +1 -0
- package/internal/store/__tests__/structural-share.test.js +368 -0
- package/internal/store/__tests__/structural-share.test.js.map +1 -0
- package/internal/store/conversation-store.d.ts +62 -0
- package/internal/store/conversation-store.d.ts.map +1 -0
- package/internal/store/conversation-store.js +95 -0
- package/internal/store/conversation-store.js.map +1 -0
- package/internal/store/index.d.ts +31 -0
- package/internal/store/index.d.ts.map +1 -0
- package/internal/store/index.js +54 -0
- package/internal/store/index.js.map +1 -0
- package/internal/store/structural-share.d.ts +13 -0
- package/internal/store/structural-share.d.ts.map +1 -0
- package/internal/store/structural-share.js +240 -0
- package/internal/store/structural-share.js.map +1 -0
- package/internal/stream-controller.d.ts +85 -0
- package/internal/stream-controller.d.ts.map +1 -0
- package/internal/stream-controller.js +146 -0
- package/internal/stream-controller.js.map +1 -0
- package/internal/useAutoScroll.d.ts +32 -0
- package/internal/useAutoScroll.d.ts.map +1 -0
- package/internal/useAutoScroll.js +97 -0
- package/internal/useAutoScroll.js.map +1 -0
- package/internal/useFetch.d.ts +14 -0
- package/internal/useFetch.d.ts.map +1 -1
- package/internal/useFetch.js +32 -2
- package/internal/useFetch.js.map +1 -1
- package/package.json +7 -5
- package/session/__tests__/useNewSessionFlow.test.js +16 -0
- package/session/__tests__/useNewSessionFlow.test.js.map +1 -1
- package/session/__tests__/usePersistedModel.test.d.ts +2 -0
- package/session/__tests__/usePersistedModel.test.d.ts.map +1 -0
- package/session/__tests__/usePersistedModel.test.js +82 -0
- package/session/__tests__/usePersistedModel.test.js.map +1 -0
- package/session/__tests__/useSession.test.d.ts +2 -0
- package/session/__tests__/useSession.test.d.ts.map +1 -0
- package/session/__tests__/useSession.test.js +130 -0
- package/session/__tests__/useSession.test.js.map +1 -0
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +12 -6
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/usePersistedModel.d.ts +3 -0
- package/session/usePersistedModel.d.ts.map +1 -1
- package/session/usePersistedModel.js +27 -2
- package/session/usePersistedModel.js.map +1 -1
- package/session/useSession.d.ts.map +1 -1
- package/session/useSession.js +1 -1
- package/session/useSession.js.map +1 -1
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +9 -1
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionExecutions.d.ts.map +1 -1
- package/session/useSessionExecutions.js +1 -1
- package/session/useSessionExecutions.js.map +1 -1
- package/session/useSessionPageFlow.js +1 -1
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionUsage.d.ts +24 -40
- package/session/useSessionUsage.d.ts.map +1 -1
- package/session/useSessionUsage.js +64 -97
- package/session/useSessionUsage.js.map +1 -1
- package/settings/BillingSection.d.ts +3 -0
- package/settings/BillingSection.d.ts.map +1 -0
- package/settings/BillingSection.js +3 -0
- package/settings/BillingSection.js.map +1 -0
- package/settings/index.d.ts +2 -0
- package/settings/index.d.ts.map +1 -1
- package/settings/index.js +1 -0
- package/settings/index.js.map +1 -1
- package/settings/settings-nav.js +1 -1
- package/settings/settings-nav.js.map +1 -1
- package/src/billing/AutoRechargeCard.tsx +274 -0
- package/src/billing/BillingSection.tsx +255 -0
- package/src/billing/CreditBalanceCard.tsx +81 -0
- package/src/billing/CreditLedgerTable.tsx +281 -0
- package/src/billing/CreditPackGrid.tsx +132 -0
- package/src/billing/LowBalanceBanner.tsx +67 -0
- package/src/billing/PaymentMethodCard.tsx +133 -0
- package/src/billing/credit-packs.ts +54 -0
- package/src/billing/format.ts +97 -0
- package/src/billing/index.ts +51 -0
- package/src/billing/useBillingAccount.ts +64 -0
- package/src/billing/useBillingUsageReport.ts +73 -0
- package/src/billing/useCreateBillingPortalSession.ts +76 -0
- package/src/billing/useCreateCheckoutSession.ts +101 -0
- package/src/billing/useCreditLedger.ts +79 -0
- package/src/billing/useCustomerModelPricing.ts +67 -0
- package/src/billing/useSetAutoRechargeConfig.ts +90 -0
- package/src/composer/ComposerToolbar.tsx +1 -1
- package/src/composer/SessionComposer.tsx +22 -4
- package/src/composer/__tests__/SessionComposer-memo.test.ts +26 -0
- package/src/execution/ApprovalCard.tsx +7 -3
- package/src/execution/ExecutionPhaseBadge.tsx +3 -2
- package/src/execution/MessageEntry.tsx +27 -16
- package/src/execution/MessageThread.tsx +308 -131
- package/src/execution/SetupProgress.tsx +3 -3
- package/src/execution/SubAgentSection.tsx +14 -6
- package/src/execution/ThreadSkeleton.tsx +73 -0
- package/src/execution/ToolCallGroup.tsx +36 -3
- package/src/execution/UsageWidget.tsx +1 -1
- package/src/execution/__tests__/message-entry.test.tsx +236 -0
- package/src/execution/__tests__/thread-keys.test.ts +409 -0
- package/src/execution/__tests__/thread-memoization.test.ts +320 -0
- package/src/execution/__tests__/thread-skeleton.test.tsx +44 -0
- package/src/execution/__tests__/useExecutionStream.test.tsx +109 -12
- package/src/execution/__tests__/useSessionVariables-stability.test.ts +95 -0
- package/src/execution/__tests__/virtualized-thread.test.tsx +401 -0
- package/src/execution/index.ts +3 -0
- package/src/execution/useExecutionStream.ts +123 -48
- package/src/execution/useSessionVariables.ts +17 -12
- package/src/github/useGitHubConnection.ts +18 -13
- package/src/identity-account/index.ts +5 -0
- package/src/identity-account/useIdentityAccountGate.ts +163 -0
- package/src/index.ts +73 -0
- package/src/internal/FetchCacheProvider.tsx +74 -0
- package/src/internal/JumpToLatestButton.tsx +61 -0
- package/src/internal/ThreadItemWrapper.tsx +65 -0
- package/src/internal/VirtualizedThread.tsx +162 -0
- package/src/internal/__tests__/fetch-cache.test.ts +230 -0
- package/src/internal/__tests__/stream-controller.test.ts +395 -0
- package/src/internal/__tests__/thread-animation.test.tsx +121 -0
- package/src/internal/__tests__/useAutoScroll.test.tsx +261 -0
- package/src/internal/__tests__/useFetch-cache.test.ts +214 -0
- package/src/internal/dev/__tests__/use-key-stability.test.ts +124 -0
- package/src/internal/dev/__tests__/use-render-tracer.test.ts +78 -0
- package/src/internal/dev/dom-counter.ts +47 -0
- package/src/internal/dev/index.ts +5 -0
- package/src/internal/dev/profiler-wrapper.tsx +52 -0
- package/src/internal/dev/use-key-stability.ts +86 -0
- package/src/internal/dev/use-render-tracer.ts +70 -0
- package/src/internal/dev/use-stream-rate.ts +138 -0
- package/src/internal/fetch-cache.ts +155 -0
- package/src/internal/store/__tests__/conversation-store.test.ts +257 -0
- package/src/internal/store/__tests__/structural-share.test.ts +454 -0
- package/src/internal/store/conversation-store.ts +128 -0
- package/src/internal/store/index.ts +68 -0
- package/src/internal/store/structural-share.ts +318 -0
- package/src/internal/stream-controller.ts +201 -0
- package/src/internal/useAutoScroll.ts +121 -0
- package/src/internal/useFetch.ts +51 -2
- package/src/session/__tests__/useNewSessionFlow.test.tsx +22 -0
- package/src/session/__tests__/usePersistedModel.test.tsx +117 -0
- package/src/session/__tests__/useSession.test.tsx +187 -0
- package/src/session/useNewSessionFlow.ts +12 -6
- package/src/session/usePersistedModel.ts +28 -2
- package/src/session/useSession.ts +1 -0
- package/src/session/useSessionConversation.ts +11 -2
- package/src/session/useSessionExecutions.ts +1 -0
- package/src/session/useSessionPageFlow.ts +1 -1
- package/src/session/useSessionUsage.ts +102 -123
- package/src/settings/BillingSection.tsx +4 -0
- package/src/settings/index.ts +2 -0
- package/src/settings/settings-nav.ts +1 -1
- package/src/styles.css +31 -0
- package/src/usage/AgentBreakdownList.tsx +147 -0
- package/src/usage/CreditRunwayIndicator.tsx +71 -0
- package/src/usage/ExportButton.tsx +115 -0
- package/src/usage/HarnessSplitCard.tsx +103 -0
- package/src/usage/OrgUsagePanel.tsx +109 -45
- package/src/usage/index.ts +15 -0
- package/src/usage/useExportCSV.ts +115 -0
- package/src/usage/useOrgUsageReport.ts +2 -1
- package/src/workspace/__tests__/useWorkspaceEntries-stability.test.ts +76 -0
- package/src/workspace/useWorkspaceEntries.ts +16 -11
- package/styles.css +1 -1
- package/usage/AgentBreakdownList.d.ts +21 -0
- package/usage/AgentBreakdownList.d.ts.map +1 -0
- package/usage/AgentBreakdownList.js +44 -0
- package/usage/AgentBreakdownList.js.map +1 -0
- package/usage/CreditRunwayIndicator.d.ts +21 -0
- package/usage/CreditRunwayIndicator.d.ts.map +1 -0
- package/usage/CreditRunwayIndicator.js +38 -0
- package/usage/CreditRunwayIndicator.js.map +1 -0
- package/usage/ExportButton.d.ts +20 -0
- package/usage/ExportButton.d.ts.map +1 -0
- package/usage/ExportButton.js +36 -0
- package/usage/ExportButton.js.map +1 -0
- package/usage/HarnessSplitCard.d.ts +17 -0
- package/usage/HarnessSplitCard.d.ts.map +1 -0
- package/usage/HarnessSplitCard.js +38 -0
- package/usage/HarnessSplitCard.js.map +1 -0
- package/usage/OrgUsagePanel.d.ts.map +1 -1
- package/usage/OrgUsagePanel.js +30 -22
- package/usage/OrgUsagePanel.js.map +1 -1
- package/usage/index.d.ts +10 -0
- package/usage/index.d.ts.map +1 -1
- package/usage/index.js +5 -0
- package/usage/index.js.map +1 -1
- package/usage/useExportCSV.d.ts +23 -0
- package/usage/useExportCSV.d.ts.map +1 -0
- package/usage/useExportCSV.js +81 -0
- package/usage/useExportCSV.js.map +1 -0
- package/usage/useOrgUsageReport.d.ts +2 -1
- package/usage/useOrgUsageReport.d.ts.map +1 -1
- package/usage/useOrgUsageReport.js +2 -1
- package/usage/useOrgUsageReport.js.map +1 -1
- package/workspace/__tests__/useWorkspaceEntries-stability.test.d.ts +2 -0
- package/workspace/__tests__/useWorkspaceEntries-stability.test.d.ts.map +1 -0
- package/workspace/__tests__/useWorkspaceEntries-stability.test.js +57 -0
- package/workspace/__tests__/useWorkspaceEntries-stability.test.js.map +1 -0
- package/workspace/useWorkspaceEntries.d.ts.map +1 -1
- package/workspace/useWorkspaceEntries.js +5 -4
- package/workspace/useWorkspaceEntries.js.map +1 -1
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
import { useStigmer } from "../hooks";
|
|
4
|
+
import { toError } from "../internal/toError";
|
|
5
|
+
/**
|
|
6
|
+
* Behavior hook that opens the Stripe Customer Portal for payment
|
|
7
|
+
* method management.
|
|
8
|
+
*
|
|
9
|
+
* Wraps `billing.createBillingPortalSession` with loading and error
|
|
10
|
+
* state management. On success, redirects the user to the Stripe-hosted
|
|
11
|
+
* portal. Payment method changes are synced back via webhooks.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* const { openPortal, isLoading } = useCreateBillingPortalSession();
|
|
16
|
+
*
|
|
17
|
+
* <button onClick={() => openPortal(orgId)} disabled={isLoading}>
|
|
18
|
+
* Manage payment methods
|
|
19
|
+
* </button>
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function useCreateBillingPortalSession() {
|
|
23
|
+
const stigmer = useStigmer();
|
|
24
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
25
|
+
const [error, setError] = useState(null);
|
|
26
|
+
const clearError = useCallback(() => setError(null), []);
|
|
27
|
+
const openPortal = useCallback(async (orgId) => {
|
|
28
|
+
setIsLoading(true);
|
|
29
|
+
setError(null);
|
|
30
|
+
try {
|
|
31
|
+
const returnUrl = typeof window !== "undefined" ? window.location.href : "";
|
|
32
|
+
const response = await stigmer.billing.createBillingPortalSession({
|
|
33
|
+
orgId,
|
|
34
|
+
returnUrl,
|
|
35
|
+
});
|
|
36
|
+
if (response.portalUrl) {
|
|
37
|
+
window.location.href = response.portalUrl;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
setError(toError(err));
|
|
42
|
+
throw err;
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
setIsLoading(false);
|
|
46
|
+
}
|
|
47
|
+
}, [stigmer]);
|
|
48
|
+
return { openPortal, isLoading, error, clearError };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=useCreateBillingPortalSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCreateBillingPortalSession.js","sourceRoot":"","sources":["../../src/billing/useCreateBillingPortalSession.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAmB9C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,6BAA6B;IAC3C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,WAAW,CAC5B,KAAK,EAAE,KAAa,EAAiB,EAAE;QACrC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,SAAS,GACb,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAE5D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC;gBAChE,KAAK;gBACL,SAAS;aACV,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { CreateCreditCheckoutSessionResponse } from "@stigmer/protos/ai/stigmer/billing/v1/io_pb";
|
|
2
|
+
/** Parameters for {@link useCreateCheckoutSession}'s `createSession` callback. */
|
|
3
|
+
export interface CreateCheckoutSessionInput {
|
|
4
|
+
/** Organization purchasing credits. */
|
|
5
|
+
readonly orgId: string;
|
|
6
|
+
/** Credit pack to purchase (e.g., "starter", "growth", "team"). */
|
|
7
|
+
readonly packId: string;
|
|
8
|
+
/** URL to redirect to after successful payment. */
|
|
9
|
+
readonly successUrl: string;
|
|
10
|
+
/** URL to redirect to if the user cancels checkout. */
|
|
11
|
+
readonly cancelUrl: string;
|
|
12
|
+
}
|
|
13
|
+
/** Return value of {@link useCreateCheckoutSession}. */
|
|
14
|
+
export interface UseCreateCheckoutSessionReturn {
|
|
15
|
+
/**
|
|
16
|
+
* Create a Stripe Checkout Session and redirect the user.
|
|
17
|
+
*
|
|
18
|
+
* On success, sets `window.location.href` to the Stripe-hosted
|
|
19
|
+
* checkout page URL. The promise resolves with the response before
|
|
20
|
+
* the redirect occurs, allowing callers to perform cleanup if needed.
|
|
21
|
+
*/
|
|
22
|
+
readonly createSession: (input: CreateCheckoutSessionInput) => Promise<CreateCreditCheckoutSessionResponse>;
|
|
23
|
+
/** `true` while the checkout session is being created. */
|
|
24
|
+
readonly isSubmitting: boolean;
|
|
25
|
+
/** Error from the last failed attempt, or `null` when healthy. */
|
|
26
|
+
readonly error: Error | null;
|
|
27
|
+
/** Reset `error` to `null`. */
|
|
28
|
+
readonly clearError: () => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Behavior hook that creates a Stripe Checkout Session for credit
|
|
32
|
+
* pack purchases.
|
|
33
|
+
*
|
|
34
|
+
* Wraps `billing.createCreditCheckoutSession` with loading and error
|
|
35
|
+
* state management. On success, redirects the user to the Stripe-hosted
|
|
36
|
+
* checkout page. Credits are provisioned asynchronously via webhook
|
|
37
|
+
* after payment succeeds.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* const { createSession, isSubmitting, error } = useCreateCheckoutSession();
|
|
42
|
+
*
|
|
43
|
+
* const handleBuy = () => {
|
|
44
|
+
* createSession({
|
|
45
|
+
* orgId,
|
|
46
|
+
* packId: "growth",
|
|
47
|
+
* successUrl: `${window.location.origin}/settings/billing?checkout=success`,
|
|
48
|
+
* cancelUrl: `${window.location.origin}/settings/billing`,
|
|
49
|
+
* });
|
|
50
|
+
* };
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function useCreateCheckoutSession(): UseCreateCheckoutSessionReturn;
|
|
54
|
+
//# sourceMappingURL=useCreateCheckoutSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCreateCheckoutSession.d.ts","sourceRoot":"","sources":["../../src/billing/useCreateCheckoutSession.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,6CAA6C,CAAC;AAIvG,kFAAkF;AAClF,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,wDAAwD;AACxD,MAAM,WAAW,8BAA8B;IAC7C;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,EAAE,CACtB,KAAK,EAAE,0BAA0B,KAC9B,OAAO,CAAC,mCAAmC,CAAC,CAAC;IAClD,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,IAAI,8BAA8B,CAsCzE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
import { useStigmer } from "../hooks";
|
|
4
|
+
import { toError } from "../internal/toError";
|
|
5
|
+
/**
|
|
6
|
+
* Behavior hook that creates a Stripe Checkout Session for credit
|
|
7
|
+
* pack purchases.
|
|
8
|
+
*
|
|
9
|
+
* Wraps `billing.createCreditCheckoutSession` with loading and error
|
|
10
|
+
* state management. On success, redirects the user to the Stripe-hosted
|
|
11
|
+
* checkout page. Credits are provisioned asynchronously via webhook
|
|
12
|
+
* after payment succeeds.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* const { createSession, isSubmitting, error } = useCreateCheckoutSession();
|
|
17
|
+
*
|
|
18
|
+
* const handleBuy = () => {
|
|
19
|
+
* createSession({
|
|
20
|
+
* orgId,
|
|
21
|
+
* packId: "growth",
|
|
22
|
+
* successUrl: `${window.location.origin}/settings/billing?checkout=success`,
|
|
23
|
+
* cancelUrl: `${window.location.origin}/settings/billing`,
|
|
24
|
+
* });
|
|
25
|
+
* };
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function useCreateCheckoutSession() {
|
|
29
|
+
const stigmer = useStigmer();
|
|
30
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
31
|
+
const [error, setError] = useState(null);
|
|
32
|
+
const clearError = useCallback(() => setError(null), []);
|
|
33
|
+
const createSession = useCallback(async (input) => {
|
|
34
|
+
setIsSubmitting(true);
|
|
35
|
+
setError(null);
|
|
36
|
+
try {
|
|
37
|
+
const response = await stigmer.billing.createCreditCheckoutSession({
|
|
38
|
+
orgId: input.orgId,
|
|
39
|
+
packId: input.packId,
|
|
40
|
+
successUrl: input.successUrl,
|
|
41
|
+
cancelUrl: input.cancelUrl,
|
|
42
|
+
});
|
|
43
|
+
if (response.checkoutUrl) {
|
|
44
|
+
window.location.href = response.checkoutUrl;
|
|
45
|
+
}
|
|
46
|
+
return response;
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
setError(toError(err));
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
setIsSubmitting(false);
|
|
54
|
+
}
|
|
55
|
+
}, [stigmer]);
|
|
56
|
+
return { createSession, isSubmitting, error, clearError };
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=useCreateCheckoutSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCreateCheckoutSession.js","sourceRoot":"","sources":["../../src/billing/useCreateCheckoutSession.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAkC9C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD,MAAM,aAAa,GAAG,WAAW,CAC/B,KAAK,EACH,KAAiC,EACa,EAAE;QAChD,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC;gBACjE,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;YAC9C,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,eAAe,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { CreditLedgerResponse } from "@stigmer/protos/ai/stigmer/billing/v1/io_pb";
|
|
2
|
+
import type { LedgerEntryType } from "@stigmer/protos/ai/stigmer/billing/v1/enum_pb";
|
|
3
|
+
/** Return value of {@link useCreditLedger}. */
|
|
4
|
+
export interface UseCreditLedgerReturn {
|
|
5
|
+
/** The ledger response, or `null` before the first successful fetch. */
|
|
6
|
+
readonly ledger: CreditLedgerResponse | null;
|
|
7
|
+
/** `true` while the initial fetch is in flight. */
|
|
8
|
+
readonly isLoading: boolean;
|
|
9
|
+
/** `true` while a background refetch is in flight and stale data is shown. */
|
|
10
|
+
readonly isRefetching: boolean;
|
|
11
|
+
/** Error from the last failed request, or `null` when healthy. */
|
|
12
|
+
readonly error: Error | null;
|
|
13
|
+
/** Discard cached data and re-fetch from the server. */
|
|
14
|
+
readonly refetch: () => void;
|
|
15
|
+
}
|
|
16
|
+
/** Options for {@link useCreditLedger}. */
|
|
17
|
+
export interface UseCreditLedgerOptions {
|
|
18
|
+
/** 1-based page number. Defaults to 1. */
|
|
19
|
+
readonly pageNum?: number;
|
|
20
|
+
/** Page size. Defaults to 20. */
|
|
21
|
+
readonly pageSize?: number;
|
|
22
|
+
/** Filter to specific ledger entry types. Empty means all types. */
|
|
23
|
+
readonly typeFilter?: LedgerEntryType[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Data hook that fetches paginated credit ledger entries for an organization.
|
|
27
|
+
*
|
|
28
|
+
* Calls `billing.getCreditLedger` with optional pagination and type
|
|
29
|
+
* filtering. Returns the entries and total page count for building
|
|
30
|
+
* pagination controls.
|
|
31
|
+
*
|
|
32
|
+
* Pass `null` as `orgId` to skip fetching (stable no-op).
|
|
33
|
+
*
|
|
34
|
+
* @param orgId - Organization ID, or `null` to skip.
|
|
35
|
+
* @param options - Pagination and filter options.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* const { ledger, isLoading } = useCreditLedger(orgId, { pageNum: 1 });
|
|
40
|
+
*
|
|
41
|
+
* if (isLoading) return <Skeleton />;
|
|
42
|
+
* if (!ledger) return null;
|
|
43
|
+
*
|
|
44
|
+
* return ledger.entries.map(entry => <LedgerRow key={entry.entryId} entry={entry} />);
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function useCreditLedger(orgId: string | null, options?: UseCreditLedgerOptions): UseCreditLedgerReturn;
|
|
48
|
+
//# sourceMappingURL=useCreditLedger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCreditLedger.d.ts","sourceRoot":"","sources":["../../src/billing/useCreditLedger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACrB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAIrF,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC7C,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CAoBvB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useStigmer } from "../hooks";
|
|
3
|
+
import { useFetch } from "../internal/useFetch";
|
|
4
|
+
/**
|
|
5
|
+
* Data hook that fetches paginated credit ledger entries for an organization.
|
|
6
|
+
*
|
|
7
|
+
* Calls `billing.getCreditLedger` with optional pagination and type
|
|
8
|
+
* filtering. Returns the entries and total page count for building
|
|
9
|
+
* pagination controls.
|
|
10
|
+
*
|
|
11
|
+
* Pass `null` as `orgId` to skip fetching (stable no-op).
|
|
12
|
+
*
|
|
13
|
+
* @param orgId - Organization ID, or `null` to skip.
|
|
14
|
+
* @param options - Pagination and filter options.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* const { ledger, isLoading } = useCreditLedger(orgId, { pageNum: 1 });
|
|
19
|
+
*
|
|
20
|
+
* if (isLoading) return <Skeleton />;
|
|
21
|
+
* if (!ledger) return null;
|
|
22
|
+
*
|
|
23
|
+
* return ledger.entries.map(entry => <LedgerRow key={entry.entryId} entry={entry} />);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function useCreditLedger(orgId, options = {}) {
|
|
27
|
+
const stigmer = useStigmer();
|
|
28
|
+
const { pageNum = 1, pageSize = 20, typeFilter } = options;
|
|
29
|
+
const typeFilterKey = typeFilter?.join(",") ?? "";
|
|
30
|
+
const { data: ledger, isLoading, isRefetching, error, refetch } = useFetch(orgId
|
|
31
|
+
? () => stigmer.billing.getCreditLedger({
|
|
32
|
+
orgId,
|
|
33
|
+
page: { num: pageNum, size: pageSize },
|
|
34
|
+
typeFilter,
|
|
35
|
+
})
|
|
36
|
+
: null, [orgId, pageNum, pageSize, typeFilterKey, stigmer], null);
|
|
37
|
+
return { ledger, isLoading, isRefetching, error, refetch };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=useCreditLedger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCreditLedger.js","sourceRoot":"","sources":["../../src/billing/useCreditLedger.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAMb,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA0BhD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,UAAkC,EAAE;IAEpC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAE3D,MAAM,aAAa,GAAG,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAElD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,QAAQ,CACxE,KAAK;QACH,CAAC,CAAC,GAAG,EAAE,CACH,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;YAC9B,KAAK;YACL,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;YACtC,UAAU;SACX,CAAC;QACN,CAAC,CAAC,IAAI,EACR,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,EAClD,IAAmC,CACpC,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { CustomerModelPricingResponse } from "@stigmer/protos/ai/stigmer/billing/v1/io_pb";
|
|
2
|
+
/** Return value of {@link useCustomerModelPricing}. */
|
|
3
|
+
export interface UseCustomerModelPricingReturn {
|
|
4
|
+
/** The pricing response, or `null` before the first successful fetch. */
|
|
5
|
+
readonly pricing: CustomerModelPricingResponse | null;
|
|
6
|
+
/** `true` while the initial fetch is in flight. */
|
|
7
|
+
readonly isLoading: boolean;
|
|
8
|
+
/** `true` while a background refetch is in flight and stale data is shown. */
|
|
9
|
+
readonly isRefetching: boolean;
|
|
10
|
+
/** Error from the last failed request, or `null` when healthy. */
|
|
11
|
+
readonly error: Error | null;
|
|
12
|
+
/** Discard cached data and re-fetch from the server. */
|
|
13
|
+
readonly refetch: () => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Data hook that fetches the customer-facing model price list.
|
|
17
|
+
*
|
|
18
|
+
* Returns per-million-token prices for all billable models with
|
|
19
|
+
* billing policy markup already applied, organized by harness
|
|
20
|
+
* and cost tier.
|
|
21
|
+
*
|
|
22
|
+
* Pass `null` as `orgId` to skip fetching (stable no-op).
|
|
23
|
+
* Pass `undefined` to fetch default pricing (no org override).
|
|
24
|
+
*
|
|
25
|
+
* @param orgId - Organization ID for org-specific overrides,
|
|
26
|
+
* `undefined` for default pricing, or `null` to skip.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* const { pricing, isLoading } = useCustomerModelPricing(orgId);
|
|
31
|
+
*
|
|
32
|
+
* if (isLoading) return <Skeleton />;
|
|
33
|
+
* if (!pricing) return null;
|
|
34
|
+
*
|
|
35
|
+
* return pricing.entries.map(entry => (
|
|
36
|
+
* <PricingRow key={entry.modelId} entry={entry} />
|
|
37
|
+
* ));
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare function useCustomerModelPricing(orgId: string | undefined | null): UseCustomerModelPricingReturn;
|
|
41
|
+
//# sourceMappingURL=useCustomerModelPricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCustomerModelPricing.d.ts","sourceRoot":"","sources":["../../src/billing/useCustomerModelPricing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,4BAA4B,EAC7B,MAAM,6CAA6C,CAAC;AAIrD,uDAAuD;AACvD,MAAM,WAAW,6BAA6B;IAC5C,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,4BAA4B,GAAG,IAAI,CAAC;IACtD,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC/B,6BAA6B,CAiB/B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useStigmer } from "../hooks";
|
|
3
|
+
import { useFetch } from "../internal/useFetch";
|
|
4
|
+
/**
|
|
5
|
+
* Data hook that fetches the customer-facing model price list.
|
|
6
|
+
*
|
|
7
|
+
* Returns per-million-token prices for all billable models with
|
|
8
|
+
* billing policy markup already applied, organized by harness
|
|
9
|
+
* and cost tier.
|
|
10
|
+
*
|
|
11
|
+
* Pass `null` as `orgId` to skip fetching (stable no-op).
|
|
12
|
+
* Pass `undefined` to fetch default pricing (no org override).
|
|
13
|
+
*
|
|
14
|
+
* @param orgId - Organization ID for org-specific overrides,
|
|
15
|
+
* `undefined` for default pricing, or `null` to skip.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* const { pricing, isLoading } = useCustomerModelPricing(orgId);
|
|
20
|
+
*
|
|
21
|
+
* if (isLoading) return <Skeleton />;
|
|
22
|
+
* if (!pricing) return null;
|
|
23
|
+
*
|
|
24
|
+
* return pricing.entries.map(entry => (
|
|
25
|
+
* <PricingRow key={entry.modelId} entry={entry} />
|
|
26
|
+
* ));
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export function useCustomerModelPricing(orgId) {
|
|
30
|
+
const stigmer = useStigmer();
|
|
31
|
+
const skip = orgId === null;
|
|
32
|
+
const { data: pricing, isLoading, isRefetching, error, refetch } = useFetch(skip
|
|
33
|
+
? null
|
|
34
|
+
: () => stigmer.billing.getCustomerModelPricing(orgId ? { orgId } : undefined), [orgId, stigmer], null);
|
|
35
|
+
return { pricing, isLoading, isRefetching, error, refetch };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=useCustomerModelPricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCustomerModelPricing.js","sourceRoot":"","sources":["../../src/billing/useCustomerModelPricing.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAKb,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAgBhD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAgC;IAEhC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC;IAE5B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,QAAQ,CACzE,IAAI;QACF,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,GAAG,EAAE,CACH,OAAO,CAAC,OAAO,CAAC,uBAAuB,CACrC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9B,EACP,CAAC,KAAK,EAAE,OAAO,CAAC,EAChB,IAA2C,CAC5C,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { BillingAccount } from "@stigmer/protos/ai/stigmer/billing/v1/billing_account_pb";
|
|
2
|
+
/** Input for {@link useSetAutoRechargeConfig}. */
|
|
3
|
+
export interface SetAutoRechargeConfigInput {
|
|
4
|
+
/** Organization ID to configure auto-recharge for. */
|
|
5
|
+
readonly orgId: string;
|
|
6
|
+
/** Whether auto-recharge is enabled. */
|
|
7
|
+
readonly enabled: boolean;
|
|
8
|
+
/** Trigger threshold in micro-USD. */
|
|
9
|
+
readonly thresholdMicros: bigint;
|
|
10
|
+
/** Fixed charge per recharge event in micro-USD. */
|
|
11
|
+
readonly rechargeAmountMicros: bigint;
|
|
12
|
+
/** Maximum monthly auto-recharge spend in micro-USD. */
|
|
13
|
+
readonly monthlyCapMicros: bigint;
|
|
14
|
+
}
|
|
15
|
+
/** Return value of {@link useSetAutoRechargeConfig}. */
|
|
16
|
+
export interface UseSetAutoRechargeConfigReturn {
|
|
17
|
+
/**
|
|
18
|
+
* Save auto-recharge configuration. Returns the updated BillingAccount
|
|
19
|
+
* on success.
|
|
20
|
+
*/
|
|
21
|
+
readonly setConfig: (input: SetAutoRechargeConfigInput) => Promise<BillingAccount>;
|
|
22
|
+
/** `true` while the configuration is being saved. */
|
|
23
|
+
readonly isSubmitting: boolean;
|
|
24
|
+
/** Error from the last failed attempt, or `null` when healthy. */
|
|
25
|
+
readonly error: Error | null;
|
|
26
|
+
/** Reset `error` to `null`. */
|
|
27
|
+
readonly clearError: () => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Behavior hook for configuring auto-recharge settings.
|
|
31
|
+
*
|
|
32
|
+
* Wraps `billing.setAutoRechargeConfig` with loading and error state
|
|
33
|
+
* management. Returns the updated `BillingAccount` on success so the
|
|
34
|
+
* parent can refresh its cached data.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* const { setConfig, isSubmitting, error } = useSetAutoRechargeConfig();
|
|
39
|
+
*
|
|
40
|
+
* await setConfig({
|
|
41
|
+
* orgId,
|
|
42
|
+
* enabled: true,
|
|
43
|
+
* thresholdMicros: BigInt(5_000_000),
|
|
44
|
+
* rechargeAmountMicros: BigInt(50_000_000),
|
|
45
|
+
* monthlyCapMicros: BigInt(200_000_000),
|
|
46
|
+
* });
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function useSetAutoRechargeConfig(): UseSetAutoRechargeConfigReturn;
|
|
50
|
+
//# sourceMappingURL=useSetAutoRechargeConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSetAutoRechargeConfig.d.ts","sourceRoot":"","sources":["../../src/billing/useSetAutoRechargeConfig.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0DAA0D,CAAC;AAE/F,kDAAkD;AAClD,MAAM,WAAW,0BAA0B;IACzC,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,oDAAoD;IACpD,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,wDAAwD;IACxD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,wDAAwD;AACxD,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACnF,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,IAAI,8BAA8B,CAiCzE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
import { useStigmer } from "../hooks";
|
|
4
|
+
import { toError } from "../internal/toError";
|
|
5
|
+
/**
|
|
6
|
+
* Behavior hook for configuring auto-recharge settings.
|
|
7
|
+
*
|
|
8
|
+
* Wraps `billing.setAutoRechargeConfig` with loading and error state
|
|
9
|
+
* management. Returns the updated `BillingAccount` on success so the
|
|
10
|
+
* parent can refresh its cached data.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* const { setConfig, isSubmitting, error } = useSetAutoRechargeConfig();
|
|
15
|
+
*
|
|
16
|
+
* await setConfig({
|
|
17
|
+
* orgId,
|
|
18
|
+
* enabled: true,
|
|
19
|
+
* thresholdMicros: BigInt(5_000_000),
|
|
20
|
+
* rechargeAmountMicros: BigInt(50_000_000),
|
|
21
|
+
* monthlyCapMicros: BigInt(200_000_000),
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function useSetAutoRechargeConfig() {
|
|
26
|
+
const stigmer = useStigmer();
|
|
27
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
28
|
+
const [error, setError] = useState(null);
|
|
29
|
+
const clearError = useCallback(() => setError(null), []);
|
|
30
|
+
const setConfig = useCallback(async (input) => {
|
|
31
|
+
setIsSubmitting(true);
|
|
32
|
+
setError(null);
|
|
33
|
+
try {
|
|
34
|
+
const account = await stigmer.billing.setAutoRechargeConfig({
|
|
35
|
+
orgId: input.orgId,
|
|
36
|
+
enabled: input.enabled,
|
|
37
|
+
thresholdMicros: input.thresholdMicros,
|
|
38
|
+
rechargeAmountMicros: input.rechargeAmountMicros,
|
|
39
|
+
monthlyCapMicros: input.monthlyCapMicros,
|
|
40
|
+
});
|
|
41
|
+
return account;
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
setError(toError(err));
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
setIsSubmitting(false);
|
|
49
|
+
}
|
|
50
|
+
}, [stigmer]);
|
|
51
|
+
return { setConfig, isSubmitting, error, clearError };
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=useSetAutoRechargeConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSetAutoRechargeConfig.js","sourceRoot":"","sources":["../../src/billing/useSetAutoRechargeConfig.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAgC9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD,MAAM,SAAS,GAAG,WAAW,CAC3B,KAAK,EAAE,KAAiC,EAA2B,EAAE;QACnE,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC;gBAC1D,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;gBAChD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;aACzC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,eAAe,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACxD,CAAC"}
|
|
@@ -25,7 +25,7 @@ export function ComposerToolbar({ disabled, isSubmitting, canSend, onSend, showA
|
|
|
25
25
|
const hasTier2 = configureItems.length > 0;
|
|
26
26
|
const showHarnessSeparate = showHarnessSelector && !showModelSelector;
|
|
27
27
|
const hasExecParams = showHarnessSeparate || showModelSelector;
|
|
28
|
-
const harnessLocked = harness !== undefined
|
|
28
|
+
const harnessLocked = harness !== undefined;
|
|
29
29
|
return (_jsxs("div", { className: "flex items-center justify-between gap-2 border-t border-border-muted px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [showWorkspace && (_jsx(ContextPopover, { icon: _jsx(WorkspaceIcon, {}), label: "Workspace", count: workspaceCount, disabled: disabled, hideLabel: true, children: workspaceContent })), showAttach && (_jsxs("button", { type: "button", disabled: disabled, onClick: onAttachClick, className: cn("inline-flex items-center gap-1 rounded-md px-2 py-1.5 text-xs transition-colors", "text-muted-foreground hover:text-foreground hover:bg-accent-hover", "disabled:pointer-events-none disabled:opacity-50"), "aria-label": "Attach files", children: [_jsx(PaperclipIcon, {}), _jsx("span", { className: "max-sm:hidden", children: "Attach" }), attachmentCount > 0 && (_jsx("span", { className: "rounded-full bg-primary-subtle px-1.5 text-[0.6rem] font-medium text-primary", children: attachmentCount }))] })), hasTier1 && hasTier2 && (_jsx("div", { className: "mx-0.5 h-4 w-px bg-border/50", "aria-hidden": "true" })), _jsx(ConfigureMenu, { open: configOpen, onOpenChange: onConfigOpenChange, activePanel: configActivePanel, onActivePanelChange: onConfigActivePanelChange, items: configureItems, renderPanel: renderConfigPanel, disabled: disabled }), (hasTier1 || hasTier2) && hasExecParams && (_jsx("div", { className: "mx-0.5 h-4 w-px bg-border/50", "aria-hidden": "true" })), showHarnessSeparate && (_jsx(HarnessSelector, { value: harness ?? "native", onValueChange: onHarnessChange, disabled: disabled })), showModelSelector && (_jsx(ModelSelector, { value: modelId, onValueChange: onModelChange, harness: harnessLocked ? harness : undefined, onHarnessResolved: harnessLocked ? undefined : onHarnessChange, disabled: disabled }))] }), _jsx("button", { type: "button", disabled: !canSend, onClick: onSend, className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-primary text-primary-foreground transition-colors hover:bg-primary-hover disabled:pointer-events-none disabled:opacity-40", "aria-label": "Send message", children: isSubmitting ? _jsx(SpinnerIcon, {}) : _jsx(ArrowUpIcon, {}) })] }));
|
|
30
30
|
}
|
|
31
31
|
//# sourceMappingURL=ComposerToolbar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerToolbar.js","sourceRoot":"","sources":["../../src/composer/ComposerToolbar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAA0B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EACL,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,SAAS,CAAC;AA4CjB;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,MAAM,EACN,UAAU,EACV,eAAe,EACf,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,aAAa,GACQ;IACrB,MAAM,QAAQ,GAAG,UAAU,IAAI,aAAa,CAAC;IAC7C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,MAAM,mBAAmB,GAAG,mBAAmB,IAAI,CAAC,iBAAiB,CAAC;IACtE,MAAM,aAAa,GAAG,mBAAmB,IAAI,iBAAiB,CAAC;IAC/D,MAAM,aAAa,GAAG,OAAO,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"ComposerToolbar.js","sourceRoot":"","sources":["../../src/composer/ComposerToolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -304,5 +304,5 @@ export interface SessionComposerProps {
|
|
|
304
304
|
* />
|
|
305
305
|
* ```
|
|
306
306
|
*/
|
|
307
|
-
export declare
|
|
307
|
+
export declare const SessionComposer: import("react").NamedExoticComponent<SessionComposerProps>;
|
|
308
308
|
//# sourceMappingURL=SessionComposer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionComposer.d.ts","sourceRoot":"","sources":["../../src/composer/SessionComposer.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAIlI,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAO7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionComposer.d.ts","sourceRoot":"","sources":["../../src/composer/SessionComposer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import { useComposer } from "./useComposer";
|
|
@@ -25,6 +25,7 @@ import { useSessionEnvPool } from "../environment/useSessionEnvPool";
|
|
|
25
25
|
import { usePersonalEnvironment } from "../environment/usePersonalEnvironment";
|
|
26
26
|
import { useStigmer } from "../hooks";
|
|
27
27
|
import { SYSTEM_ENV_VAR_KEYS, resolveSystemEnvVarValues, } from "../environment/systemEnvVars";
|
|
28
|
+
import { useRenderTracer } from "../internal/dev";
|
|
28
29
|
import { RunnerPhase } from "@stigmer/protos/ai/stigmer/agentic/runner/v1/enum_pb";
|
|
29
30
|
import { isActivePhase, phaseLabel, phaseDotColor, PHASE_SORT_ORDER, } from "../runner/phase";
|
|
30
31
|
import { AgentIcon, McpServerIcon, SkillIcon, SecretsIcon, RunnerIcon, AlertTriangleIcon, ResolveSpinner, } from "./icons";
|
|
@@ -91,8 +92,22 @@ import { AgentIcon, McpServerIcon, SkillIcon, SecretsIcon, RunnerIcon, AlertTria
|
|
|
91
92
|
* />
|
|
92
93
|
* ```
|
|
93
94
|
*/
|
|
94
|
-
export function SessionComposer({ onSubmit, isSubmitting = false, disabled = false, harness, onHarnessChange, showHarnessSelector = false, defaultModelId, onModelChange, showModelSelector = true, workspace, gitHubConnection, enableGitHub = true, enableLocal = false, onBrowseLocalFolder, org, agentRef, onAgentRefChange, onAgentResolutionChange, initialAgentRef, mcpServerUsages, onMcpServerUsagesChange, skillRefs, onSkillRefsChange, runnerId, onRunnerIdChange, sessionVariables, enableAttachments = true, onAttachmentValidationError, initialAttachments, placeholder = "Reply\u2026", initialRows = 1, autoFocus = false, ariaLabel = "Send message", className, }) {
|
|
95
|
-
|
|
95
|
+
export const SessionComposer = memo(function SessionComposer({ onSubmit, isSubmitting = false, disabled = false, harness, onHarnessChange, showHarnessSelector = false, defaultModelId, onModelChange, showModelSelector = true, workspace, gitHubConnection, enableGitHub = true, enableLocal = false, onBrowseLocalFolder, org, agentRef, onAgentRefChange, onAgentResolutionChange, initialAgentRef, mcpServerUsages, onMcpServerUsagesChange, skillRefs, onSkillRefsChange, runnerId, onRunnerIdChange, sessionVariables, enableAttachments = true, onAttachmentValidationError, initialAttachments, placeholder = "Reply\u2026", initialRows = 1, autoFocus = false, ariaLabel = "Send message", className, }) {
|
|
96
|
+
useRenderTracer("SessionComposer", { disabled, isSubmitting });
|
|
97
|
+
const [modelId, setModelIdRaw] = useState(defaultModelId);
|
|
98
|
+
const userOverrodeModel = useRef(false);
|
|
99
|
+
// Sync internal modelId when the external defaultModelId prop changes
|
|
100
|
+
// (e.g., lastExecModelId resolves after executions load). Only sync if the
|
|
101
|
+
// user hasn't made a local selection in this composer instance.
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
if (!userOverrodeModel.current && defaultModelId !== undefined) {
|
|
104
|
+
setModelIdRaw(defaultModelId);
|
|
105
|
+
}
|
|
106
|
+
}, [defaultModelId]);
|
|
107
|
+
const setModelId = useCallback((id) => {
|
|
108
|
+
userOverrodeModel.current = true;
|
|
109
|
+
setModelIdRaw(id);
|
|
110
|
+
}, []);
|
|
96
111
|
const [displayNames, setDisplayNames] = useState(() => new Map());
|
|
97
112
|
const isDisabled = disabled || isSubmitting;
|
|
98
113
|
const showAgent = onAgentRefChange != null && org != null;
|
|
@@ -682,7 +697,7 @@ export function SessionComposer({ onSubmit, isSubmitting = false, disabled = fal
|
|
|
682
697
|
}, disabled: isDisabled, className: "ml-auto shrink-0 rounded px-1.5 py-0.5 text-[0.6rem] font-medium hover:bg-warning/20 disabled:pointer-events-none disabled:opacity-50", children: "Configure" })] })), _jsx(ComposerToolbar, { disabled: isDisabled, isSubmitting: isSubmitting, canSend: canSend, onSend: composer.submit, showAttach: showAttach, attachmentCount: attachments.entries.length, onAttachClick: () => fileInputRef.current?.click(), showWorkspace: showWorkspace, workspaceCount: workspaceCount, workspaceContent: workspace
|
|
683
698
|
? _jsxs("div", { className: "space-y-3", children: [showRunner && org && (_jsx(WorkspaceRunnerSelector, { org: org, value: runnerId ?? null, onChange: (id) => onRunnerIdChange?.(id), disabled: isDisabled })), _jsx(WorkspaceEditor, { workspace: workspace, disabled: isDisabled, gitHubConnection: gitHubConnection, enableGitHub: enableGitHub, enableLocal: enableLocal, runnerId: browseRunnerId, onBrowseLocalFolder: runnerId ? onBrowseLocalFolder : undefined, runnerName: selectedRunnerName, runnerHostname: selectedRunnerHostname })] })
|
|
684
699
|
: null, configureItems: configureItems, configOpen: configOpen, onConfigOpenChange: handleConfigOpenChange, configActivePanel: configActivePanel, onConfigActivePanelChange: handleConfigActivePanelChange, renderConfigPanel: renderConfigPanel, showHarnessSelector: showHarnessSelector, harness: harness, onHarnessChange: handleHarnessChange, showModelSelector: showModelSelector, modelId: modelId, onModelChange: handleModelChange })] }) }));
|
|
685
|
-
}
|
|
700
|
+
});
|
|
686
701
|
// ---------------------------------------------------------------------------
|
|
687
702
|
// Agent setup error — secret-flow guidance or generic fallback
|
|
688
703
|
// ---------------------------------------------------------------------------
|