@supernal/interface 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +165 -0
- package/dist/cjs/names/API.js +104 -0
- package/dist/cjs/names/API.js.map +1 -0
- package/dist/cjs/names/Components.js +104 -0
- package/dist/cjs/names/Components.js.map +1 -0
- package/dist/cjs/names/Containers.js +99 -0
- package/dist/cjs/names/Containers.js.map +1 -0
- package/dist/cjs/names/Functions.js +114 -0
- package/dist/cjs/names/Functions.js.map +1 -0
- package/dist/cjs/names/index.js +118 -0
- package/dist/cjs/names/index.js.map +1 -0
- package/dist/cjs/src/adapters/ChatUIProvider.js +176 -0
- package/dist/cjs/src/adapters/ChatUIProvider.js.map +1 -0
- package/dist/cjs/src/adapters/bridge.js +225 -0
- package/dist/cjs/src/adapters/bridge.js.map +1 -0
- package/dist/cjs/src/adapters/copilotkit/CopilotKitAdapter.js +289 -0
- package/dist/cjs/src/adapters/copilotkit/CopilotKitAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/copilotkit/index.js +10 -0
- package/dist/cjs/src/adapters/copilotkit/index.js.map +1 -0
- package/dist/cjs/src/adapters/index.js +63 -0
- package/dist/cjs/src/adapters/index.js.map +1 -0
- package/dist/cjs/src/adapters/native/NativeAdapter.js +268 -0
- package/dist/cjs/src/adapters/native/NativeAdapter.js.map +1 -0
- package/dist/cjs/src/adapters/native/index.js +10 -0
- package/dist/cjs/src/adapters/native/index.js.map +1 -0
- package/dist/cjs/src/adapters/types/index.js +9 -0
- package/dist/cjs/src/adapters/types/index.js.map +1 -0
- package/dist/cjs/src/ai/ToolExecutor.js +211 -0
- package/dist/cjs/src/ai/ToolExecutor.js.map +1 -0
- package/dist/cjs/src/ai/ToolMatcher.js +202 -0
- package/dist/cjs/src/ai/ToolMatcher.js.map +1 -0
- package/dist/cjs/src/ai/index.js +29 -0
- package/dist/cjs/src/ai/index.js.map +1 -0
- package/dist/cjs/src/architecture/createContainer.js +106 -0
- package/dist/cjs/src/architecture/createContainer.js.map +1 -0
- package/dist/cjs/src/architecture/initialize.js +125 -0
- package/dist/cjs/src/architecture/initialize.js.map +1 -0
- package/dist/cjs/src/architecture/registry.js +111 -0
- package/dist/cjs/src/architecture/registry.js.map +1 -0
- package/dist/cjs/src/background/architecture/ArchitectureInitializer.js +174 -0
- package/dist/cjs/src/background/architecture/ArchitectureInitializer.js.map +1 -0
- package/dist/cjs/src/background/architecture/Containers.js +46 -0
- package/dist/cjs/src/background/architecture/Containers.js.map +1 -0
- package/dist/cjs/src/background/architecture/DataContractTypes.js +28 -0
- package/dist/cjs/src/background/architecture/DataContractTypes.js.map +1 -0
- package/dist/cjs/src/background/architecture/index.js +24 -0
- package/dist/cjs/src/background/architecture/index.js.map +1 -0
- package/dist/cjs/src/background/navigation/NavigationGraph.js +71 -0
- package/dist/cjs/src/background/navigation/NavigationGraph.js.map +1 -0
- package/dist/cjs/src/background/navigation/RuntimeTreeBuilder.js +66 -0
- package/dist/cjs/src/background/navigation/RuntimeTreeBuilder.js.map +1 -0
- package/dist/cjs/src/background/navigation/useComponentTracking.js +20 -0
- package/dist/cjs/src/background/navigation/useComponentTracking.js.map +1 -0
- package/dist/cjs/src/background/registry/ComponentRegistry.js +340 -0
- package/dist/cjs/src/background/registry/ComponentRegistry.js.map +1 -0
- package/dist/cjs/src/background/registry/ToolRegistry.js +668 -0
- package/dist/cjs/src/background/registry/ToolRegistry.js.map +1 -0
- package/dist/cjs/src/browser.js +70 -0
- package/dist/cjs/src/browser.js.map +1 -0
- package/dist/cjs/src/components/ComponentScanner.js +362 -0
- package/dist/cjs/src/components/ComponentScanner.js.map +1 -0
- package/dist/cjs/src/components/index.js +24 -0
- package/dist/cjs/src/components/index.js.map +1 -0
- package/dist/cjs/src/data/TestDataManager.js +187 -0
- package/dist/cjs/src/data/TestDataManager.js.map +1 -0
- package/dist/cjs/src/data/index.js +23 -0
- package/dist/cjs/src/data/index.js.map +1 -0
- package/dist/cjs/src/decorators/Component.js +108 -0
- package/dist/cjs/src/decorators/Component.js.map +1 -0
- package/dist/cjs/src/decorators/ContainerHelpers.js +45 -0
- package/dist/cjs/src/decorators/ContainerHelpers.js.map +1 -0
- package/dist/cjs/src/decorators/SpecializedTools.js +386 -0
- package/dist/cjs/src/decorators/SpecializedTools.js.map +1 -0
- package/dist/cjs/src/decorators/Tool.js +700 -0
- package/dist/cjs/src/decorators/Tool.js.map +1 -0
- package/dist/cjs/src/decorators/ToolHelpers.js +261 -0
- package/dist/cjs/src/decorators/ToolHelpers.js.map +1 -0
- package/dist/cjs/src/decorators/ToolPreset.js +270 -0
- package/dist/cjs/src/decorators/ToolPreset.js.map +1 -0
- package/dist/cjs/src/decorators/ToolProvider.js +86 -0
- package/dist/cjs/src/decorators/ToolProvider.js.map +1 -0
- package/dist/cjs/src/decorators/index.js +44 -0
- package/dist/cjs/src/decorators/index.js.map +1 -0
- package/dist/cjs/src/execution/DOMExecutor.js +233 -0
- package/dist/cjs/src/execution/DOMExecutor.js.map +1 -0
- package/dist/cjs/src/execution/PlaywrightExecutor.js +196 -0
- package/dist/cjs/src/execution/PlaywrightExecutor.js.map +1 -0
- package/dist/cjs/src/exposure/ExposureCollector.js +358 -0
- package/dist/cjs/src/exposure/ExposureCollector.js.map +1 -0
- package/dist/cjs/src/exposure/index.js +26 -0
- package/dist/cjs/src/exposure/index.js.map +1 -0
- package/dist/cjs/src/index.js +187 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/interfaces/StatefulComponent.js +50 -0
- package/dist/cjs/src/interfaces/StatefulComponent.js.map +1 -0
- package/dist/cjs/src/name-contracts/ContractScanner.js +15 -0
- package/dist/cjs/src/name-contracts/ContractScanner.js.map +1 -0
- package/dist/cjs/src/name-contracts/RouteContractScanner.js +225 -0
- package/dist/cjs/src/name-contracts/RouteContractScanner.js.map +1 -0
- package/dist/cjs/src/name-contracts/index.js +15 -0
- package/dist/cjs/src/name-contracts/index.js.map +1 -0
- package/dist/cjs/src/names/createNames.js +86 -0
- package/dist/cjs/src/names/createNames.js.map +1 -0
- package/dist/cjs/src/react/hooks/useChatWithContext.js +221 -0
- package/dist/cjs/src/react/hooks/useChatWithContext.js.map +1 -0
- package/dist/cjs/src/react/index.js +28 -0
- package/dist/cjs/src/react/index.js.map +1 -0
- package/dist/cjs/src/react/useNavigationHandler.js +88 -0
- package/dist/cjs/src/react/useNavigationHandler.js.map +1 -0
- package/dist/cjs/src/react/usePersistedState.js +72 -0
- package/dist/cjs/src/react/usePersistedState.js.map +1 -0
- package/dist/cjs/src/react/useToolBinding.js +110 -0
- package/dist/cjs/src/react/useToolBinding.js.map +1 -0
- package/dist/cjs/src/routes/RouteContractGenerator.js +119 -0
- package/dist/cjs/src/routes/RouteContractGenerator.js.map +1 -0
- package/dist/cjs/src/routes/RouteContractsConfig.js +39 -0
- package/dist/cjs/src/routes/RouteContractsConfig.js.map +1 -0
- package/dist/cjs/src/routes/index.js +20 -0
- package/dist/cjs/src/routes/index.js.map +1 -0
- package/dist/cjs/src/routes/scanners/NameExtractor.js +193 -0
- package/dist/cjs/src/routes/scanners/NameExtractor.js.map +1 -0
- package/dist/cjs/src/routes/scanners/NextjsDynamicScanner.js +102 -0
- package/dist/cjs/src/routes/scanners/NextjsDynamicScanner.js.map +1 -0
- package/dist/cjs/src/routes/scanners/RouteScanner.js +13 -0
- package/dist/cjs/src/routes/scanners/RouteScanner.js.map +1 -0
- package/dist/cjs/src/storage/LocalStorageAdapter.js +87 -0
- package/dist/cjs/src/storage/LocalStorageAdapter.js.map +1 -0
- package/dist/cjs/src/storage/StateManager.js +299 -0
- package/dist/cjs/src/storage/StateManager.js.map +1 -0
- package/dist/cjs/src/storage/StorageAdapter.js +164 -0
- package/dist/cjs/src/storage/StorageAdapter.js.map +1 -0
- package/dist/cjs/src/storage/index.js +37 -0
- package/dist/cjs/src/storage/index.js.map +1 -0
- package/dist/cjs/src/testing/BrowserStateInjection.js +130 -0
- package/dist/cjs/src/testing/BrowserStateInjection.js.map +1 -0
- package/dist/cjs/src/testing/ComponentStateHelpers.js +200 -0
- package/dist/cjs/src/testing/ComponentStateHelpers.js.map +1 -0
- package/dist/cjs/src/testing/GherkinParser.js +252 -0
- package/dist/cjs/src/testing/GherkinParser.js.map +1 -0
- package/dist/cjs/src/testing/PlaywrightStateHelpers.js +254 -0
- package/dist/cjs/src/testing/PlaywrightStateHelpers.js.map +1 -0
- package/dist/cjs/src/testing/TestRunner.js +158 -0
- package/dist/cjs/src/testing/TestRunner.js.map +1 -0
- package/dist/cjs/src/testing/index.js +46 -0
- package/dist/cjs/src/testing/index.js.map +1 -0
- package/dist/cjs/src/testing/selectors.js +84 -0
- package/dist/cjs/src/testing/selectors.js.map +1 -0
- package/dist/cjs/src/tools/SystemTools.js +262 -0
- package/dist/cjs/src/tools/SystemTools.js.map +1 -0
- package/dist/cjs/src/types/ClassifiedTool.js +50 -0
- package/dist/cjs/src/types/ClassifiedTool.js.map +1 -0
- package/dist/cjs/src/types/ComponentState.js +30 -0
- package/dist/cjs/src/types/ComponentState.js.map +1 -0
- package/dist/cjs/src/types/DiscoverableToolProvider.js +9 -0
- package/dist/cjs/src/types/DiscoverableToolProvider.js.map +1 -0
- package/dist/cjs/src/types/ExposureState.js +25 -0
- package/dist/cjs/src/types/ExposureState.js.map +1 -0
- package/dist/cjs/src/types/NavigationGraph.js +8 -0
- package/dist/cjs/src/types/NavigationGraph.js.map +1 -0
- package/dist/cjs/src/types/OperationType.js +49 -0
- package/dist/cjs/src/types/OperationType.js.map +1 -0
- package/dist/cjs/src/types/StateManagers.js +39 -0
- package/dist/cjs/src/types/StateManagers.js.map +1 -0
- package/dist/cjs/src/types/Tool.js +41 -0
- package/dist/cjs/src/types/Tool.js.map +1 -0
- package/dist/cjs/src/types/ToolPermissions.js +54 -0
- package/dist/cjs/src/types/ToolPermissions.js.map +1 -0
- package/dist/cjs/src/types/ToolResult.js +25 -0
- package/dist/cjs/src/types/ToolResult.js.map +1 -0
- package/dist/cjs/src/types/index.js +59 -0
- package/dist/cjs/src/types/index.js.map +1 -0
- package/dist/cjs/src/ui/react/chat/ChatBubble.js +221 -0
- package/dist/cjs/src/ui/react/chat/ChatBubble.js.map +1 -0
- package/dist/esm/names/API.d.ts +77 -0
- package/dist/esm/names/API.d.ts.map +1 -0
- package/dist/esm/names/API.js +99 -0
- package/dist/esm/names/API.js.map +1 -0
- package/dist/esm/names/Components.d.ts +77 -0
- package/dist/esm/names/Components.d.ts.map +1 -0
- package/dist/esm/names/Components.js +99 -0
- package/dist/esm/names/Components.js.map +1 -0
- package/dist/esm/names/Containers.d.ts +84 -0
- package/dist/esm/names/Containers.d.ts.map +1 -0
- package/dist/esm/names/Containers.js +94 -0
- package/dist/esm/names/Containers.js.map +1 -0
- package/dist/esm/names/Functions.d.ts +87 -0
- package/dist/esm/names/Functions.d.ts.map +1 -0
- package/dist/esm/names/Functions.js +109 -0
- package/dist/esm/names/Functions.js.map +1 -0
- package/dist/esm/names/index.d.ts +187 -0
- package/dist/esm/names/index.d.ts.map +1 -0
- package/dist/esm/names/index.js +99 -0
- package/dist/esm/names/index.js.map +1 -0
- package/dist/esm/src/adapters/ChatUIProvider.d.ts +76 -0
- package/dist/esm/src/adapters/ChatUIProvider.d.ts.map +1 -0
- package/dist/esm/src/adapters/ChatUIProvider.js +136 -0
- package/dist/esm/src/adapters/ChatUIProvider.js.map +1 -0
- package/dist/esm/src/adapters/bridge.d.ts +145 -0
- package/dist/esm/src/adapters/bridge.d.ts.map +1 -0
- package/dist/esm/src/adapters/bridge.js +218 -0
- package/dist/esm/src/adapters/bridge.js.map +1 -0
- package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.d.ts +49 -0
- package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.d.ts.map +1 -0
- package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.js +251 -0
- package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.js.map +1 -0
- package/dist/esm/src/adapters/copilotkit/index.d.ts +6 -0
- package/dist/esm/src/adapters/copilotkit/index.d.ts.map +1 -0
- package/dist/esm/src/adapters/copilotkit/index.js +5 -0
- package/dist/esm/src/adapters/copilotkit/index.js.map +1 -0
- package/dist/esm/src/adapters/index.d.ts +31 -0
- package/dist/esm/src/adapters/index.d.ts.map +1 -0
- package/dist/esm/src/adapters/index.js +32 -0
- package/dist/esm/src/adapters/index.js.map +1 -0
- package/dist/esm/src/adapters/native/NativeAdapter.d.ts +47 -0
- package/dist/esm/src/adapters/native/NativeAdapter.d.ts.map +1 -0
- package/dist/esm/src/adapters/native/NativeAdapter.js +230 -0
- package/dist/esm/src/adapters/native/NativeAdapter.js.map +1 -0
- package/dist/esm/src/adapters/native/index.d.ts +6 -0
- package/dist/esm/src/adapters/native/index.d.ts.map +1 -0
- package/dist/esm/src/adapters/native/index.js +5 -0
- package/dist/esm/src/adapters/native/index.js.map +1 -0
- package/dist/esm/src/adapters/types/index.d.ts +155 -0
- package/dist/esm/src/adapters/types/index.d.ts.map +1 -0
- package/dist/esm/src/adapters/types/index.js +8 -0
- package/dist/esm/src/adapters/types/index.js.map +1 -0
- package/dist/esm/src/ai/ToolExecutor.d.ts +49 -0
- package/dist/esm/src/ai/ToolExecutor.d.ts.map +1 -0
- package/dist/esm/src/ai/ToolExecutor.js +174 -0
- package/dist/esm/src/ai/ToolExecutor.js.map +1 -0
- package/dist/esm/src/ai/ToolMatcher.d.ts +61 -0
- package/dist/esm/src/ai/ToolMatcher.d.ts.map +1 -0
- package/dist/esm/src/ai/ToolMatcher.js +198 -0
- package/dist/esm/src/ai/ToolMatcher.js.map +1 -0
- package/dist/esm/src/ai/index.d.ts +9 -0
- package/dist/esm/src/ai/index.d.ts.map +1 -0
- package/dist/esm/src/ai/index.js +13 -0
- package/dist/esm/src/ai/index.js.map +1 -0
- package/dist/esm/src/architecture/createContainer.d.ts +60 -0
- package/dist/esm/src/architecture/createContainer.d.ts.map +1 -0
- package/dist/esm/src/architecture/createContainer.js +102 -0
- package/dist/esm/src/architecture/createContainer.js.map +1 -0
- package/dist/esm/src/architecture/initialize.d.ts +81 -0
- package/dist/esm/src/architecture/initialize.d.ts.map +1 -0
- package/dist/esm/src/architecture/initialize.js +121 -0
- package/dist/esm/src/architecture/initialize.js.map +1 -0
- package/dist/esm/src/architecture/registry.d.ts +61 -0
- package/dist/esm/src/architecture/registry.d.ts.map +1 -0
- package/dist/esm/src/architecture/registry.js +107 -0
- package/dist/esm/src/architecture/registry.js.map +1 -0
- package/dist/esm/src/background/architecture/ArchitectureInitializer.d.ts +95 -0
- package/dist/esm/src/background/architecture/ArchitectureInitializer.d.ts.map +1 -0
- package/dist/esm/src/background/architecture/ArchitectureInitializer.js +170 -0
- package/dist/esm/src/background/architecture/ArchitectureInitializer.js.map +1 -0
- package/dist/esm/src/background/architecture/Containers.d.ts +52 -0
- package/dist/esm/src/background/architecture/Containers.d.ts.map +1 -0
- package/dist/esm/src/background/architecture/Containers.js +40 -0
- package/dist/esm/src/background/architecture/Containers.js.map +1 -0
- package/dist/esm/src/background/architecture/DataContractTypes.d.ts +33 -0
- package/dist/esm/src/background/architecture/DataContractTypes.d.ts.map +1 -0
- package/dist/esm/src/background/architecture/DataContractTypes.js +22 -0
- package/dist/esm/src/background/architecture/DataContractTypes.js.map +1 -0
- package/dist/esm/src/background/architecture/index.d.ts +12 -0
- package/dist/esm/src/background/architecture/index.d.ts.map +1 -0
- package/dist/esm/src/background/architecture/index.js +13 -0
- package/dist/esm/src/background/architecture/index.js.map +1 -0
- package/dist/esm/src/background/navigation/NavigationGraph.d.ts +48 -0
- package/dist/esm/src/background/navigation/NavigationGraph.d.ts.map +1 -0
- package/dist/esm/src/background/navigation/NavigationGraph.js +67 -0
- package/dist/esm/src/background/navigation/NavigationGraph.js.map +1 -0
- package/dist/esm/src/background/navigation/RuntimeTreeBuilder.d.ts +30 -0
- package/dist/esm/src/background/navigation/RuntimeTreeBuilder.d.ts.map +1 -0
- package/dist/esm/src/background/navigation/RuntimeTreeBuilder.js +60 -0
- package/dist/esm/src/background/navigation/RuntimeTreeBuilder.js.map +1 -0
- package/dist/esm/src/background/navigation/useComponentTracking.d.ts +10 -0
- package/dist/esm/src/background/navigation/useComponentTracking.d.ts.map +1 -0
- package/dist/esm/src/background/navigation/useComponentTracking.js +17 -0
- package/dist/esm/src/background/navigation/useComponentTracking.js.map +1 -0
- package/dist/esm/src/background/registry/ComponentRegistry.d.ts +192 -0
- package/dist/esm/src/background/registry/ComponentRegistry.d.ts.map +1 -0
- package/dist/esm/src/background/registry/ComponentRegistry.js +336 -0
- package/dist/esm/src/background/registry/ComponentRegistry.js.map +1 -0
- package/dist/esm/src/background/registry/ToolRegistry.d.ts +232 -0
- package/dist/esm/src/background/registry/ToolRegistry.d.ts.map +1 -0
- package/dist/esm/src/background/registry/ToolRegistry.js +664 -0
- package/dist/esm/src/background/registry/ToolRegistry.js.map +1 -0
- package/dist/esm/src/browser.d.ts +21 -0
- package/dist/esm/src/browser.d.ts.map +1 -0
- package/dist/esm/src/browser.js +31 -0
- package/dist/esm/src/browser.js.map +1 -0
- package/dist/esm/src/components/ComponentScanner.d.ts +99 -0
- package/dist/esm/src/components/ComponentScanner.d.ts.map +1 -0
- package/dist/esm/src/components/ComponentScanner.js +325 -0
- package/dist/esm/src/components/ComponentScanner.js.map +1 -0
- package/dist/esm/src/components/index.d.ts +9 -0
- package/dist/esm/src/components/index.d.ts.map +1 -0
- package/dist/esm/src/components/index.js +8 -0
- package/dist/esm/src/components/index.js.map +1 -0
- package/dist/esm/src/data/TestDataManager.d.ts +125 -0
- package/dist/esm/src/data/TestDataManager.d.ts.map +1 -0
- package/dist/esm/src/data/TestDataManager.js +183 -0
- package/dist/esm/src/data/TestDataManager.js.map +1 -0
- package/dist/esm/src/data/index.d.ts +7 -0
- package/dist/esm/src/data/index.d.ts.map +1 -0
- package/dist/esm/src/data/index.js +7 -0
- package/dist/esm/src/data/index.js.map +1 -0
- package/dist/esm/src/decorators/Component.d.ts +59 -0
- package/dist/esm/src/decorators/Component.d.ts.map +1 -0
- package/dist/esm/src/decorators/Component.js +103 -0
- package/dist/esm/src/decorators/Component.js.map +1 -0
- package/dist/esm/src/decorators/ContainerHelpers.d.ts +26 -0
- package/dist/esm/src/decorators/ContainerHelpers.d.ts.map +1 -0
- package/dist/esm/src/decorators/ContainerHelpers.js +42 -0
- package/dist/esm/src/decorators/ContainerHelpers.js.map +1 -0
- package/dist/esm/src/decorators/SpecializedTools.d.ts +218 -0
- package/dist/esm/src/decorators/SpecializedTools.d.ts.map +1 -0
- package/dist/esm/src/decorators/SpecializedTools.js +383 -0
- package/dist/esm/src/decorators/SpecializedTools.js.map +1 -0
- package/dist/esm/src/decorators/Tool.d.ts +210 -0
- package/dist/esm/src/decorators/Tool.d.ts.map +1 -0
- package/dist/esm/src/decorators/Tool.js +694 -0
- package/dist/esm/src/decorators/Tool.js.map +1 -0
- package/dist/esm/src/decorators/ToolHelpers.d.ts +74 -0
- package/dist/esm/src/decorators/ToolHelpers.d.ts.map +1 -0
- package/dist/esm/src/decorators/ToolHelpers.js +219 -0
- package/dist/esm/src/decorators/ToolHelpers.js.map +1 -0
- package/dist/esm/src/decorators/ToolPreset.d.ts +138 -0
- package/dist/esm/src/decorators/ToolPreset.d.ts.map +1 -0
- package/dist/esm/src/decorators/ToolPreset.js +259 -0
- package/dist/esm/src/decorators/ToolPreset.js.map +1 -0
- package/dist/esm/src/decorators/ToolProvider.d.ts +65 -0
- package/dist/esm/src/decorators/ToolProvider.d.ts.map +1 -0
- package/dist/esm/src/decorators/ToolProvider.js +81 -0
- package/dist/esm/src/decorators/ToolProvider.js.map +1 -0
- package/dist/esm/src/decorators/index.d.ts +13 -0
- package/dist/esm/src/decorators/index.d.ts.map +1 -0
- package/dist/esm/src/decorators/index.js +14 -0
- package/dist/esm/src/decorators/index.js.map +1 -0
- package/dist/esm/src/execution/DOMExecutor.d.ts +43 -0
- package/dist/esm/src/execution/DOMExecutor.d.ts.map +1 -0
- package/dist/esm/src/execution/DOMExecutor.js +229 -0
- package/dist/esm/src/execution/DOMExecutor.js.map +1 -0
- package/dist/esm/src/execution/PlaywrightExecutor.d.ts +38 -0
- package/dist/esm/src/execution/PlaywrightExecutor.d.ts.map +1 -0
- package/dist/esm/src/execution/PlaywrightExecutor.js +192 -0
- package/dist/esm/src/execution/PlaywrightExecutor.js.map +1 -0
- package/dist/esm/src/exposure/ExposureCollector.d.ts +88 -0
- package/dist/esm/src/exposure/ExposureCollector.d.ts.map +1 -0
- package/dist/esm/src/exposure/ExposureCollector.js +354 -0
- package/dist/esm/src/exposure/ExposureCollector.js.map +1 -0
- package/dist/esm/src/exposure/index.d.ts +8 -0
- package/dist/esm/src/exposure/index.d.ts.map +1 -0
- package/dist/esm/src/exposure/index.js +10 -0
- package/dist/esm/src/exposure/index.js.map +1 -0
- package/dist/esm/src/index.d.ts +49 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/index.js +79 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/interfaces/StatefulComponent.d.ts +72 -0
- package/dist/esm/src/interfaces/StatefulComponent.d.ts.map +1 -0
- package/dist/esm/src/interfaces/StatefulComponent.js +47 -0
- package/dist/esm/src/interfaces/StatefulComponent.js.map +1 -0
- package/dist/esm/src/name-contracts/ContractScanner.d.ts +61 -0
- package/dist/esm/src/name-contracts/ContractScanner.d.ts.map +1 -0
- package/dist/esm/src/name-contracts/ContractScanner.js +11 -0
- package/dist/esm/src/name-contracts/ContractScanner.js.map +1 -0
- package/dist/esm/src/name-contracts/RouteContractScanner.d.ts +30 -0
- package/dist/esm/src/name-contracts/RouteContractScanner.d.ts.map +1 -0
- package/dist/esm/src/name-contracts/RouteContractScanner.js +188 -0
- package/dist/esm/src/name-contracts/RouteContractScanner.js.map +1 -0
- package/dist/esm/src/name-contracts/index.d.ts +10 -0
- package/dist/esm/src/name-contracts/index.d.ts.map +1 -0
- package/dist/esm/src/name-contracts/index.js +10 -0
- package/dist/esm/src/name-contracts/index.js.map +1 -0
- package/dist/esm/src/names/createNames.d.ts +49 -0
- package/dist/esm/src/names/createNames.d.ts.map +1 -0
- package/dist/esm/src/names/createNames.js +81 -0
- package/dist/esm/src/names/createNames.js.map +1 -0
- package/dist/esm/src/react/hooks/useChatWithContext.d.ts +68 -0
- package/dist/esm/src/react/hooks/useChatWithContext.d.ts.map +1 -0
- package/dist/esm/src/react/hooks/useChatWithContext.js +218 -0
- package/dist/esm/src/react/hooks/useChatWithContext.js.map +1 -0
- package/dist/esm/src/react/index.d.ts +12 -0
- package/dist/esm/src/react/index.d.ts.map +1 -0
- package/dist/esm/src/react/index.js +21 -0
- package/dist/esm/src/react/index.js.map +1 -0
- package/dist/esm/src/react/useNavigationHandler.d.ts +42 -0
- package/dist/esm/src/react/useNavigationHandler.d.ts.map +1 -0
- package/dist/esm/src/react/useNavigationHandler.js +85 -0
- package/dist/esm/src/react/useNavigationHandler.js.map +1 -0
- package/dist/esm/src/react/usePersistedState.d.ts +13 -0
- package/dist/esm/src/react/usePersistedState.d.ts.map +1 -0
- package/dist/esm/src/react/usePersistedState.js +69 -0
- package/dist/esm/src/react/usePersistedState.js.map +1 -0
- package/dist/esm/src/react/useToolBinding.d.ts +8 -0
- package/dist/esm/src/react/useToolBinding.d.ts.map +1 -0
- package/dist/esm/src/react/useToolBinding.js +107 -0
- package/dist/esm/src/react/useToolBinding.js.map +1 -0
- package/dist/esm/src/routes/RouteContractGenerator.d.ts +37 -0
- package/dist/esm/src/routes/RouteContractGenerator.d.ts.map +1 -0
- package/dist/esm/src/routes/RouteContractGenerator.js +115 -0
- package/dist/esm/src/routes/RouteContractGenerator.js.map +1 -0
- package/dist/esm/src/routes/RouteContractsConfig.d.ts +93 -0
- package/dist/esm/src/routes/RouteContractsConfig.d.ts.map +1 -0
- package/dist/esm/src/routes/RouteContractsConfig.js +36 -0
- package/dist/esm/src/routes/RouteContractsConfig.js.map +1 -0
- package/dist/esm/src/routes/index.d.ts +13 -0
- package/dist/esm/src/routes/index.d.ts.map +1 -0
- package/dist/esm/src/routes/index.js +13 -0
- package/dist/esm/src/routes/index.js.map +1 -0
- package/dist/esm/src/routes/scanners/NameExtractor.d.ts +36 -0
- package/dist/esm/src/routes/scanners/NameExtractor.d.ts.map +1 -0
- package/dist/esm/src/routes/scanners/NameExtractor.js +156 -0
- package/dist/esm/src/routes/scanners/NameExtractor.js.map +1 -0
- package/dist/esm/src/routes/scanners/NextjsDynamicScanner.d.ts +35 -0
- package/dist/esm/src/routes/scanners/NextjsDynamicScanner.d.ts.map +1 -0
- package/dist/esm/src/routes/scanners/NextjsDynamicScanner.js +98 -0
- package/dist/esm/src/routes/scanners/NextjsDynamicScanner.js.map +1 -0
- package/dist/esm/src/routes/scanners/RouteScanner.d.ts +64 -0
- package/dist/esm/src/routes/scanners/RouteScanner.d.ts.map +1 -0
- package/dist/esm/src/routes/scanners/RouteScanner.js +9 -0
- package/dist/esm/src/routes/scanners/RouteScanner.js.map +1 -0
- package/dist/esm/src/storage/LocalStorageAdapter.d.ts +29 -0
- package/dist/esm/src/storage/LocalStorageAdapter.d.ts.map +1 -0
- package/dist/esm/src/storage/LocalStorageAdapter.js +83 -0
- package/dist/esm/src/storage/LocalStorageAdapter.js.map +1 -0
- package/dist/esm/src/storage/StateManager.d.ts +175 -0
- package/dist/esm/src/storage/StateManager.d.ts.map +1 -0
- package/dist/esm/src/storage/StateManager.js +295 -0
- package/dist/esm/src/storage/StateManager.js.map +1 -0
- package/dist/esm/src/storage/StorageAdapter.d.ts +94 -0
- package/dist/esm/src/storage/StorageAdapter.d.ts.map +1 -0
- package/dist/esm/src/storage/StorageAdapter.js +158 -0
- package/dist/esm/src/storage/StorageAdapter.js.map +1 -0
- package/dist/esm/src/storage/index.d.ts +12 -0
- package/dist/esm/src/storage/index.d.ts.map +1 -0
- package/dist/esm/src/storage/index.js +17 -0
- package/dist/esm/src/storage/index.js.map +1 -0
- package/dist/esm/src/testing/BrowserStateInjection.d.ts +74 -0
- package/dist/esm/src/testing/BrowserStateInjection.d.ts.map +1 -0
- package/dist/esm/src/testing/BrowserStateInjection.js +126 -0
- package/dist/esm/src/testing/BrowserStateInjection.js.map +1 -0
- package/dist/esm/src/testing/ComponentStateHelpers.d.ts +121 -0
- package/dist/esm/src/testing/ComponentStateHelpers.d.ts.map +1 -0
- package/dist/esm/src/testing/ComponentStateHelpers.js +190 -0
- package/dist/esm/src/testing/ComponentStateHelpers.js.map +1 -0
- package/dist/esm/src/testing/GherkinParser.d.ts +87 -0
- package/dist/esm/src/testing/GherkinParser.d.ts.map +1 -0
- package/dist/esm/src/testing/GherkinParser.js +248 -0
- package/dist/esm/src/testing/GherkinParser.js.map +1 -0
- package/dist/esm/src/testing/PlaywrightStateHelpers.d.ts +163 -0
- package/dist/esm/src/testing/PlaywrightStateHelpers.d.ts.map +1 -0
- package/dist/esm/src/testing/PlaywrightStateHelpers.js +242 -0
- package/dist/esm/src/testing/PlaywrightStateHelpers.js.map +1 -0
- package/dist/esm/src/testing/TestRunner.d.ts +50 -0
- package/dist/esm/src/testing/TestRunner.d.ts.map +1 -0
- package/dist/esm/src/testing/TestRunner.js +121 -0
- package/dist/esm/src/testing/TestRunner.js.map +1 -0
- package/dist/esm/src/testing/index.d.ts +12 -0
- package/dist/esm/src/testing/index.d.ts.map +1 -0
- package/dist/esm/src/testing/index.js +25 -0
- package/dist/esm/src/testing/index.js.map +1 -0
- package/dist/esm/src/testing/selectors.d.ts +65 -0
- package/dist/esm/src/testing/selectors.d.ts.map +1 -0
- package/dist/esm/src/testing/selectors.js +76 -0
- package/dist/esm/src/testing/selectors.js.map +1 -0
- package/dist/esm/src/tools/SystemTools.d.ts +139 -0
- package/dist/esm/src/tools/SystemTools.d.ts.map +1 -0
- package/dist/esm/src/tools/SystemTools.js +258 -0
- package/dist/esm/src/tools/SystemTools.js.map +1 -0
- package/dist/esm/src/types/ClassifiedTool.d.ts +61 -0
- package/dist/esm/src/types/ClassifiedTool.d.ts.map +1 -0
- package/dist/esm/src/types/ClassifiedTool.js +47 -0
- package/dist/esm/src/types/ClassifiedTool.js.map +1 -0
- package/dist/esm/src/types/ComponentState.d.ts +207 -0
- package/dist/esm/src/types/ComponentState.d.ts.map +1 -0
- package/dist/esm/src/types/ComponentState.js +25 -0
- package/dist/esm/src/types/ComponentState.js.map +1 -0
- package/dist/esm/src/types/DiscoverableToolProvider.d.ts +59 -0
- package/dist/esm/src/types/DiscoverableToolProvider.d.ts.map +1 -0
- package/dist/esm/src/types/DiscoverableToolProvider.js +8 -0
- package/dist/esm/src/types/DiscoverableToolProvider.js.map +1 -0
- package/dist/esm/src/types/ExposureState.d.ts +75 -0
- package/dist/esm/src/types/ExposureState.d.ts.map +1 -0
- package/dist/esm/src/types/ExposureState.js +22 -0
- package/dist/esm/src/types/ExposureState.js.map +1 -0
- package/dist/esm/src/types/NavigationGraph.d.ts +98 -0
- package/dist/esm/src/types/NavigationGraph.d.ts.map +1 -0
- package/dist/esm/src/types/NavigationGraph.js +7 -0
- package/dist/esm/src/types/NavigationGraph.js.map +1 -0
- package/dist/esm/src/types/OperationType.d.ts +45 -0
- package/dist/esm/src/types/OperationType.d.ts.map +1 -0
- package/dist/esm/src/types/OperationType.js +46 -0
- package/dist/esm/src/types/OperationType.js.map +1 -0
- package/dist/esm/src/types/StateManagers.d.ts +35 -0
- package/dist/esm/src/types/StateManagers.d.ts.map +1 -0
- package/dist/esm/src/types/StateManagers.js +36 -0
- package/dist/esm/src/types/StateManagers.js.map +1 -0
- package/dist/esm/src/types/Tool.d.ts +162 -0
- package/dist/esm/src/types/Tool.d.ts.map +1 -0
- package/dist/esm/src/types/Tool.js +38 -0
- package/dist/esm/src/types/Tool.js.map +1 -0
- package/dist/esm/src/types/ToolPermissions.d.ts +73 -0
- package/dist/esm/src/types/ToolPermissions.d.ts.map +1 -0
- package/dist/esm/src/types/ToolPermissions.js +51 -0
- package/dist/esm/src/types/ToolPermissions.js.map +1 -0
- package/dist/esm/src/types/ToolResult.d.ts +129 -0
- package/dist/esm/src/types/ToolResult.d.ts.map +1 -0
- package/dist/esm/src/types/ToolResult.js +22 -0
- package/dist/esm/src/types/ToolResult.js.map +1 -0
- package/dist/esm/src/types/index.d.ts +47 -0
- package/dist/esm/src/types/index.d.ts.map +1 -0
- package/dist/esm/src/types/index.js +42 -0
- package/dist/esm/src/types/index.js.map +1 -0
- package/dist/esm/src/ui/react/chat/ChatBubble.d.ts +23 -0
- package/dist/esm/src/ui/react/chat/ChatBubble.d.ts.map +1 -0
- package/dist/esm/src/ui/react/chat/ChatBubble.js +184 -0
- package/dist/esm/src/ui/react/chat/ChatBubble.js.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1,694 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supernal AI Interface - Enhanced Tool Decorator System
|
|
3
|
+
*
|
|
4
|
+
* Provides comprehensive tool registration with AI safety controls and universal capabilities.
|
|
5
|
+
* Automatically generates tool schemas with AI control vs testing distinction.
|
|
6
|
+
*/
|
|
7
|
+
import { ToolRegistry } from '../background/registry/ToolRegistry.js';
|
|
8
|
+
import { ToolCategory, ToolFrequency, ToolComplexity, } from '../types/index.js';
|
|
9
|
+
// RuntimeGraphTracker is part of enterprise edition
|
|
10
|
+
// import { RuntimeGraphTracker } from '../ui/react/graph/RuntimeGraphTracker.js';
|
|
11
|
+
const DEBUG = false;
|
|
12
|
+
if (DEBUG)
|
|
13
|
+
console.log('Logging for Tool is:', DEBUG);
|
|
14
|
+
// Note: All tools (class methods and standalone functions) are registered in the unified ToolRegistry
|
|
15
|
+
/**
|
|
16
|
+
* Convert shorthand to full ToolConfig
|
|
17
|
+
* Applies smart defaults and inheritance
|
|
18
|
+
*/
|
|
19
|
+
function normalizeShorthand(elementId, options) {
|
|
20
|
+
return {
|
|
21
|
+
// REQUIRED: elementId (provided explicitly)
|
|
22
|
+
elementId: elementId,
|
|
23
|
+
toolId: elementId, // Default: same as elementId
|
|
24
|
+
// REQUIRED: examples (must be provided in shorthand)
|
|
25
|
+
examples: options?.examples || [],
|
|
26
|
+
// OPTIONAL OVERRIDES: Use if provided, otherwise undefined (will be inferred)
|
|
27
|
+
name: options?.name,
|
|
28
|
+
dangerLevel: options?.dangerLevel,
|
|
29
|
+
aiEnabled: options?.aiEnabled,
|
|
30
|
+
containerId: options?.containerId,
|
|
31
|
+
callbacks: options?.callbacks,
|
|
32
|
+
// Everything else will be inferred by existing logic:
|
|
33
|
+
// - category: inferred from method name
|
|
34
|
+
// - description: inferred from method name
|
|
35
|
+
// - toolType: inferred from method name
|
|
36
|
+
// - actionType: inferred from method name
|
|
37
|
+
// - elementType: inferred from method name
|
|
38
|
+
// - requiresApproval: inferred from dangerLevel
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Implementation
|
|
42
|
+
// eslint-disable-next-line no-redeclare
|
|
43
|
+
export function Tool(configOrElementId, options) {
|
|
44
|
+
return function (target, propertyKey, descriptor) {
|
|
45
|
+
// Normalize to ToolConfig
|
|
46
|
+
const config = typeof configOrElementId === 'string'
|
|
47
|
+
? normalizeShorthand(configOrElementId, options)
|
|
48
|
+
: configOrElementId;
|
|
49
|
+
// Handle standalone function case (when used as Tool(config)(func))
|
|
50
|
+
if (typeof target === 'function' && !propertyKey) {
|
|
51
|
+
return decorateStandaloneFunction(target, config);
|
|
52
|
+
}
|
|
53
|
+
// Handle class method case
|
|
54
|
+
if (propertyKey && descriptor) {
|
|
55
|
+
return decorateClassMethod(target, propertyKey, descriptor, config);
|
|
56
|
+
}
|
|
57
|
+
throw new Error('Tool decorator can only be applied to class methods or standalone functions');
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Decorate a standalone function
|
|
62
|
+
*/
|
|
63
|
+
function decorateStandaloneFunction(func, config) {
|
|
64
|
+
const functionName = func.name || 'anonymous';
|
|
65
|
+
const providerName = config.providerName || 'StandaloneFunctions';
|
|
66
|
+
// Use functionName for toolId (never use config.name which might have spaces)
|
|
67
|
+
const uniqueFunctionId = functionName;
|
|
68
|
+
const toolMetadata = {
|
|
69
|
+
methodName: functionName,
|
|
70
|
+
name: config.name || formatMethodName(functionName),
|
|
71
|
+
description: config.description || formatMethodName(functionName),
|
|
72
|
+
category: config.category || inferCategoryFromMethodName(functionName),
|
|
73
|
+
inputSchema: config.inputSchema || generateBasicInputSchema(),
|
|
74
|
+
outputSchema: config.outputSchema || generateBasicOutputSchema(),
|
|
75
|
+
returnType: config.returnType || 'json',
|
|
76
|
+
supportsStreaming: config.supportsStreaming || false,
|
|
77
|
+
tags: config.tags || [providerName.toLowerCase()],
|
|
78
|
+
keywords: config.keywords || [functionName],
|
|
79
|
+
useCases: config.useCases || generateUseCases(functionName),
|
|
80
|
+
permissions: config.permissions || inferPermissions(functionName),
|
|
81
|
+
frequency: config.frequency || inferFrequency(functionName),
|
|
82
|
+
complexity: config.complexity || ToolComplexity.SIMPLE,
|
|
83
|
+
// IMPROVED: Better identifiers
|
|
84
|
+
toolId: config.toolId || generateToolId(providerName, functionName),
|
|
85
|
+
elementId: config.elementId,
|
|
86
|
+
selector: config.selector,
|
|
87
|
+
// NEW: Container/modal context
|
|
88
|
+
containerId: config.containerId,
|
|
89
|
+
// NEW: Callback capabilities
|
|
90
|
+
callbacks: config.callbacks,
|
|
91
|
+
// Provider information
|
|
92
|
+
providerName: providerName,
|
|
93
|
+
isStandalone: true,
|
|
94
|
+
// AI Interface enhancements
|
|
95
|
+
examples: config.examples || generateNaturalLanguageExamples(functionName),
|
|
96
|
+
aiDescription: config.aiDescription || generateAIDescription(functionName, config.description),
|
|
97
|
+
executionContext: config.executionContext || inferExecutionContext(functionName),
|
|
98
|
+
mockData: config.mockData,
|
|
99
|
+
// AI Control vs Testing distinction - SAFE DEFAULTS
|
|
100
|
+
toolType: config.toolType || inferToolType(functionName),
|
|
101
|
+
aiEnabled: config.aiEnabled || false,
|
|
102
|
+
dangerLevel: config.dangerLevel || inferDangerLevel(functionName),
|
|
103
|
+
requiresApproval: config.requiresApproval || shouldRequireApproval(functionName, config.dangerLevel),
|
|
104
|
+
// Testing integration
|
|
105
|
+
generateSimulation: config.generateSimulation ?? true,
|
|
106
|
+
generateStories: config.generateStories ?? true,
|
|
107
|
+
elementType: config.elementType || inferElementType(functionName),
|
|
108
|
+
actionType: config.actionType || inferActionType(functionName),
|
|
109
|
+
// Origin tracking
|
|
110
|
+
origin: config.origin,
|
|
111
|
+
// Legacy fields
|
|
112
|
+
testId: config.testId || config.toolId || generateToolId(providerName, functionName),
|
|
113
|
+
uiSelector: config.uiSelector || config.selector,
|
|
114
|
+
};
|
|
115
|
+
// Store the function reference so it can be executed
|
|
116
|
+
toolMetadata.method = func;
|
|
117
|
+
// Register with ToolRegistry - use unique ID
|
|
118
|
+
try {
|
|
119
|
+
ToolRegistry.registerTool(providerName, uniqueFunctionId, toolMetadata);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error('Failed to register tool:', toolMetadata.name, error);
|
|
123
|
+
}
|
|
124
|
+
DEBUG &&
|
|
125
|
+
console.log(`[Tool] Registered function: ${toolMetadata.name} (${toolMetadata.category})`);
|
|
126
|
+
// Return a wrapped function that preserves the original's return value
|
|
127
|
+
// This ensures the function's return value is properly propagated to callers
|
|
128
|
+
const wrappedFunction = async function (...args) {
|
|
129
|
+
const result = await func.apply(this, args);
|
|
130
|
+
return result;
|
|
131
|
+
};
|
|
132
|
+
// Attach metadata to the wrapped function
|
|
133
|
+
wrappedFunction.__toolMetadata__ = toolMetadata;
|
|
134
|
+
// Preserve the original function name for debugging
|
|
135
|
+
Object.defineProperty(wrappedFunction, 'name', {
|
|
136
|
+
value: functionName,
|
|
137
|
+
writable: false
|
|
138
|
+
});
|
|
139
|
+
return wrappedFunction;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Decorate a class method
|
|
143
|
+
*/
|
|
144
|
+
function decorateClassMethod(target, propertyKey, descriptor, config) {
|
|
145
|
+
// Ensure propertyKey is a string for processing
|
|
146
|
+
const methodName = typeof propertyKey === 'string' ? propertyKey : String(propertyKey);
|
|
147
|
+
// In legacy decorators, target is the class prototype, so we can get the class name directly
|
|
148
|
+
const className = target.constructor.name || 'UnknownClass';
|
|
149
|
+
// Store original method
|
|
150
|
+
const originalMethod = descriptor.value;
|
|
151
|
+
// Generate and register the tool metadata
|
|
152
|
+
const toolMetadata = generateToolMetadata(className, methodName, config, target);
|
|
153
|
+
// Store method reference
|
|
154
|
+
toolMetadata.method = originalMethod;
|
|
155
|
+
toolMetadata.onExecute = config.onExecute;
|
|
156
|
+
toolMetadata.autoReport = config.autoReport !== false; // Default to true
|
|
157
|
+
// Wrap method to capture instance, invoke onExecute callback, and track execution
|
|
158
|
+
descriptor.value = async function (...args) {
|
|
159
|
+
const startTime = Date.now();
|
|
160
|
+
// RuntimeGraphTracker removed - enterprise edition feature
|
|
161
|
+
// const tracker = RuntimeGraphTracker.getInstance();
|
|
162
|
+
// Always update instance reference (in case it was created after registration)
|
|
163
|
+
toolMetadata.instance = this;
|
|
164
|
+
try {
|
|
165
|
+
// Execute the original method
|
|
166
|
+
const result = await originalMethod.apply(this, args);
|
|
167
|
+
const duration = Date.now() - startTime;
|
|
168
|
+
// Track successful execution (enterprise feature - removed in open source)
|
|
169
|
+
// tracker.trackExecution({...}); // Enterprise feature
|
|
170
|
+
// Full execution tracking available at https://supernal.ai/enterprise
|
|
171
|
+
// Auto-report if enabled
|
|
172
|
+
if (toolMetadata.autoReport && toolMetadata.elementId) {
|
|
173
|
+
const callback = config.onExecute || getDefaultReporter();
|
|
174
|
+
if (callback) {
|
|
175
|
+
// Generate default message from elementId + actionType if not provided
|
|
176
|
+
const defaultMessage = generateDefaultMessage(toolMetadata.elementId, toolMetadata.actionType);
|
|
177
|
+
callback({
|
|
178
|
+
success: true,
|
|
179
|
+
message: result?.message || defaultMessage,
|
|
180
|
+
data: result
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else if (config.onExecute) {
|
|
185
|
+
// Custom callback without auto-report
|
|
186
|
+
config.onExecute({
|
|
187
|
+
success: true,
|
|
188
|
+
message: result?.message,
|
|
189
|
+
data: result
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
const duration = Date.now() - startTime;
|
|
196
|
+
// Track failed execution (enterprise feature - removed in open source)
|
|
197
|
+
// tracker.trackExecution({...}); // Enterprise feature
|
|
198
|
+
// Full execution tracking available at https://supernal.ai/enterprise
|
|
199
|
+
// Report error if auto-reporting enabled
|
|
200
|
+
const callback = config.onExecute || (toolMetadata.autoReport && toolMetadata.elementId ? getDefaultReporter() : null);
|
|
201
|
+
if (callback) {
|
|
202
|
+
callback({
|
|
203
|
+
success: false,
|
|
204
|
+
error: error
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
// Mark descriptor.value with a special property so we can find and update instance later
|
|
211
|
+
descriptor.value.__toolMetadata__ = toolMetadata;
|
|
212
|
+
// Register with ToolRegistry
|
|
213
|
+
try {
|
|
214
|
+
const { ToolRegistry } = require('../background/registry/ToolRegistry');
|
|
215
|
+
ToolRegistry.registerTool(className, methodName, toolMetadata);
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
console.error('Failed to register tool:', error);
|
|
219
|
+
}
|
|
220
|
+
DEBUG && console.log(`[Tool] Registered tool: ${toolMetadata.name} (${toolMetadata.category})`);
|
|
221
|
+
// Also register on the class prototype for direct access
|
|
222
|
+
if (!target.__tools__) {
|
|
223
|
+
target.__tools__ = [];
|
|
224
|
+
}
|
|
225
|
+
target.__tools__.push(toolMetadata);
|
|
226
|
+
return descriptor;
|
|
227
|
+
}
|
|
228
|
+
// Helper function to generate tool metadata
|
|
229
|
+
function generateToolMetadata(className, methodName, config, target) {
|
|
230
|
+
// Read parent @ToolProvider config for inheritance
|
|
231
|
+
// In legacy decorators, target is the prototype, so we need to access the constructor
|
|
232
|
+
const providerConfig = target.constructor?.__toolProvider__?.config;
|
|
233
|
+
return {
|
|
234
|
+
// Core fields
|
|
235
|
+
methodName: methodName,
|
|
236
|
+
name: config.name || formatMethodName(methodName),
|
|
237
|
+
description: config.description || formatMethodName(methodName),
|
|
238
|
+
category: config.category || inferCategoryFromMethodName(methodName),
|
|
239
|
+
inputSchema: config.inputSchema || generateBasicInputSchema(),
|
|
240
|
+
outputSchema: config.outputSchema || generateBasicOutputSchema(),
|
|
241
|
+
returnType: config.returnType || 'json',
|
|
242
|
+
supportsStreaming: config.supportsStreaming || false,
|
|
243
|
+
tags: config.tags || [className.toLowerCase().replace('manager', '')],
|
|
244
|
+
keywords: config.keywords || [methodName],
|
|
245
|
+
useCases: config.useCases || generateUseCases(methodName),
|
|
246
|
+
permissions: config.permissions || inferPermissions(methodName),
|
|
247
|
+
frequency: config.frequency || inferFrequency(methodName),
|
|
248
|
+
complexity: config.complexity || ToolComplexity.SIMPLE,
|
|
249
|
+
// Identifiers
|
|
250
|
+
toolId: config.toolId || generateToolId(className, methodName),
|
|
251
|
+
elementId: config.elementId,
|
|
252
|
+
selector: config.selector,
|
|
253
|
+
// NEW: Container/modal context (with inheritance)
|
|
254
|
+
containerId: config.containerId || providerConfig?.containerId,
|
|
255
|
+
// NEW: Callback capabilities
|
|
256
|
+
callbacks: config.callbacks,
|
|
257
|
+
// Provider information
|
|
258
|
+
providerClass: className,
|
|
259
|
+
isStandalone: false,
|
|
260
|
+
// AI Interface enhancements
|
|
261
|
+
examples: config.examples || generateNaturalLanguageExamples(methodName),
|
|
262
|
+
aiDescription: config.aiDescription || generateAIDescription(methodName, config.description),
|
|
263
|
+
executionContext: config.executionContext || inferExecutionContext(methodName),
|
|
264
|
+
mockData: config.mockData,
|
|
265
|
+
// AI Control vs Testing distinction (with smart defaults)
|
|
266
|
+
toolType: config.toolType || inferToolType(methodName),
|
|
267
|
+
aiEnabled: config.aiEnabled ?? providerConfig?.aiEnabled ?? inferAIEnabled(methodName),
|
|
268
|
+
dangerLevel: config.dangerLevel || inferDangerLevel(methodName),
|
|
269
|
+
requiresApproval: config.requiresApproval || shouldRequireApproval(methodName, config.dangerLevel),
|
|
270
|
+
// Testing integration
|
|
271
|
+
generateSimulation: config.generateSimulation ?? true,
|
|
272
|
+
generateStories: config.generateStories ?? true,
|
|
273
|
+
elementType: config.elementType || inferElementType(methodName),
|
|
274
|
+
actionType: config.actionType || inferActionType(methodName),
|
|
275
|
+
// Origin tracking
|
|
276
|
+
origin: config.origin,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Generate basic input schema (since we can't extract from JSDoc at runtime)
|
|
281
|
+
*/
|
|
282
|
+
function generateBasicInputSchema() {
|
|
283
|
+
return {
|
|
284
|
+
type: 'object',
|
|
285
|
+
properties: {},
|
|
286
|
+
required: [],
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Generate basic output schema (since we can't extract from JSDoc at runtime)
|
|
291
|
+
*/
|
|
292
|
+
function generateBasicOutputSchema() {
|
|
293
|
+
return {
|
|
294
|
+
type: 'object',
|
|
295
|
+
properties: {
|
|
296
|
+
success: { type: 'boolean' },
|
|
297
|
+
data: { type: 'object' },
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Infer tool category from method name
|
|
303
|
+
*/
|
|
304
|
+
function inferCategoryFromMethodName(methodName) {
|
|
305
|
+
const name = String(methodName).toLowerCase();
|
|
306
|
+
// User interaction patterns
|
|
307
|
+
if (name.startsWith('click') || name.startsWith('press') || name.startsWith('tap') ||
|
|
308
|
+
name.includes('button') || name.includes('link')) {
|
|
309
|
+
return ToolCategory.USER_INTERACTION;
|
|
310
|
+
}
|
|
311
|
+
if (name.startsWith('create') || name.startsWith('add') || name.startsWith('insert')) {
|
|
312
|
+
return ToolCategory.DATA;
|
|
313
|
+
}
|
|
314
|
+
if (name.startsWith('read') ||
|
|
315
|
+
name.startsWith('get') ||
|
|
316
|
+
name.startsWith('fetch') ||
|
|
317
|
+
name.startsWith('load')) {
|
|
318
|
+
return ToolCategory.DATA;
|
|
319
|
+
}
|
|
320
|
+
if (name.startsWith('update') ||
|
|
321
|
+
name.startsWith('modify') ||
|
|
322
|
+
name.startsWith('edit') ||
|
|
323
|
+
name.startsWith('change')) {
|
|
324
|
+
return ToolCategory.DATA;
|
|
325
|
+
}
|
|
326
|
+
if (name.startsWith('delete') || name.startsWith('remove') || name.startsWith('destroy')) {
|
|
327
|
+
return ToolCategory.DATA;
|
|
328
|
+
}
|
|
329
|
+
if (name.startsWith('list') ||
|
|
330
|
+
name.startsWith('find') ||
|
|
331
|
+
name.startsWith('search') ||
|
|
332
|
+
name.startsWith('query')) {
|
|
333
|
+
return ToolCategory.SEARCH;
|
|
334
|
+
}
|
|
335
|
+
if (name.includes('sync') || name.includes('cloud') || name.includes('backup')) {
|
|
336
|
+
return ToolCategory.SYSTEM;
|
|
337
|
+
}
|
|
338
|
+
return ToolCategory.UTILITY;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Generate keywords from method name
|
|
342
|
+
*/
|
|
343
|
+
function generateKeywords(methodName) {
|
|
344
|
+
return [String(methodName)];
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Generate use cases from method name
|
|
348
|
+
*/
|
|
349
|
+
function generateUseCases(methodName) {
|
|
350
|
+
const useCases = [];
|
|
351
|
+
const name = String(methodName).toLowerCase();
|
|
352
|
+
// Add common use cases based on method name
|
|
353
|
+
if (name.startsWith('create'))
|
|
354
|
+
useCases.push('Create new entity');
|
|
355
|
+
if (name.startsWith('get') || name.startsWith('read'))
|
|
356
|
+
useCases.push('Retrieve data');
|
|
357
|
+
if (name.startsWith('list') || name.startsWith('find'))
|
|
358
|
+
useCases.push('Browse and search');
|
|
359
|
+
if (name.startsWith('update'))
|
|
360
|
+
useCases.push('Modify existing data');
|
|
361
|
+
if (name.startsWith('delete'))
|
|
362
|
+
useCases.push('Remove data');
|
|
363
|
+
return useCases.length > 0 ? useCases : ['General operation'];
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Infer permissions from method name
|
|
367
|
+
*/
|
|
368
|
+
function inferPermissions(methodName) {
|
|
369
|
+
const name = String(methodName).toLowerCase();
|
|
370
|
+
if (name.startsWith('delete') || name.startsWith('remove')) {
|
|
371
|
+
return {
|
|
372
|
+
level: 'approve_once',
|
|
373
|
+
sensitiveDataAccess: true,
|
|
374
|
+
networkAccess: false,
|
|
375
|
+
requiredScopes: [],
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
if (name.startsWith('create') || name.startsWith('update')) {
|
|
379
|
+
return {
|
|
380
|
+
level: 'approve_once',
|
|
381
|
+
sensitiveDataAccess: false,
|
|
382
|
+
networkAccess: false,
|
|
383
|
+
requiredScopes: [],
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
return {
|
|
387
|
+
level: 'auto_approve',
|
|
388
|
+
sensitiveDataAccess: false,
|
|
389
|
+
networkAccess: false,
|
|
390
|
+
requiredScopes: [],
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Infer frequency from method name
|
|
395
|
+
*/
|
|
396
|
+
function inferFrequency(methodName) {
|
|
397
|
+
const name = String(methodName).toLowerCase();
|
|
398
|
+
if (name.startsWith('get') || name.startsWith('read') || name.startsWith('list')) {
|
|
399
|
+
return ToolFrequency.VERY_HIGH;
|
|
400
|
+
}
|
|
401
|
+
if (name.startsWith('create') || name.startsWith('add')) {
|
|
402
|
+
return ToolFrequency.HIGH;
|
|
403
|
+
}
|
|
404
|
+
if (name.startsWith('update') || name.startsWith('modify')) {
|
|
405
|
+
return ToolFrequency.MEDIUM;
|
|
406
|
+
}
|
|
407
|
+
if (name.startsWith('delete') || name.startsWith('sync')) {
|
|
408
|
+
return ToolFrequency.LOW;
|
|
409
|
+
}
|
|
410
|
+
return ToolFrequency.MEDIUM;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Format method name for display
|
|
414
|
+
*/
|
|
415
|
+
function formatMethodName(methodName) {
|
|
416
|
+
// Handle symbol or non-string inputs
|
|
417
|
+
if (typeof methodName !== 'string') {
|
|
418
|
+
return String(methodName);
|
|
419
|
+
}
|
|
420
|
+
// Convert camelCase to Title Case
|
|
421
|
+
return methodName
|
|
422
|
+
.replace(/([A-Z])/g, ' $1')
|
|
423
|
+
.replace(/^./, (str) => str.toUpperCase())
|
|
424
|
+
.trim();
|
|
425
|
+
}
|
|
426
|
+
// NEW: AI Interface helper functions
|
|
427
|
+
function generateToolId(providerName, methodName) {
|
|
428
|
+
return `${providerName.toLowerCase()}-${methodName.toLowerCase()}`;
|
|
429
|
+
}
|
|
430
|
+
function generateNaturalLanguageExamples(methodName) {
|
|
431
|
+
const examples = [];
|
|
432
|
+
const name = methodName.toLowerCase();
|
|
433
|
+
if (name.includes('get') || name.includes('fetch') || name.includes('load')) {
|
|
434
|
+
examples.push('get this', 'fetch it', 'load the data');
|
|
435
|
+
}
|
|
436
|
+
if (name.includes('create') || name.includes('add')) {
|
|
437
|
+
examples.push('create new', 'add this', 'make a new one');
|
|
438
|
+
}
|
|
439
|
+
if (name.includes('update') || name.includes('modify') || name.includes('edit')) {
|
|
440
|
+
examples.push('update this', 'modify it', 'change the data');
|
|
441
|
+
}
|
|
442
|
+
if (name.includes('search') || name.includes('find')) {
|
|
443
|
+
examples.push('search for', 'find this', 'look up');
|
|
444
|
+
}
|
|
445
|
+
if (name.startsWith('delete') || name.startsWith('remove')) {
|
|
446
|
+
examples.push('delete this', 'remove it', 'get rid of it');
|
|
447
|
+
}
|
|
448
|
+
return examples.length > 0 ? examples : [`execute ${formatMethodName(methodName)}`];
|
|
449
|
+
}
|
|
450
|
+
function generateAIDescription(methodName, description) {
|
|
451
|
+
const baseDesc = description || formatMethodName(methodName);
|
|
452
|
+
const name = methodName.toLowerCase();
|
|
453
|
+
let aiDesc = baseDesc;
|
|
454
|
+
if (name.includes('navigate')) {
|
|
455
|
+
aiDesc += '. This changes the current page or view.';
|
|
456
|
+
}
|
|
457
|
+
if (name.startsWith('approve')) {
|
|
458
|
+
aiDesc += '. This action updates the status to approved.';
|
|
459
|
+
}
|
|
460
|
+
if (name.startsWith('delete') || name.startsWith('remove')) {
|
|
461
|
+
aiDesc += '. This is a destructive action that cannot be undone.';
|
|
462
|
+
}
|
|
463
|
+
if (name.startsWith('search') || name.startsWith('find')) {
|
|
464
|
+
aiDesc += '. Returns matching results based on search criteria.';
|
|
465
|
+
}
|
|
466
|
+
return aiDesc;
|
|
467
|
+
}
|
|
468
|
+
function inferExecutionContext(methodName) {
|
|
469
|
+
const name = methodName.toLowerCase();
|
|
470
|
+
if (name.includes('navigate') || name.includes('click') || name.includes('type')) {
|
|
471
|
+
return 'ui';
|
|
472
|
+
}
|
|
473
|
+
if (name.includes('create') ||
|
|
474
|
+
name.includes('update') ||
|
|
475
|
+
name.includes('delete') ||
|
|
476
|
+
name.includes('fetch')) {
|
|
477
|
+
return 'api';
|
|
478
|
+
}
|
|
479
|
+
return 'both';
|
|
480
|
+
}
|
|
481
|
+
function inferToolType(methodName) {
|
|
482
|
+
const name = methodName.toLowerCase();
|
|
483
|
+
// Dangerous operations - test-only by default
|
|
484
|
+
if (name.includes('delete') || name.includes('remove') || name.includes('destroy')) {
|
|
485
|
+
return 'ai-dangerous';
|
|
486
|
+
}
|
|
487
|
+
// Restricted operations - require explicit enabling
|
|
488
|
+
if (name.includes('create') ||
|
|
489
|
+
name.includes('update') ||
|
|
490
|
+
name.includes('modify') ||
|
|
491
|
+
name.includes('approve') ||
|
|
492
|
+
name.includes('reject') ||
|
|
493
|
+
name.includes('assign')) {
|
|
494
|
+
return 'ai-restricted';
|
|
495
|
+
}
|
|
496
|
+
// Safe operations - can be AI-enabled
|
|
497
|
+
if (name.includes('get') ||
|
|
498
|
+
name.includes('fetch') ||
|
|
499
|
+
name.includes('search') ||
|
|
500
|
+
name.includes('find') ||
|
|
501
|
+
name.includes('list') ||
|
|
502
|
+
name.includes('view') ||
|
|
503
|
+
name.includes('navigate') ||
|
|
504
|
+
name.includes('show') ||
|
|
505
|
+
name.includes('click') ||
|
|
506
|
+
name.includes('toggle') ||
|
|
507
|
+
name.includes('increment') ||
|
|
508
|
+
name.includes('decrement') ||
|
|
509
|
+
name.includes('select') ||
|
|
510
|
+
name.includes('open') ||
|
|
511
|
+
name.includes('close')) {
|
|
512
|
+
return 'ai-safe';
|
|
513
|
+
}
|
|
514
|
+
// Default: ai-safe for UI interactions (changed from test-only)
|
|
515
|
+
return 'ai-safe';
|
|
516
|
+
}
|
|
517
|
+
function inferDangerLevel(methodName) {
|
|
518
|
+
const name = methodName.toLowerCase();
|
|
519
|
+
// Destructive operations
|
|
520
|
+
if (name.includes('delete') ||
|
|
521
|
+
name.includes('remove') ||
|
|
522
|
+
name.includes('destroy') ||
|
|
523
|
+
name.includes('purge') ||
|
|
524
|
+
name.includes('wipe')) {
|
|
525
|
+
return 'destructive';
|
|
526
|
+
}
|
|
527
|
+
// Dangerous operations
|
|
528
|
+
if (name.includes('approve') ||
|
|
529
|
+
name.includes('reject') ||
|
|
530
|
+
name.includes('ban') ||
|
|
531
|
+
name.includes('suspend') ||
|
|
532
|
+
name.includes('disable')) {
|
|
533
|
+
return 'dangerous';
|
|
534
|
+
}
|
|
535
|
+
// Moderate operations
|
|
536
|
+
if (name.includes('create') ||
|
|
537
|
+
name.includes('update') ||
|
|
538
|
+
name.includes('modify') ||
|
|
539
|
+
name.includes('assign') ||
|
|
540
|
+
name.includes('change')) {
|
|
541
|
+
return 'moderate';
|
|
542
|
+
}
|
|
543
|
+
// Safe operations (read-only, navigation)
|
|
544
|
+
return 'safe';
|
|
545
|
+
}
|
|
546
|
+
function shouldRequireApproval(methodName, dangerLevel) {
|
|
547
|
+
const level = dangerLevel || inferDangerLevel(methodName);
|
|
548
|
+
// Always require approval for dangerous/destructive operations
|
|
549
|
+
if (level === 'dangerous' || level === 'destructive') {
|
|
550
|
+
return true;
|
|
551
|
+
}
|
|
552
|
+
// Require approval for certain moderate operations
|
|
553
|
+
if (level === 'moderate') {
|
|
554
|
+
const name = methodName.toLowerCase();
|
|
555
|
+
if (name.includes('approve') || name.includes('reject') || name.includes('assign')) {
|
|
556
|
+
return true;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
return false;
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Infer element type from method name (for testing integration)
|
|
563
|
+
*/
|
|
564
|
+
function inferElementType(methodName) {
|
|
565
|
+
const lowerName = methodName.toLowerCase();
|
|
566
|
+
// Button patterns
|
|
567
|
+
if (lowerName.includes('click') || lowerName.includes('button') || lowerName.includes('submit')) {
|
|
568
|
+
return 'button';
|
|
569
|
+
}
|
|
570
|
+
// Input patterns
|
|
571
|
+
if (lowerName.includes('type') || lowerName.includes('input') || lowerName.includes('enter')) {
|
|
572
|
+
return 'input';
|
|
573
|
+
}
|
|
574
|
+
// Select patterns
|
|
575
|
+
if (lowerName.includes('select') ||
|
|
576
|
+
lowerName.includes('choose') ||
|
|
577
|
+
lowerName.includes('dropdown')) {
|
|
578
|
+
return 'select';
|
|
579
|
+
}
|
|
580
|
+
// Textarea patterns
|
|
581
|
+
if (lowerName.includes('textarea') ||
|
|
582
|
+
lowerName.includes('message') ||
|
|
583
|
+
lowerName.includes('comment')) {
|
|
584
|
+
return 'textarea';
|
|
585
|
+
}
|
|
586
|
+
// Link patterns
|
|
587
|
+
if (lowerName.includes('navigate') || lowerName.includes('link') || lowerName.includes('goto')) {
|
|
588
|
+
return 'link';
|
|
589
|
+
}
|
|
590
|
+
// Default to div for generic interactions
|
|
591
|
+
return 'div';
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Infer action type from method name (for testing integration)
|
|
595
|
+
*/
|
|
596
|
+
function inferActionType(methodName) {
|
|
597
|
+
const lowerName = methodName.toLowerCase();
|
|
598
|
+
// Click actions
|
|
599
|
+
if (lowerName.includes('click') || lowerName.includes('press') || lowerName.includes('tap')) {
|
|
600
|
+
return 'click';
|
|
601
|
+
}
|
|
602
|
+
// Type actions
|
|
603
|
+
if (lowerName.includes('type') || lowerName.includes('enter') || lowerName.includes('input')) {
|
|
604
|
+
return 'type';
|
|
605
|
+
}
|
|
606
|
+
// Select actions
|
|
607
|
+
if (lowerName.includes('select') || lowerName.includes('choose') || lowerName.includes('pick')) {
|
|
608
|
+
return 'select';
|
|
609
|
+
}
|
|
610
|
+
// Navigate actions
|
|
611
|
+
if (lowerName.includes('navigate') || lowerName.includes('goto') || lowerName.includes('open')) {
|
|
612
|
+
return 'navigate';
|
|
613
|
+
}
|
|
614
|
+
// Hover actions
|
|
615
|
+
if (lowerName.includes('hover') || lowerName.includes('mouseover')) {
|
|
616
|
+
return 'hover';
|
|
617
|
+
}
|
|
618
|
+
// Scroll actions
|
|
619
|
+
if (lowerName.includes('scroll') || lowerName.includes('swipe')) {
|
|
620
|
+
return 'scroll';
|
|
621
|
+
}
|
|
622
|
+
// Default to click for most interactions
|
|
623
|
+
return 'click';
|
|
624
|
+
}
|
|
625
|
+
/**
|
|
626
|
+
* Global default reporter - can be set by application (e.g., ToolManager)
|
|
627
|
+
*/
|
|
628
|
+
let globalDefaultReporter = null;
|
|
629
|
+
export function setDefaultToolReporter(reporter) {
|
|
630
|
+
globalDefaultReporter = reporter;
|
|
631
|
+
}
|
|
632
|
+
function getDefaultReporter() {
|
|
633
|
+
return globalDefaultReporter;
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Infer default aiEnabled from inferred toolType
|
|
637
|
+
* - ai-safe → true
|
|
638
|
+
* - ai-restricted → false (require explicit enabling)
|
|
639
|
+
* - ai-dangerous → false (require explicit enabling)
|
|
640
|
+
* - test-only → false
|
|
641
|
+
*/
|
|
642
|
+
function inferAIEnabled(methodName) {
|
|
643
|
+
const toolType = inferToolType(methodName);
|
|
644
|
+
return toolType === 'ai-safe';
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
647
|
+
* Generate human-readable message from elementId and actionType
|
|
648
|
+
* Examples:
|
|
649
|
+
* - 'open-main-menu' + 'click' -> 'Open main menu'
|
|
650
|
+
* - 'feature-toggle' + 'change' -> 'Feature toggle changed'
|
|
651
|
+
*/
|
|
652
|
+
function generateDefaultMessage(elementId, actionType) {
|
|
653
|
+
if (!elementId)
|
|
654
|
+
return 'Tool executed';
|
|
655
|
+
// Convert kebab-case to words: 'open-main-menu' -> 'Open main menu'
|
|
656
|
+
const words = elementId.split('-')
|
|
657
|
+
.map((word, i) => i === 0 ? word.charAt(0).toUpperCase() + word.slice(1) : word)
|
|
658
|
+
.join(' ');
|
|
659
|
+
// Add action context if available
|
|
660
|
+
if (actionType && actionType !== 'click') {
|
|
661
|
+
return `${words} ${actionType}d`;
|
|
662
|
+
}
|
|
663
|
+
return words;
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Get all tools (both class methods and standalone functions)
|
|
667
|
+
* @deprecated Use ToolRegistry.getAllTools() instead
|
|
668
|
+
*/
|
|
669
|
+
export function getStandaloneTools() {
|
|
670
|
+
try {
|
|
671
|
+
const { ToolRegistry } = require('../background/registry/ToolRegistry');
|
|
672
|
+
return ToolRegistry.getAllTools().filter((tool) => tool.isStandalone);
|
|
673
|
+
}
|
|
674
|
+
catch (error) {
|
|
675
|
+
console.error('Failed to get tools from registry:', error);
|
|
676
|
+
return [];
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
/**
|
|
680
|
+
* Get tool by ID (works for both class methods and standalone functions)
|
|
681
|
+
* @deprecated Use ToolRegistry.getTool() instead
|
|
682
|
+
*/
|
|
683
|
+
export function getStandaloneTool(toolId) {
|
|
684
|
+
try {
|
|
685
|
+
const { ToolRegistry } = require('../background/registry/ToolRegistry');
|
|
686
|
+
const tool = ToolRegistry.getTool(toolId);
|
|
687
|
+
return tool?.isStandalone ? tool : undefined;
|
|
688
|
+
}
|
|
689
|
+
catch (error) {
|
|
690
|
+
console.error('Failed to get tool from registry:', error);
|
|
691
|
+
return undefined;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
//# sourceMappingURL=Tool.js.map
|