@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.
Files changed (519) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +165 -0
  3. package/dist/cjs/names/API.js +104 -0
  4. package/dist/cjs/names/API.js.map +1 -0
  5. package/dist/cjs/names/Components.js +104 -0
  6. package/dist/cjs/names/Components.js.map +1 -0
  7. package/dist/cjs/names/Containers.js +99 -0
  8. package/dist/cjs/names/Containers.js.map +1 -0
  9. package/dist/cjs/names/Functions.js +114 -0
  10. package/dist/cjs/names/Functions.js.map +1 -0
  11. package/dist/cjs/names/index.js +118 -0
  12. package/dist/cjs/names/index.js.map +1 -0
  13. package/dist/cjs/src/adapters/ChatUIProvider.js +176 -0
  14. package/dist/cjs/src/adapters/ChatUIProvider.js.map +1 -0
  15. package/dist/cjs/src/adapters/bridge.js +225 -0
  16. package/dist/cjs/src/adapters/bridge.js.map +1 -0
  17. package/dist/cjs/src/adapters/copilotkit/CopilotKitAdapter.js +289 -0
  18. package/dist/cjs/src/adapters/copilotkit/CopilotKitAdapter.js.map +1 -0
  19. package/dist/cjs/src/adapters/copilotkit/index.js +10 -0
  20. package/dist/cjs/src/adapters/copilotkit/index.js.map +1 -0
  21. package/dist/cjs/src/adapters/index.js +63 -0
  22. package/dist/cjs/src/adapters/index.js.map +1 -0
  23. package/dist/cjs/src/adapters/native/NativeAdapter.js +268 -0
  24. package/dist/cjs/src/adapters/native/NativeAdapter.js.map +1 -0
  25. package/dist/cjs/src/adapters/native/index.js +10 -0
  26. package/dist/cjs/src/adapters/native/index.js.map +1 -0
  27. package/dist/cjs/src/adapters/types/index.js +9 -0
  28. package/dist/cjs/src/adapters/types/index.js.map +1 -0
  29. package/dist/cjs/src/ai/ToolExecutor.js +211 -0
  30. package/dist/cjs/src/ai/ToolExecutor.js.map +1 -0
  31. package/dist/cjs/src/ai/ToolMatcher.js +202 -0
  32. package/dist/cjs/src/ai/ToolMatcher.js.map +1 -0
  33. package/dist/cjs/src/ai/index.js +29 -0
  34. package/dist/cjs/src/ai/index.js.map +1 -0
  35. package/dist/cjs/src/architecture/createContainer.js +106 -0
  36. package/dist/cjs/src/architecture/createContainer.js.map +1 -0
  37. package/dist/cjs/src/architecture/initialize.js +125 -0
  38. package/dist/cjs/src/architecture/initialize.js.map +1 -0
  39. package/dist/cjs/src/architecture/registry.js +111 -0
  40. package/dist/cjs/src/architecture/registry.js.map +1 -0
  41. package/dist/cjs/src/background/architecture/ArchitectureInitializer.js +174 -0
  42. package/dist/cjs/src/background/architecture/ArchitectureInitializer.js.map +1 -0
  43. package/dist/cjs/src/background/architecture/Containers.js +46 -0
  44. package/dist/cjs/src/background/architecture/Containers.js.map +1 -0
  45. package/dist/cjs/src/background/architecture/DataContractTypes.js +28 -0
  46. package/dist/cjs/src/background/architecture/DataContractTypes.js.map +1 -0
  47. package/dist/cjs/src/background/architecture/index.js +24 -0
  48. package/dist/cjs/src/background/architecture/index.js.map +1 -0
  49. package/dist/cjs/src/background/navigation/NavigationGraph.js +71 -0
  50. package/dist/cjs/src/background/navigation/NavigationGraph.js.map +1 -0
  51. package/dist/cjs/src/background/navigation/RuntimeTreeBuilder.js +66 -0
  52. package/dist/cjs/src/background/navigation/RuntimeTreeBuilder.js.map +1 -0
  53. package/dist/cjs/src/background/navigation/useComponentTracking.js +20 -0
  54. package/dist/cjs/src/background/navigation/useComponentTracking.js.map +1 -0
  55. package/dist/cjs/src/background/registry/ComponentRegistry.js +340 -0
  56. package/dist/cjs/src/background/registry/ComponentRegistry.js.map +1 -0
  57. package/dist/cjs/src/background/registry/ToolRegistry.js +668 -0
  58. package/dist/cjs/src/background/registry/ToolRegistry.js.map +1 -0
  59. package/dist/cjs/src/browser.js +70 -0
  60. package/dist/cjs/src/browser.js.map +1 -0
  61. package/dist/cjs/src/components/ComponentScanner.js +362 -0
  62. package/dist/cjs/src/components/ComponentScanner.js.map +1 -0
  63. package/dist/cjs/src/components/index.js +24 -0
  64. package/dist/cjs/src/components/index.js.map +1 -0
  65. package/dist/cjs/src/data/TestDataManager.js +187 -0
  66. package/dist/cjs/src/data/TestDataManager.js.map +1 -0
  67. package/dist/cjs/src/data/index.js +23 -0
  68. package/dist/cjs/src/data/index.js.map +1 -0
  69. package/dist/cjs/src/decorators/Component.js +108 -0
  70. package/dist/cjs/src/decorators/Component.js.map +1 -0
  71. package/dist/cjs/src/decorators/ContainerHelpers.js +45 -0
  72. package/dist/cjs/src/decorators/ContainerHelpers.js.map +1 -0
  73. package/dist/cjs/src/decorators/SpecializedTools.js +386 -0
  74. package/dist/cjs/src/decorators/SpecializedTools.js.map +1 -0
  75. package/dist/cjs/src/decorators/Tool.js +700 -0
  76. package/dist/cjs/src/decorators/Tool.js.map +1 -0
  77. package/dist/cjs/src/decorators/ToolHelpers.js +261 -0
  78. package/dist/cjs/src/decorators/ToolHelpers.js.map +1 -0
  79. package/dist/cjs/src/decorators/ToolPreset.js +270 -0
  80. package/dist/cjs/src/decorators/ToolPreset.js.map +1 -0
  81. package/dist/cjs/src/decorators/ToolProvider.js +86 -0
  82. package/dist/cjs/src/decorators/ToolProvider.js.map +1 -0
  83. package/dist/cjs/src/decorators/index.js +44 -0
  84. package/dist/cjs/src/decorators/index.js.map +1 -0
  85. package/dist/cjs/src/execution/DOMExecutor.js +233 -0
  86. package/dist/cjs/src/execution/DOMExecutor.js.map +1 -0
  87. package/dist/cjs/src/execution/PlaywrightExecutor.js +196 -0
  88. package/dist/cjs/src/execution/PlaywrightExecutor.js.map +1 -0
  89. package/dist/cjs/src/exposure/ExposureCollector.js +358 -0
  90. package/dist/cjs/src/exposure/ExposureCollector.js.map +1 -0
  91. package/dist/cjs/src/exposure/index.js +26 -0
  92. package/dist/cjs/src/exposure/index.js.map +1 -0
  93. package/dist/cjs/src/index.js +187 -0
  94. package/dist/cjs/src/index.js.map +1 -0
  95. package/dist/cjs/src/interfaces/StatefulComponent.js +50 -0
  96. package/dist/cjs/src/interfaces/StatefulComponent.js.map +1 -0
  97. package/dist/cjs/src/name-contracts/ContractScanner.js +15 -0
  98. package/dist/cjs/src/name-contracts/ContractScanner.js.map +1 -0
  99. package/dist/cjs/src/name-contracts/RouteContractScanner.js +225 -0
  100. package/dist/cjs/src/name-contracts/RouteContractScanner.js.map +1 -0
  101. package/dist/cjs/src/name-contracts/index.js +15 -0
  102. package/dist/cjs/src/name-contracts/index.js.map +1 -0
  103. package/dist/cjs/src/names/createNames.js +86 -0
  104. package/dist/cjs/src/names/createNames.js.map +1 -0
  105. package/dist/cjs/src/react/hooks/useChatWithContext.js +221 -0
  106. package/dist/cjs/src/react/hooks/useChatWithContext.js.map +1 -0
  107. package/dist/cjs/src/react/index.js +28 -0
  108. package/dist/cjs/src/react/index.js.map +1 -0
  109. package/dist/cjs/src/react/useNavigationHandler.js +88 -0
  110. package/dist/cjs/src/react/useNavigationHandler.js.map +1 -0
  111. package/dist/cjs/src/react/usePersistedState.js +72 -0
  112. package/dist/cjs/src/react/usePersistedState.js.map +1 -0
  113. package/dist/cjs/src/react/useToolBinding.js +110 -0
  114. package/dist/cjs/src/react/useToolBinding.js.map +1 -0
  115. package/dist/cjs/src/routes/RouteContractGenerator.js +119 -0
  116. package/dist/cjs/src/routes/RouteContractGenerator.js.map +1 -0
  117. package/dist/cjs/src/routes/RouteContractsConfig.js +39 -0
  118. package/dist/cjs/src/routes/RouteContractsConfig.js.map +1 -0
  119. package/dist/cjs/src/routes/index.js +20 -0
  120. package/dist/cjs/src/routes/index.js.map +1 -0
  121. package/dist/cjs/src/routes/scanners/NameExtractor.js +193 -0
  122. package/dist/cjs/src/routes/scanners/NameExtractor.js.map +1 -0
  123. package/dist/cjs/src/routes/scanners/NextjsDynamicScanner.js +102 -0
  124. package/dist/cjs/src/routes/scanners/NextjsDynamicScanner.js.map +1 -0
  125. package/dist/cjs/src/routes/scanners/RouteScanner.js +13 -0
  126. package/dist/cjs/src/routes/scanners/RouteScanner.js.map +1 -0
  127. package/dist/cjs/src/storage/LocalStorageAdapter.js +87 -0
  128. package/dist/cjs/src/storage/LocalStorageAdapter.js.map +1 -0
  129. package/dist/cjs/src/storage/StateManager.js +299 -0
  130. package/dist/cjs/src/storage/StateManager.js.map +1 -0
  131. package/dist/cjs/src/storage/StorageAdapter.js +164 -0
  132. package/dist/cjs/src/storage/StorageAdapter.js.map +1 -0
  133. package/dist/cjs/src/storage/index.js +37 -0
  134. package/dist/cjs/src/storage/index.js.map +1 -0
  135. package/dist/cjs/src/testing/BrowserStateInjection.js +130 -0
  136. package/dist/cjs/src/testing/BrowserStateInjection.js.map +1 -0
  137. package/dist/cjs/src/testing/ComponentStateHelpers.js +200 -0
  138. package/dist/cjs/src/testing/ComponentStateHelpers.js.map +1 -0
  139. package/dist/cjs/src/testing/GherkinParser.js +252 -0
  140. package/dist/cjs/src/testing/GherkinParser.js.map +1 -0
  141. package/dist/cjs/src/testing/PlaywrightStateHelpers.js +254 -0
  142. package/dist/cjs/src/testing/PlaywrightStateHelpers.js.map +1 -0
  143. package/dist/cjs/src/testing/TestRunner.js +158 -0
  144. package/dist/cjs/src/testing/TestRunner.js.map +1 -0
  145. package/dist/cjs/src/testing/index.js +46 -0
  146. package/dist/cjs/src/testing/index.js.map +1 -0
  147. package/dist/cjs/src/testing/selectors.js +84 -0
  148. package/dist/cjs/src/testing/selectors.js.map +1 -0
  149. package/dist/cjs/src/tools/SystemTools.js +262 -0
  150. package/dist/cjs/src/tools/SystemTools.js.map +1 -0
  151. package/dist/cjs/src/types/ClassifiedTool.js +50 -0
  152. package/dist/cjs/src/types/ClassifiedTool.js.map +1 -0
  153. package/dist/cjs/src/types/ComponentState.js +30 -0
  154. package/dist/cjs/src/types/ComponentState.js.map +1 -0
  155. package/dist/cjs/src/types/DiscoverableToolProvider.js +9 -0
  156. package/dist/cjs/src/types/DiscoverableToolProvider.js.map +1 -0
  157. package/dist/cjs/src/types/ExposureState.js +25 -0
  158. package/dist/cjs/src/types/ExposureState.js.map +1 -0
  159. package/dist/cjs/src/types/NavigationGraph.js +8 -0
  160. package/dist/cjs/src/types/NavigationGraph.js.map +1 -0
  161. package/dist/cjs/src/types/OperationType.js +49 -0
  162. package/dist/cjs/src/types/OperationType.js.map +1 -0
  163. package/dist/cjs/src/types/StateManagers.js +39 -0
  164. package/dist/cjs/src/types/StateManagers.js.map +1 -0
  165. package/dist/cjs/src/types/Tool.js +41 -0
  166. package/dist/cjs/src/types/Tool.js.map +1 -0
  167. package/dist/cjs/src/types/ToolPermissions.js +54 -0
  168. package/dist/cjs/src/types/ToolPermissions.js.map +1 -0
  169. package/dist/cjs/src/types/ToolResult.js +25 -0
  170. package/dist/cjs/src/types/ToolResult.js.map +1 -0
  171. package/dist/cjs/src/types/index.js +59 -0
  172. package/dist/cjs/src/types/index.js.map +1 -0
  173. package/dist/cjs/src/ui/react/chat/ChatBubble.js +221 -0
  174. package/dist/cjs/src/ui/react/chat/ChatBubble.js.map +1 -0
  175. package/dist/esm/names/API.d.ts +77 -0
  176. package/dist/esm/names/API.d.ts.map +1 -0
  177. package/dist/esm/names/API.js +99 -0
  178. package/dist/esm/names/API.js.map +1 -0
  179. package/dist/esm/names/Components.d.ts +77 -0
  180. package/dist/esm/names/Components.d.ts.map +1 -0
  181. package/dist/esm/names/Components.js +99 -0
  182. package/dist/esm/names/Components.js.map +1 -0
  183. package/dist/esm/names/Containers.d.ts +84 -0
  184. package/dist/esm/names/Containers.d.ts.map +1 -0
  185. package/dist/esm/names/Containers.js +94 -0
  186. package/dist/esm/names/Containers.js.map +1 -0
  187. package/dist/esm/names/Functions.d.ts +87 -0
  188. package/dist/esm/names/Functions.d.ts.map +1 -0
  189. package/dist/esm/names/Functions.js +109 -0
  190. package/dist/esm/names/Functions.js.map +1 -0
  191. package/dist/esm/names/index.d.ts +187 -0
  192. package/dist/esm/names/index.d.ts.map +1 -0
  193. package/dist/esm/names/index.js +99 -0
  194. package/dist/esm/names/index.js.map +1 -0
  195. package/dist/esm/src/adapters/ChatUIProvider.d.ts +76 -0
  196. package/dist/esm/src/adapters/ChatUIProvider.d.ts.map +1 -0
  197. package/dist/esm/src/adapters/ChatUIProvider.js +136 -0
  198. package/dist/esm/src/adapters/ChatUIProvider.js.map +1 -0
  199. package/dist/esm/src/adapters/bridge.d.ts +145 -0
  200. package/dist/esm/src/adapters/bridge.d.ts.map +1 -0
  201. package/dist/esm/src/adapters/bridge.js +218 -0
  202. package/dist/esm/src/adapters/bridge.js.map +1 -0
  203. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.d.ts +49 -0
  204. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.d.ts.map +1 -0
  205. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.js +251 -0
  206. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.js.map +1 -0
  207. package/dist/esm/src/adapters/copilotkit/index.d.ts +6 -0
  208. package/dist/esm/src/adapters/copilotkit/index.d.ts.map +1 -0
  209. package/dist/esm/src/adapters/copilotkit/index.js +5 -0
  210. package/dist/esm/src/adapters/copilotkit/index.js.map +1 -0
  211. package/dist/esm/src/adapters/index.d.ts +31 -0
  212. package/dist/esm/src/adapters/index.d.ts.map +1 -0
  213. package/dist/esm/src/adapters/index.js +32 -0
  214. package/dist/esm/src/adapters/index.js.map +1 -0
  215. package/dist/esm/src/adapters/native/NativeAdapter.d.ts +47 -0
  216. package/dist/esm/src/adapters/native/NativeAdapter.d.ts.map +1 -0
  217. package/dist/esm/src/adapters/native/NativeAdapter.js +230 -0
  218. package/dist/esm/src/adapters/native/NativeAdapter.js.map +1 -0
  219. package/dist/esm/src/adapters/native/index.d.ts +6 -0
  220. package/dist/esm/src/adapters/native/index.d.ts.map +1 -0
  221. package/dist/esm/src/adapters/native/index.js +5 -0
  222. package/dist/esm/src/adapters/native/index.js.map +1 -0
  223. package/dist/esm/src/adapters/types/index.d.ts +155 -0
  224. package/dist/esm/src/adapters/types/index.d.ts.map +1 -0
  225. package/dist/esm/src/adapters/types/index.js +8 -0
  226. package/dist/esm/src/adapters/types/index.js.map +1 -0
  227. package/dist/esm/src/ai/ToolExecutor.d.ts +49 -0
  228. package/dist/esm/src/ai/ToolExecutor.d.ts.map +1 -0
  229. package/dist/esm/src/ai/ToolExecutor.js +174 -0
  230. package/dist/esm/src/ai/ToolExecutor.js.map +1 -0
  231. package/dist/esm/src/ai/ToolMatcher.d.ts +61 -0
  232. package/dist/esm/src/ai/ToolMatcher.d.ts.map +1 -0
  233. package/dist/esm/src/ai/ToolMatcher.js +198 -0
  234. package/dist/esm/src/ai/ToolMatcher.js.map +1 -0
  235. package/dist/esm/src/ai/index.d.ts +9 -0
  236. package/dist/esm/src/ai/index.d.ts.map +1 -0
  237. package/dist/esm/src/ai/index.js +13 -0
  238. package/dist/esm/src/ai/index.js.map +1 -0
  239. package/dist/esm/src/architecture/createContainer.d.ts +60 -0
  240. package/dist/esm/src/architecture/createContainer.d.ts.map +1 -0
  241. package/dist/esm/src/architecture/createContainer.js +102 -0
  242. package/dist/esm/src/architecture/createContainer.js.map +1 -0
  243. package/dist/esm/src/architecture/initialize.d.ts +81 -0
  244. package/dist/esm/src/architecture/initialize.d.ts.map +1 -0
  245. package/dist/esm/src/architecture/initialize.js +121 -0
  246. package/dist/esm/src/architecture/initialize.js.map +1 -0
  247. package/dist/esm/src/architecture/registry.d.ts +61 -0
  248. package/dist/esm/src/architecture/registry.d.ts.map +1 -0
  249. package/dist/esm/src/architecture/registry.js +107 -0
  250. package/dist/esm/src/architecture/registry.js.map +1 -0
  251. package/dist/esm/src/background/architecture/ArchitectureInitializer.d.ts +95 -0
  252. package/dist/esm/src/background/architecture/ArchitectureInitializer.d.ts.map +1 -0
  253. package/dist/esm/src/background/architecture/ArchitectureInitializer.js +170 -0
  254. package/dist/esm/src/background/architecture/ArchitectureInitializer.js.map +1 -0
  255. package/dist/esm/src/background/architecture/Containers.d.ts +52 -0
  256. package/dist/esm/src/background/architecture/Containers.d.ts.map +1 -0
  257. package/dist/esm/src/background/architecture/Containers.js +40 -0
  258. package/dist/esm/src/background/architecture/Containers.js.map +1 -0
  259. package/dist/esm/src/background/architecture/DataContractTypes.d.ts +33 -0
  260. package/dist/esm/src/background/architecture/DataContractTypes.d.ts.map +1 -0
  261. package/dist/esm/src/background/architecture/DataContractTypes.js +22 -0
  262. package/dist/esm/src/background/architecture/DataContractTypes.js.map +1 -0
  263. package/dist/esm/src/background/architecture/index.d.ts +12 -0
  264. package/dist/esm/src/background/architecture/index.d.ts.map +1 -0
  265. package/dist/esm/src/background/architecture/index.js +13 -0
  266. package/dist/esm/src/background/architecture/index.js.map +1 -0
  267. package/dist/esm/src/background/navigation/NavigationGraph.d.ts +48 -0
  268. package/dist/esm/src/background/navigation/NavigationGraph.d.ts.map +1 -0
  269. package/dist/esm/src/background/navigation/NavigationGraph.js +67 -0
  270. package/dist/esm/src/background/navigation/NavigationGraph.js.map +1 -0
  271. package/dist/esm/src/background/navigation/RuntimeTreeBuilder.d.ts +30 -0
  272. package/dist/esm/src/background/navigation/RuntimeTreeBuilder.d.ts.map +1 -0
  273. package/dist/esm/src/background/navigation/RuntimeTreeBuilder.js +60 -0
  274. package/dist/esm/src/background/navigation/RuntimeTreeBuilder.js.map +1 -0
  275. package/dist/esm/src/background/navigation/useComponentTracking.d.ts +10 -0
  276. package/dist/esm/src/background/navigation/useComponentTracking.d.ts.map +1 -0
  277. package/dist/esm/src/background/navigation/useComponentTracking.js +17 -0
  278. package/dist/esm/src/background/navigation/useComponentTracking.js.map +1 -0
  279. package/dist/esm/src/background/registry/ComponentRegistry.d.ts +192 -0
  280. package/dist/esm/src/background/registry/ComponentRegistry.d.ts.map +1 -0
  281. package/dist/esm/src/background/registry/ComponentRegistry.js +336 -0
  282. package/dist/esm/src/background/registry/ComponentRegistry.js.map +1 -0
  283. package/dist/esm/src/background/registry/ToolRegistry.d.ts +232 -0
  284. package/dist/esm/src/background/registry/ToolRegistry.d.ts.map +1 -0
  285. package/dist/esm/src/background/registry/ToolRegistry.js +664 -0
  286. package/dist/esm/src/background/registry/ToolRegistry.js.map +1 -0
  287. package/dist/esm/src/browser.d.ts +21 -0
  288. package/dist/esm/src/browser.d.ts.map +1 -0
  289. package/dist/esm/src/browser.js +31 -0
  290. package/dist/esm/src/browser.js.map +1 -0
  291. package/dist/esm/src/components/ComponentScanner.d.ts +99 -0
  292. package/dist/esm/src/components/ComponentScanner.d.ts.map +1 -0
  293. package/dist/esm/src/components/ComponentScanner.js +325 -0
  294. package/dist/esm/src/components/ComponentScanner.js.map +1 -0
  295. package/dist/esm/src/components/index.d.ts +9 -0
  296. package/dist/esm/src/components/index.d.ts.map +1 -0
  297. package/dist/esm/src/components/index.js +8 -0
  298. package/dist/esm/src/components/index.js.map +1 -0
  299. package/dist/esm/src/data/TestDataManager.d.ts +125 -0
  300. package/dist/esm/src/data/TestDataManager.d.ts.map +1 -0
  301. package/dist/esm/src/data/TestDataManager.js +183 -0
  302. package/dist/esm/src/data/TestDataManager.js.map +1 -0
  303. package/dist/esm/src/data/index.d.ts +7 -0
  304. package/dist/esm/src/data/index.d.ts.map +1 -0
  305. package/dist/esm/src/data/index.js +7 -0
  306. package/dist/esm/src/data/index.js.map +1 -0
  307. package/dist/esm/src/decorators/Component.d.ts +59 -0
  308. package/dist/esm/src/decorators/Component.d.ts.map +1 -0
  309. package/dist/esm/src/decorators/Component.js +103 -0
  310. package/dist/esm/src/decorators/Component.js.map +1 -0
  311. package/dist/esm/src/decorators/ContainerHelpers.d.ts +26 -0
  312. package/dist/esm/src/decorators/ContainerHelpers.d.ts.map +1 -0
  313. package/dist/esm/src/decorators/ContainerHelpers.js +42 -0
  314. package/dist/esm/src/decorators/ContainerHelpers.js.map +1 -0
  315. package/dist/esm/src/decorators/SpecializedTools.d.ts +218 -0
  316. package/dist/esm/src/decorators/SpecializedTools.d.ts.map +1 -0
  317. package/dist/esm/src/decorators/SpecializedTools.js +383 -0
  318. package/dist/esm/src/decorators/SpecializedTools.js.map +1 -0
  319. package/dist/esm/src/decorators/Tool.d.ts +210 -0
  320. package/dist/esm/src/decorators/Tool.d.ts.map +1 -0
  321. package/dist/esm/src/decorators/Tool.js +694 -0
  322. package/dist/esm/src/decorators/Tool.js.map +1 -0
  323. package/dist/esm/src/decorators/ToolHelpers.d.ts +74 -0
  324. package/dist/esm/src/decorators/ToolHelpers.d.ts.map +1 -0
  325. package/dist/esm/src/decorators/ToolHelpers.js +219 -0
  326. package/dist/esm/src/decorators/ToolHelpers.js.map +1 -0
  327. package/dist/esm/src/decorators/ToolPreset.d.ts +138 -0
  328. package/dist/esm/src/decorators/ToolPreset.d.ts.map +1 -0
  329. package/dist/esm/src/decorators/ToolPreset.js +259 -0
  330. package/dist/esm/src/decorators/ToolPreset.js.map +1 -0
  331. package/dist/esm/src/decorators/ToolProvider.d.ts +65 -0
  332. package/dist/esm/src/decorators/ToolProvider.d.ts.map +1 -0
  333. package/dist/esm/src/decorators/ToolProvider.js +81 -0
  334. package/dist/esm/src/decorators/ToolProvider.js.map +1 -0
  335. package/dist/esm/src/decorators/index.d.ts +13 -0
  336. package/dist/esm/src/decorators/index.d.ts.map +1 -0
  337. package/dist/esm/src/decorators/index.js +14 -0
  338. package/dist/esm/src/decorators/index.js.map +1 -0
  339. package/dist/esm/src/execution/DOMExecutor.d.ts +43 -0
  340. package/dist/esm/src/execution/DOMExecutor.d.ts.map +1 -0
  341. package/dist/esm/src/execution/DOMExecutor.js +229 -0
  342. package/dist/esm/src/execution/DOMExecutor.js.map +1 -0
  343. package/dist/esm/src/execution/PlaywrightExecutor.d.ts +38 -0
  344. package/dist/esm/src/execution/PlaywrightExecutor.d.ts.map +1 -0
  345. package/dist/esm/src/execution/PlaywrightExecutor.js +192 -0
  346. package/dist/esm/src/execution/PlaywrightExecutor.js.map +1 -0
  347. package/dist/esm/src/exposure/ExposureCollector.d.ts +88 -0
  348. package/dist/esm/src/exposure/ExposureCollector.d.ts.map +1 -0
  349. package/dist/esm/src/exposure/ExposureCollector.js +354 -0
  350. package/dist/esm/src/exposure/ExposureCollector.js.map +1 -0
  351. package/dist/esm/src/exposure/index.d.ts +8 -0
  352. package/dist/esm/src/exposure/index.d.ts.map +1 -0
  353. package/dist/esm/src/exposure/index.js +10 -0
  354. package/dist/esm/src/exposure/index.js.map +1 -0
  355. package/dist/esm/src/index.d.ts +49 -0
  356. package/dist/esm/src/index.d.ts.map +1 -0
  357. package/dist/esm/src/index.js +79 -0
  358. package/dist/esm/src/index.js.map +1 -0
  359. package/dist/esm/src/interfaces/StatefulComponent.d.ts +72 -0
  360. package/dist/esm/src/interfaces/StatefulComponent.d.ts.map +1 -0
  361. package/dist/esm/src/interfaces/StatefulComponent.js +47 -0
  362. package/dist/esm/src/interfaces/StatefulComponent.js.map +1 -0
  363. package/dist/esm/src/name-contracts/ContractScanner.d.ts +61 -0
  364. package/dist/esm/src/name-contracts/ContractScanner.d.ts.map +1 -0
  365. package/dist/esm/src/name-contracts/ContractScanner.js +11 -0
  366. package/dist/esm/src/name-contracts/ContractScanner.js.map +1 -0
  367. package/dist/esm/src/name-contracts/RouteContractScanner.d.ts +30 -0
  368. package/dist/esm/src/name-contracts/RouteContractScanner.d.ts.map +1 -0
  369. package/dist/esm/src/name-contracts/RouteContractScanner.js +188 -0
  370. package/dist/esm/src/name-contracts/RouteContractScanner.js.map +1 -0
  371. package/dist/esm/src/name-contracts/index.d.ts +10 -0
  372. package/dist/esm/src/name-contracts/index.d.ts.map +1 -0
  373. package/dist/esm/src/name-contracts/index.js +10 -0
  374. package/dist/esm/src/name-contracts/index.js.map +1 -0
  375. package/dist/esm/src/names/createNames.d.ts +49 -0
  376. package/dist/esm/src/names/createNames.d.ts.map +1 -0
  377. package/dist/esm/src/names/createNames.js +81 -0
  378. package/dist/esm/src/names/createNames.js.map +1 -0
  379. package/dist/esm/src/react/hooks/useChatWithContext.d.ts +68 -0
  380. package/dist/esm/src/react/hooks/useChatWithContext.d.ts.map +1 -0
  381. package/dist/esm/src/react/hooks/useChatWithContext.js +218 -0
  382. package/dist/esm/src/react/hooks/useChatWithContext.js.map +1 -0
  383. package/dist/esm/src/react/index.d.ts +12 -0
  384. package/dist/esm/src/react/index.d.ts.map +1 -0
  385. package/dist/esm/src/react/index.js +21 -0
  386. package/dist/esm/src/react/index.js.map +1 -0
  387. package/dist/esm/src/react/useNavigationHandler.d.ts +42 -0
  388. package/dist/esm/src/react/useNavigationHandler.d.ts.map +1 -0
  389. package/dist/esm/src/react/useNavigationHandler.js +85 -0
  390. package/dist/esm/src/react/useNavigationHandler.js.map +1 -0
  391. package/dist/esm/src/react/usePersistedState.d.ts +13 -0
  392. package/dist/esm/src/react/usePersistedState.d.ts.map +1 -0
  393. package/dist/esm/src/react/usePersistedState.js +69 -0
  394. package/dist/esm/src/react/usePersistedState.js.map +1 -0
  395. package/dist/esm/src/react/useToolBinding.d.ts +8 -0
  396. package/dist/esm/src/react/useToolBinding.d.ts.map +1 -0
  397. package/dist/esm/src/react/useToolBinding.js +107 -0
  398. package/dist/esm/src/react/useToolBinding.js.map +1 -0
  399. package/dist/esm/src/routes/RouteContractGenerator.d.ts +37 -0
  400. package/dist/esm/src/routes/RouteContractGenerator.d.ts.map +1 -0
  401. package/dist/esm/src/routes/RouteContractGenerator.js +115 -0
  402. package/dist/esm/src/routes/RouteContractGenerator.js.map +1 -0
  403. package/dist/esm/src/routes/RouteContractsConfig.d.ts +93 -0
  404. package/dist/esm/src/routes/RouteContractsConfig.d.ts.map +1 -0
  405. package/dist/esm/src/routes/RouteContractsConfig.js +36 -0
  406. package/dist/esm/src/routes/RouteContractsConfig.js.map +1 -0
  407. package/dist/esm/src/routes/index.d.ts +13 -0
  408. package/dist/esm/src/routes/index.d.ts.map +1 -0
  409. package/dist/esm/src/routes/index.js +13 -0
  410. package/dist/esm/src/routes/index.js.map +1 -0
  411. package/dist/esm/src/routes/scanners/NameExtractor.d.ts +36 -0
  412. package/dist/esm/src/routes/scanners/NameExtractor.d.ts.map +1 -0
  413. package/dist/esm/src/routes/scanners/NameExtractor.js +156 -0
  414. package/dist/esm/src/routes/scanners/NameExtractor.js.map +1 -0
  415. package/dist/esm/src/routes/scanners/NextjsDynamicScanner.d.ts +35 -0
  416. package/dist/esm/src/routes/scanners/NextjsDynamicScanner.d.ts.map +1 -0
  417. package/dist/esm/src/routes/scanners/NextjsDynamicScanner.js +98 -0
  418. package/dist/esm/src/routes/scanners/NextjsDynamicScanner.js.map +1 -0
  419. package/dist/esm/src/routes/scanners/RouteScanner.d.ts +64 -0
  420. package/dist/esm/src/routes/scanners/RouteScanner.d.ts.map +1 -0
  421. package/dist/esm/src/routes/scanners/RouteScanner.js +9 -0
  422. package/dist/esm/src/routes/scanners/RouteScanner.js.map +1 -0
  423. package/dist/esm/src/storage/LocalStorageAdapter.d.ts +29 -0
  424. package/dist/esm/src/storage/LocalStorageAdapter.d.ts.map +1 -0
  425. package/dist/esm/src/storage/LocalStorageAdapter.js +83 -0
  426. package/dist/esm/src/storage/LocalStorageAdapter.js.map +1 -0
  427. package/dist/esm/src/storage/StateManager.d.ts +175 -0
  428. package/dist/esm/src/storage/StateManager.d.ts.map +1 -0
  429. package/dist/esm/src/storage/StateManager.js +295 -0
  430. package/dist/esm/src/storage/StateManager.js.map +1 -0
  431. package/dist/esm/src/storage/StorageAdapter.d.ts +94 -0
  432. package/dist/esm/src/storage/StorageAdapter.d.ts.map +1 -0
  433. package/dist/esm/src/storage/StorageAdapter.js +158 -0
  434. package/dist/esm/src/storage/StorageAdapter.js.map +1 -0
  435. package/dist/esm/src/storage/index.d.ts +12 -0
  436. package/dist/esm/src/storage/index.d.ts.map +1 -0
  437. package/dist/esm/src/storage/index.js +17 -0
  438. package/dist/esm/src/storage/index.js.map +1 -0
  439. package/dist/esm/src/testing/BrowserStateInjection.d.ts +74 -0
  440. package/dist/esm/src/testing/BrowserStateInjection.d.ts.map +1 -0
  441. package/dist/esm/src/testing/BrowserStateInjection.js +126 -0
  442. package/dist/esm/src/testing/BrowserStateInjection.js.map +1 -0
  443. package/dist/esm/src/testing/ComponentStateHelpers.d.ts +121 -0
  444. package/dist/esm/src/testing/ComponentStateHelpers.d.ts.map +1 -0
  445. package/dist/esm/src/testing/ComponentStateHelpers.js +190 -0
  446. package/dist/esm/src/testing/ComponentStateHelpers.js.map +1 -0
  447. package/dist/esm/src/testing/GherkinParser.d.ts +87 -0
  448. package/dist/esm/src/testing/GherkinParser.d.ts.map +1 -0
  449. package/dist/esm/src/testing/GherkinParser.js +248 -0
  450. package/dist/esm/src/testing/GherkinParser.js.map +1 -0
  451. package/dist/esm/src/testing/PlaywrightStateHelpers.d.ts +163 -0
  452. package/dist/esm/src/testing/PlaywrightStateHelpers.d.ts.map +1 -0
  453. package/dist/esm/src/testing/PlaywrightStateHelpers.js +242 -0
  454. package/dist/esm/src/testing/PlaywrightStateHelpers.js.map +1 -0
  455. package/dist/esm/src/testing/TestRunner.d.ts +50 -0
  456. package/dist/esm/src/testing/TestRunner.d.ts.map +1 -0
  457. package/dist/esm/src/testing/TestRunner.js +121 -0
  458. package/dist/esm/src/testing/TestRunner.js.map +1 -0
  459. package/dist/esm/src/testing/index.d.ts +12 -0
  460. package/dist/esm/src/testing/index.d.ts.map +1 -0
  461. package/dist/esm/src/testing/index.js +25 -0
  462. package/dist/esm/src/testing/index.js.map +1 -0
  463. package/dist/esm/src/testing/selectors.d.ts +65 -0
  464. package/dist/esm/src/testing/selectors.d.ts.map +1 -0
  465. package/dist/esm/src/testing/selectors.js +76 -0
  466. package/dist/esm/src/testing/selectors.js.map +1 -0
  467. package/dist/esm/src/tools/SystemTools.d.ts +139 -0
  468. package/dist/esm/src/tools/SystemTools.d.ts.map +1 -0
  469. package/dist/esm/src/tools/SystemTools.js +258 -0
  470. package/dist/esm/src/tools/SystemTools.js.map +1 -0
  471. package/dist/esm/src/types/ClassifiedTool.d.ts +61 -0
  472. package/dist/esm/src/types/ClassifiedTool.d.ts.map +1 -0
  473. package/dist/esm/src/types/ClassifiedTool.js +47 -0
  474. package/dist/esm/src/types/ClassifiedTool.js.map +1 -0
  475. package/dist/esm/src/types/ComponentState.d.ts +207 -0
  476. package/dist/esm/src/types/ComponentState.d.ts.map +1 -0
  477. package/dist/esm/src/types/ComponentState.js +25 -0
  478. package/dist/esm/src/types/ComponentState.js.map +1 -0
  479. package/dist/esm/src/types/DiscoverableToolProvider.d.ts +59 -0
  480. package/dist/esm/src/types/DiscoverableToolProvider.d.ts.map +1 -0
  481. package/dist/esm/src/types/DiscoverableToolProvider.js +8 -0
  482. package/dist/esm/src/types/DiscoverableToolProvider.js.map +1 -0
  483. package/dist/esm/src/types/ExposureState.d.ts +75 -0
  484. package/dist/esm/src/types/ExposureState.d.ts.map +1 -0
  485. package/dist/esm/src/types/ExposureState.js +22 -0
  486. package/dist/esm/src/types/ExposureState.js.map +1 -0
  487. package/dist/esm/src/types/NavigationGraph.d.ts +98 -0
  488. package/dist/esm/src/types/NavigationGraph.d.ts.map +1 -0
  489. package/dist/esm/src/types/NavigationGraph.js +7 -0
  490. package/dist/esm/src/types/NavigationGraph.js.map +1 -0
  491. package/dist/esm/src/types/OperationType.d.ts +45 -0
  492. package/dist/esm/src/types/OperationType.d.ts.map +1 -0
  493. package/dist/esm/src/types/OperationType.js +46 -0
  494. package/dist/esm/src/types/OperationType.js.map +1 -0
  495. package/dist/esm/src/types/StateManagers.d.ts +35 -0
  496. package/dist/esm/src/types/StateManagers.d.ts.map +1 -0
  497. package/dist/esm/src/types/StateManagers.js +36 -0
  498. package/dist/esm/src/types/StateManagers.js.map +1 -0
  499. package/dist/esm/src/types/Tool.d.ts +162 -0
  500. package/dist/esm/src/types/Tool.d.ts.map +1 -0
  501. package/dist/esm/src/types/Tool.js +38 -0
  502. package/dist/esm/src/types/Tool.js.map +1 -0
  503. package/dist/esm/src/types/ToolPermissions.d.ts +73 -0
  504. package/dist/esm/src/types/ToolPermissions.d.ts.map +1 -0
  505. package/dist/esm/src/types/ToolPermissions.js +51 -0
  506. package/dist/esm/src/types/ToolPermissions.js.map +1 -0
  507. package/dist/esm/src/types/ToolResult.d.ts +129 -0
  508. package/dist/esm/src/types/ToolResult.d.ts.map +1 -0
  509. package/dist/esm/src/types/ToolResult.js +22 -0
  510. package/dist/esm/src/types/ToolResult.js.map +1 -0
  511. package/dist/esm/src/types/index.d.ts +47 -0
  512. package/dist/esm/src/types/index.d.ts.map +1 -0
  513. package/dist/esm/src/types/index.js +42 -0
  514. package/dist/esm/src/types/index.js.map +1 -0
  515. package/dist/esm/src/ui/react/chat/ChatBubble.d.ts +23 -0
  516. package/dist/esm/src/ui/react/chat/ChatBubble.d.ts.map +1 -0
  517. package/dist/esm/src/ui/react/chat/ChatBubble.js +184 -0
  518. package/dist/esm/src/ui/react/chat/ChatBubble.js.map +1 -0
  519. 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