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