@flanksource/clicky-ui 0.3.29 → 0.3.31
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/ai.cjs +48 -3
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +46 -1
- package/dist/ai.js.map +1 -1
- package/dist/comments/CommentCard.cjs +110 -262
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts +3 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +105 -257
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentCardParts.cjs +95 -0
- package/dist/comments/CommentCardParts.cjs.map +1 -0
- package/dist/comments/CommentCardParts.d.ts +17 -0
- package/dist/comments/CommentCardParts.d.ts.map +1 -0
- package/dist/comments/CommentCardParts.js +95 -0
- package/dist/comments/CommentCardParts.js.map +1 -0
- package/dist/comments/CommentSidePanel.cjs +14 -7
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.d.ts +3 -1
- package/dist/comments/CommentSidePanel.d.ts.map +1 -1
- package/dist/comments/CommentSidePanel.js +14 -7
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/CommentThread.cjs +2 -0
- package/dist/comments/CommentThread.cjs.map +1 -1
- package/dist/comments/CommentThread.d.ts +2 -1
- package/dist/comments/CommentThread.d.ts.map +1 -1
- package/dist/comments/CommentThread.js +2 -0
- package/dist/comments/CommentThread.js.map +1 -1
- package/dist/comments/CommentThreadList.cjs +50 -34
- package/dist/comments/CommentThreadList.cjs.map +1 -1
- package/dist/comments/CommentThreadList.d.ts +3 -1
- package/dist/comments/CommentThreadList.d.ts.map +1 -1
- package/dist/comments/CommentThreadList.js +50 -34
- package/dist/comments/CommentThreadList.js.map +1 -1
- package/dist/components/ComboboxMenu.cjs +4 -1
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +5 -2
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/ComboboxTags.cjs +5 -1
- package/dist/components/ComboboxTags.cjs.map +1 -1
- package/dist/components/ComboboxTags.d.ts.map +1 -1
- package/dist/components/ComboboxTags.js +6 -2
- package/dist/components/ComboboxTags.js.map +1 -1
- package/dist/components/ConnectionLoggingPolicy.cjs +24 -35
- package/dist/components/ConnectionLoggingPolicy.cjs.map +1 -1
- package/dist/components/ConnectionLoggingPolicy.d.ts.map +1 -1
- package/dist/components/ConnectionLoggingPolicy.js +24 -35
- package/dist/components/ConnectionLoggingPolicy.js.map +1 -1
- package/dist/components/DateField.d.ts +1 -1
- package/dist/components/DatePicker.d.ts +1 -1
- package/dist/components/DateTimePicker.d.ts +1 -1
- package/dist/components/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect.d.ts +7 -0
- package/dist/components/MultiSelect.d.ts.map +1 -1
- package/dist/components/MultiSelect.js.map +1 -1
- package/dist/components/filter-bar-multi.cjs +10 -1
- package/dist/components/filter-bar-multi.cjs.map +1 -1
- package/dist/components/filter-bar-multi.d.ts.map +1 -1
- package/dist/components/filter-bar-multi.js +11 -2
- package/dist/components/filter-bar-multi.js.map +1 -1
- package/dist/components/mdx-editor-callout-model.d.ts +1 -1
- package/dist/data/MarkdownEditor.model.d.ts +1 -1
- package/dist/data/ai/ChatWindow.catalogs.cjs +11 -5
- package/dist/data/ai/ChatWindow.catalogs.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.catalogs.d.ts +2 -1
- package/dist/data/ai/ChatWindow.catalogs.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.catalogs.js +11 -5
- package/dist/data/ai/ChatWindow.catalogs.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +1 -0
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +1 -0
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/VariablesField.cjs +79 -0
- package/dist/data/ai/PromptRunEditor/VariablesField.cjs.map +1 -0
- package/dist/data/ai/PromptRunEditor/VariablesField.d.ts +8 -0
- package/dist/data/ai/PromptRunEditor/VariablesField.d.ts.map +1 -0
- package/dist/data/ai/PromptRunEditor/VariablesField.js +79 -0
- package/dist/data/ai/PromptRunEditor/VariablesField.js.map +1 -0
- package/dist/data/ai/PromptRunEditor/index.cjs +61 -69
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +11 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +61 -69
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.d.ts +2 -0
- package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
- package/dist/data/ai/SessionViewer.model.cjs +23 -8
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +8 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +23 -8
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.rows.cjs +9 -1
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +9 -1
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +4 -3
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +2 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs +2 -2
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +24 -2
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +25 -3
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs +4 -3
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js +2 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +4 -0
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +4 -0
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +4 -0
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
- package/dist/data/ai/index.d.ts +3 -2
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/runtime-profile.cjs.map +1 -1
- package/dist/data/ai/runtime-profile.d.ts +9 -7
- package/dist/data/ai/runtime-profile.d.ts.map +1 -1
- package/dist/data/ai/runtime-profile.js.map +1 -1
- package/dist/data/ai/runtime-profiles/OrderedPresetSelect.cjs +111 -0
- package/dist/data/ai/runtime-profiles/OrderedPresetSelect.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/OrderedPresetSelect.d.ts +7 -0
- package/dist/data/ai/runtime-profiles/OrderedPresetSelect.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/OrderedPresetSelect.js +111 -0
- package/dist/data/ai/runtime-profiles/OrderedPresetSelect.js.map +1 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +313 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts +8 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +313 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.cjs +98 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.d.ts +11 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.js +98 -0
- package/dist/data/ai/runtime-profiles/PermissionStrategyConditionRow.js.map +1 -0
- package/dist/data/ai/runtime-profiles/PresetSpecEditor.cjs +35 -0
- package/dist/data/ai/runtime-profiles/PresetSpecEditor.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/PresetSpecEditor.d.ts +11 -0
- package/dist/data/ai/runtime-profiles/PresetSpecEditor.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/PresetSpecEditor.js +35 -0
- package/dist/data/ai/runtime-profiles/PresetSpecEditor.js.map +1 -0
- package/dist/data/ai/runtime-profiles/PresetWorkspace.cjs +179 -0
- package/dist/data/ai/runtime-profiles/PresetWorkspace.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/PresetWorkspace.d.ts +22 -0
- package/dist/data/ai/runtime-profiles/PresetWorkspace.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/PresetWorkspace.js +179 -0
- package/dist/data/ai/runtime-profiles/PresetWorkspace.js.map +1 -0
- package/dist/data/ai/runtime-profiles/ProfileSpecEditor.cjs +57 -0
- package/dist/data/ai/runtime-profiles/ProfileSpecEditor.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/ProfileSpecEditor.d.ts +18 -0
- package/dist/data/ai/runtime-profiles/ProfileSpecEditor.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/ProfileSpecEditor.js +57 -0
- package/dist/data/ai/runtime-profiles/ProfileSpecEditor.js.map +1 -0
- package/dist/data/ai/runtime-profiles/ProfileWorkspace.cjs +135 -0
- package/dist/data/ai/runtime-profiles/ProfileWorkspace.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/ProfileWorkspace.d.ts +23 -0
- package/dist/data/ai/runtime-profiles/ProfileWorkspace.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/ProfileWorkspace.js +135 -0
- package/dist/data/ai/runtime-profiles/ProfileWorkspace.js.map +1 -0
- package/dist/data/ai/runtime-profiles/ResolutionInspector.cjs +85 -0
- package/dist/data/ai/runtime-profiles/ResolutionInspector.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/ResolutionInspector.d.ts +7 -0
- package/dist/data/ai/runtime-profiles/ResolutionInspector.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/ResolutionInspector.js +85 -0
- package/dist/data/ai/runtime-profiles/ResolutionInspector.js.map +1 -0
- package/dist/data/ai/runtime-profiles/ResolutionTrace.cjs +42 -0
- package/dist/data/ai/runtime-profiles/ResolutionTrace.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/ResolutionTrace.d.ts +6 -0
- package/dist/data/ai/runtime-profiles/ResolutionTrace.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/ResolutionTrace.js +42 -0
- package/dist/data/ai/runtime-profiles/ResolutionTrace.js.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeLibraryList.cjs +93 -0
- package/dist/data/ai/runtime-profiles/RuntimeLibraryList.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeLibraryList.d.ts +18 -0
- package/dist/data/ai/runtime-profiles/RuntimeLibraryList.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeLibraryList.js +93 -0
- package/dist/data/ai/runtime-profiles/RuntimeLibraryList.js.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.cjs +44 -0
- package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.d.ts +6 -0
- package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.js +44 -0
- package/dist/data/ai/runtime-profiles/RuntimePersistenceBar.js.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.cjs +198 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.d.ts +12 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.js +198 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.js.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.cjs +97 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.d.ts +26 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.js +97 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilePicker.model.js.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.cjs +143 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.d.ts +25 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.js +143 -0
- package/dist/data/ai/runtime-profiles/RuntimeProfilesWorkspace.js.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.cjs +41 -0
- package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.d.ts +8 -0
- package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.js +41 -0
- package/dist/data/ai/runtime-profiles/RuntimeStatusNotice.js.map +1 -0
- package/dist/data/ai/runtime-profiles/index.d.ts +20 -0
- package/dist/data/ai/runtime-profiles/index.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/types.d.ts +50 -0
- package/dist/data/ai/runtime-profiles/types.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/use-permission-catalog.cjs +37 -0
- package/dist/data/ai/runtime-profiles/use-permission-catalog.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/use-permission-catalog.d.ts +5 -0
- package/dist/data/ai/runtime-profiles/use-permission-catalog.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/use-permission-catalog.js +37 -0
- package/dist/data/ai/runtime-profiles/use-permission-catalog.js.map +1 -0
- package/dist/data/ai/runtime-profiles/use-resolution.cjs +43 -0
- package/dist/data/ai/runtime-profiles/use-resolution.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/use-resolution.d.ts +4 -0
- package/dist/data/ai/runtime-profiles/use-resolution.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/use-resolution.js +43 -0
- package/dist/data/ai/runtime-profiles/use-resolution.js.map +1 -0
- package/dist/data/ai/runtime-profiles/use-runtime-families.cjs +38 -0
- package/dist/data/ai/runtime-profiles/use-runtime-families.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/use-runtime-families.d.ts +3 -0
- package/dist/data/ai/runtime-profiles/use-runtime-families.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/use-runtime-families.js +38 -0
- package/dist/data/ai/runtime-profiles/use-runtime-families.js.map +1 -0
- package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.cjs +107 -0
- package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.cjs.map +1 -0
- package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.d.ts +35 -0
- package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.d.ts.map +1 -0
- package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.js +107 -0
- package/dist/data/ai/runtime-profiles/use-runtime-profile-picker.js.map +1 -0
- package/dist/data/ai/use-session-scroll.cjs.map +1 -1
- package/dist/data/ai/use-session-scroll.d.ts +2 -2
- package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
- package/dist/data/ai/use-session-scroll.js.map +1 -1
- package/dist/data/badge-variants.d.ts +1 -1
- package/dist/data/runtime/RuntimeBar.cjs +3 -2
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +3 -2
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/runtime-field-support.cjs +3 -3
- package/dist/data/runtime/runtime-field-support.cjs.map +1 -1
- package/dist/data/runtime/runtime-field-support.js +1 -1
- package/dist/data/runtime/runtime-mode.cjs +14 -47
- package/dist/data/runtime/runtime-mode.cjs.map +1 -1
- package/dist/data/runtime/runtime-mode.d.ts +5 -7
- package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
- package/dist/data/runtime/runtime-mode.js +7 -39
- package/dist/data/runtime/runtime-mode.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +6 -4
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +10 -1
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +6 -4
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/verification/VerificationResults.cjs +99 -0
- package/dist/data/verification/VerificationResults.cjs.map +1 -0
- package/dist/data/verification/VerificationResults.d.ts +27 -0
- package/dist/data/verification/VerificationResults.d.ts.map +1 -0
- package/dist/data/verification/VerificationResults.js +99 -0
- package/dist/data/verification/VerificationResults.js.map +1 -0
- package/dist/data/verification/adapterViews.cjs +116 -0
- package/dist/data/verification/adapterViews.cjs.map +1 -0
- package/dist/data/verification/adapterViews.d.ts +13 -0
- package/dist/data/verification/adapterViews.d.ts.map +1 -0
- package/dist/data/verification/adapterViews.js +116 -0
- package/dist/data/verification/adapterViews.js.map +1 -0
- package/dist/data/verification/adapters.cjs +26 -0
- package/dist/data/verification/adapters.cjs.map +1 -0
- package/dist/data/verification/adapters.d.ts +6 -0
- package/dist/data/verification/adapters.d.ts.map +1 -0
- package/dist/data/verification/adapters.js +26 -0
- package/dist/data/verification/adapters.js.map +1 -0
- package/dist/data/verification/index.d.ts +5 -0
- package/dist/data/verification/index.d.ts.map +1 -0
- package/dist/data/verification/verify-report.cjs +58 -0
- package/dist/data/verification/verify-report.cjs.map +1 -0
- package/dist/data/verification/verify-report.d.ts +96 -0
- package/dist/data/verification/verify-report.d.ts.map +1 -0
- package/dist/data/verification/verify-report.js +58 -0
- package/dist/data/verification/verify-report.js.map +1 -0
- package/dist/data/verification/verifyReportTests.cjs +83 -0
- package/dist/data/verification/verifyReportTests.cjs.map +1 -0
- package/dist/data/verification/verifyReportTests.d.ts +13 -0
- package/dist/data/verification/verifyReportTests.d.ts.map +1 -0
- package/dist/data/verification/verifyReportTests.js +83 -0
- package/dist/data/verification/verifyReportTests.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +10 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +1 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +10 -0
- package/dist/data.js.map +1 -1
- package/dist/index.cjs +62 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/permission-strategies.cjs +155 -0
- package/dist/lib/permission-strategies.cjs.map +1 -0
- package/dist/lib/permission-strategies.d.ts +35 -0
- package/dist/lib/permission-strategies.d.ts.map +1 -0
- package/dist/lib/permission-strategies.js +155 -0
- package/dist/lib/permission-strategies.js.map +1 -0
- package/dist/lib/runtime-family.cjs +51 -0
- package/dist/lib/runtime-family.cjs.map +1 -0
- package/dist/lib/runtime-family.d.ts +25 -0
- package/dist/lib/runtime-family.d.ts.map +1 -0
- package/dist/lib/runtime-family.js +51 -0
- package/dist/lib/runtime-family.js.map +1 -0
- package/dist/lib/runtime-profile-model.cjs +129 -0
- package/dist/lib/runtime-profile-model.cjs.map +1 -0
- package/dist/lib/runtime-profile-model.d.ts +30 -0
- package/dist/lib/runtime-profile-model.d.ts.map +1 -0
- package/dist/lib/runtime-profile-model.js +129 -0
- package/dist/lib/runtime-profile-model.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/utils.cjs +52 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +53 -1
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2,6 +2,11 @@ import { cn } from "./lib/utils.js";
|
|
|
2
2
|
import { duplicateIndex, isPlainObject, moveItem, removeIndex, setIndex } from "./lib/collections.js";
|
|
3
3
|
import { AVATAR_PALETTE, fnv1a32, paletteClass } from "./lib/palette.js";
|
|
4
4
|
import { SIZE_TOKENS, resolveSize } from "./lib/size.js";
|
|
5
|
+
import { COMBOBOX_MENU_MAX_HEIGHT_PX, COMBOBOX_MENU_MAX_WIDTH_PX, COMBOBOX_MOBILE_QUERY, calculateComboboxMenuPosition } from "./lib/combobox.js";
|
|
6
|
+
import { comboboxLabelPadding, createComboboxCustomEntry, multipleComboboxLabel, splitOnComboboxSeparators, withSelectedComboboxOptions } from "./lib/combobox-values.js";
|
|
7
|
+
import { SPEC_RUNTIME_MODES, familyForModel, isSpecRuntimeMode, modeOptionFor, runtimeModeFromModel } from "./lib/runtime-family.js";
|
|
8
|
+
import { authoredRuntimeSpec, duplicateName, duplicateRecord, mergeRuntimeSpec, newPresetRecord, newProfileRecord, nextNewName, permissionTarget, presetForRef, presetsOf, referencedBy, reorderProfilePresets, selectionAfterDelete, uniqueName } from "./lib/runtime-profile-model.js";
|
|
9
|
+
import { HINT_FIELDS, MATCH_FIELDS, MATCH_FIELD_OPTIONS, PATTERN_FIELDS, STRATEGY_PRESETS, activeMatchFields, addCondition, applyStrategyPreset, conditionText, isHintField, matchingTools, patternValues, patternsText, removeCondition, replaceMatchField, strategyPreset, toolFieldSuggestions, updateCondition, updatePatternCondition } from "./lib/permission-strategies.js";
|
|
5
10
|
import { PATH_SEPARATOR, buildPathTree, foldersFirst, isPathTreeFolder, splitPath } from "./lib/path-tree.js";
|
|
6
11
|
import { CLICKY_COLUMN_FORMAT_OPTIONS, CLICKY_COLUMN_UNIT_OPTIONS, formatBytes, formatBytesPerSecond, formatDuration, formatShort, formatUnit } from "./lib/format.js";
|
|
7
12
|
import { useOptionalTheme, useResolvedTheme, useTheme } from "./hooks/use-theme.js";
|
|
@@ -602,6 +607,7 @@ import { UiWrench, UiWrenchFilled } from "./icons/components/UiWrench.js";
|
|
|
602
607
|
import { UiZap, UiZapFilled } from "./icons/components/UiZap.js";
|
|
603
608
|
import { UiZoomIn, UiZoomInFilled } from "./icons/components/UiZoomIn.js";
|
|
604
609
|
import { UiZoomOut, UiZoomOutFilled } from "./icons/components/UiZoomOut.js";
|
|
610
|
+
import { VerificationResults } from "./data/verification/VerificationResults.js";
|
|
605
611
|
import { annotateRoutePaths, findNodeByRoutePath, slugify } from "./data/test-runner/routePath.js";
|
|
606
612
|
import { applyFixtureFrontmatterRaw, applyFixtureFrontmatterState, fixtureFrontmatterState, parseFixtureFrontmatter } from "./data/FixtureEditor/fixture-frontmatter.js";
|
|
607
613
|
import { cacheQueryKeys, createCacheClient } from "./data/cache-browser/api.js";
|
|
@@ -609,10 +615,13 @@ import { changeIconAliases, getChangeIcon } from "./icons/changeIconAliases.js";
|
|
|
609
615
|
import { clickyIconProvider, iconsByConsumerName } from "./icons/registry.js";
|
|
610
616
|
import { createChecklistMarkdown, createFenceMarkdown, fixtureFenceKind, fixtureFenceSchemaAliases, fixtureFenceSnippetInfo, parseFixtureYaml, resolveFixtureFenceSchema, schemaKeys, stringifyFixtureYaml } from "./data/FixtureEditor/fixture-blocks.js";
|
|
611
617
|
import { cycleFilterState, decodeFilterState, emptyTestFilters, encodeFilterState, filterStateToRecord, matchesFilterState, recordToFilterState } from "./data/test-runner/filterState.js";
|
|
618
|
+
import { emptyVerifySummary, summarizeVerifyNodes } from "./data/verification/verify-report.js";
|
|
612
619
|
import { formatGitCommitDateHeader } from "./data/git/git-dates.js";
|
|
613
620
|
import { frameworkIcon } from "./data/test-runner/frameworkIcon.js";
|
|
614
621
|
import { isLeaf } from "./data/cache-browser/types.js";
|
|
615
622
|
import { useClickyExport } from "./data/clicky-export/useClickyExport.js";
|
|
623
|
+
import { verificationAdapters } from "./data/verification/adapters.js";
|
|
624
|
+
import { verifyReportCounts, verifyReportTests } from "./data/verification/verifyReportTests.js";
|
|
616
625
|
export {
|
|
617
626
|
ACCEPT_OPTIONS,
|
|
618
627
|
AVATAR_PALETTE,
|
|
@@ -631,6 +640,9 @@ export {
|
|
|
631
640
|
CLICKY_COLUMN_FORMAT_OPTIONS,
|
|
632
641
|
CLICKY_COLUMN_UNIT_OPTIONS,
|
|
633
642
|
CLICKY_FORMAT_OPTIONS,
|
|
643
|
+
COMBOBOX_MENU_MAX_HEIGHT_PX,
|
|
644
|
+
COMBOBOX_MENU_MAX_WIDTH_PX,
|
|
645
|
+
COMBOBOX_MOBILE_QUERY,
|
|
634
646
|
CONNECTION_LOG_LEVELS,
|
|
635
647
|
COUNTRY_OPTIONS,
|
|
636
648
|
CacheAdapterRegistry,
|
|
@@ -719,6 +731,7 @@ export {
|
|
|
719
731
|
GitDiffPanel,
|
|
720
732
|
GitFileList,
|
|
721
733
|
GroupedComments,
|
|
734
|
+
HINT_FIELDS,
|
|
722
735
|
HarPanel,
|
|
723
736
|
HoverCard,
|
|
724
737
|
Icon,
|
|
@@ -749,6 +762,8 @@ export {
|
|
|
749
762
|
MARKDOWN_EDITOR_PREVIEW_FORMATS,
|
|
750
763
|
MARKDOWN_SYNTAX_DOCUMENT,
|
|
751
764
|
MARKDOWN_SYNTAX_SECTIONS,
|
|
765
|
+
MATCH_FIELDS,
|
|
766
|
+
MATCH_FIELD_OPTIONS,
|
|
752
767
|
MAX_INLINE_SELECTION_ACTIONS,
|
|
753
768
|
Markdown,
|
|
754
769
|
MarkdownEditor,
|
|
@@ -769,6 +784,7 @@ export {
|
|
|
769
784
|
OperationResultView,
|
|
770
785
|
OperationsApiClientError,
|
|
771
786
|
PATH_SEPARATOR,
|
|
787
|
+
PATTERN_FIELDS,
|
|
772
788
|
Panel,
|
|
773
789
|
PrettyStackTrace,
|
|
774
790
|
ProgressBar,
|
|
@@ -783,8 +799,10 @@ export {
|
|
|
783
799
|
RangeSlider,
|
|
784
800
|
RouterProvider,
|
|
785
801
|
SIZE_TOKENS,
|
|
802
|
+
SPEC_RUNTIME_MODES,
|
|
786
803
|
STATUS_LABELS,
|
|
787
804
|
STATUS_TOKEN_GROUPS,
|
|
805
|
+
STRATEGY_PRESETS,
|
|
788
806
|
SchemaActionForm,
|
|
789
807
|
SchemaViewer as SchemaBrowser,
|
|
790
808
|
SchemaFieldMetaPanel,
|
|
@@ -1460,10 +1478,13 @@ export {
|
|
|
1460
1478
|
UiZoomOut,
|
|
1461
1479
|
UiZoomOutFilled,
|
|
1462
1480
|
VIEW_OPTIONS,
|
|
1481
|
+
VerificationResults,
|
|
1463
1482
|
Version,
|
|
1464
1483
|
WorkloadCard,
|
|
1465
1484
|
WorkloadPicker,
|
|
1466
1485
|
Workspace,
|
|
1486
|
+
activeMatchFields,
|
|
1487
|
+
addCondition,
|
|
1467
1488
|
aggregateStatusCounts,
|
|
1468
1489
|
allGroupsTerminal,
|
|
1469
1490
|
annotateRoutePaths,
|
|
@@ -1474,9 +1495,11 @@ export {
|
|
|
1474
1495
|
applyFixtureFrontmatterRaw,
|
|
1475
1496
|
applyFixtureFrontmatterState,
|
|
1476
1497
|
applyPostExtensions,
|
|
1498
|
+
applyStrategyPreset,
|
|
1477
1499
|
assertCalloutValue,
|
|
1478
1500
|
assignAxes,
|
|
1479
1501
|
authorDisplayName,
|
|
1502
|
+
authoredRuntimeSpec,
|
|
1480
1503
|
badgeVariants,
|
|
1481
1504
|
bucketTasks,
|
|
1482
1505
|
buildCommandHref,
|
|
@@ -1491,6 +1514,7 @@ export {
|
|
|
1491
1514
|
buildThreadListHandlers,
|
|
1492
1515
|
buttonVariants,
|
|
1493
1516
|
cacheQueryKeys,
|
|
1517
|
+
calculateComboboxMenuPosition,
|
|
1494
1518
|
calloutVariantStyles,
|
|
1495
1519
|
changeIconAliases,
|
|
1496
1520
|
chooseTimestampFormat,
|
|
@@ -1500,9 +1524,11 @@ export {
|
|
|
1500
1524
|
cn,
|
|
1501
1525
|
collapseSingleChildChains,
|
|
1502
1526
|
collectFrameworks,
|
|
1527
|
+
comboboxLabelPadding,
|
|
1503
1528
|
commentCountForPrefix,
|
|
1504
1529
|
compactStackPath,
|
|
1505
1530
|
computeLineDiff,
|
|
1531
|
+
conditionText,
|
|
1506
1532
|
contextItemFromEntityRow,
|
|
1507
1533
|
copyText,
|
|
1508
1534
|
countGoroutinesByState,
|
|
@@ -1513,6 +1539,7 @@ export {
|
|
|
1513
1539
|
createCacheClient,
|
|
1514
1540
|
createCacheRegistry,
|
|
1515
1541
|
createChecklistMarkdown,
|
|
1542
|
+
createComboboxCustomEntry,
|
|
1516
1543
|
createFenceMarkdown,
|
|
1517
1544
|
createLazyJSONPathTree,
|
|
1518
1545
|
createOperationsApiClient,
|
|
@@ -1531,14 +1558,18 @@ export {
|
|
|
1531
1558
|
detectDumpFormat,
|
|
1532
1559
|
dottedAnchorResolver,
|
|
1533
1560
|
duplicateIndex,
|
|
1561
|
+
duplicateName,
|
|
1562
|
+
duplicateRecord,
|
|
1534
1563
|
effectiveProperties,
|
|
1535
1564
|
emptyCommentFilters,
|
|
1536
1565
|
emptyLogTailBuffer,
|
|
1537
1566
|
emptyTestFilters,
|
|
1567
|
+
emptyVerifySummary,
|
|
1538
1568
|
encodeFilterState,
|
|
1539
1569
|
encodeTailParams,
|
|
1540
1570
|
entityContextItemID,
|
|
1541
1571
|
exactAnchorResolver,
|
|
1572
|
+
familyForModel,
|
|
1542
1573
|
filterOperationsByDomain,
|
|
1543
1574
|
filterStateToRecord,
|
|
1544
1575
|
filterTests,
|
|
@@ -1591,6 +1622,7 @@ export {
|
|
|
1591
1622
|
isCountryCode,
|
|
1592
1623
|
isFailedOrWarn,
|
|
1593
1624
|
isGroupCollapsedByDefault,
|
|
1625
|
+
isHintField,
|
|
1594
1626
|
isLeaf,
|
|
1595
1627
|
isNearTop,
|
|
1596
1628
|
isOpenStringMap,
|
|
@@ -1599,6 +1631,7 @@ export {
|
|
|
1599
1631
|
isPlainObject,
|
|
1600
1632
|
isPositionalParam,
|
|
1601
1633
|
isRuntimeFrame,
|
|
1634
|
+
isSpecRuntimeMode,
|
|
1602
1635
|
isTerminalSessionState,
|
|
1603
1636
|
isTerminalStatus,
|
|
1604
1637
|
isTourFinished,
|
|
@@ -1614,12 +1647,19 @@ export {
|
|
|
1614
1647
|
matchMentionsInBody,
|
|
1615
1648
|
matchesFilterState,
|
|
1616
1649
|
matchesIf,
|
|
1650
|
+
matchingTools,
|
|
1617
1651
|
memoryTourStorage,
|
|
1652
|
+
mergeRuntimeSpec,
|
|
1618
1653
|
mergeSeries,
|
|
1619
1654
|
mockMarkdownPreview,
|
|
1655
|
+
modeOptionFor,
|
|
1620
1656
|
modeToFormat,
|
|
1621
1657
|
moveItem,
|
|
1658
|
+
multipleComboboxLabel,
|
|
1659
|
+
newPresetRecord,
|
|
1660
|
+
newProfileRecord,
|
|
1622
1661
|
nextChecklistStatus,
|
|
1662
|
+
nextNewName,
|
|
1623
1663
|
nextTriState,
|
|
1624
1664
|
normalizeErrorDiagnostics,
|
|
1625
1665
|
normalizeLogsTableRows,
|
|
@@ -1648,17 +1688,26 @@ export {
|
|
|
1648
1688
|
parseUnitAwareValue,
|
|
1649
1689
|
parseWorkloadKey,
|
|
1650
1690
|
pathParamNames,
|
|
1691
|
+
patternValues,
|
|
1692
|
+
patternsText,
|
|
1693
|
+
permissionTarget,
|
|
1651
1694
|
preferredEndpointPort,
|
|
1652
1695
|
prefixAdapter,
|
|
1696
|
+
presetForRef,
|
|
1697
|
+
presetsOf,
|
|
1653
1698
|
processLabel,
|
|
1654
1699
|
processStateColor,
|
|
1655
1700
|
processStateIcon,
|
|
1656
1701
|
pruneNullNodes,
|
|
1657
1702
|
readPreferences,
|
|
1658
1703
|
recordToFilterState,
|
|
1704
|
+
referencedBy,
|
|
1659
1705
|
registerDebugConsole,
|
|
1660
1706
|
rehydrateRefs,
|
|
1707
|
+
removeCondition,
|
|
1661
1708
|
removeIndex,
|
|
1709
|
+
reorderProfilePresets,
|
|
1710
|
+
replaceMatchField,
|
|
1662
1711
|
resolveBreakdown,
|
|
1663
1712
|
resolveControl,
|
|
1664
1713
|
resolveFacetOption,
|
|
@@ -1669,10 +1718,12 @@ export {
|
|
|
1669
1718
|
resolveSize,
|
|
1670
1719
|
resolveStatusConfig,
|
|
1671
1720
|
revealDebugConsole,
|
|
1721
|
+
runtimeModeFromModel,
|
|
1672
1722
|
schemaKeys,
|
|
1673
1723
|
segment,
|
|
1674
1724
|
selectAnchorThreads,
|
|
1675
1725
|
selectUnresolvedThreads,
|
|
1726
|
+
selectionAfterDelete,
|
|
1676
1727
|
serializeEndpointValue,
|
|
1677
1728
|
serializeMultiFilterValue,
|
|
1678
1729
|
serializeSecretRef,
|
|
@@ -1690,18 +1741,21 @@ export {
|
|
|
1690
1741
|
slugify,
|
|
1691
1742
|
sortReplies,
|
|
1692
1743
|
splitCommaValues,
|
|
1744
|
+
splitOnComboboxSeparators,
|
|
1693
1745
|
splitPath,
|
|
1694
1746
|
splitSelectionActions,
|
|
1695
1747
|
splitTagToken,
|
|
1696
1748
|
statusIconFor,
|
|
1697
1749
|
statusToneFor,
|
|
1698
1750
|
stopLogSession,
|
|
1751
|
+
strategyPreset,
|
|
1699
1752
|
strictAnchorResolver,
|
|
1700
1753
|
stringifyFixtureYaml,
|
|
1701
1754
|
submitValue,
|
|
1702
1755
|
subscribeToDebugConsole,
|
|
1703
1756
|
sum,
|
|
1704
1757
|
sumNonTaskTests,
|
|
1758
|
+
summarizeVerifyNodes,
|
|
1705
1759
|
tagActionsFromRecord,
|
|
1706
1760
|
tagFilterTokens,
|
|
1707
1761
|
taskGroupErrorCount,
|
|
@@ -1717,9 +1771,13 @@ export {
|
|
|
1717
1771
|
templateValuePre,
|
|
1718
1772
|
testStatus,
|
|
1719
1773
|
toneToBadgeTone,
|
|
1774
|
+
toolFieldSuggestions,
|
|
1720
1775
|
totalDuration,
|
|
1721
1776
|
truncatePlain,
|
|
1777
|
+
uniqueName,
|
|
1778
|
+
updateCondition,
|
|
1722
1779
|
updateFilterSelection,
|
|
1780
|
+
updatePatternCondition,
|
|
1723
1781
|
useBrowserRouter,
|
|
1724
1782
|
useClickyExport,
|
|
1725
1783
|
useCommentAnchorActionsOptional,
|
|
@@ -1758,8 +1816,12 @@ export {
|
|
|
1758
1816
|
useToast,
|
|
1759
1817
|
useTour,
|
|
1760
1818
|
useTourLayer,
|
|
1819
|
+
verificationAdapters,
|
|
1820
|
+
verifyReportCounts,
|
|
1821
|
+
verifyReportTests,
|
|
1761
1822
|
visibleConnectionLogEvents,
|
|
1762
1823
|
withBasePath,
|
|
1824
|
+
withSelectedComboboxOptions,
|
|
1763
1825
|
workloadKey,
|
|
1764
1826
|
workloadKindLabel,
|
|
1765
1827
|
workloadStatusLabel,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const toolPolicy = require("../data/chat/tool-policy.cjs");
|
|
4
|
+
const PATTERN_FIELDS = [
|
|
5
|
+
"name",
|
|
6
|
+
"group",
|
|
7
|
+
"parent",
|
|
8
|
+
"entity",
|
|
9
|
+
"action",
|
|
10
|
+
"verb",
|
|
11
|
+
"method",
|
|
12
|
+
"scope"
|
|
13
|
+
];
|
|
14
|
+
const HINT_FIELDS = ["readOnly", "destructive", "idempotent"];
|
|
15
|
+
const MATCH_FIELDS = [...PATTERN_FIELDS, ...HINT_FIELDS];
|
|
16
|
+
const STRATEGY_PRESETS = [
|
|
17
|
+
{
|
|
18
|
+
value: "all",
|
|
19
|
+
label: "All tools",
|
|
20
|
+
description: "Match every tool in the catalog."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
value: "read-only",
|
|
24
|
+
label: "Read-only tools",
|
|
25
|
+
description: "Match tools explicitly marked read-only."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
value: "destructive",
|
|
29
|
+
label: "Destructive tools",
|
|
30
|
+
description: "Match tools explicitly marked destructive."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
value: "idempotent",
|
|
34
|
+
label: "Idempotent tools",
|
|
35
|
+
description: "Match tools safe to repeat."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
value: "custom",
|
|
39
|
+
label: "Custom conditions",
|
|
40
|
+
description: "Combine tool metadata and safety annotations."
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
const MATCH_FIELD_OPTIONS = [
|
|
44
|
+
{ value: "name", label: "Tool name" },
|
|
45
|
+
{ value: "group", label: "Group" },
|
|
46
|
+
{ value: "parent", label: "Parent" },
|
|
47
|
+
{ value: "entity", label: "Entity" },
|
|
48
|
+
{ value: "action", label: "Action" },
|
|
49
|
+
{ value: "verb", label: "Verb" },
|
|
50
|
+
{ value: "method", label: "HTTP method" },
|
|
51
|
+
{ value: "scope", label: "Scope" },
|
|
52
|
+
{ value: "readOnly", label: "Read only" },
|
|
53
|
+
{ value: "destructive", label: "Destructive" },
|
|
54
|
+
{ value: "idempotent", label: "Idempotent" }
|
|
55
|
+
];
|
|
56
|
+
function strategyPreset(rule) {
|
|
57
|
+
const fields = activeMatchFields(rule);
|
|
58
|
+
if (fields.length !== 1) return "custom";
|
|
59
|
+
if (fields[0] === "name" && patternsText(rule.name) === "*") return "all";
|
|
60
|
+
if (fields[0] === "readOnly" && rule.readOnly === true) return "read-only";
|
|
61
|
+
if (fields[0] === "destructive" && rule.destructive === true) {
|
|
62
|
+
return "destructive";
|
|
63
|
+
}
|
|
64
|
+
if (fields[0] === "idempotent" && rule.idempotent === true) {
|
|
65
|
+
return "idempotent";
|
|
66
|
+
}
|
|
67
|
+
return "custom";
|
|
68
|
+
}
|
|
69
|
+
function applyStrategyPreset(rule, preset) {
|
|
70
|
+
if (preset === "all") return { name: "*", policy: rule.policy };
|
|
71
|
+
if (preset === "read-only") return { readOnly: true, policy: rule.policy };
|
|
72
|
+
if (preset === "destructive")
|
|
73
|
+
return { destructive: true, policy: rule.policy };
|
|
74
|
+
return { idempotent: true, policy: rule.policy };
|
|
75
|
+
}
|
|
76
|
+
function activeMatchFields(rule) {
|
|
77
|
+
return MATCH_FIELDS.filter((field) => rule[field] !== void 0);
|
|
78
|
+
}
|
|
79
|
+
function patternsText(value) {
|
|
80
|
+
return typeof value === "string" ? value : (value ?? []).join(", ");
|
|
81
|
+
}
|
|
82
|
+
function patternValues(value) {
|
|
83
|
+
return typeof value === "string" ? value ? [value] : [] : value ?? [];
|
|
84
|
+
}
|
|
85
|
+
function updatePatternCondition({
|
|
86
|
+
rule,
|
|
87
|
+
field,
|
|
88
|
+
value
|
|
89
|
+
}) {
|
|
90
|
+
return { ...rule, [field]: value };
|
|
91
|
+
}
|
|
92
|
+
function conditionText(rule, field) {
|
|
93
|
+
if (isHintField(field)) return String(rule[field]);
|
|
94
|
+
return patternsText(rule[field]);
|
|
95
|
+
}
|
|
96
|
+
function replaceMatchField(rule, current, next) {
|
|
97
|
+
if (current === next) return rule;
|
|
98
|
+
const match = { ...rule };
|
|
99
|
+
const previous = match[current];
|
|
100
|
+
delete match[current];
|
|
101
|
+
match[next] = isHintField(next) ? typeof previous === "boolean" ? previous : true : typeof previous === "string" || Array.isArray(previous) ? previous : "*";
|
|
102
|
+
return match;
|
|
103
|
+
}
|
|
104
|
+
function updateCondition(rule, field, value) {
|
|
105
|
+
if (isHintField(field)) return { ...rule, [field]: value === "true" };
|
|
106
|
+
const patterns = value.split(",").map((item) => item.trim()).filter(Boolean);
|
|
107
|
+
return {
|
|
108
|
+
...rule,
|
|
109
|
+
[field]: patterns.length <= 1 ? patterns[0] ?? "" : patterns
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function removeCondition(rule, field) {
|
|
113
|
+
const next = { ...rule };
|
|
114
|
+
delete next[field];
|
|
115
|
+
if (activeMatchFields(next).length === 0) next.name = "*";
|
|
116
|
+
return next;
|
|
117
|
+
}
|
|
118
|
+
function addCondition(rule, field) {
|
|
119
|
+
if (rule[field] !== void 0) return rule;
|
|
120
|
+
return { ...rule, [field]: isHintField(field) ? true : "*" };
|
|
121
|
+
}
|
|
122
|
+
function isHintField(field) {
|
|
123
|
+
return HINT_FIELDS.includes(field);
|
|
124
|
+
}
|
|
125
|
+
function matchingTools(rule, tools) {
|
|
126
|
+
return tools.filter((tool) => toolPolicy.matchesTool(rule, tool));
|
|
127
|
+
}
|
|
128
|
+
function toolFieldSuggestions(tools, field) {
|
|
129
|
+
const values = /* @__PURE__ */ new Set();
|
|
130
|
+
for (const tool of tools) {
|
|
131
|
+
const value = tool[field === "name" ? "name" : field];
|
|
132
|
+
if (typeof value === "string" && value.trim()) values.add(value);
|
|
133
|
+
}
|
|
134
|
+
return Array.from(values).sort((left, right) => left.localeCompare(right));
|
|
135
|
+
}
|
|
136
|
+
exports.HINT_FIELDS = HINT_FIELDS;
|
|
137
|
+
exports.MATCH_FIELDS = MATCH_FIELDS;
|
|
138
|
+
exports.MATCH_FIELD_OPTIONS = MATCH_FIELD_OPTIONS;
|
|
139
|
+
exports.PATTERN_FIELDS = PATTERN_FIELDS;
|
|
140
|
+
exports.STRATEGY_PRESETS = STRATEGY_PRESETS;
|
|
141
|
+
exports.activeMatchFields = activeMatchFields;
|
|
142
|
+
exports.addCondition = addCondition;
|
|
143
|
+
exports.applyStrategyPreset = applyStrategyPreset;
|
|
144
|
+
exports.conditionText = conditionText;
|
|
145
|
+
exports.isHintField = isHintField;
|
|
146
|
+
exports.matchingTools = matchingTools;
|
|
147
|
+
exports.patternValues = patternValues;
|
|
148
|
+
exports.patternsText = patternsText;
|
|
149
|
+
exports.removeCondition = removeCondition;
|
|
150
|
+
exports.replaceMatchField = replaceMatchField;
|
|
151
|
+
exports.strategyPreset = strategyPreset;
|
|
152
|
+
exports.toolFieldSuggestions = toolFieldSuggestions;
|
|
153
|
+
exports.updateCondition = updateCondition;
|
|
154
|
+
exports.updatePatternCondition = updatePatternCondition;
|
|
155
|
+
//# sourceMappingURL=permission-strategies.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-strategies.cjs","sources":["../../src/lib/permission-strategies.ts"],"sourcesContent":["import {\n matchesTool,\n type MatchPatterns,\n type PermissionRule,\n} from \"../data/chat/tool-policy\";\nimport type { ToolMeta } from \"../data/chat/types\";\n\nexport const PATTERN_FIELDS = [\n \"name\",\n \"group\",\n \"parent\",\n \"entity\",\n \"action\",\n \"verb\",\n \"method\",\n \"scope\",\n] as const;\nexport const HINT_FIELDS = [\"readOnly\", \"destructive\", \"idempotent\"] as const;\nexport const MATCH_FIELDS = [...PATTERN_FIELDS, ...HINT_FIELDS] as const;\n\nexport type MatchField = (typeof MATCH_FIELDS)[number];\nexport type StrategyPreset =\n | \"all\"\n | \"read-only\"\n | \"destructive\"\n | \"idempotent\"\n | \"custom\";\n\nexport const STRATEGY_PRESETS: Array<{\n value: StrategyPreset;\n label: string;\n description: string;\n}> = [\n {\n value: \"all\",\n label: \"All tools\",\n description: \"Match every tool in the catalog.\",\n },\n {\n value: \"read-only\",\n label: \"Read-only tools\",\n description: \"Match tools explicitly marked read-only.\",\n },\n {\n value: \"destructive\",\n label: \"Destructive tools\",\n description: \"Match tools explicitly marked destructive.\",\n },\n {\n value: \"idempotent\",\n label: \"Idempotent tools\",\n description: \"Match tools safe to repeat.\",\n },\n {\n value: \"custom\",\n label: \"Custom conditions\",\n description: \"Combine tool metadata and safety annotations.\",\n },\n];\n\nexport const MATCH_FIELD_OPTIONS: Array<{ value: MatchField; label: string }> =\n [\n { value: \"name\", label: \"Tool name\" },\n { value: \"group\", label: \"Group\" },\n { value: \"parent\", label: \"Parent\" },\n { value: \"entity\", label: \"Entity\" },\n { value: \"action\", label: \"Action\" },\n { value: \"verb\", label: \"Verb\" },\n { value: \"method\", label: \"HTTP method\" },\n { value: \"scope\", label: \"Scope\" },\n { value: \"readOnly\", label: \"Read only\" },\n { value: \"destructive\", label: \"Destructive\" },\n { value: \"idempotent\", label: \"Idempotent\" },\n ];\n\nexport function strategyPreset(rule: PermissionRule): StrategyPreset {\n const fields = activeMatchFields(rule);\n if (fields.length !== 1) return \"custom\";\n if (fields[0] === \"name\" && patternsText(rule.name) === \"*\") return \"all\";\n if (fields[0] === \"readOnly\" && rule.readOnly === true) return \"read-only\";\n if (fields[0] === \"destructive\" && rule.destructive === true) {\n return \"destructive\";\n }\n if (fields[0] === \"idempotent\" && rule.idempotent === true) {\n return \"idempotent\";\n }\n return \"custom\";\n}\n\nexport function applyStrategyPreset(\n rule: PermissionRule,\n preset: Exclude<StrategyPreset, \"custom\">,\n): PermissionRule {\n if (preset === \"all\") return { name: \"*\", policy: rule.policy };\n if (preset === \"read-only\") return { readOnly: true, policy: rule.policy };\n if (preset === \"destructive\")\n return { destructive: true, policy: rule.policy };\n return { idempotent: true, policy: rule.policy };\n}\n\nexport function activeMatchFields(rule: PermissionRule): MatchField[] {\n return MATCH_FIELDS.filter((field) => rule[field] !== undefined);\n}\n\nexport function patternsText(value: MatchPatterns | undefined): string {\n return typeof value === \"string\" ? value : (value ?? []).join(\", \");\n}\n\nexport function patternValues(value: MatchPatterns | undefined): string[] {\n return typeof value === \"string\" ? (value ? [value] : []) : (value ?? []);\n}\n\nexport function updatePatternCondition({\n rule,\n field,\n value,\n}: {\n rule: PermissionRule;\n field: (typeof PATTERN_FIELDS)[number];\n value: MatchPatterns;\n}): PermissionRule {\n return { ...rule, [field]: value };\n}\n\nexport function conditionText(rule: PermissionRule, field: MatchField): string {\n if (isHintField(field)) return String(rule[field]);\n return patternsText(rule[field]);\n}\n\nexport function replaceMatchField(\n rule: PermissionRule,\n current: MatchField,\n next: MatchField,\n): PermissionRule {\n if (current === next) return rule;\n const match = { ...rule } as Record<string, unknown>;\n const previous = match[current];\n delete match[current];\n match[next] = isHintField(next)\n ? typeof previous === \"boolean\"\n ? previous\n : true\n : typeof previous === \"string\" || Array.isArray(previous)\n ? previous\n : \"*\";\n return match as PermissionRule;\n}\n\nexport function updateCondition(\n rule: PermissionRule,\n field: MatchField,\n value: string,\n): PermissionRule {\n if (isHintField(field)) return { ...rule, [field]: value === \"true\" };\n const patterns = value\n .split(\",\")\n .map((item) => item.trim())\n .filter(Boolean);\n return {\n ...rule,\n [field]: patterns.length <= 1 ? (patterns[0] ?? \"\") : patterns,\n };\n}\n\nexport function removeCondition(\n rule: PermissionRule,\n field: MatchField,\n): PermissionRule {\n const next = { ...rule } as Record<string, unknown>;\n delete next[field];\n if (activeMatchFields(next as PermissionRule).length === 0) next.name = \"*\";\n return next as PermissionRule;\n}\n\nexport function addCondition(\n rule: PermissionRule,\n field: MatchField,\n): PermissionRule {\n if (rule[field] !== undefined) return rule;\n return { ...rule, [field]: isHintField(field) ? true : \"*\" };\n}\n\nexport function isHintField(\n field: MatchField,\n): field is (typeof HINT_FIELDS)[number] {\n return (HINT_FIELDS as readonly MatchField[]).includes(field);\n}\n\nexport function matchingTools(rule: PermissionRule, tools: ToolMeta[]) {\n return tools.filter((tool) => matchesTool(rule, tool));\n}\n\nexport function toolFieldSuggestions(\n tools: ToolMeta[],\n field: Exclude<MatchField, (typeof HINT_FIELDS)[number]>,\n) {\n const values = new Set<string>();\n for (const tool of tools) {\n const value = tool[field === \"name\" ? \"name\" : field];\n if (typeof value === \"string\" && value.trim()) values.add(value);\n }\n return Array.from(values).sort((left, right) => left.localeCompare(right));\n}\n"],"names":["matchesTool"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { MatchPatterns, PermissionRule } from '../data/chat/tool-policy';
|
|
2
|
+
import { ToolMeta } from '../data/chat/types';
|
|
3
|
+
export declare const PATTERN_FIELDS: readonly ["name", "group", "parent", "entity", "action", "verb", "method", "scope"];
|
|
4
|
+
export declare const HINT_FIELDS: readonly ["readOnly", "destructive", "idempotent"];
|
|
5
|
+
export declare const MATCH_FIELDS: readonly ["name", "group", "parent", "entity", "action", "verb", "method", "scope", "readOnly", "destructive", "idempotent"];
|
|
6
|
+
export type MatchField = (typeof MATCH_FIELDS)[number];
|
|
7
|
+
export type StrategyPreset = "all" | "read-only" | "destructive" | "idempotent" | "custom";
|
|
8
|
+
export declare const STRATEGY_PRESETS: Array<{
|
|
9
|
+
value: StrategyPreset;
|
|
10
|
+
label: string;
|
|
11
|
+
description: string;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const MATCH_FIELD_OPTIONS: Array<{
|
|
14
|
+
value: MatchField;
|
|
15
|
+
label: string;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function strategyPreset(rule: PermissionRule): StrategyPreset;
|
|
18
|
+
export declare function applyStrategyPreset(rule: PermissionRule, preset: Exclude<StrategyPreset, "custom">): PermissionRule;
|
|
19
|
+
export declare function activeMatchFields(rule: PermissionRule): MatchField[];
|
|
20
|
+
export declare function patternsText(value: MatchPatterns | undefined): string;
|
|
21
|
+
export declare function patternValues(value: MatchPatterns | undefined): string[];
|
|
22
|
+
export declare function updatePatternCondition({ rule, field, value, }: {
|
|
23
|
+
rule: PermissionRule;
|
|
24
|
+
field: (typeof PATTERN_FIELDS)[number];
|
|
25
|
+
value: MatchPatterns;
|
|
26
|
+
}): PermissionRule;
|
|
27
|
+
export declare function conditionText(rule: PermissionRule, field: MatchField): string;
|
|
28
|
+
export declare function replaceMatchField(rule: PermissionRule, current: MatchField, next: MatchField): PermissionRule;
|
|
29
|
+
export declare function updateCondition(rule: PermissionRule, field: MatchField, value: string): PermissionRule;
|
|
30
|
+
export declare function removeCondition(rule: PermissionRule, field: MatchField): PermissionRule;
|
|
31
|
+
export declare function addCondition(rule: PermissionRule, field: MatchField): PermissionRule;
|
|
32
|
+
export declare function isHintField(field: MatchField): field is (typeof HINT_FIELDS)[number];
|
|
33
|
+
export declare function matchingTools(rule: PermissionRule, tools: ToolMeta[]): ToolMeta[];
|
|
34
|
+
export declare function toolFieldSuggestions(tools: ToolMeta[], field: Exclude<MatchField, (typeof HINT_FIELDS)[number]>): string[];
|
|
35
|
+
//# sourceMappingURL=permission-strategies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-strategies.d.ts","sourceRoot":"","sources":["../../src/lib/permission-strategies.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,eAAO,MAAM,cAAc,qFASjB,CAAC;AACX,eAAO,MAAM,WAAW,oDAAqD,CAAC;AAC9E,eAAO,MAAM,YAAY,8HAA+C,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,WAAW,GACX,aAAa,GACb,YAAY,GACZ,QAAQ,CAAC;AAEb,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC;IACnC,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CA0BA,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAazE,CAAC;AAEJ,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAYnE;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,GACxC,cAAc,CAMhB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,EAAE,CAEpE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAErE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,EAAE,CAExE;AAED,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,KAAK,EACL,KAAK,GACN,EAAE;IACD,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,EAAE,aAAa,CAAC;CACtB,GAAG,cAAc,CAEjB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAG7E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,UAAU,GACf,cAAc,CAahB;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,GACZ,cAAc,CAUhB;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,UAAU,GAChB,cAAc,CAKhB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,UAAU,GAChB,cAAc,CAGhB;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,GAChB,KAAK,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAEvC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,cAEpE;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,YAQzD"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { matchesTool } from "../data/chat/tool-policy.js";
|
|
2
|
+
const PATTERN_FIELDS = [
|
|
3
|
+
"name",
|
|
4
|
+
"group",
|
|
5
|
+
"parent",
|
|
6
|
+
"entity",
|
|
7
|
+
"action",
|
|
8
|
+
"verb",
|
|
9
|
+
"method",
|
|
10
|
+
"scope"
|
|
11
|
+
];
|
|
12
|
+
const HINT_FIELDS = ["readOnly", "destructive", "idempotent"];
|
|
13
|
+
const MATCH_FIELDS = [...PATTERN_FIELDS, ...HINT_FIELDS];
|
|
14
|
+
const STRATEGY_PRESETS = [
|
|
15
|
+
{
|
|
16
|
+
value: "all",
|
|
17
|
+
label: "All tools",
|
|
18
|
+
description: "Match every tool in the catalog."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
value: "read-only",
|
|
22
|
+
label: "Read-only tools",
|
|
23
|
+
description: "Match tools explicitly marked read-only."
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
value: "destructive",
|
|
27
|
+
label: "Destructive tools",
|
|
28
|
+
description: "Match tools explicitly marked destructive."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
value: "idempotent",
|
|
32
|
+
label: "Idempotent tools",
|
|
33
|
+
description: "Match tools safe to repeat."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
value: "custom",
|
|
37
|
+
label: "Custom conditions",
|
|
38
|
+
description: "Combine tool metadata and safety annotations."
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
const MATCH_FIELD_OPTIONS = [
|
|
42
|
+
{ value: "name", label: "Tool name" },
|
|
43
|
+
{ value: "group", label: "Group" },
|
|
44
|
+
{ value: "parent", label: "Parent" },
|
|
45
|
+
{ value: "entity", label: "Entity" },
|
|
46
|
+
{ value: "action", label: "Action" },
|
|
47
|
+
{ value: "verb", label: "Verb" },
|
|
48
|
+
{ value: "method", label: "HTTP method" },
|
|
49
|
+
{ value: "scope", label: "Scope" },
|
|
50
|
+
{ value: "readOnly", label: "Read only" },
|
|
51
|
+
{ value: "destructive", label: "Destructive" },
|
|
52
|
+
{ value: "idempotent", label: "Idempotent" }
|
|
53
|
+
];
|
|
54
|
+
function strategyPreset(rule) {
|
|
55
|
+
const fields = activeMatchFields(rule);
|
|
56
|
+
if (fields.length !== 1) return "custom";
|
|
57
|
+
if (fields[0] === "name" && patternsText(rule.name) === "*") return "all";
|
|
58
|
+
if (fields[0] === "readOnly" && rule.readOnly === true) return "read-only";
|
|
59
|
+
if (fields[0] === "destructive" && rule.destructive === true) {
|
|
60
|
+
return "destructive";
|
|
61
|
+
}
|
|
62
|
+
if (fields[0] === "idempotent" && rule.idempotent === true) {
|
|
63
|
+
return "idempotent";
|
|
64
|
+
}
|
|
65
|
+
return "custom";
|
|
66
|
+
}
|
|
67
|
+
function applyStrategyPreset(rule, preset) {
|
|
68
|
+
if (preset === "all") return { name: "*", policy: rule.policy };
|
|
69
|
+
if (preset === "read-only") return { readOnly: true, policy: rule.policy };
|
|
70
|
+
if (preset === "destructive")
|
|
71
|
+
return { destructive: true, policy: rule.policy };
|
|
72
|
+
return { idempotent: true, policy: rule.policy };
|
|
73
|
+
}
|
|
74
|
+
function activeMatchFields(rule) {
|
|
75
|
+
return MATCH_FIELDS.filter((field) => rule[field] !== void 0);
|
|
76
|
+
}
|
|
77
|
+
function patternsText(value) {
|
|
78
|
+
return typeof value === "string" ? value : (value ?? []).join(", ");
|
|
79
|
+
}
|
|
80
|
+
function patternValues(value) {
|
|
81
|
+
return typeof value === "string" ? value ? [value] : [] : value ?? [];
|
|
82
|
+
}
|
|
83
|
+
function updatePatternCondition({
|
|
84
|
+
rule,
|
|
85
|
+
field,
|
|
86
|
+
value
|
|
87
|
+
}) {
|
|
88
|
+
return { ...rule, [field]: value };
|
|
89
|
+
}
|
|
90
|
+
function conditionText(rule, field) {
|
|
91
|
+
if (isHintField(field)) return String(rule[field]);
|
|
92
|
+
return patternsText(rule[field]);
|
|
93
|
+
}
|
|
94
|
+
function replaceMatchField(rule, current, next) {
|
|
95
|
+
if (current === next) return rule;
|
|
96
|
+
const match = { ...rule };
|
|
97
|
+
const previous = match[current];
|
|
98
|
+
delete match[current];
|
|
99
|
+
match[next] = isHintField(next) ? typeof previous === "boolean" ? previous : true : typeof previous === "string" || Array.isArray(previous) ? previous : "*";
|
|
100
|
+
return match;
|
|
101
|
+
}
|
|
102
|
+
function updateCondition(rule, field, value) {
|
|
103
|
+
if (isHintField(field)) return { ...rule, [field]: value === "true" };
|
|
104
|
+
const patterns = value.split(",").map((item) => item.trim()).filter(Boolean);
|
|
105
|
+
return {
|
|
106
|
+
...rule,
|
|
107
|
+
[field]: patterns.length <= 1 ? patterns[0] ?? "" : patterns
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function removeCondition(rule, field) {
|
|
111
|
+
const next = { ...rule };
|
|
112
|
+
delete next[field];
|
|
113
|
+
if (activeMatchFields(next).length === 0) next.name = "*";
|
|
114
|
+
return next;
|
|
115
|
+
}
|
|
116
|
+
function addCondition(rule, field) {
|
|
117
|
+
if (rule[field] !== void 0) return rule;
|
|
118
|
+
return { ...rule, [field]: isHintField(field) ? true : "*" };
|
|
119
|
+
}
|
|
120
|
+
function isHintField(field) {
|
|
121
|
+
return HINT_FIELDS.includes(field);
|
|
122
|
+
}
|
|
123
|
+
function matchingTools(rule, tools) {
|
|
124
|
+
return tools.filter((tool) => matchesTool(rule, tool));
|
|
125
|
+
}
|
|
126
|
+
function toolFieldSuggestions(tools, field) {
|
|
127
|
+
const values = /* @__PURE__ */ new Set();
|
|
128
|
+
for (const tool of tools) {
|
|
129
|
+
const value = tool[field === "name" ? "name" : field];
|
|
130
|
+
if (typeof value === "string" && value.trim()) values.add(value);
|
|
131
|
+
}
|
|
132
|
+
return Array.from(values).sort((left, right) => left.localeCompare(right));
|
|
133
|
+
}
|
|
134
|
+
export {
|
|
135
|
+
HINT_FIELDS,
|
|
136
|
+
MATCH_FIELDS,
|
|
137
|
+
MATCH_FIELD_OPTIONS,
|
|
138
|
+
PATTERN_FIELDS,
|
|
139
|
+
STRATEGY_PRESETS,
|
|
140
|
+
activeMatchFields,
|
|
141
|
+
addCondition,
|
|
142
|
+
applyStrategyPreset,
|
|
143
|
+
conditionText,
|
|
144
|
+
isHintField,
|
|
145
|
+
matchingTools,
|
|
146
|
+
patternValues,
|
|
147
|
+
patternsText,
|
|
148
|
+
removeCondition,
|
|
149
|
+
replaceMatchField,
|
|
150
|
+
strategyPreset,
|
|
151
|
+
toolFieldSuggestions,
|
|
152
|
+
updateCondition,
|
|
153
|
+
updatePatternCondition
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=permission-strategies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-strategies.js","sources":["../../src/lib/permission-strategies.ts"],"sourcesContent":["import {\n matchesTool,\n type MatchPatterns,\n type PermissionRule,\n} from \"../data/chat/tool-policy\";\nimport type { ToolMeta } from \"../data/chat/types\";\n\nexport const PATTERN_FIELDS = [\n \"name\",\n \"group\",\n \"parent\",\n \"entity\",\n \"action\",\n \"verb\",\n \"method\",\n \"scope\",\n] as const;\nexport const HINT_FIELDS = [\"readOnly\", \"destructive\", \"idempotent\"] as const;\nexport const MATCH_FIELDS = [...PATTERN_FIELDS, ...HINT_FIELDS] as const;\n\nexport type MatchField = (typeof MATCH_FIELDS)[number];\nexport type StrategyPreset =\n | \"all\"\n | \"read-only\"\n | \"destructive\"\n | \"idempotent\"\n | \"custom\";\n\nexport const STRATEGY_PRESETS: Array<{\n value: StrategyPreset;\n label: string;\n description: string;\n}> = [\n {\n value: \"all\",\n label: \"All tools\",\n description: \"Match every tool in the catalog.\",\n },\n {\n value: \"read-only\",\n label: \"Read-only tools\",\n description: \"Match tools explicitly marked read-only.\",\n },\n {\n value: \"destructive\",\n label: \"Destructive tools\",\n description: \"Match tools explicitly marked destructive.\",\n },\n {\n value: \"idempotent\",\n label: \"Idempotent tools\",\n description: \"Match tools safe to repeat.\",\n },\n {\n value: \"custom\",\n label: \"Custom conditions\",\n description: \"Combine tool metadata and safety annotations.\",\n },\n];\n\nexport const MATCH_FIELD_OPTIONS: Array<{ value: MatchField; label: string }> =\n [\n { value: \"name\", label: \"Tool name\" },\n { value: \"group\", label: \"Group\" },\n { value: \"parent\", label: \"Parent\" },\n { value: \"entity\", label: \"Entity\" },\n { value: \"action\", label: \"Action\" },\n { value: \"verb\", label: \"Verb\" },\n { value: \"method\", label: \"HTTP method\" },\n { value: \"scope\", label: \"Scope\" },\n { value: \"readOnly\", label: \"Read only\" },\n { value: \"destructive\", label: \"Destructive\" },\n { value: \"idempotent\", label: \"Idempotent\" },\n ];\n\nexport function strategyPreset(rule: PermissionRule): StrategyPreset {\n const fields = activeMatchFields(rule);\n if (fields.length !== 1) return \"custom\";\n if (fields[0] === \"name\" && patternsText(rule.name) === \"*\") return \"all\";\n if (fields[0] === \"readOnly\" && rule.readOnly === true) return \"read-only\";\n if (fields[0] === \"destructive\" && rule.destructive === true) {\n return \"destructive\";\n }\n if (fields[0] === \"idempotent\" && rule.idempotent === true) {\n return \"idempotent\";\n }\n return \"custom\";\n}\n\nexport function applyStrategyPreset(\n rule: PermissionRule,\n preset: Exclude<StrategyPreset, \"custom\">,\n): PermissionRule {\n if (preset === \"all\") return { name: \"*\", policy: rule.policy };\n if (preset === \"read-only\") return { readOnly: true, policy: rule.policy };\n if (preset === \"destructive\")\n return { destructive: true, policy: rule.policy };\n return { idempotent: true, policy: rule.policy };\n}\n\nexport function activeMatchFields(rule: PermissionRule): MatchField[] {\n return MATCH_FIELDS.filter((field) => rule[field] !== undefined);\n}\n\nexport function patternsText(value: MatchPatterns | undefined): string {\n return typeof value === \"string\" ? value : (value ?? []).join(\", \");\n}\n\nexport function patternValues(value: MatchPatterns | undefined): string[] {\n return typeof value === \"string\" ? (value ? [value] : []) : (value ?? []);\n}\n\nexport function updatePatternCondition({\n rule,\n field,\n value,\n}: {\n rule: PermissionRule;\n field: (typeof PATTERN_FIELDS)[number];\n value: MatchPatterns;\n}): PermissionRule {\n return { ...rule, [field]: value };\n}\n\nexport function conditionText(rule: PermissionRule, field: MatchField): string {\n if (isHintField(field)) return String(rule[field]);\n return patternsText(rule[field]);\n}\n\nexport function replaceMatchField(\n rule: PermissionRule,\n current: MatchField,\n next: MatchField,\n): PermissionRule {\n if (current === next) return rule;\n const match = { ...rule } as Record<string, unknown>;\n const previous = match[current];\n delete match[current];\n match[next] = isHintField(next)\n ? typeof previous === \"boolean\"\n ? previous\n : true\n : typeof previous === \"string\" || Array.isArray(previous)\n ? previous\n : \"*\";\n return match as PermissionRule;\n}\n\nexport function updateCondition(\n rule: PermissionRule,\n field: MatchField,\n value: string,\n): PermissionRule {\n if (isHintField(field)) return { ...rule, [field]: value === \"true\" };\n const patterns = value\n .split(\",\")\n .map((item) => item.trim())\n .filter(Boolean);\n return {\n ...rule,\n [field]: patterns.length <= 1 ? (patterns[0] ?? \"\") : patterns,\n };\n}\n\nexport function removeCondition(\n rule: PermissionRule,\n field: MatchField,\n): PermissionRule {\n const next = { ...rule } as Record<string, unknown>;\n delete next[field];\n if (activeMatchFields(next as PermissionRule).length === 0) next.name = \"*\";\n return next as PermissionRule;\n}\n\nexport function addCondition(\n rule: PermissionRule,\n field: MatchField,\n): PermissionRule {\n if (rule[field] !== undefined) return rule;\n return { ...rule, [field]: isHintField(field) ? true : \"*\" };\n}\n\nexport function isHintField(\n field: MatchField,\n): field is (typeof HINT_FIELDS)[number] {\n return (HINT_FIELDS as readonly MatchField[]).includes(field);\n}\n\nexport function matchingTools(rule: PermissionRule, tools: ToolMeta[]) {\n return tools.filter((tool) => matchesTool(rule, tool));\n}\n\nexport function toolFieldSuggestions(\n tools: ToolMeta[],\n field: Exclude<MatchField, (typeof HINT_FIELDS)[number]>,\n) {\n const values = new Set<string>();\n for (const tool of tools) {\n const value = tool[field === \"name\" ? \"name\" : field];\n if (typeof value === \"string\" && value.trim()) values.add(value);\n }\n return Array.from(values).sort((left, right) => left.localeCompare(right));\n}\n"],"names":[],"mappings":"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"}
|