@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,668 @@
1
+ "use strict";
2
+ /**
3
+ * Tool Registry - Simple registry for tool discovery and metadata
4
+ *
5
+ * This registry ONLY handles:
6
+ * - Tool registration
7
+ * - Tool discovery
8
+ * - Metadata management
9
+ *
10
+ * Execution is handled separately by:
11
+ * - PlaywrightExecutor (for testing)
12
+ * - DOMExecutor (for AI control)
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ToolRegistry = void 0;
16
+ // Use a global registry to avoid Jest module isolation issues
17
+ const globalRegistry = (typeof global !== 'undefined' ? global : globalThis);
18
+ if (!globalRegistry.__SUPERNAL_TOOL_REGISTRY__) {
19
+ globalRegistry.__SUPERNAL_TOOL_REGISTRY__ = new Map();
20
+ }
21
+ if (!globalRegistry.__SUPERNAL_ACTIVE_INSTANCES__) {
22
+ globalRegistry.__SUPERNAL_ACTIVE_INSTANCES__ = new Map();
23
+ }
24
+ class ToolRegistry {
25
+ static get tools() {
26
+ return globalRegistry.__SUPERNAL_TOOL_REGISTRY__;
27
+ }
28
+ static get activeInstances() {
29
+ return globalRegistry.__SUPERNAL_ACTIVE_INSTANCES__;
30
+ }
31
+ /**
32
+ * Register a tool
33
+ */
34
+ static registerTool(providerName, methodName, metadata) {
35
+ const toolId = `${providerName}.${methodName}`;
36
+ this.tools.set(toolId, metadata);
37
+ if (typeof process !== 'undefined' && process.env?.NODE_ENV !== 'test') {
38
+ console.log(`🔧 Registered Tool: ${metadata.name} (${metadata.toolType}, AI: ${metadata.aiEnabled})`);
39
+ }
40
+ }
41
+ /**
42
+ * Get a specific tool by identifier
43
+ * Supports both class-based IDs (Counter.increment) and component-namespaced IDs (counter.increment)
44
+ */
45
+ static getTool(toolIdentifier) {
46
+ // First, try direct lookup
47
+ let tool = this.tools.get(toolIdentifier);
48
+ if (tool)
49
+ return tool;
50
+ // If not found and identifier looks like component.method (lowercase start),
51
+ // search for a tool with matching componentName and methodName
52
+ if (toolIdentifier.includes('.')) {
53
+ const [possibleComponent, methodName] = toolIdentifier.split('.');
54
+ // Check if it looks like a component name (lowercase start)
55
+ if (possibleComponent[0] === possibleComponent[0].toLowerCase()) {
56
+ // Search for tool with this componentName and methodName
57
+ tool = Array.from(this.tools.values()).find(t => t.componentName === possibleComponent && t.methodName === methodName);
58
+ if (tool)
59
+ return tool;
60
+ }
61
+ }
62
+ return undefined;
63
+ }
64
+ /**
65
+ * Get all registered tools
66
+ */
67
+ static getAllTools() {
68
+ return new Map(this.tools);
69
+ }
70
+ /**
71
+ * Get all registered tools as array
72
+ */
73
+ static getTools() {
74
+ return Array.from(this.tools.values());
75
+ }
76
+ /**
77
+ * Find tool by element ID (data-testid)
78
+ */
79
+ static findToolByElementId(elementId) {
80
+ return Array.from(this.tools.values()).find((tool) => tool.elementId === elementId);
81
+ }
82
+ /**
83
+ * Register active component instance
84
+ */
85
+ static registerInstance(storageKey, element) {
86
+ if (this.activeInstances.has(storageKey)) {
87
+ throw new Error(`Duplicate instance: ${storageKey} already registered`);
88
+ }
89
+ this.activeInstances.set(storageKey, element);
90
+ }
91
+ /**
92
+ * Unregister component instance on unmount
93
+ */
94
+ static unregisterInstance(storageKey) {
95
+ this.activeInstances.delete(storageKey);
96
+ }
97
+ /**
98
+ * Check if instance exists (for duplicate detection)
99
+ */
100
+ static getActiveInstance(storageKey) {
101
+ return this.activeInstances.get(storageKey);
102
+ }
103
+ /**
104
+ * Bind a class instance to all its registered tool methods
105
+ *
106
+ * This allows @Tool decorated methods to be called by AI without needing
107
+ * the instance to be called once first (which sets tool.instance = this).
108
+ *
109
+ * @param instance The class instance with @Tool decorated methods
110
+ */
111
+ static bindInstance(instance) {
112
+ const className = instance.constructor.name;
113
+ console.log(`🔗 [ToolRegistry] Binding instance for: ${className}`);
114
+ let boundCount = 0;
115
+ // Find all tools belonging to this class
116
+ for (const [toolId, tool] of this.tools.entries()) {
117
+ // Check if tool belongs to this class
118
+ if (toolId.startsWith(`${className}.`) && tool.methodName) {
119
+ const methodName = tool.methodName;
120
+ // Bind the method to this instance
121
+ if (typeof instance[methodName] === 'function') {
122
+ tool.method = instance[methodName].bind(instance);
123
+ tool.instance = instance;
124
+ boundCount++;
125
+ console.log(` ✓ Bound ${className}.${methodName}`);
126
+ }
127
+ }
128
+ }
129
+ console.log(`🔗 [ToolRegistry] Bound ${boundCount} methods for ${className}`);
130
+ }
131
+ /**
132
+ * Get AI-enabled tools only
133
+ */
134
+ static getAIEnabledTools() {
135
+ return Array.from(this.tools.values()).filter((tool) => tool.aiEnabled);
136
+ }
137
+ /**
138
+ * Get test-only tools
139
+ */
140
+ static getTestOnlyTools() {
141
+ return Array.from(this.tools.values()).filter((tool) => !tool.aiEnabled);
142
+ }
143
+ /**
144
+ * Get tools by category
145
+ */
146
+ static getToolsByCategory(category) {
147
+ return Array.from(this.tools.values()).filter((tool) => tool.category === category);
148
+ }
149
+ /**
150
+ * Search tools by query
151
+ */
152
+ static searchTools(query) {
153
+ if (!query || typeof query !== 'string') {
154
+ console.error('❌ [ToolRegistry] Invalid search query:', query);
155
+ return [];
156
+ }
157
+ const queryLower = query.toLowerCase();
158
+ console.log(`🔍 [ToolRegistry.searchTools] Searching for: "${queryLower}"`);
159
+ console.log(`🔍 [ToolRegistry.searchTools] Total tools in registry: ${this.tools.size}`);
160
+ return Array.from(this.tools.values()).filter((tool) => {
161
+ const searchFields = [
162
+ tool.name ? tool.name.toLowerCase() : '',
163
+ tool.description ? tool.description.toLowerCase() : '',
164
+ tool.category ? tool.category.toLowerCase() : '',
165
+ ...(tool.examples || []).map((ex) => ex ? ex.toLowerCase() : ''),
166
+ ...(tool.keywords || []).map((kw) => kw ? kw.toLowerCase() : ''),
167
+ ].filter(f => f); // Remove empty strings
168
+ return searchFields.some((field) => field.includes(queryLower) || queryLower.includes(field));
169
+ });
170
+ }
171
+ /**
172
+ * Search tools with container scoping
173
+ *
174
+ * Prioritizes tools in currentContainer, then global tools.
175
+ * This enables "local > global" resolution like lexical scope.
176
+ *
177
+ * @param query Search query
178
+ * @param currentContainer Current page/container context
179
+ * @returns Tools sorted by: local matches, global matches
180
+ */
181
+ static searchScoped(query, currentContainer) {
182
+ if (!query || typeof query !== 'string') {
183
+ console.error('❌ [ToolRegistry] Invalid search query:', query);
184
+ return [];
185
+ }
186
+ const queryLower = query.toLowerCase();
187
+ console.log(`🔍 [ToolRegistry] Scoped search: "${query}" (container: ${currentContainer || 'none'})`);
188
+ const allTools = Array.from(this.tools.values());
189
+ // Search in tool metadata (including component names)
190
+ const matches = allTools.filter(tool => {
191
+ const searchFields = [
192
+ tool.name,
193
+ tool.description,
194
+ tool.componentName,
195
+ tool.methodName,
196
+ tool.category,
197
+ ...(tool.examples || []),
198
+ ...(tool.keywords || []),
199
+ ]
200
+ .filter(Boolean)
201
+ .map(s => (s || '').toLowerCase()); // Ensure s is not undefined
202
+ return searchFields.some(field => field.includes(queryLower) || queryLower.includes(field));
203
+ });
204
+ if (!currentContainer) {
205
+ return matches;
206
+ }
207
+ // Split into local (current container) and global (no container or different)
208
+ const local = matches.filter(t => t.containerId === currentContainer);
209
+ const global = matches.filter(t => !t.containerId || t.containerId !== currentContainer);
210
+ console.log(`📊 [ToolRegistry] Found: ${local.length} local, ${global.length} global`);
211
+ // Prioritize local over global
212
+ return [...local, ...global];
213
+ }
214
+ /**
215
+ * Get tools by component name
216
+ *
217
+ * Returns all methods for a specific component.
218
+ *
219
+ * @example
220
+ * getToolsByComponent('counter')
221
+ * // → [counter.increment, counter.decrement, counter.reset]
222
+ */
223
+ static getToolsByComponent(componentName) {
224
+ return Array.from(this.tools.values()).filter(tool => tool.componentName === componentName);
225
+ }
226
+ /**
227
+ * Get tools by container (page scope)
228
+ */
229
+ static getToolsByContainer(containerId) {
230
+ return Array.from(this.tools.values()).filter(tool => tool.containerId === containerId);
231
+ }
232
+ /**
233
+ * Get component names in a container
234
+ *
235
+ * @example
236
+ * getComponentsInContainer('Dashboard')
237
+ * // → ['counter', 'chart', 'settings']
238
+ */
239
+ static getComponentsInContainer(containerId) {
240
+ const tools = this.getToolsByContainer(containerId);
241
+ const components = new Set(tools.map(t => t.componentName).filter((name) => !!name));
242
+ return Array.from(components);
243
+ }
244
+ /**
245
+ * Find tool by natural language query (alias for searchTools)
246
+ */
247
+ static findToolsByQuery(query) {
248
+ return this.searchTools(query);
249
+ }
250
+ /**
251
+ * Get registry statistics
252
+ */
253
+ static getStats() {
254
+ const tools = Array.from(this.tools.values());
255
+ const byCategory = tools.reduce((acc, tool) => {
256
+ acc[tool.category] = (acc[tool.category] || 0) + 1;
257
+ return acc;
258
+ }, {});
259
+ const byDangerLevel = tools.reduce((acc, tool) => {
260
+ acc[tool.dangerLevel] = (acc[tool.dangerLevel] || 0) + 1;
261
+ return acc;
262
+ }, { safe: 0, moderate: 0, dangerous: 0, destructive: 0 });
263
+ return {
264
+ total: tools.length,
265
+ aiEnabled: tools.filter((t) => t.aiEnabled).length,
266
+ testOnly: tools.filter((t) => !t.aiEnabled).length,
267
+ byCategory,
268
+ byDangerLevel,
269
+ requiresApproval: tools.filter((t) => t.requiresApproval).length,
270
+ };
271
+ }
272
+ /**
273
+ * Get tools by class/provider name
274
+ */
275
+ static getToolsByProvider(providerName) {
276
+ return Array.from(this.tools.values()).filter((tool) => tool.providerClass === providerName || tool.providerName === providerName);
277
+ }
278
+ /**
279
+ * Get all unique provider names
280
+ */
281
+ static getProviders() {
282
+ const providers = new Set();
283
+ Array.from(this.tools.values()).forEach((tool) => {
284
+ if (tool.providerClass)
285
+ providers.add(tool.providerClass);
286
+ if (tool.providerName)
287
+ providers.add(tool.providerName);
288
+ });
289
+ return Array.from(providers).sort();
290
+ }
291
+ // ===== CLI-LIKE METHODS =====
292
+ /**
293
+ * List all tools in a CLI-friendly format
294
+ * Similar to 'ls' command
295
+ */
296
+ static list(options = {}) {
297
+ let tools = Array.from(this.tools.values());
298
+ // Apply filters
299
+ if (options.provider) {
300
+ tools = tools.filter((tool) => tool.providerClass === options.provider || tool.providerName === options.provider);
301
+ }
302
+ if (options.category) {
303
+ tools = tools.filter((tool) => tool.category === options.category);
304
+ }
305
+ if (options.aiEnabled !== undefined) {
306
+ tools = tools.filter((tool) => tool.aiEnabled === options.aiEnabled);
307
+ }
308
+ if (options.dangerLevel) {
309
+ tools = tools.filter((tool) => tool.dangerLevel === options.dangerLevel);
310
+ }
311
+ if (tools.length === 0) {
312
+ return 'No tools found matching criteria.';
313
+ }
314
+ // Sort by provider, then by name
315
+ tools.sort((a, b) => {
316
+ const providerA = a.providerClass || a.providerName || '';
317
+ const providerB = b.providerClass || b.providerName || '';
318
+ if (providerA !== providerB)
319
+ return providerA.localeCompare(providerB);
320
+ return a.name.localeCompare(b.name);
321
+ });
322
+ if (options.verbose) {
323
+ return this.formatVerboseList(tools);
324
+ }
325
+ else {
326
+ return this.formatCompactList(tools);
327
+ }
328
+ }
329
+ /**
330
+ * Show help for a specific tool
331
+ * Similar to 'man' or 'help' command
332
+ */
333
+ static help(toolId) {
334
+ const tool = this.getTool(toolId);
335
+ if (!tool) {
336
+ // Try to find by name or partial match
337
+ const matches = Array.from(this.tools.values()).filter((t) => t.name.toLowerCase().includes(toolId.toLowerCase()) ||
338
+ t.toolId.toLowerCase().includes(toolId.toLowerCase()));
339
+ if (matches.length === 0) {
340
+ return `Tool '${toolId}' not found. Use ToolRegistry.list() to see available tools.`;
341
+ }
342
+ if (matches.length > 1) {
343
+ const matchList = matches.map((t) => ` ${t.toolId} - ${t.name}`).join('\n');
344
+ return `Multiple tools match '${toolId}':\n${matchList}\n\nUse the full toolId for specific help.`;
345
+ }
346
+ return this.formatToolHelp(matches[0]);
347
+ }
348
+ return this.formatToolHelp(tool);
349
+ }
350
+ /**
351
+ * Show overview of all tools and providers
352
+ * Similar to 'ls -la' or directory overview
353
+ */
354
+ static overview() {
355
+ const stats = this.getStats();
356
+ const providers = this.getProviders();
357
+ let output = `🔧 Tool Registry Overview\n`;
358
+ output += `${'='.repeat(50)}\n\n`;
359
+ output += `📊 Statistics:\n`;
360
+ output += ` Total Tools: ${stats.total}\n`;
361
+ output += ` AI-Enabled: ${stats.aiEnabled}\n`;
362
+ output += ` Test-Only: ${stats.testOnly}\n\n`;
363
+ output += `🏭 Providers (${providers.length}):\n`;
364
+ providers.forEach((provider) => {
365
+ const toolCount = this.getToolsByProvider(provider).length;
366
+ output += ` ${provider} (${toolCount} tools)\n`;
367
+ });
368
+ output += `\n📂 Categories:\n`;
369
+ Object.entries(stats.byCategory).forEach(([category, count]) => {
370
+ output += ` ${category}: ${count} tools\n`;
371
+ });
372
+ output += `\n⚠️ Danger Levels:\n`;
373
+ Object.entries(stats.byDangerLevel).forEach(([level, count]) => {
374
+ const emoji = level === 'safe' ? '✅' : level === 'moderate' ? '⚠️' : level === 'dangerous' ? '🔶' : '🚨';
375
+ output += ` ${emoji} ${level}: ${count} tools\n`;
376
+ });
377
+ output += `\n💡 Usage:\n`;
378
+ output += ` ToolRegistry.list() - List all tools\n`;
379
+ output += ` ToolRegistry.list({ provider: 'X' }) - List tools by provider\n`;
380
+ output += ` ToolRegistry.help('toolId') - Get help for specific tool\n`;
381
+ output += ` ToolRegistry.searchTools('query') - Search tools\n`;
382
+ return output;
383
+ }
384
+ /**
385
+ * Search and display tools matching query
386
+ */
387
+ static find(query) {
388
+ const matches = this.searchTools(query);
389
+ if (matches.length === 0) {
390
+ return `No tools found matching '${query}'.`;
391
+ }
392
+ let output = `🔍 Found ${matches.length} tool(s) matching '${query}':\n\n`;
393
+ matches.forEach((tool) => {
394
+ const provider = tool.providerClass || tool.providerName || 'Unknown';
395
+ const aiStatus = tool.aiEnabled ? '🤖' : '🧪';
396
+ const dangerEmoji = tool.dangerLevel === 'safe'
397
+ ? '✅'
398
+ : tool.dangerLevel === 'moderate'
399
+ ? '⚠️'
400
+ : tool.dangerLevel === 'dangerous'
401
+ ? '🔶'
402
+ : '🚨';
403
+ output += ` ${aiStatus}${dangerEmoji} ${tool.toolId}\n`;
404
+ output += ` ${tool.description}\n`;
405
+ output += ` Provider: ${provider} | Category: ${tool.category}\n`;
406
+ if (tool.examples && tool.examples.length > 0) {
407
+ output += ` Examples: ${tool.examples.slice(0, 2).join(', ')}\n`;
408
+ }
409
+ output += `\n`;
410
+ });
411
+ output += `💡 Use ToolRegistry.help('toolId') for detailed information.\n`;
412
+ return output;
413
+ }
414
+ // ===== PRIVATE FORMATTING METHODS =====
415
+ static formatCompactList(tools) {
416
+ let output = `📋 Tools (${tools.length}):\n\n`;
417
+ let currentProvider = '';
418
+ tools.forEach((tool) => {
419
+ const provider = tool.providerClass || tool.providerName || 'Unknown';
420
+ if (provider !== currentProvider) {
421
+ currentProvider = provider;
422
+ output += `\n🏭 ${provider}:\n`;
423
+ }
424
+ const aiStatus = tool.aiEnabled ? '🤖' : '🧪';
425
+ const dangerEmoji = tool.dangerLevel === 'safe'
426
+ ? '✅'
427
+ : tool.dangerLevel === 'moderate'
428
+ ? '⚠️'
429
+ : tool.dangerLevel === 'dangerous'
430
+ ? '🔶'
431
+ : '🚨';
432
+ output += ` ${aiStatus}${dangerEmoji} ${tool.toolId.padEnd(25)} ${tool.description}\n`;
433
+ });
434
+ return output;
435
+ }
436
+ static formatVerboseList(tools) {
437
+ let output = `📋 Tools (${tools.length}) - Verbose:\n\n`;
438
+ tools.forEach((tool) => {
439
+ output += this.formatToolSummary(tool) + '\n';
440
+ });
441
+ return output;
442
+ }
443
+ static formatToolSummary(tool) {
444
+ const provider = tool.providerClass || tool.providerName || 'Unknown';
445
+ const aiStatus = tool.aiEnabled ? '🤖 AI-Enabled' : '🧪 Test-Only';
446
+ const dangerEmoji = tool.dangerLevel === 'safe'
447
+ ? '✅'
448
+ : tool.dangerLevel === 'moderate'
449
+ ? '⚠️'
450
+ : tool.dangerLevel === 'dangerous'
451
+ ? '🔶'
452
+ : '🚨';
453
+ let output = `🔧 ${tool.toolId}\n`;
454
+ output += ` Name: ${tool.name}\n`;
455
+ output += ` Description: ${tool.description}\n`;
456
+ output += ` Provider: ${provider}\n`;
457
+ output += ` Category: ${tool.category}\n`;
458
+ output += ` Status: ${aiStatus}\n`;
459
+ output += ` Danger: ${dangerEmoji} ${tool.dangerLevel}\n`;
460
+ if (tool.examples && tool.examples.length > 0) {
461
+ output += ` Examples: ${tool.examples.join(', ')}\n`;
462
+ }
463
+ if (tool.origin) {
464
+ output += ` Origin: ${tool.origin.path || 'N/A'}`;
465
+ if (tool.origin.elements) {
466
+ output += ` (${tool.origin.elements.join(', ')})`;
467
+ }
468
+ output += `\n`;
469
+ }
470
+ return output;
471
+ }
472
+ static formatToolHelp(tool) {
473
+ const provider = tool.providerClass || tool.providerName || 'Unknown';
474
+ const aiStatus = tool.aiEnabled ? '🤖 AI-Enabled' : '🧪 Test-Only';
475
+ const dangerEmoji = tool.dangerLevel === 'safe'
476
+ ? '✅'
477
+ : tool.dangerLevel === 'moderate'
478
+ ? '⚠️'
479
+ : tool.dangerLevel === 'dangerous'
480
+ ? '🔶'
481
+ : '🚨';
482
+ let output = `📖 Help: ${tool.toolId}\n`;
483
+ output += `${'='.repeat(50)}\n\n`;
484
+ output += `📝 Description:\n`;
485
+ output += ` ${tool.description}\n\n`;
486
+ output += `ℹ️ Details:\n`;
487
+ output += ` Name: ${tool.name}\n`;
488
+ output += ` Provider: ${provider}\n`;
489
+ output += ` Category: ${tool.category}\n`;
490
+ output += ` Status: ${aiStatus}\n`;
491
+ output += ` Danger Level: ${dangerEmoji} ${tool.dangerLevel}\n`;
492
+ output += ` Requires Approval: ${tool.requiresApproval ? 'Yes' : 'No'}\n\n`;
493
+ if (tool.examples && tool.examples.length > 0) {
494
+ output += `💡 Usage Examples:\n`;
495
+ tool.examples.forEach((example) => {
496
+ output += ` "${example}"\n`;
497
+ });
498
+ output += `\n`;
499
+ }
500
+ if (tool.origin) {
501
+ output += `📍 Availability:\n`;
502
+ if (tool.origin.path) {
503
+ output += ` Path: ${tool.origin.path}\n`;
504
+ }
505
+ if (tool.origin.elements && tool.origin.elements.length > 0) {
506
+ output += ` Elements: ${tool.origin.elements.join(', ')}\n`;
507
+ }
508
+ if (tool.origin.modal) {
509
+ output += ` Modal: ${tool.origin.modal}\n`;
510
+ }
511
+ output += `\n`;
512
+ }
513
+ if (tool.keywords && tool.keywords.length > 0) {
514
+ output += `🏷️ Keywords: ${tool.keywords.join(', ')}\n\n`;
515
+ }
516
+ if (tool.useCases && tool.useCases.length > 0) {
517
+ output += `🎯 Use Cases:\n`;
518
+ tool.useCases.forEach((useCase) => {
519
+ output += ` • ${useCase}\n`;
520
+ });
521
+ output += `\n`;
522
+ }
523
+ output += `🔧 Technical Details:\n`;
524
+ output += ` Method: ${tool.methodName}\n`;
525
+ output += ` Return Type: ${tool.returnType}\n`;
526
+ output += ` Execution Context: ${tool.executionContext}\n`;
527
+ output += ` Complexity: ${tool.complexity}\n`;
528
+ output += ` Frequency: ${tool.frequency}\n`;
529
+ return output;
530
+ }
531
+ /**
532
+ * Execute a tool for AI (only if AI-enabled)
533
+ */
534
+ static async executeForAI(toolIdentifier, parameters = {}) {
535
+ const tool = this.tools.get(toolIdentifier);
536
+ if (!tool) {
537
+ return {
538
+ success: false,
539
+ error: `Tool ${toolIdentifier} not found`,
540
+ tool: toolIdentifier,
541
+ };
542
+ }
543
+ if (!tool.aiEnabled) {
544
+ return {
545
+ success: false,
546
+ error: `Tool ${toolIdentifier} is not AI-enabled. Use executeForTesting() instead.`,
547
+ tool: toolIdentifier,
548
+ };
549
+ }
550
+ if (tool.requiresApproval) {
551
+ return {
552
+ success: false,
553
+ error: `Tool ${toolIdentifier} requires approval.`,
554
+ tool: toolIdentifier,
555
+ requiresApproval: true,
556
+ };
557
+ }
558
+ // For now, just return success - actual execution would need provider instances
559
+ return {
560
+ success: true,
561
+ data: { message: 'Tool executed successfully' },
562
+ tool: toolIdentifier,
563
+ };
564
+ }
565
+ /**
566
+ * Request approval for a dangerous operation
567
+ */
568
+ static async requestApproval(toolIdentifier, parameters = {}) {
569
+ // For now, return a mock approval request
570
+ return {
571
+ id: `approval-${Date.now()}`,
572
+ approved: false, // Requires manual approval
573
+ };
574
+ }
575
+ /**
576
+ * Generate tool documentation
577
+ */
578
+ static generateDocumentation() {
579
+ const tools = Array.from(this.tools.values());
580
+ const aiEnabledTools = tools.filter((t) => t.aiEnabled);
581
+ const testOnlyTools = tools.filter((t) => !t.aiEnabled);
582
+ let doc = `# Supernal Interface Tools\n\n`;
583
+ doc += `**Total Tools**: ${tools.length}\n`;
584
+ doc += `**AI-Enabled**: ${aiEnabledTools.length}\n`;
585
+ doc += `**Test-Only**: ${testOnlyTools.length}\n\n`;
586
+ doc += `## AI-Enabled Tools\n\n`;
587
+ aiEnabledTools.forEach((tool) => {
588
+ doc += `### ${tool.name}\n`;
589
+ doc += `- **Description**: ${tool.aiDescription || tool.description}\n`;
590
+ doc += `- **Danger Level**: ${tool.dangerLevel}\n`;
591
+ doc += `- **Requires Approval**: ${tool.requiresApproval ? 'Yes' : 'No'}\n`;
592
+ doc += `- **Examples**: ${tool.examples.join(', ')}\n\n`;
593
+ });
594
+ doc += `## Test-Only Tools\n\n`;
595
+ testOnlyTools.forEach((tool) => {
596
+ doc += `### ${tool.name}\n`;
597
+ doc += `- **Description**: ${tool.description}\n`;
598
+ doc += `- **Danger Level**: ${tool.dangerLevel}\n\n`;
599
+ });
600
+ return doc;
601
+ }
602
+ /**
603
+ * Clear all tools (for testing)
604
+ */
605
+ static clear() {
606
+ this.tools.clear();
607
+ console.log('🧹 ToolRegistry: Cleared all tools');
608
+ }
609
+ /**
610
+ * Get tools grouped by container for MCP/AI consumption
611
+ *
612
+ * Returns a hierarchical structure:
613
+ * {
614
+ * global: [...tools without containerId...],
615
+ * DemoSimple: [...tools with containerId='DemoSimple'...],
616
+ * Examples: [...tools with containerId='Examples'...],
617
+ * ...
618
+ * }
619
+ *
620
+ * This helps AI agents understand tool organization and prioritize
621
+ * contextually relevant tools.
622
+ */
623
+ static getToolsGroupedByContainer() {
624
+ const grouped = {
625
+ global: [],
626
+ };
627
+ for (const tool of this.tools.values()) {
628
+ const container = tool.containerId || 'global';
629
+ if (!grouped[container]) {
630
+ grouped[container] = [];
631
+ }
632
+ grouped[container].push(tool);
633
+ }
634
+ return grouped;
635
+ }
636
+ /**
637
+ * Get tools grouped by component within a container
638
+ *
639
+ * Returns a hierarchical structure:
640
+ * {
641
+ * DemoSimple: {
642
+ * counter: [...counter tools...],
643
+ * timer: [...timer tools...],
644
+ * },
645
+ * global: {
646
+ * navigation: [...navigation tools...],
647
+ * theme: [...theme tools...],
648
+ * }
649
+ * }
650
+ */
651
+ static getToolsGroupedByComponentAndContainer() {
652
+ const grouped = {};
653
+ for (const tool of this.tools.values()) {
654
+ const container = tool.containerId || 'global';
655
+ const component = tool.componentName || 'ungrouped';
656
+ if (!grouped[container]) {
657
+ grouped[container] = {};
658
+ }
659
+ if (!grouped[container][component]) {
660
+ grouped[container][component] = [];
661
+ }
662
+ grouped[container][component].push(tool);
663
+ }
664
+ return grouped;
665
+ }
666
+ }
667
+ exports.ToolRegistry = ToolRegistry;
668
+ //# sourceMappingURL=ToolRegistry.js.map