@flanksource/clicky-ui 0.3.27 → 0.3.28
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/NOTICE.md +14 -0
- package/dist/ai.cjs +52 -6
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +53 -7
- package/dist/ai.js.map +1 -1
- package/dist/comments/CommentCard.cjs +24 -39
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts +9 -2
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +24 -39
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +4 -3
- package/dist/comments/CommentProvider.cjs.map +1 -1
- package/dist/comments/CommentProvider.d.ts +6 -1
- package/dist/comments/CommentProvider.d.ts.map +1 -1
- package/dist/comments/CommentProvider.js +4 -3
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +65 -52
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.d.ts.map +1 -1
- package/dist/comments/CommentSidePanel.js +67 -54
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/CommentThread.cjs +2 -2
- package/dist/comments/CommentThread.cjs.map +1 -1
- package/dist/comments/CommentThread.d.ts +3 -3
- package/dist/comments/CommentThread.d.ts.map +1 -1
- package/dist/comments/CommentThread.js +2 -2
- package/dist/comments/CommentThread.js.map +1 -1
- package/dist/comments/CommentThreadList.cjs +85 -37
- package/dist/comments/CommentThreadList.cjs.map +1 -1
- package/dist/comments/CommentThreadList.d.ts +3 -3
- package/dist/comments/CommentThreadList.d.ts.map +1 -1
- package/dist/comments/CommentThreadList.js +86 -38
- package/dist/comments/CommentThreadList.js.map +1 -1
- package/dist/comments/comment-utils.cjs +26 -0
- package/dist/comments/comment-utils.cjs.map +1 -1
- package/dist/comments/comment-utils.d.ts +11 -0
- package/dist/comments/comment-utils.d.ts.map +1 -1
- package/dist/comments/comment-utils.js +26 -0
- package/dist/comments/comment-utils.js.map +1 -1
- package/dist/comments.cjs +2 -0
- package/dist/comments.cjs.map +1 -1
- package/dist/comments.js +3 -1
- package/dist/components/AccordionList.cjs +3 -0
- package/dist/components/AccordionList.cjs.map +1 -1
- package/dist/components/AccordionList.d.ts +3 -1
- package/dist/components/AccordionList.d.ts.map +1 -1
- package/dist/components/AccordionList.js +3 -0
- package/dist/components/AccordionList.js.map +1 -1
- package/dist/components/CopyButton.cjs +35 -0
- package/dist/components/CopyButton.cjs.map +1 -0
- package/dist/components/CopyButton.d.ts +20 -0
- package/dist/components/CopyButton.d.ts.map +1 -0
- package/dist/components/CopyButton.js +35 -0
- package/dist/components/CopyButton.js.map +1 -0
- package/dist/components/FilterBar.cjs +29 -6
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +10 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +29 -6
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/ListMenu.cjs +4 -1
- package/dist/components/ListMenu.cjs.map +1 -1
- package/dist/components/ListMenu.d.ts +5 -1
- package/dist/components/ListMenu.d.ts.map +1 -1
- package/dist/components/ListMenu.js +4 -1
- package/dist/components/ListMenu.js.map +1 -1
- package/dist/components/SegmentedControl.cjs +4 -2
- package/dist/components/SegmentedControl.cjs.map +1 -1
- package/dist/components/SegmentedControl.d.ts +4 -0
- package/dist/components/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl.js +4 -2
- package/dist/components/SegmentedControl.js.map +1 -1
- package/dist/components/clipboard.cjs +60 -0
- package/dist/components/clipboard.cjs.map +1 -0
- package/dist/components/clipboard.d.ts +13 -0
- package/dist/components/clipboard.d.ts.map +1 -0
- package/dist/components/clipboard.js +60 -0
- package/dist/components/clipboard.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +15 -1
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +15 -1
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-list-array.cjs +113 -0
- package/dist/components/json-schema-form-list-array.cjs.map +1 -0
- package/dist/components/json-schema-form-list-array.d.ts +7 -0
- package/dist/components/json-schema-form-list-array.d.ts.map +1 -0
- package/dist/components/json-schema-form-list-array.js +113 -0
- package/dist/components/json-schema-form-list-array.js.map +1 -0
- package/dist/components/json-schema-form-resolve.cjs +1 -1
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +1 -1
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +1 -1
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components.cjs +5 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +2 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +5 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +4 -1
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.js +4 -1
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +202 -40
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +163 -3
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +202 -40
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs +1 -1
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs.map +1 -1
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js +1 -1
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.cjs +8 -10
- package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.js +8 -10
- package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -1
- package/dist/data/SelectionActionBar.cjs +242 -0
- package/dist/data/SelectionActionBar.cjs.map +1 -0
- package/dist/data/SelectionActionBar.d.ts +28 -0
- package/dist/data/SelectionActionBar.d.ts.map +1 -0
- package/dist/data/SelectionActionBar.js +242 -0
- package/dist/data/SelectionActionBar.js.map +1 -0
- package/dist/data/TaskManager.cjs +34 -12
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +34 -12
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +11 -7
- package/dist/data/TaskManagerButton.cjs.map +1 -1
- package/dist/data/TaskManagerButton.d.ts.map +1 -1
- package/dist/data/TaskManagerButton.js +11 -7
- package/dist/data/TaskManagerButton.js.map +1 -1
- package/dist/data/TaskProgress.cjs +55 -11
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +53 -9
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +2 -4
- 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 +2 -4
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.cjs +1 -2
- package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.js +1 -2
- package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs +262 -0
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts +16 -0
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.js +262 -0
- package/dist/data/ai/PromptCatalog/PromptCatalogTable.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs +77 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts +8 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.js +77 -0
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPage.cjs +332 -0
- package/dist/data/ai/PromptCatalog/PromptPage.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPage.d.ts +17 -0
- package/dist/data/ai/PromptCatalog/PromptPage.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPage.js +332 -0
- package/dist/data/ai/PromptCatalog/PromptPage.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs +102 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts +16 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.js +102 -0
- package/dist/data/ai/PromptCatalog/PromptPageEditor.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs +102 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +10 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.js +102 -0
- package/dist/data/ai/PromptCatalog/PromptPageHeader.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs +90 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts +8 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.js +90 -0
- package/dist/data/ai/PromptCatalog/PromptPagePreview.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs +168 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts +17 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js +168 -0
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs +36 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts +7 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.js +36 -0
- package/dist/data/ai/PromptCatalog/PromptSourceBadge.js.map +1 -0
- package/dist/data/ai/PromptCatalog/index.d.ts +9 -0
- package/dist/data/ai/PromptCatalog/index.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs +137 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts +28 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.js +137 -0
- package/dist/data/ai/PromptCatalog/prompt-catalog-model.js.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.cjs +114 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.cjs.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts +45 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts.map +1 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.js +114 -0
- package/dist/data/ai/PromptCatalog/prompt-page-model.js.map +1 -0
- package/dist/data/ai/PromptCatalog/types.d.ts +70 -0
- package/dist/data/ai/PromptCatalog/types.d.ts.map +1 -0
- package/dist/data/ai/PromptPicker/PromptPicker.cjs +9 -12
- package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.js +9 -12
- package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
- package/dist/data/ai/PromptPicker/index.d.ts +1 -1
- package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/types.cjs.map +1 -1
- package/dist/data/ai/PromptPicker/types.d.ts +9 -0
- package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/types.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.cjs +2 -2
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +3 -3
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.cjs +0 -1
- package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.d.ts +1 -1
- package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.js +0 -1
- package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
- package/dist/data/ai/RuntimeModePicker.cjs +15 -6
- package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
- package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
- package/dist/data/ai/RuntimeModePicker.js +17 -8
- package/dist/data/ai/RuntimeModePicker.js.map +1 -1
- package/dist/data/ai/SessionInspector.collection-types.d.ts +1 -1
- package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.collection.cjs +3 -3
- package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.collection.js +3 -3
- package/dist/data/ai/SessionInspector.collection.js.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
- package/dist/data/ai/SessionInspector.model.cjs +3 -3
- package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.model.d.ts +1 -1
- package/dist/data/ai/SessionInspector.model.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.model.js +3 -3
- package/dist/data/ai/SessionInspector.model.js.map +1 -1
- package/dist/data/ai/SessionInspector.panels.cjs +1 -1
- package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.panels.js +1 -1
- package/dist/data/ai/SessionInspector.panels.js.map +1 -1
- package/dist/data/ai/SessionInspector.summary.cjs +3 -3
- package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.summary.js +3 -3
- package/dist/data/ai/SessionInspector.summary.js.map +1 -1
- package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +3 -2
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +18 -30
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +19 -31
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs +71 -86
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js +72 -87
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.cjs +99 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.d.ts +13 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.js +99 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +34 -23
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +6 -2
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +35 -24
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs +114 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.d.ts +10 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js +114 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.cjs +160 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.d.ts +9 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.js +160 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs +27 -241
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts +5 -6
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js +25 -239
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +21 -8
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts +4 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +22 -9
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.cjs +207 -164
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.d.ts +4 -3
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.js +210 -167
- package/dist/data/ai/SpecRuntimeEditor/SandboxSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs +15 -15
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.js +15 -15
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +120 -42
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts +4 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +123 -45
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/env-model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/env-model.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs +136 -48
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts +13 -3
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js +137 -49
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +93 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.d.ts +6 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +93 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.cjs +35 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.d.ts +5 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.js +35 -0
- package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/presets.cjs +2 -9
- package/dist/data/ai/SpecRuntimeEditor/presets.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/presets.d.ts +1 -2
- package/dist/data/ai/SpecRuntimeEditor/presets.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/presets.js +2 -9
- package/dist/data/ai/SpecRuntimeEditor/presets.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +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/types.cjs +2 -7
- package/dist/data/ai/SpecRuntimeEditor/types.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/types.d.ts +0 -1
- package/dist/data/ai/SpecRuntimeEditor/types.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/types.js +3 -8
- package/dist/data/ai/SpecRuntimeEditor/types.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.cjs +43 -33
- package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts +7 -13
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.js +43 -33
- package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +33 -49
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +52 -29
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +33 -48
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.cjs +276 -0
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.d.ts +58 -0
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.js +276 -0
- package/dist/data/ai/SpecRuntimeEditor.sandbox-model.js.map +1 -0
- package/dist/data/ai/ThreadPicker.cjs +55 -42
- package/dist/data/ai/ThreadPicker.cjs.map +1 -1
- package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
- package/dist/data/ai/ThreadPicker.js +56 -43
- package/dist/data/ai/ThreadPicker.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +9 -1
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +9 -1
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.cjs +41 -487
- package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.d.ts +7 -2
- package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.detail.cjs +238 -0
- package/dist/data/ai/ToolSchemaBrowser.detail.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.detail.d.ts +8 -0
- package/dist/data/ai/ToolSchemaBrowser.detail.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.detail.js +238 -0
- package/dist/data/ai/ToolSchemaBrowser.detail.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +57 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +9 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.js +57 -0
- package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.js +42 -488
- package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.cjs +130 -0
- package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.model.d.ts +35 -0
- package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.model.js +130 -0
- package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +57 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +7 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +57 -0
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +389 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +23 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.js +389 -0
- package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -0
- package/dist/data/ai/agent-action-icons.cjs +14 -6
- package/dist/data/ai/agent-action-icons.cjs.map +1 -1
- package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
- package/dist/data/ai/agent-action-icons.js +14 -6
- package/dist/data/ai/agent-action-icons.js.map +1 -1
- package/dist/data/ai/examples/sessions/claude-complete.cjs +17 -9
- package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -1
- package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -1
- package/dist/data/ai/examples/sessions/claude-complete.js +17 -9
- package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -1
- package/dist/data/ai/examples/sessions/claude.cjs +7 -4
- package/dist/data/ai/examples/sessions/claude.cjs.map +1 -1
- package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -1
- package/dist/data/ai/examples/sessions/claude.js +7 -4
- package/dist/data/ai/examples/sessions/claude.js.map +1 -1
- package/dist/data/ai/examples/sessions/codex-complete.cjs +17 -10
- package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -1
- package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -1
- package/dist/data/ai/examples/sessions/codex-complete.js +17 -10
- package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -1
- package/dist/data/ai/examples/sessions/codex.cjs +7 -4
- package/dist/data/ai/examples/sessions/codex.cjs.map +1 -1
- package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -1
- package/dist/data/ai/examples/sessions/codex.js +7 -4
- package/dist/data/ai/examples/sessions/codex.js.map +1 -1
- package/dist/data/ai/index.d.ts +6 -3
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/runtime-profile.cjs +93 -0
- package/dist/data/ai/runtime-profile.cjs.map +1 -0
- package/dist/data/ai/runtime-profile.d.ts +73 -0
- package/dist/data/ai/runtime-profile.d.ts.map +1 -0
- package/dist/data/ai/runtime-profile.js +93 -0
- package/dist/data/ai/runtime-profile.js.map +1 -0
- package/dist/data/ai/sandbox-kind-meta.cjs +38 -4
- package/dist/data/ai/sandbox-kind-meta.cjs.map +1 -1
- package/dist/data/ai/sandbox-kind-meta.d.ts +3 -0
- package/dist/data/ai/sandbox-kind-meta.d.ts.map +1 -1
- package/dist/data/ai/sandbox-kind-meta.js +38 -4
- package/dist/data/ai/sandbox-kind-meta.js.map +1 -1
- package/dist/data/chat/Chat.cjs +13 -3
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.cjs +3 -3
- package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
- package/dist/data/chat/Chat.fixtures.js +3 -3
- package/dist/data/chat/Chat.fixtures.js.map +1 -1
- package/dist/data/chat/Chat.js +14 -4
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Chat.runtime.cjs +4 -9
- package/dist/data/chat/Chat.runtime.cjs.map +1 -1
- package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
- package/dist/data/chat/Chat.runtime.js +4 -9
- package/dist/data/chat/Chat.runtime.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +5 -5
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.js +5 -5
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +3 -3
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +3 -3
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +3 -3
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/approval.cjs.map +1 -1
- package/dist/data/chat/approval.d.ts +21 -1
- package/dist/data/chat/approval.d.ts.map +1 -1
- package/dist/data/chat/approval.js.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.cjs +5 -0
- package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.js +5 -0
- package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +7 -5
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/chat/usage-snapshot.cjs +21 -1
- package/dist/data/chat/usage-snapshot.cjs.map +1 -1
- package/dist/data/chat/usage-snapshot.d.ts +2 -0
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
- package/dist/data/chat/usage-snapshot.js +22 -2
- package/dist/data/chat/usage-snapshot.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.cjs +29 -16
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts +10 -2
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +31 -18
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.cjs +10 -20
- package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.d.ts +2 -2
- package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.js +11 -21
- package/dist/data/runtime/RuntimeBar.model.js.map +1 -1
- package/dist/data/runtime/RuntimeBarCombo.cjs +11 -6
- package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarCombo.d.ts +3 -1
- package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarCombo.js +11 -6
- package/dist/data/runtime/RuntimeBarCombo.js.map +1 -1
- package/dist/data/runtime/RuntimeBarSegments.cjs +7 -5
- package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarSegments.d.ts +4 -2
- package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarSegments.js +7 -5
- package/dist/data/runtime/RuntimeBarSegments.js.map +1 -1
- package/dist/data/runtime/model-capabilities.cjs +0 -3
- package/dist/data/runtime/model-capabilities.cjs.map +1 -1
- package/dist/data/runtime/model-capabilities.d.ts +0 -1
- package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
- package/dist/data/runtime/model-capabilities.js +0 -3
- package/dist/data/runtime/model-capabilities.js.map +1 -1
- package/dist/data/runtime/provider-status.cjs +1 -1
- package/dist/data/runtime/provider-status.cjs.map +1 -1
- package/dist/data/runtime/provider-status.js +1 -1
- package/dist/data/runtime/provider-status.js.map +1 -1
- package/dist/data/runtime/runtime-field-support.cjs +63 -0
- package/dist/data/runtime/runtime-field-support.cjs.map +1 -0
- package/dist/data/runtime/runtime-field-support.d.ts +13 -0
- package/dist/data/runtime/runtime-field-support.d.ts.map +1 -0
- package/dist/data/runtime/runtime-field-support.js +63 -0
- package/dist/data/runtime/runtime-field-support.js.map +1 -0
- package/dist/data/runtime/runtime-mode.cjs +158 -116
- package/dist/data/runtime/runtime-mode.cjs.map +1 -1
- package/dist/data/runtime/runtime-mode.d.ts +57 -19
- package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
- package/dist/data/runtime/runtime-mode.js +158 -116
- package/dist/data/runtime/runtime-mode.js.map +1 -1
- package/dist/data/selectionActionSplit.cjs +33 -0
- package/dist/data/selectionActionSplit.cjs.map +1 -0
- package/dist/data/selectionActionSplit.d.ts +36 -0
- package/dist/data/selectionActionSplit.d.ts.map +1 -0
- package/dist/data/selectionActionSplit.js +33 -0
- package/dist/data/selectionActionSplit.js.map +1 -0
- package/dist/data/task-copy.cjs +76 -0
- package/dist/data/task-copy.cjs.map +1 -0
- package/dist/data/task-copy.d.ts +12 -0
- package/dist/data/task-copy.d.ts.map +1 -0
- package/dist/data/task-copy.js +76 -0
- package/dist/data/task-copy.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +34 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +4 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +34 -0
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-task-run.cjs +24 -17
- package/dist/hooks/use-task-run.cjs.map +1 -1
- package/dist/hooks/use-task-run.d.ts +3 -1
- package/dist/hooks/use-task-run.d.ts.map +1 -1
- package/dist/hooks/use-task-run.js +25 -18
- package/dist/hooks/use-task-run.js.map +1 -1
- package/dist/icons/components/UiCalendarCheck.cjs +15 -0
- package/dist/icons/components/UiCalendarCheck.cjs.map +1 -0
- package/dist/icons/components/UiCalendarCheck.d.ts +15 -0
- package/dist/icons/components/UiCalendarCheck.d.ts.map +1 -0
- package/dist/icons/components/UiCalendarCheck.js +15 -0
- package/dist/icons/components/UiCalendarCheck.js.map +1 -0
- package/dist/icons/components/UiChartLineUp.cjs +15 -0
- package/dist/icons/components/UiChartLineUp.cjs.map +1 -0
- package/dist/icons/components/UiChartLineUp.d.ts +15 -0
- package/dist/icons/components/UiChartLineUp.d.ts.map +1 -0
- package/dist/icons/components/UiChartLineUp.js +15 -0
- package/dist/icons/components/UiChartLineUp.js.map +1 -0
- package/dist/icons/components/UiClockCountdown.cjs +15 -0
- package/dist/icons/components/UiClockCountdown.cjs.map +1 -0
- package/dist/icons/components/UiClockCountdown.d.ts +15 -0
- package/dist/icons/components/UiClockCountdown.d.ts.map +1 -0
- package/dist/icons/components/UiClockCountdown.js +15 -0
- package/dist/icons/components/UiClockCountdown.js.map +1 -0
- package/dist/icons/components/UiFactory.cjs +15 -0
- package/dist/icons/components/UiFactory.cjs.map +1 -0
- package/dist/icons/components/UiFactory.d.ts +15 -0
- package/dist/icons/components/UiFactory.d.ts.map +1 -0
- package/dist/icons/components/UiFactory.js +15 -0
- package/dist/icons/components/UiFactory.js.map +1 -0
- package/dist/icons/components/UiHandCoins.cjs +15 -0
- package/dist/icons/components/UiHandCoins.cjs.map +1 -0
- package/dist/icons/components/UiHandCoins.d.ts +15 -0
- package/dist/icons/components/UiHandCoins.d.ts.map +1 -0
- package/dist/icons/components/UiHandCoins.js +15 -0
- package/dist/icons/components/UiHandCoins.js.map +1 -0
- package/dist/icons/components/UiInvoice.cjs +15 -0
- package/dist/icons/components/UiInvoice.cjs.map +1 -0
- package/dist/icons/components/UiInvoice.d.ts +15 -0
- package/dist/icons/components/UiInvoice.d.ts.map +1 -0
- package/dist/icons/components/UiInvoice.js +15 -0
- package/dist/icons/components/UiInvoice.js.map +1 -0
- package/dist/icons/components/UiTax.cjs +15 -0
- package/dist/icons/components/UiTax.cjs.map +1 -0
- package/dist/icons/components/UiTax.d.ts +15 -0
- package/dist/icons/components/UiTax.d.ts.map +1 -0
- package/dist/icons/components/UiTax.js +15 -0
- package/dist/icons/components/UiTax.js.map +1 -0
- package/dist/icons/index.d.ts +14 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +14 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +14 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +21 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +21 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +43 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +44 -1
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +17 -3
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +17 -3
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/overlay/DropdownMenu.cjs +46 -35
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.js +46 -35
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/rpc/FilterForm.cjs +26 -11
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.d.ts +4 -1
- package/dist/rpc/FilterForm.d.ts.map +1 -1
- package/dist/rpc/FilterForm.js +26 -11
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/FilterFormFields.cjs +3 -2
- package/dist/rpc/FilterFormFields.cjs.map +1 -1
- package/dist/rpc/FilterFormFields.d.ts +2 -1
- package/dist/rpc/FilterFormFields.d.ts.map +1 -1
- package/dist/rpc/FilterFormFields.js +3 -2
- package/dist/rpc/FilterFormFields.js.map +1 -1
- package/dist/rpc/OperationActionBar.cjs +67 -15
- package/dist/rpc/OperationActionBar.cjs.map +1 -1
- package/dist/rpc/OperationActionBar.d.ts +11 -3
- package/dist/rpc/OperationActionBar.d.ts.map +1 -1
- package/dist/rpc/OperationActionBar.js +68 -16
- package/dist/rpc/OperationActionBar.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +69 -76
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +3 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +69 -76
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationCatalogActions.cjs +69 -0
- package/dist/rpc/OperationCatalogActions.cjs.map +1 -0
- package/dist/rpc/OperationCatalogActions.d.ts +17 -0
- package/dist/rpc/OperationCatalogActions.d.ts.map +1 -0
- package/dist/rpc/OperationCatalogActions.js +69 -0
- package/dist/rpc/OperationCatalogActions.js.map +1 -0
- package/dist/rpc/OperationEntityContextPicker.cjs +129 -116
- package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.d.ts +18 -1
- package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.js +130 -117
- package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +7 -4
- package/dist/rpc/OperationResultView.cjs.map +1 -1
- package/dist/rpc/OperationResultView.d.ts +4 -2
- package/dist/rpc/OperationResultView.d.ts.map +1 -1
- package/dist/rpc/OperationResultView.js +7 -4
- package/dist/rpc/OperationResultView.js.map +1 -1
- package/dist/rpc/operationCatalogUrl.cjs +28 -0
- package/dist/rpc/operationCatalogUrl.cjs.map +1 -0
- package/dist/rpc/operationCatalogUrl.d.ts +3 -0
- package/dist/rpc/operationCatalogUrl.d.ts.map +1 -0
- package/dist/rpc/operationCatalogUrl.js +28 -0
- package/dist/rpc/operationCatalogUrl.js.map +1 -0
- package/dist/rpc/rowNavigation.cjs +4 -3
- package/dist/rpc/rowNavigation.cjs.map +1 -1
- package/dist/rpc/rowNavigation.d.ts +1 -1
- package/dist/rpc/rowNavigation.d.ts.map +1 -1
- package/dist/rpc/rowNavigation.js +4 -3
- package/dist/rpc/rowNavigation.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +2 -2
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/rpc.cjs +2 -0
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +2 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +2 -0
- package/dist/rpc.js.map +1 -1
- package/dist/runtime-profile.cjs +7 -0
- package/dist/runtime-profile.cjs.map +1 -0
- package/dist/runtime-profile.d.ts +2 -0
- package/dist/runtime-profile.d.ts.map +1 -0
- package/dist/runtime-profile.js +7 -0
- package/dist/runtime-profile.js.map +1 -0
- package/dist/styles.css +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpecRuntimeEditor.sandbox-model.cjs","sources":["../../../src/data/ai/SpecRuntimeEditor.sandbox-model.ts"],"sourcesContent":["export const SPEC_PERMISSION_MODES = [\n \"default\",\n \"acceptEdits\",\n \"auto\",\n \"bypassPermissions\",\n \"dontAsk\",\n \"plan\",\n] as const;\n\nexport type SpecPermissionMode = (typeof SPEC_PERMISSION_MODES)[number];\n\nexport const SPEC_SANDBOX_MODES = [\n \"off\",\n \"native\",\n \"docker\",\n \"git-agent\",\n] as const;\n\nexport type SpecSandboxMode = (typeof SPEC_SANDBOX_MODES)[number];\nexport type SpecSandboxFilesystemAccess = \"read-only\" | \"workspace-write\";\nexport type SpecSandboxNetworkAccess =\n | \"disabled\"\n | \"restricted\"\n | \"unrestricted\";\n\nexport type AISpecRuntimeSandboxFilesystemPolicy = {\n access?: SpecSandboxFilesystemAccess;\n writableRoots?: string[];\n readableRoots?: string[];\n deniedReadRoots?: string[];\n deniedWriteRoots?: string[];\n includeSystemTemp?: boolean;\n};\n\nexport type AISpecRuntimeSandboxNetworkPolicy = {\n access?: SpecSandboxNetworkAccess;\n allowedDomains?: string[];\n deniedDomains?: string[];\n allowedUnixSockets?: string[];\n allowAllUnixSockets?: boolean;\n allowLocalBinding?: boolean;\n allowedMachServices?: string[];\n httpProxyPort?: number;\n socksProxyPort?: number;\n};\n\nexport type AISpecRuntimeSandboxPolicy = {\n required?: boolean;\n filesystem?: AISpecRuntimeSandboxFilesystemPolicy;\n network?: AISpecRuntimeSandboxNetworkPolicy;\n commands?: {\n excludedFromSandbox?: string[];\n allowUnsandboxed?: boolean;\n };\n credentials?: {\n deniedFiles?: string[];\n deniedEnv?: string[];\n maskedEnv?: string[];\n };\n platform?: {\n allowAppleEvents?: boolean;\n weakerNestedIsolation?: boolean;\n weakerNetworkIsolation?: boolean;\n };\n};\n\nexport type AISpecRuntimeSandboxDispatch = {\n paths?: string[];\n maxAttempts?: number;\n};\n\nexport type AISpecRuntimeSandbox = {\n mode?: SpecSandboxMode;\n approval?: SpecPermissionMode;\n backend?: string;\n agent?: string;\n policy?: AISpecRuntimeSandboxPolicy;\n dispatch?: AISpecRuntimeSandboxDispatch;\n};\n\nexport function compactRuntimeSandbox(\n value: string | AISpecRuntimeSandbox | undefined,\n): string | AISpecRuntimeSandbox | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") {\n const raw = value.trim();\n return raw ? sandboxMode(raw) : undefined;\n }\n assertKnownKeys(\n value,\n [\"mode\", \"approval\", \"backend\", \"agent\", \"policy\", \"dispatch\"],\n \"sandbox\",\n );\n const configured = Object.values(value).some(\n (item) => item != null && item !== \"\",\n );\n if (!value.mode) {\n if (configured)\n throw new Error(\n \"sandbox.mode is required when sandbox settings are configured\",\n );\n return undefined;\n }\n const mode = sandboxMode(value.mode);\n const approval = permissionMode(value.approval);\n const backend = cleanString(value.backend);\n const agent = cleanString(value.agent);\n const policy = compactNativePolicy(value.policy);\n const dispatch = compactDispatch(value.dispatch);\n\n if (mode === \"off\") {\n rejectSandboxFields(mode, { approval, backend, agent, policy, dispatch });\n return mode;\n }\n if (mode === \"native\") {\n rejectSandboxFields(mode, { backend, agent, dispatch });\n return compactSandboxObject({\n mode,\n ...(approval ? { approval } : {}),\n ...(policy ? { policy } : {}),\n });\n }\n if (mode === \"docker\") {\n rejectSandboxFields(mode, { agent, policy, dispatch });\n return compactSandboxObject({\n mode,\n ...(approval ? { approval } : {}),\n ...(backend ? { backend } : {}),\n });\n }\n rejectSandboxFields(mode, { policy });\n return compactSandboxObject({\n mode,\n ...(approval ? { approval } : {}),\n ...(backend ? { backend } : {}),\n ...(agent ? { agent } : {}),\n ...(dispatch ? { dispatch } : {}),\n });\n}\n\nfunction compactSandboxObject(\n value: AISpecRuntimeSandbox,\n): string | AISpecRuntimeSandbox {\n const entries = Object.entries(value).filter(\n ([, item]) => item !== undefined,\n );\n if (entries.length === 1) return value.mode!;\n return Object.fromEntries(entries) as AISpecRuntimeSandbox;\n}\n\nfunction compactNativePolicy(\n value: AISpecRuntimeSandboxPolicy | undefined,\n): AISpecRuntimeSandboxPolicy | undefined {\n if (!value) return undefined;\n assertKnownKeys(\n value,\n [\n \"required\",\n \"filesystem\",\n \"network\",\n \"commands\",\n \"credentials\",\n \"platform\",\n ],\n \"sandbox.policy\",\n );\n const policy: AISpecRuntimeSandboxPolicy = {};\n if (value.required != null) policy.required = value.required;\n const filesystem = compactFilesystem(value.filesystem);\n if (filesystem) policy.filesystem = filesystem;\n const network = compactNetwork(value.network);\n if (network) policy.network = network;\n const commands = compactBooleanAndLists(\n value.commands,\n [\"excludedFromSandbox\"],\n [\"allowUnsandboxed\"],\n \"sandbox.policy.commands\",\n );\n if (commands) policy.commands = commands;\n const credentials = compactBooleanAndLists(\n value.credentials,\n [\"deniedFiles\", \"deniedEnv\", \"maskedEnv\"],\n [],\n \"sandbox.policy.credentials\",\n );\n if (credentials) policy.credentials = credentials;\n const platform = compactBooleanAndLists(\n value.platform,\n [],\n [\"allowAppleEvents\", \"weakerNestedIsolation\", \"weakerNetworkIsolation\"],\n \"sandbox.policy.platform\",\n );\n if (platform) policy.platform = platform;\n return hasKeys(policy) ? policy : undefined;\n}\n\nfunction compactFilesystem(\n value: AISpecRuntimeSandboxFilesystemPolicy | undefined,\n): AISpecRuntimeSandboxFilesystemPolicy | undefined {\n if (!value) return undefined;\n assertKnownKeys(\n value,\n [\n \"access\",\n \"writableRoots\",\n \"readableRoots\",\n \"deniedReadRoots\",\n \"deniedWriteRoots\",\n \"includeSystemTemp\",\n ],\n \"sandbox.policy.filesystem\",\n );\n const filesystem = compactBooleanAndLists(\n value,\n [\"writableRoots\", \"readableRoots\", \"deniedReadRoots\", \"deniedWriteRoots\"],\n [\"includeSystemTemp\"],\n \"sandbox.policy.filesystem\",\n [\"access\"],\n ) as AISpecRuntimeSandboxFilesystemPolicy | undefined;\n const access = value.access;\n if (access && access !== \"read-only\" && access !== \"workspace-write\") {\n throw new Error(\n `sandbox.policy.filesystem.access ${JSON.stringify(access)} is invalid`,\n );\n }\n if (access) return { ...filesystem, access };\n return filesystem;\n}\n\nfunction compactNetwork(\n value: AISpecRuntimeSandboxNetworkPolicy | undefined,\n): AISpecRuntimeSandboxNetworkPolicy | undefined {\n if (!value) return undefined;\n assertKnownKeys(\n value,\n [\n \"access\",\n \"allowedDomains\",\n \"deniedDomains\",\n \"allowedUnixSockets\",\n \"allowAllUnixSockets\",\n \"allowLocalBinding\",\n \"allowedMachServices\",\n \"httpProxyPort\",\n \"socksProxyPort\",\n ],\n \"sandbox.policy.network\",\n );\n const network = (compactBooleanAndLists(\n value,\n [\n \"allowedDomains\",\n \"deniedDomains\",\n \"allowedUnixSockets\",\n \"allowedMachServices\",\n ],\n [\"allowAllUnixSockets\", \"allowLocalBinding\"],\n \"sandbox.policy.network\",\n [\"access\", \"httpProxyPort\", \"socksProxyPort\"],\n ) ?? {}) as AISpecRuntimeSandboxNetworkPolicy;\n if (\n value.access &&\n ![\"disabled\", \"restricted\", \"unrestricted\"].includes(value.access)\n ) {\n throw new Error(\n `sandbox.policy.network.access ${JSON.stringify(value.access)} is invalid`,\n );\n }\n if (value.access) network.access = value.access;\n for (const key of [\"httpProxyPort\", \"socksProxyPort\"] as const) {\n const port = value[key];\n if (port == null) continue;\n if (!Number.isInteger(port) || port < 1 || port > 65535) {\n throw new Error(\n `sandbox.policy.network.${key} must be between 1 and 65535`,\n );\n }\n network[key] = port;\n }\n return hasKeys(network) ? network : undefined;\n}\n\nfunction compactDispatch(\n value: AISpecRuntimeSandboxDispatch | undefined,\n): AISpecRuntimeSandboxDispatch | undefined {\n if (!value) return undefined;\n assertKnownKeys(value, [\"paths\", \"maxAttempts\"], \"sandbox.dispatch\");\n const dispatch: AISpecRuntimeSandboxDispatch = {};\n const paths = cleanList(value.paths);\n if (paths) dispatch.paths = paths;\n if (value.maxAttempts != null) {\n if (!Number.isInteger(value.maxAttempts) || value.maxAttempts < 0) {\n throw new Error(\n \"sandbox.dispatch.maxAttempts must be a non-negative integer\",\n );\n }\n if (value.maxAttempts > 0) dispatch.maxAttempts = value.maxAttempts;\n }\n return hasKeys(dispatch) ? dispatch : undefined;\n}\n\nfunction compactBooleanAndLists<T extends object>(\n value: T | undefined,\n listKeys: readonly string[],\n booleanKeys: readonly string[],\n path: string,\n additionalKeys: readonly string[] = [],\n): T | undefined {\n if (!value) return undefined;\n assertKnownKeys(\n value,\n [...listKeys, ...booleanKeys, ...additionalKeys],\n path,\n );\n const out: Record<string, unknown> = {};\n for (const key of listKeys) {\n const list = cleanList(\n (value as Record<string, unknown>)[key] as string[] | undefined,\n );\n if (list) out[key] = list;\n }\n for (const key of booleanKeys) {\n const item = (value as Record<string, unknown>)[key];\n if (item != null) out[key] = item;\n }\n return hasKeys(out) ? (out as T) : undefined;\n}\n\nfunction rejectSandboxFields(\n mode: SpecSandboxMode,\n values: Record<string, unknown>,\n) {\n const field = Object.entries(values).find(\n ([, value]) => value !== undefined,\n )?.[0];\n if (field) throw new Error(`sandbox mode ${mode} does not accept ${field}`);\n}\n\nfunction sandboxMode(value: string): SpecSandboxMode {\n const mode = SPEC_SANDBOX_MODES.find((item) => item === value);\n if (!mode)\n throw new Error(`sandbox.mode ${JSON.stringify(value)} is invalid`);\n return mode;\n}\n\nfunction permissionMode(\n value: string | undefined,\n): SpecPermissionMode | undefined {\n if (!value) return undefined;\n const mode = SPEC_PERMISSION_MODES.find((item) => item === value);\n if (!mode)\n throw new Error(`sandbox.approval ${JSON.stringify(value)} is invalid`);\n return mode;\n}\n\nfunction assertKnownKeys(value: object, keys: readonly string[], path: string) {\n const unknown = Object.keys(value).find((key) => !keys.includes(key));\n if (unknown) throw new Error(`${path}.${unknown} is not supported`);\n}\n\nfunction cleanList(value: string[] | undefined) {\n if (!value) return undefined;\n const items = Array.from(\n new Set(value.map((item) => item.trim()).filter(Boolean)),\n );\n return items.length > 0 ? items : undefined;\n}\n\nfunction cleanString(value: string | undefined) {\n return value?.trim() || undefined;\n}\n\nfunction hasKeys(value: object) {\n return Object.keys(value).length > 0;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export declare const SPEC_PERMISSION_MODES: readonly ["default", "acceptEdits", "auto", "bypassPermissions", "dontAsk", "plan"];
|
|
2
|
+
export type SpecPermissionMode = (typeof SPEC_PERMISSION_MODES)[number];
|
|
3
|
+
export declare const SPEC_SANDBOX_MODES: readonly ["off", "native", "docker", "git-agent"];
|
|
4
|
+
export type SpecSandboxMode = (typeof SPEC_SANDBOX_MODES)[number];
|
|
5
|
+
export type SpecSandboxFilesystemAccess = "read-only" | "workspace-write";
|
|
6
|
+
export type SpecSandboxNetworkAccess = "disabled" | "restricted" | "unrestricted";
|
|
7
|
+
export type AISpecRuntimeSandboxFilesystemPolicy = {
|
|
8
|
+
access?: SpecSandboxFilesystemAccess;
|
|
9
|
+
writableRoots?: string[];
|
|
10
|
+
readableRoots?: string[];
|
|
11
|
+
deniedReadRoots?: string[];
|
|
12
|
+
deniedWriteRoots?: string[];
|
|
13
|
+
includeSystemTemp?: boolean;
|
|
14
|
+
};
|
|
15
|
+
export type AISpecRuntimeSandboxNetworkPolicy = {
|
|
16
|
+
access?: SpecSandboxNetworkAccess;
|
|
17
|
+
allowedDomains?: string[];
|
|
18
|
+
deniedDomains?: string[];
|
|
19
|
+
allowedUnixSockets?: string[];
|
|
20
|
+
allowAllUnixSockets?: boolean;
|
|
21
|
+
allowLocalBinding?: boolean;
|
|
22
|
+
allowedMachServices?: string[];
|
|
23
|
+
httpProxyPort?: number;
|
|
24
|
+
socksProxyPort?: number;
|
|
25
|
+
};
|
|
26
|
+
export type AISpecRuntimeSandboxPolicy = {
|
|
27
|
+
required?: boolean;
|
|
28
|
+
filesystem?: AISpecRuntimeSandboxFilesystemPolicy;
|
|
29
|
+
network?: AISpecRuntimeSandboxNetworkPolicy;
|
|
30
|
+
commands?: {
|
|
31
|
+
excludedFromSandbox?: string[];
|
|
32
|
+
allowUnsandboxed?: boolean;
|
|
33
|
+
};
|
|
34
|
+
credentials?: {
|
|
35
|
+
deniedFiles?: string[];
|
|
36
|
+
deniedEnv?: string[];
|
|
37
|
+
maskedEnv?: string[];
|
|
38
|
+
};
|
|
39
|
+
platform?: {
|
|
40
|
+
allowAppleEvents?: boolean;
|
|
41
|
+
weakerNestedIsolation?: boolean;
|
|
42
|
+
weakerNetworkIsolation?: boolean;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
export type AISpecRuntimeSandboxDispatch = {
|
|
46
|
+
paths?: string[];
|
|
47
|
+
maxAttempts?: number;
|
|
48
|
+
};
|
|
49
|
+
export type AISpecRuntimeSandbox = {
|
|
50
|
+
mode?: SpecSandboxMode;
|
|
51
|
+
approval?: SpecPermissionMode;
|
|
52
|
+
backend?: string;
|
|
53
|
+
agent?: string;
|
|
54
|
+
policy?: AISpecRuntimeSandboxPolicy;
|
|
55
|
+
dispatch?: AISpecRuntimeSandboxDispatch;
|
|
56
|
+
};
|
|
57
|
+
export declare function compactRuntimeSandbox(value: string | AISpecRuntimeSandbox | undefined): string | AISpecRuntimeSandbox | undefined;
|
|
58
|
+
//# sourceMappingURL=SpecRuntimeEditor.sandbox-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpecRuntimeEditor.sandbox-model.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SpecRuntimeEditor.sandbox-model.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,qFAOxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB,mDAKrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,MAAM,MAAM,2BAA2B,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAC1E,MAAM,MAAM,wBAAwB,GAChC,UAAU,GACV,YAAY,GACZ,cAAc,CAAC;AAEnB,MAAM,MAAM,oCAAoC,GAAG;IACjD,MAAM,CAAC,EAAE,2BAA2B,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,oCAAoC,CAAC;IAClD,OAAO,CAAC,EAAE,iCAAiC,CAAC;IAC5C,QAAQ,CAAC,EAAE;QACT,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;KAClC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,QAAQ,CAAC,EAAE,4BAA4B,CAAC;CACzC,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,GAC/C,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAwD3C"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
const SPEC_PERMISSION_MODES = [
|
|
2
|
+
"default",
|
|
3
|
+
"acceptEdits",
|
|
4
|
+
"auto",
|
|
5
|
+
"bypassPermissions",
|
|
6
|
+
"dontAsk",
|
|
7
|
+
"plan"
|
|
8
|
+
];
|
|
9
|
+
const SPEC_SANDBOX_MODES = [
|
|
10
|
+
"off",
|
|
11
|
+
"native",
|
|
12
|
+
"docker",
|
|
13
|
+
"git-agent"
|
|
14
|
+
];
|
|
15
|
+
function compactRuntimeSandbox(value) {
|
|
16
|
+
if (value == null) return void 0;
|
|
17
|
+
if (typeof value === "string") {
|
|
18
|
+
const raw = value.trim();
|
|
19
|
+
return raw ? sandboxMode(raw) : void 0;
|
|
20
|
+
}
|
|
21
|
+
assertKnownKeys(
|
|
22
|
+
value,
|
|
23
|
+
["mode", "approval", "backend", "agent", "policy", "dispatch"],
|
|
24
|
+
"sandbox"
|
|
25
|
+
);
|
|
26
|
+
const configured = Object.values(value).some(
|
|
27
|
+
(item) => item != null && item !== ""
|
|
28
|
+
);
|
|
29
|
+
if (!value.mode) {
|
|
30
|
+
if (configured)
|
|
31
|
+
throw new Error(
|
|
32
|
+
"sandbox.mode is required when sandbox settings are configured"
|
|
33
|
+
);
|
|
34
|
+
return void 0;
|
|
35
|
+
}
|
|
36
|
+
const mode = sandboxMode(value.mode);
|
|
37
|
+
const approval = permissionMode(value.approval);
|
|
38
|
+
const backend = cleanString(value.backend);
|
|
39
|
+
const agent = cleanString(value.agent);
|
|
40
|
+
const policy = compactNativePolicy(value.policy);
|
|
41
|
+
const dispatch = compactDispatch(value.dispatch);
|
|
42
|
+
if (mode === "off") {
|
|
43
|
+
rejectSandboxFields(mode, { approval, backend, agent, policy, dispatch });
|
|
44
|
+
return mode;
|
|
45
|
+
}
|
|
46
|
+
if (mode === "native") {
|
|
47
|
+
rejectSandboxFields(mode, { backend, agent, dispatch });
|
|
48
|
+
return compactSandboxObject({
|
|
49
|
+
mode,
|
|
50
|
+
...approval ? { approval } : {},
|
|
51
|
+
...policy ? { policy } : {}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
if (mode === "docker") {
|
|
55
|
+
rejectSandboxFields(mode, { agent, policy, dispatch });
|
|
56
|
+
return compactSandboxObject({
|
|
57
|
+
mode,
|
|
58
|
+
...approval ? { approval } : {},
|
|
59
|
+
...backend ? { backend } : {}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
rejectSandboxFields(mode, { policy });
|
|
63
|
+
return compactSandboxObject({
|
|
64
|
+
mode,
|
|
65
|
+
...approval ? { approval } : {},
|
|
66
|
+
...backend ? { backend } : {},
|
|
67
|
+
...agent ? { agent } : {},
|
|
68
|
+
...dispatch ? { dispatch } : {}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function compactSandboxObject(value) {
|
|
72
|
+
const entries = Object.entries(value).filter(
|
|
73
|
+
([, item]) => item !== void 0
|
|
74
|
+
);
|
|
75
|
+
if (entries.length === 1) return value.mode;
|
|
76
|
+
return Object.fromEntries(entries);
|
|
77
|
+
}
|
|
78
|
+
function compactNativePolicy(value) {
|
|
79
|
+
if (!value) return void 0;
|
|
80
|
+
assertKnownKeys(
|
|
81
|
+
value,
|
|
82
|
+
[
|
|
83
|
+
"required",
|
|
84
|
+
"filesystem",
|
|
85
|
+
"network",
|
|
86
|
+
"commands",
|
|
87
|
+
"credentials",
|
|
88
|
+
"platform"
|
|
89
|
+
],
|
|
90
|
+
"sandbox.policy"
|
|
91
|
+
);
|
|
92
|
+
const policy = {};
|
|
93
|
+
if (value.required != null) policy.required = value.required;
|
|
94
|
+
const filesystem = compactFilesystem(value.filesystem);
|
|
95
|
+
if (filesystem) policy.filesystem = filesystem;
|
|
96
|
+
const network = compactNetwork(value.network);
|
|
97
|
+
if (network) policy.network = network;
|
|
98
|
+
const commands = compactBooleanAndLists(
|
|
99
|
+
value.commands,
|
|
100
|
+
["excludedFromSandbox"],
|
|
101
|
+
["allowUnsandboxed"],
|
|
102
|
+
"sandbox.policy.commands"
|
|
103
|
+
);
|
|
104
|
+
if (commands) policy.commands = commands;
|
|
105
|
+
const credentials = compactBooleanAndLists(
|
|
106
|
+
value.credentials,
|
|
107
|
+
["deniedFiles", "deniedEnv", "maskedEnv"],
|
|
108
|
+
[],
|
|
109
|
+
"sandbox.policy.credentials"
|
|
110
|
+
);
|
|
111
|
+
if (credentials) policy.credentials = credentials;
|
|
112
|
+
const platform = compactBooleanAndLists(
|
|
113
|
+
value.platform,
|
|
114
|
+
[],
|
|
115
|
+
["allowAppleEvents", "weakerNestedIsolation", "weakerNetworkIsolation"],
|
|
116
|
+
"sandbox.policy.platform"
|
|
117
|
+
);
|
|
118
|
+
if (platform) policy.platform = platform;
|
|
119
|
+
return hasKeys(policy) ? policy : void 0;
|
|
120
|
+
}
|
|
121
|
+
function compactFilesystem(value) {
|
|
122
|
+
if (!value) return void 0;
|
|
123
|
+
assertKnownKeys(
|
|
124
|
+
value,
|
|
125
|
+
[
|
|
126
|
+
"access",
|
|
127
|
+
"writableRoots",
|
|
128
|
+
"readableRoots",
|
|
129
|
+
"deniedReadRoots",
|
|
130
|
+
"deniedWriteRoots",
|
|
131
|
+
"includeSystemTemp"
|
|
132
|
+
],
|
|
133
|
+
"sandbox.policy.filesystem"
|
|
134
|
+
);
|
|
135
|
+
const filesystem = compactBooleanAndLists(
|
|
136
|
+
value,
|
|
137
|
+
["writableRoots", "readableRoots", "deniedReadRoots", "deniedWriteRoots"],
|
|
138
|
+
["includeSystemTemp"],
|
|
139
|
+
"sandbox.policy.filesystem",
|
|
140
|
+
["access"]
|
|
141
|
+
);
|
|
142
|
+
const access = value.access;
|
|
143
|
+
if (access && access !== "read-only" && access !== "workspace-write") {
|
|
144
|
+
throw new Error(
|
|
145
|
+
`sandbox.policy.filesystem.access ${JSON.stringify(access)} is invalid`
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
if (access) return { ...filesystem, access };
|
|
149
|
+
return filesystem;
|
|
150
|
+
}
|
|
151
|
+
function compactNetwork(value) {
|
|
152
|
+
if (!value) return void 0;
|
|
153
|
+
assertKnownKeys(
|
|
154
|
+
value,
|
|
155
|
+
[
|
|
156
|
+
"access",
|
|
157
|
+
"allowedDomains",
|
|
158
|
+
"deniedDomains",
|
|
159
|
+
"allowedUnixSockets",
|
|
160
|
+
"allowAllUnixSockets",
|
|
161
|
+
"allowLocalBinding",
|
|
162
|
+
"allowedMachServices",
|
|
163
|
+
"httpProxyPort",
|
|
164
|
+
"socksProxyPort"
|
|
165
|
+
],
|
|
166
|
+
"sandbox.policy.network"
|
|
167
|
+
);
|
|
168
|
+
const network = compactBooleanAndLists(
|
|
169
|
+
value,
|
|
170
|
+
[
|
|
171
|
+
"allowedDomains",
|
|
172
|
+
"deniedDomains",
|
|
173
|
+
"allowedUnixSockets",
|
|
174
|
+
"allowedMachServices"
|
|
175
|
+
],
|
|
176
|
+
["allowAllUnixSockets", "allowLocalBinding"],
|
|
177
|
+
"sandbox.policy.network",
|
|
178
|
+
["access", "httpProxyPort", "socksProxyPort"]
|
|
179
|
+
) ?? {};
|
|
180
|
+
if (value.access && !["disabled", "restricted", "unrestricted"].includes(value.access)) {
|
|
181
|
+
throw new Error(
|
|
182
|
+
`sandbox.policy.network.access ${JSON.stringify(value.access)} is invalid`
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
if (value.access) network.access = value.access;
|
|
186
|
+
for (const key of ["httpProxyPort", "socksProxyPort"]) {
|
|
187
|
+
const port = value[key];
|
|
188
|
+
if (port == null) continue;
|
|
189
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
190
|
+
throw new Error(
|
|
191
|
+
`sandbox.policy.network.${key} must be between 1 and 65535`
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
network[key] = port;
|
|
195
|
+
}
|
|
196
|
+
return hasKeys(network) ? network : void 0;
|
|
197
|
+
}
|
|
198
|
+
function compactDispatch(value) {
|
|
199
|
+
if (!value) return void 0;
|
|
200
|
+
assertKnownKeys(value, ["paths", "maxAttempts"], "sandbox.dispatch");
|
|
201
|
+
const dispatch = {};
|
|
202
|
+
const paths = cleanList(value.paths);
|
|
203
|
+
if (paths) dispatch.paths = paths;
|
|
204
|
+
if (value.maxAttempts != null) {
|
|
205
|
+
if (!Number.isInteger(value.maxAttempts) || value.maxAttempts < 0) {
|
|
206
|
+
throw new Error(
|
|
207
|
+
"sandbox.dispatch.maxAttempts must be a non-negative integer"
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
if (value.maxAttempts > 0) dispatch.maxAttempts = value.maxAttempts;
|
|
211
|
+
}
|
|
212
|
+
return hasKeys(dispatch) ? dispatch : void 0;
|
|
213
|
+
}
|
|
214
|
+
function compactBooleanAndLists(value, listKeys, booleanKeys, path, additionalKeys = []) {
|
|
215
|
+
if (!value) return void 0;
|
|
216
|
+
assertKnownKeys(
|
|
217
|
+
value,
|
|
218
|
+
[...listKeys, ...booleanKeys, ...additionalKeys],
|
|
219
|
+
path
|
|
220
|
+
);
|
|
221
|
+
const out = {};
|
|
222
|
+
for (const key of listKeys) {
|
|
223
|
+
const list = cleanList(
|
|
224
|
+
value[key]
|
|
225
|
+
);
|
|
226
|
+
if (list) out[key] = list;
|
|
227
|
+
}
|
|
228
|
+
for (const key of booleanKeys) {
|
|
229
|
+
const item = value[key];
|
|
230
|
+
if (item != null) out[key] = item;
|
|
231
|
+
}
|
|
232
|
+
return hasKeys(out) ? out : void 0;
|
|
233
|
+
}
|
|
234
|
+
function rejectSandboxFields(mode, values) {
|
|
235
|
+
var _a;
|
|
236
|
+
const field = (_a = Object.entries(values).find(
|
|
237
|
+
([, value]) => value !== void 0
|
|
238
|
+
)) == null ? void 0 : _a[0];
|
|
239
|
+
if (field) throw new Error(`sandbox mode ${mode} does not accept ${field}`);
|
|
240
|
+
}
|
|
241
|
+
function sandboxMode(value) {
|
|
242
|
+
const mode = SPEC_SANDBOX_MODES.find((item) => item === value);
|
|
243
|
+
if (!mode)
|
|
244
|
+
throw new Error(`sandbox.mode ${JSON.stringify(value)} is invalid`);
|
|
245
|
+
return mode;
|
|
246
|
+
}
|
|
247
|
+
function permissionMode(value) {
|
|
248
|
+
if (!value) return void 0;
|
|
249
|
+
const mode = SPEC_PERMISSION_MODES.find((item) => item === value);
|
|
250
|
+
if (!mode)
|
|
251
|
+
throw new Error(`sandbox.approval ${JSON.stringify(value)} is invalid`);
|
|
252
|
+
return mode;
|
|
253
|
+
}
|
|
254
|
+
function assertKnownKeys(value, keys, path) {
|
|
255
|
+
const unknown = Object.keys(value).find((key) => !keys.includes(key));
|
|
256
|
+
if (unknown) throw new Error(`${path}.${unknown} is not supported`);
|
|
257
|
+
}
|
|
258
|
+
function cleanList(value) {
|
|
259
|
+
if (!value) return void 0;
|
|
260
|
+
const items = Array.from(
|
|
261
|
+
new Set(value.map((item) => item.trim()).filter(Boolean))
|
|
262
|
+
);
|
|
263
|
+
return items.length > 0 ? items : void 0;
|
|
264
|
+
}
|
|
265
|
+
function cleanString(value) {
|
|
266
|
+
return (value == null ? void 0 : value.trim()) || void 0;
|
|
267
|
+
}
|
|
268
|
+
function hasKeys(value) {
|
|
269
|
+
return Object.keys(value).length > 0;
|
|
270
|
+
}
|
|
271
|
+
export {
|
|
272
|
+
SPEC_PERMISSION_MODES,
|
|
273
|
+
SPEC_SANDBOX_MODES,
|
|
274
|
+
compactRuntimeSandbox
|
|
275
|
+
};
|
|
276
|
+
//# sourceMappingURL=SpecRuntimeEditor.sandbox-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpecRuntimeEditor.sandbox-model.js","sources":["../../../src/data/ai/SpecRuntimeEditor.sandbox-model.ts"],"sourcesContent":["export const SPEC_PERMISSION_MODES = [\n \"default\",\n \"acceptEdits\",\n \"auto\",\n \"bypassPermissions\",\n \"dontAsk\",\n \"plan\",\n] as const;\n\nexport type SpecPermissionMode = (typeof SPEC_PERMISSION_MODES)[number];\n\nexport const SPEC_SANDBOX_MODES = [\n \"off\",\n \"native\",\n \"docker\",\n \"git-agent\",\n] as const;\n\nexport type SpecSandboxMode = (typeof SPEC_SANDBOX_MODES)[number];\nexport type SpecSandboxFilesystemAccess = \"read-only\" | \"workspace-write\";\nexport type SpecSandboxNetworkAccess =\n | \"disabled\"\n | \"restricted\"\n | \"unrestricted\";\n\nexport type AISpecRuntimeSandboxFilesystemPolicy = {\n access?: SpecSandboxFilesystemAccess;\n writableRoots?: string[];\n readableRoots?: string[];\n deniedReadRoots?: string[];\n deniedWriteRoots?: string[];\n includeSystemTemp?: boolean;\n};\n\nexport type AISpecRuntimeSandboxNetworkPolicy = {\n access?: SpecSandboxNetworkAccess;\n allowedDomains?: string[];\n deniedDomains?: string[];\n allowedUnixSockets?: string[];\n allowAllUnixSockets?: boolean;\n allowLocalBinding?: boolean;\n allowedMachServices?: string[];\n httpProxyPort?: number;\n socksProxyPort?: number;\n};\n\nexport type AISpecRuntimeSandboxPolicy = {\n required?: boolean;\n filesystem?: AISpecRuntimeSandboxFilesystemPolicy;\n network?: AISpecRuntimeSandboxNetworkPolicy;\n commands?: {\n excludedFromSandbox?: string[];\n allowUnsandboxed?: boolean;\n };\n credentials?: {\n deniedFiles?: string[];\n deniedEnv?: string[];\n maskedEnv?: string[];\n };\n platform?: {\n allowAppleEvents?: boolean;\n weakerNestedIsolation?: boolean;\n weakerNetworkIsolation?: boolean;\n };\n};\n\nexport type AISpecRuntimeSandboxDispatch = {\n paths?: string[];\n maxAttempts?: number;\n};\n\nexport type AISpecRuntimeSandbox = {\n mode?: SpecSandboxMode;\n approval?: SpecPermissionMode;\n backend?: string;\n agent?: string;\n policy?: AISpecRuntimeSandboxPolicy;\n dispatch?: AISpecRuntimeSandboxDispatch;\n};\n\nexport function compactRuntimeSandbox(\n value: string | AISpecRuntimeSandbox | undefined,\n): string | AISpecRuntimeSandbox | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") {\n const raw = value.trim();\n return raw ? sandboxMode(raw) : undefined;\n }\n assertKnownKeys(\n value,\n [\"mode\", \"approval\", \"backend\", \"agent\", \"policy\", \"dispatch\"],\n \"sandbox\",\n );\n const configured = Object.values(value).some(\n (item) => item != null && item !== \"\",\n );\n if (!value.mode) {\n if (configured)\n throw new Error(\n \"sandbox.mode is required when sandbox settings are configured\",\n );\n return undefined;\n }\n const mode = sandboxMode(value.mode);\n const approval = permissionMode(value.approval);\n const backend = cleanString(value.backend);\n const agent = cleanString(value.agent);\n const policy = compactNativePolicy(value.policy);\n const dispatch = compactDispatch(value.dispatch);\n\n if (mode === \"off\") {\n rejectSandboxFields(mode, { approval, backend, agent, policy, dispatch });\n return mode;\n }\n if (mode === \"native\") {\n rejectSandboxFields(mode, { backend, agent, dispatch });\n return compactSandboxObject({\n mode,\n ...(approval ? { approval } : {}),\n ...(policy ? { policy } : {}),\n });\n }\n if (mode === \"docker\") {\n rejectSandboxFields(mode, { agent, policy, dispatch });\n return compactSandboxObject({\n mode,\n ...(approval ? { approval } : {}),\n ...(backend ? { backend } : {}),\n });\n }\n rejectSandboxFields(mode, { policy });\n return compactSandboxObject({\n mode,\n ...(approval ? { approval } : {}),\n ...(backend ? { backend } : {}),\n ...(agent ? { agent } : {}),\n ...(dispatch ? { dispatch } : {}),\n });\n}\n\nfunction compactSandboxObject(\n value: AISpecRuntimeSandbox,\n): string | AISpecRuntimeSandbox {\n const entries = Object.entries(value).filter(\n ([, item]) => item !== undefined,\n );\n if (entries.length === 1) return value.mode!;\n return Object.fromEntries(entries) as AISpecRuntimeSandbox;\n}\n\nfunction compactNativePolicy(\n value: AISpecRuntimeSandboxPolicy | undefined,\n): AISpecRuntimeSandboxPolicy | undefined {\n if (!value) return undefined;\n assertKnownKeys(\n value,\n [\n \"required\",\n \"filesystem\",\n \"network\",\n \"commands\",\n \"credentials\",\n \"platform\",\n ],\n \"sandbox.policy\",\n );\n const policy: AISpecRuntimeSandboxPolicy = {};\n if (value.required != null) policy.required = value.required;\n const filesystem = compactFilesystem(value.filesystem);\n if (filesystem) policy.filesystem = filesystem;\n const network = compactNetwork(value.network);\n if (network) policy.network = network;\n const commands = compactBooleanAndLists(\n value.commands,\n [\"excludedFromSandbox\"],\n [\"allowUnsandboxed\"],\n \"sandbox.policy.commands\",\n );\n if (commands) policy.commands = commands;\n const credentials = compactBooleanAndLists(\n value.credentials,\n [\"deniedFiles\", \"deniedEnv\", \"maskedEnv\"],\n [],\n \"sandbox.policy.credentials\",\n );\n if (credentials) policy.credentials = credentials;\n const platform = compactBooleanAndLists(\n value.platform,\n [],\n [\"allowAppleEvents\", \"weakerNestedIsolation\", \"weakerNetworkIsolation\"],\n \"sandbox.policy.platform\",\n );\n if (platform) policy.platform = platform;\n return hasKeys(policy) ? policy : undefined;\n}\n\nfunction compactFilesystem(\n value: AISpecRuntimeSandboxFilesystemPolicy | undefined,\n): AISpecRuntimeSandboxFilesystemPolicy | undefined {\n if (!value) return undefined;\n assertKnownKeys(\n value,\n [\n \"access\",\n \"writableRoots\",\n \"readableRoots\",\n \"deniedReadRoots\",\n \"deniedWriteRoots\",\n \"includeSystemTemp\",\n ],\n \"sandbox.policy.filesystem\",\n );\n const filesystem = compactBooleanAndLists(\n value,\n [\"writableRoots\", \"readableRoots\", \"deniedReadRoots\", \"deniedWriteRoots\"],\n [\"includeSystemTemp\"],\n \"sandbox.policy.filesystem\",\n [\"access\"],\n ) as AISpecRuntimeSandboxFilesystemPolicy | undefined;\n const access = value.access;\n if (access && access !== \"read-only\" && access !== \"workspace-write\") {\n throw new Error(\n `sandbox.policy.filesystem.access ${JSON.stringify(access)} is invalid`,\n );\n }\n if (access) return { ...filesystem, access };\n return filesystem;\n}\n\nfunction compactNetwork(\n value: AISpecRuntimeSandboxNetworkPolicy | undefined,\n): AISpecRuntimeSandboxNetworkPolicy | undefined {\n if (!value) return undefined;\n assertKnownKeys(\n value,\n [\n \"access\",\n \"allowedDomains\",\n \"deniedDomains\",\n \"allowedUnixSockets\",\n \"allowAllUnixSockets\",\n \"allowLocalBinding\",\n \"allowedMachServices\",\n \"httpProxyPort\",\n \"socksProxyPort\",\n ],\n \"sandbox.policy.network\",\n );\n const network = (compactBooleanAndLists(\n value,\n [\n \"allowedDomains\",\n \"deniedDomains\",\n \"allowedUnixSockets\",\n \"allowedMachServices\",\n ],\n [\"allowAllUnixSockets\", \"allowLocalBinding\"],\n \"sandbox.policy.network\",\n [\"access\", \"httpProxyPort\", \"socksProxyPort\"],\n ) ?? {}) as AISpecRuntimeSandboxNetworkPolicy;\n if (\n value.access &&\n ![\"disabled\", \"restricted\", \"unrestricted\"].includes(value.access)\n ) {\n throw new Error(\n `sandbox.policy.network.access ${JSON.stringify(value.access)} is invalid`,\n );\n }\n if (value.access) network.access = value.access;\n for (const key of [\"httpProxyPort\", \"socksProxyPort\"] as const) {\n const port = value[key];\n if (port == null) continue;\n if (!Number.isInteger(port) || port < 1 || port > 65535) {\n throw new Error(\n `sandbox.policy.network.${key} must be between 1 and 65535`,\n );\n }\n network[key] = port;\n }\n return hasKeys(network) ? network : undefined;\n}\n\nfunction compactDispatch(\n value: AISpecRuntimeSandboxDispatch | undefined,\n): AISpecRuntimeSandboxDispatch | undefined {\n if (!value) return undefined;\n assertKnownKeys(value, [\"paths\", \"maxAttempts\"], \"sandbox.dispatch\");\n const dispatch: AISpecRuntimeSandboxDispatch = {};\n const paths = cleanList(value.paths);\n if (paths) dispatch.paths = paths;\n if (value.maxAttempts != null) {\n if (!Number.isInteger(value.maxAttempts) || value.maxAttempts < 0) {\n throw new Error(\n \"sandbox.dispatch.maxAttempts must be a non-negative integer\",\n );\n }\n if (value.maxAttempts > 0) dispatch.maxAttempts = value.maxAttempts;\n }\n return hasKeys(dispatch) ? dispatch : undefined;\n}\n\nfunction compactBooleanAndLists<T extends object>(\n value: T | undefined,\n listKeys: readonly string[],\n booleanKeys: readonly string[],\n path: string,\n additionalKeys: readonly string[] = [],\n): T | undefined {\n if (!value) return undefined;\n assertKnownKeys(\n value,\n [...listKeys, ...booleanKeys, ...additionalKeys],\n path,\n );\n const out: Record<string, unknown> = {};\n for (const key of listKeys) {\n const list = cleanList(\n (value as Record<string, unknown>)[key] as string[] | undefined,\n );\n if (list) out[key] = list;\n }\n for (const key of booleanKeys) {\n const item = (value as Record<string, unknown>)[key];\n if (item != null) out[key] = item;\n }\n return hasKeys(out) ? (out as T) : undefined;\n}\n\nfunction rejectSandboxFields(\n mode: SpecSandboxMode,\n values: Record<string, unknown>,\n) {\n const field = Object.entries(values).find(\n ([, value]) => value !== undefined,\n )?.[0];\n if (field) throw new Error(`sandbox mode ${mode} does not accept ${field}`);\n}\n\nfunction sandboxMode(value: string): SpecSandboxMode {\n const mode = SPEC_SANDBOX_MODES.find((item) => item === value);\n if (!mode)\n throw new Error(`sandbox.mode ${JSON.stringify(value)} is invalid`);\n return mode;\n}\n\nfunction permissionMode(\n value: string | undefined,\n): SpecPermissionMode | undefined {\n if (!value) return undefined;\n const mode = SPEC_PERMISSION_MODES.find((item) => item === value);\n if (!mode)\n throw new Error(`sandbox.approval ${JSON.stringify(value)} is invalid`);\n return mode;\n}\n\nfunction assertKnownKeys(value: object, keys: readonly string[], path: string) {\n const unknown = Object.keys(value).find((key) => !keys.includes(key));\n if (unknown) throw new Error(`${path}.${unknown} is not supported`);\n}\n\nfunction cleanList(value: string[] | undefined) {\n if (!value) return undefined;\n const items = Array.from(\n new Set(value.map((item) => item.trim()).filter(Boolean)),\n );\n return items.length > 0 ? items : undefined;\n}\n\nfunction cleanString(value: string | undefined) {\n return value?.trim() || undefined;\n}\n\nfunction hasKeys(value: object) {\n return Object.keys(value).length > 0;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -23,25 +23,33 @@ function ThreadPicker({
|
|
|
23
23
|
const [threads, setThreads] = react.useState([]);
|
|
24
24
|
const [loading, setLoading] = react.useState(false);
|
|
25
25
|
const [renaming, setRenaming] = react.useState();
|
|
26
|
+
const loadRequest = react.useRef(0);
|
|
26
27
|
const canRename = source ? Boolean(source.rename) : Boolean(api);
|
|
27
28
|
const listUrl = query ? `${api}?${query}` : api;
|
|
28
29
|
const fetchThreads = react.useCallback(async () => {
|
|
30
|
+
const request = ++loadRequest.current;
|
|
29
31
|
setLoading(true);
|
|
30
32
|
try {
|
|
33
|
+
let loaded;
|
|
31
34
|
if (source) {
|
|
32
|
-
|
|
35
|
+
loaded = await source.load();
|
|
33
36
|
} else {
|
|
34
37
|
const res = await fetch(listUrl);
|
|
35
|
-
if (res.ok)
|
|
38
|
+
if (!res.ok) throw new Error(`load failed with status ${res.status}`);
|
|
39
|
+
loaded = await res.json();
|
|
36
40
|
}
|
|
41
|
+
if (request === loadRequest.current) setThreads(loaded);
|
|
37
42
|
} catch (err) {
|
|
38
43
|
console.warn("clicky-ui: failed to load threads", err);
|
|
39
44
|
} finally {
|
|
40
|
-
setLoading(false);
|
|
45
|
+
if (request === loadRequest.current) setLoading(false);
|
|
41
46
|
}
|
|
42
47
|
}, [source, listUrl]);
|
|
43
48
|
react.useEffect(() => {
|
|
44
49
|
void fetchThreads();
|
|
50
|
+
return () => {
|
|
51
|
+
loadRequest.current += 1;
|
|
52
|
+
};
|
|
45
53
|
}, [fetchThreads, refreshToken]);
|
|
46
54
|
const commitRename = react.useCallback(async () => {
|
|
47
55
|
var _a, _b;
|
|
@@ -73,9 +81,8 @@ function ThreadPicker({
|
|
|
73
81
|
}
|
|
74
82
|
}, [api, renaming, source, threads]);
|
|
75
83
|
const handleDelete = react.useCallback(
|
|
76
|
-
async (id
|
|
84
|
+
async (id) => {
|
|
77
85
|
var _a;
|
|
78
|
-
e.stopPropagation();
|
|
79
86
|
try {
|
|
80
87
|
if (source) {
|
|
81
88
|
await ((_a = source.remove) == null ? void 0 : _a.call(source, id));
|
|
@@ -135,54 +142,60 @@ function ThreadPicker({
|
|
|
135
142
|
threads.map((t) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
136
143
|
"div",
|
|
137
144
|
{
|
|
138
|
-
role: "button",
|
|
139
|
-
tabIndex: 0,
|
|
140
145
|
className: utils.cn(
|
|
141
|
-
"group/thread flex w-full
|
|
146
|
+
"group/thread flex w-full items-center gap-1 px-1 py-0.5 text-left text-xs hover:bg-accent",
|
|
142
147
|
t.id === threadId && "font-semibold"
|
|
143
148
|
),
|
|
144
|
-
onClick: () => {
|
|
145
|
-
onSelect(t.id);
|
|
146
|
-
closeMenu();
|
|
147
|
-
},
|
|
148
|
-
onKeyDown: (e) => {
|
|
149
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
150
|
-
e.preventDefault();
|
|
151
|
-
onSelect(t.id);
|
|
152
|
-
closeMenu();
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
149
|
children: [
|
|
156
|
-
/* @__PURE__ */ jsxRuntime.
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
e
|
|
169
|
-
|
|
170
|
-
|
|
150
|
+
(renaming == null ? void 0 : renaming.id) === t.id ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2 px-2 py-1", children: [
|
|
151
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiComment.UiComment, className: "size-3 shrink-0" }),
|
|
152
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
153
|
+
"input",
|
|
154
|
+
{
|
|
155
|
+
autoFocus: true,
|
|
156
|
+
"aria-label": "Conversation title",
|
|
157
|
+
className: "min-w-0 flex-1 rounded border border-border bg-background px-1 py-0.5 text-xs",
|
|
158
|
+
value: renaming.title,
|
|
159
|
+
onClick: (e) => e.stopPropagation(),
|
|
160
|
+
onChange: (e) => setRenaming({ id: t.id, title: e.target.value }),
|
|
161
|
+
onBlur: () => setRenaming(void 0),
|
|
162
|
+
onKeyDown: (e) => {
|
|
163
|
+
e.stopPropagation();
|
|
164
|
+
if (e.key === "Enter") void commitRename();
|
|
165
|
+
if (e.key === "Escape") setRenaming(void 0);
|
|
166
|
+
}
|
|
171
167
|
}
|
|
168
|
+
),
|
|
169
|
+
t.totalCostUsd != null && t.totalCostUsd > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "shrink-0 text-[10px] text-muted-foreground", children: [
|
|
170
|
+
"$",
|
|
171
|
+
t.totalCostUsd.toFixed(2)
|
|
172
|
+
] })
|
|
173
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsxs(
|
|
174
|
+
"button",
|
|
175
|
+
{
|
|
176
|
+
type: "button",
|
|
177
|
+
className: "flex min-w-0 flex-1 items-center gap-2 px-2 py-1 text-left",
|
|
178
|
+
onClick: () => {
|
|
179
|
+
onSelect(t.id);
|
|
180
|
+
closeMenu();
|
|
181
|
+
},
|
|
182
|
+
children: [
|
|
183
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiComment.UiComment, className: "size-3 shrink-0" }),
|
|
184
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children: t.title || "Untitled" }),
|
|
185
|
+
t.totalCostUsd != null && t.totalCostUsd > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "shrink-0 text-[10px] text-muted-foreground", children: [
|
|
186
|
+
"$",
|
|
187
|
+
t.totalCostUsd.toFixed(2)
|
|
188
|
+
] })
|
|
189
|
+
]
|
|
172
190
|
}
|
|
173
|
-
)
|
|
174
|
-
t.totalCostUsd != null && t.totalCostUsd > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "shrink-0 text-[10px] text-muted-foreground", children: [
|
|
175
|
-
"$",
|
|
176
|
-
t.totalCostUsd.toFixed(2)
|
|
177
|
-
] }),
|
|
191
|
+
),
|
|
178
192
|
canRename && (renaming == null ? void 0 : renaming.id) !== t.id && /* @__PURE__ */ jsxRuntime.jsx(
|
|
179
193
|
"button",
|
|
180
194
|
{
|
|
181
195
|
type: "button",
|
|
182
196
|
"aria-label": "Rename conversation",
|
|
183
197
|
className: "shrink-0 rounded p-0.5 text-muted-foreground opacity-0 hover:text-foreground group-hover/thread:opacity-100",
|
|
184
|
-
onClick: (
|
|
185
|
-
e.stopPropagation();
|
|
198
|
+
onClick: () => {
|
|
186
199
|
setRenaming({ id: t.id, title: t.title ?? "" });
|
|
187
200
|
},
|
|
188
201
|
children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiPencilSimpleLine.UiPencilSimpleLine, className: "size-3" })
|
|
@@ -194,7 +207,7 @@ function ThreadPicker({
|
|
|
194
207
|
type: "button",
|
|
195
208
|
"aria-label": "Delete conversation",
|
|
196
209
|
className: "shrink-0 rounded p-0.5 text-muted-foreground opacity-0 hover:text-destructive group-hover/thread:opacity-100",
|
|
197
|
-
onClick: (
|
|
210
|
+
onClick: () => void handleDelete(t.id),
|
|
198
211
|
children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiTrash.UiTrash, className: "size-3" })
|
|
199
212
|
}
|
|
200
213
|
)
|