@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,218 @@
1
+ /**
2
+ * useChatWithContext - Hook for integrating AI chat with application context
3
+ *
4
+ * Provides chat capabilities that can be plugged into any UI:
5
+ * - Automatic context injection (current view, available tools, app state)
6
+ * - Tool execution
7
+ * - Prompt building with context
8
+ * - Message handling
9
+ */
10
+ import { useState, useCallback, useMemo } from 'react';
11
+ import { ToolRegistry } from '../../background/registry/ToolRegistry.js';
12
+ export function useChatWithContext(config = {}) {
13
+ const [messages, setMessages] = useState([]);
14
+ const [isProcessing, setIsProcessing] = useState(false);
15
+ // Get available tools for current container
16
+ const availableTools = useMemo(() => {
17
+ if (!config.containerId) {
18
+ return Array.from(ToolRegistry.getAllTools().values())
19
+ .filter(t => t.aiEnabled);
20
+ }
21
+ return ToolRegistry.searchScoped('', config.containerId);
22
+ }, [config.containerId]);
23
+ // Build context object
24
+ const getCurrentContext = useCallback(() => {
25
+ return {
26
+ containerId: config.containerId,
27
+ userId: config.userId,
28
+ appState: config.getAppState?.(),
29
+ metadata: {
30
+ timestamp: new Date().toISOString(),
31
+ toolCount: availableTools.length
32
+ }
33
+ };
34
+ }, [config.containerId, config.userId, config.getAppState, availableTools.length]);
35
+ // Build prompt with context
36
+ const buildPromptWithContext = useCallback((userMessage) => {
37
+ const context = getCurrentContext();
38
+ const toolNames = availableTools.map(t => t.name || `${t.componentName}.${t.methodName}`);
39
+ const systemPrompt = config.systemPrompt || `You are an AI assistant with access to application tools.
40
+
41
+ Current Context:
42
+ - Container: ${context.containerId || 'global'}
43
+ - Available Tools: ${toolNames.join(', ')}
44
+ ${context.appState ? `- Application State: ${JSON.stringify(context.appState, null, 2)}` : ''}
45
+
46
+ When the user asks you to do something:
47
+ 1. Identify the appropriate tool from available tools
48
+ 2. Extract any required parameters from the user's message
49
+ 3. Return the tool name and parameters in your response
50
+ 4. Confirm the action after execution
51
+
52
+ Be concise and helpful.`;
53
+ return {
54
+ userMessage,
55
+ context,
56
+ availableTools: toolNames,
57
+ systemPrompt
58
+ };
59
+ }, [getCurrentContext, availableTools, config.systemPrompt]);
60
+ // Execute a tool
61
+ const executeTool = useCallback(async (toolId, args = {}) => {
62
+ try {
63
+ // Get tool metadata
64
+ const tool = ToolRegistry.getTool(toolId);
65
+ if (!tool || !tool.method) {
66
+ throw new Error(`Tool not found or has no method: ${toolId}`);
67
+ }
68
+ // Convert args object to parameters array based on inputSchema
69
+ const parameters = [];
70
+ if (tool.inputSchema) {
71
+ for (const [paramName, paramDef] of Object.entries(tool.inputSchema)) {
72
+ const def = paramDef;
73
+ parameters.push(args[paramName] ?? def.default);
74
+ }
75
+ }
76
+ // Execute the tool method
77
+ const result = await tool.method(...parameters);
78
+ config.onToolExecute?.(toolId, args, result);
79
+ return {
80
+ success: true,
81
+ result,
82
+ error: undefined
83
+ };
84
+ }
85
+ catch (error) {
86
+ const err = error instanceof Error ? error : new Error(String(error));
87
+ config.onError?.(err);
88
+ return {
89
+ success: false,
90
+ result: undefined,
91
+ error: err.message
92
+ };
93
+ }
94
+ }, [config]);
95
+ // Add a message
96
+ const addMessage = useCallback((content, role = 'user') => {
97
+ const message = {
98
+ id: `msg-${Date.now()}-${Math.random()}`,
99
+ role,
100
+ content,
101
+ timestamp: new Date(),
102
+ context: role === 'user' ? getCurrentContext() : undefined
103
+ };
104
+ setMessages(prev => [...prev, message]);
105
+ config.onMessage?.(message);
106
+ return message;
107
+ }, [getCurrentContext, config]);
108
+ // Send a message (user -> AI -> tool execution)
109
+ const sendMessage = useCallback(async (content) => {
110
+ if (!content.trim())
111
+ return;
112
+ // Add user message
113
+ addMessage(content, 'user');
114
+ setIsProcessing(true);
115
+ try {
116
+ // Build prompt with context
117
+ const _prompt = buildPromptWithContext(content);
118
+ // Simple fuzzy matching for demo purposes
119
+ // In production, this would call an LLM API
120
+ const lowerContent = content.toLowerCase();
121
+ let responseContent = "I understand. ";
122
+ let toolExecuted = false;
123
+ // Try to match and execute tools
124
+ for (const tool of availableTools) {
125
+ const toolName = tool.name || `${tool.componentName}.${tool.methodName}`;
126
+ const keywords = tool.examples?.join(' ').toLowerCase() || '';
127
+ // Simple keyword matching
128
+ if (keywords.includes(lowerContent) ||
129
+ toolName.toLowerCase().includes(lowerContent.split(' ')[0])) {
130
+ // Extract simple arguments (in production, LLM would do this)
131
+ const args = extractSimpleArgs(content, tool);
132
+ // Execute tool
133
+ const result = await executeTool(tool.toolId || '', args);
134
+ if (result.success) {
135
+ responseContent += `Executed ${toolName}. `;
136
+ toolExecuted = true;
137
+ }
138
+ else {
139
+ responseContent += `Failed to execute ${toolName}: ${result.error}`;
140
+ }
141
+ break;
142
+ }
143
+ }
144
+ if (!toolExecuted) {
145
+ responseContent = `I couldn't find a matching tool. Available tools: ${availableTools.map(t => t.name || t.methodName).join(', ')}`;
146
+ }
147
+ // Add AI response
148
+ addMessage(responseContent, 'assistant');
149
+ }
150
+ catch (error) {
151
+ const err = error instanceof Error ? error : new Error(String(error));
152
+ config.onError?.(err);
153
+ addMessage(`Error: ${err.message}`, 'system');
154
+ }
155
+ finally {
156
+ setIsProcessing(false);
157
+ }
158
+ }, [addMessage, buildPromptWithContext, availableTools, executeTool, config]);
159
+ // Clear messages
160
+ const clearMessages = useCallback(() => {
161
+ setMessages([]);
162
+ }, []);
163
+ // Suggest tools based on query
164
+ const suggestTools = useCallback((query) => {
165
+ if (!query.trim())
166
+ return availableTools;
167
+ const lowerQuery = query.toLowerCase();
168
+ return availableTools.filter(tool => {
169
+ const toolName = (tool.name || tool.methodName).toLowerCase();
170
+ const description = tool.description?.toLowerCase() || '';
171
+ const examples = tool.examples?.join(' ').toLowerCase() || '';
172
+ return toolName.includes(lowerQuery) ||
173
+ description.includes(lowerQuery) ||
174
+ examples.includes(lowerQuery);
175
+ });
176
+ }, [availableTools]);
177
+ return {
178
+ // State
179
+ messages,
180
+ isProcessing,
181
+ availableTools,
182
+ currentContext: getCurrentContext(),
183
+ // Actions
184
+ sendMessage,
185
+ addMessage,
186
+ clearMessages,
187
+ executeTool,
188
+ // Helpers
189
+ buildPromptWithContext,
190
+ suggestTools
191
+ };
192
+ }
193
+ // Simple argument extraction (in production, LLM would handle this)
194
+ function extractSimpleArgs(query, tool) {
195
+ const args = {};
196
+ const lowerQuery = query.toLowerCase();
197
+ // Extract numbers
198
+ const numMatch = query.match(/\d+/);
199
+ if (numMatch && tool.inputSchema) {
200
+ const numParam = Object.keys(tool.inputSchema).find(key => tool.inputSchema[key].type === 'number');
201
+ if (numParam) {
202
+ args[numParam] = parseInt(numMatch[0], 10);
203
+ }
204
+ }
205
+ // Extract common keywords
206
+ if (lowerQuery.includes('dark'))
207
+ args.theme = 'dark';
208
+ if (lowerQuery.includes('light'))
209
+ args.theme = 'light';
210
+ if (lowerQuery.includes('high'))
211
+ args.priority = 'high';
212
+ if (lowerQuery.includes('medium'))
213
+ args.priority = 'medium';
214
+ if (lowerQuery.includes('low'))
215
+ args.priority = 'low';
216
+ return args;
217
+ }
218
+ //# sourceMappingURL=useChatWithContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChatWithContext.js","sourceRoot":"","sources":["../../../../../src/react/hooks/useChatWithContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * React Components - Open Source Edition
3
+ *
4
+ * Basic React hooks. Architecture visualization components (ArchitectureGraph,
5
+ * LiveArchitectureGraph, RuntimeGraphTracker) available in enterprise edition.
6
+ */
7
+ export { useToolBinding } from './useToolBinding';
8
+ export { usePersistedState } from './usePersistedState';
9
+ export { useNavigationHandler } from './useNavigationHandler';
10
+ export { useChatWithContext } from './hooks/useChatWithContext';
11
+ export type { ChatContext, ChatMessage, PromptWithContext, UseChatWithContextConfig } from './hooks/useChatWithContext';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,YAAY,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * React Components - Open Source Edition
3
+ *
4
+ * Basic React hooks. Architecture visualization components (ArchitectureGraph,
5
+ * LiveArchitectureGraph, RuntimeGraphTracker) available in enterprise edition.
6
+ */
7
+ // Basic hooks (open source)
8
+ export { useToolBinding } from './useToolBinding.js';
9
+ export { usePersistedState } from './usePersistedState.js';
10
+ export { useNavigationHandler } from './useNavigationHandler.js';
11
+ // Chat integration hook
12
+ export { useChatWithContext } from './hooks/useChatWithContext.js';
13
+ // Enterprise features - available at https://supernal.ai/enterprise:
14
+ // - ArchitectureGraph (visual component tree)
15
+ // - LiveArchitectureGraph (real-time visualization)
16
+ // - RuntimeGraphTracker (execution tracking)
17
+ // - GraphLayout (layout engine)
18
+ // - TreeValidator (validation)
19
+ // - StatePanel (state visualization)
20
+ // - ContainerNode, ComponentNode, ToolNode (graph nodes)
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,4BAA4B;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,wBAAwB;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAQhE,qEAAqE;AACrE,8CAA8C;AAC9C,oDAAoD;AACpD,6CAA6C;AAC7C,gCAAgC;AAChC,+BAA+B;AAC/B,qCAAqC;AACrC,yDAAyD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * useNavigationHandler - React Hook for Automatic Navigation Setup
3
+ *
4
+ * Single-line hook that sets up navigation for any page.
5
+ * Uses NavigationGraph to automatically resolve routes from container definitions.
6
+ *
7
+ * This eliminates the need for manual route maps in every page component.
8
+ */
9
+ /**
10
+ * Set up automatic navigation handler for the current page
11
+ *
12
+ * This hook:
13
+ * 1. Gets routes from NavigationGraph (populated by container definitions)
14
+ * 2. Creates a handler that resolves page names → routes
15
+ * 3. Registers the handler with NavigationGraph
16
+ * 4. Supports dynamic routes (e.g., "blog/post-slug")
17
+ *
18
+ * @param router - Next.js router or any router with a `push` method
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { useRouter } from 'next/router';
23
+ * import { useNavigationHandler } from '@supernal-interface/core/react';
24
+ *
25
+ * export default function MyPage() {
26
+ * const router = useRouter();
27
+ * useNavigationHandler(router); // ← ONE LINE!
28
+ *
29
+ * return <div>...</div>;
30
+ * }
31
+ * ```
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * // Without a router (uses window.location as fallback)
36
+ * useNavigationHandler();
37
+ * ```
38
+ */
39
+ export declare function useNavigationHandler(router?: {
40
+ push: (route: string) => any;
41
+ }): void;
42
+ //# sourceMappingURL=useNavigationHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNavigationHandler.d.ts","sourceRoot":"","sources":["../../../../src/react/useNavigationHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAA;CAAE,GACxC,IAAI,CAkDN"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * useNavigationHandler - React Hook for Automatic Navigation Setup
3
+ *
4
+ * Single-line hook that sets up navigation for any page.
5
+ * Uses NavigationGraph to automatically resolve routes from container definitions.
6
+ *
7
+ * This eliminates the need for manual route maps in every page component.
8
+ */
9
+ import { useEffect } from 'react';
10
+ import { NavigationGraph } from '../background/navigation/NavigationGraph.js';
11
+ /**
12
+ * Set up automatic navigation handler for the current page
13
+ *
14
+ * This hook:
15
+ * 1. Gets routes from NavigationGraph (populated by container definitions)
16
+ * 2. Creates a handler that resolves page names → routes
17
+ * 3. Registers the handler with NavigationGraph
18
+ * 4. Supports dynamic routes (e.g., "blog/post-slug")
19
+ *
20
+ * @param router - Next.js router or any router with a `push` method
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { useRouter } from 'next/router';
25
+ * import { useNavigationHandler } from '@supernal-interface/core/react';
26
+ *
27
+ * export default function MyPage() {
28
+ * const router = useRouter();
29
+ * useNavigationHandler(router); // ← ONE LINE!
30
+ *
31
+ * return <div>...</div>;
32
+ * }
33
+ * ```
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * // Without a router (uses window.location as fallback)
38
+ * useNavigationHandler();
39
+ * ```
40
+ */
41
+ export function useNavigationHandler(router) {
42
+ useEffect(() => {
43
+ const graph = NavigationGraph.getInstance();
44
+ const handler = (pageNameOrRoute) => {
45
+ const pageName = typeof pageNameOrRoute === 'string' ? pageNameOrRoute : pageNameOrRoute?.name || pageNameOrRoute?.path;
46
+ if (!pageName)
47
+ return;
48
+ console.log(`🗺️ [Navigation] Request: ${pageName}`);
49
+ // Use NavigationGraph to resolve route
50
+ let route = graph.getRouteByName(pageName);
51
+ if (!route) {
52
+ console.warn(`⚠️ [Navigation] No exact route found for: ${pageName}`);
53
+ // Try treating as a path (e.g., "blog/type-safe" → "/blog/type-safe")
54
+ if (pageName.includes('/')) {
55
+ const routePath = pageName.startsWith('/') ? pageName : `/${pageName}`;
56
+ console.log(`🗺️ [Navigation] Attempting dynamic path: ${routePath}`);
57
+ // Navigate using provided router or fallback to window.location
58
+ if (router?.push) {
59
+ router.push(routePath);
60
+ }
61
+ else if (typeof window !== 'undefined') {
62
+ window.location.href = routePath;
63
+ }
64
+ }
65
+ return;
66
+ }
67
+ // Extract path from RouteInfo
68
+ const routePath = route.path || route.name || pageName;
69
+ console.log(`🗺️ [Navigation] Resolved: ${pageName} → ${routePath}`);
70
+ // Navigate using provided router or fallback to window.location
71
+ if (router?.push) {
72
+ router.push(routePath);
73
+ }
74
+ else if (typeof window !== 'undefined') {
75
+ window.location.href = routePath;
76
+ }
77
+ };
78
+ graph.setNavigationHandler(handler);
79
+ return () => {
80
+ // Clean up handler on unmount
81
+ graph.setNavigationHandler(() => { });
82
+ };
83
+ }, [router]);
84
+ }
85
+ //# sourceMappingURL=useNavigationHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNavigationHandler.js","sourceRoot":"","sources":["../../../../src/react/useNavigationHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAyC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;QAE5C,MAAM,OAAO,GAAG,CAAC,eAA6B,EAAE,EAAE;YAChD,MAAM,QAAQ,GAAG,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,IAAI,eAAe,EAAE,IAAI,CAAC;YACxH,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAEtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;YAEtD,uCAAuC;YACvC,IAAI,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAE3C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,8CAA8C,QAAQ,EAAE,CAAC,CAAC;gBAEvE,sEAAsE;gBACtE,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACvE,OAAO,CAAC,GAAG,CAAC,8CAA8C,SAAS,EAAE,CAAC,CAAC;oBAEvE,gEAAgE;oBAChE,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;wBACjB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACzB,CAAC;yBAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;wBACzC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;oBACnC,CAAC;gBACH,CAAC;gBACD,OAAO;YACT,CAAC;YAED,8BAA8B;YAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,+BAA+B,QAAQ,MAAM,SAAS,EAAE,CAAC,CAAC;YAEtE,gEAAgE;YAChE,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;iBAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBACzC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;YACnC,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEpC,OAAO,GAAG,EAAE;YACV,8BAA8B;YAC9B,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * usePersistedState - SSR-safe state persistence hook
3
+ *
4
+ * Like useState, but persists using StateManager and handles hydration properly.
5
+ * Uses the storage adapter pattern for pluggable persistence.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const [count, setCount] = usePersistedState('my-count', 0);
10
+ * ```
11
+ */
12
+ export declare function usePersistedState<T>(key: string, defaultValue: T): [T, (value: T | ((prev: T) => T)) => void];
13
+ //# sourceMappingURL=usePersistedState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePersistedState.d.ts","sourceRoot":"","sources":["../../../../src/react/usePersistedState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACd,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAgD5C"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * usePersistedState - SSR-safe state persistence hook
3
+ *
4
+ * Like useState, but persists using StateManager and handles hydration properly.
5
+ * Uses the storage adapter pattern for pluggable persistence.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const [count, setCount] = usePersistedState('my-count', 0);
10
+ * ```
11
+ */
12
+ import { useState, useEffect } from 'react';
13
+ import { StateManager } from '../storage/StateManager.js';
14
+ import { LocalStorageAdapter } from '../storage/LocalStorageAdapter.js';
15
+ import { StateManagers } from '../types/StateManagers.js';
16
+ // Get or create a singleton StateManager for browser usage
17
+ let browserStateManager = null;
18
+ function getBrowserStateManager() {
19
+ if (!browserStateManager && typeof window !== 'undefined') {
20
+ browserStateManager = StateManager.getInstance(StateManagers.SupernalCoreV1, new LocalStorageAdapter());
21
+ }
22
+ return browserStateManager;
23
+ }
24
+ export function usePersistedState(key, defaultValue) {
25
+ // Always start with default value (matches SSR)
26
+ const [state, setState] = useState(defaultValue);
27
+ const [isHydrated, setIsHydrated] = useState(false);
28
+ // Hydrate from storage after mount (client-only)
29
+ useEffect(() => {
30
+ if (typeof window === 'undefined')
31
+ return;
32
+ const stateManager = getBrowserStateManager();
33
+ (async () => {
34
+ try {
35
+ await stateManager.initialize();
36
+ const stored = await stateManager.get(key);
37
+ if (stored && 'value' in stored) {
38
+ setState(stored.value);
39
+ }
40
+ }
41
+ catch (e) {
42
+ // eslint-disable-next-line no-console
43
+ console.warn(`[usePersistedState] Failed to load "${key}":`, e);
44
+ }
45
+ setIsHydrated(true);
46
+ })();
47
+ }, [key]);
48
+ // Persist to storage on changes (but only after hydration)
49
+ useEffect(() => {
50
+ if (!isHydrated || typeof window === 'undefined')
51
+ return;
52
+ const stateManager = getBrowserStateManager();
53
+ (async () => {
54
+ try {
55
+ await stateManager.set(key, {
56
+ kind: 'ui-component',
57
+ componentId: key,
58
+ value: state
59
+ }); // Type assertion needed as we're adding custom 'value' field
60
+ }
61
+ catch (e) {
62
+ // eslint-disable-next-line no-console
63
+ console.warn(`[usePersistedState] Failed to save "${key}":`, e);
64
+ }
65
+ })();
66
+ }, [key, state, isHydrated]);
67
+ return [state, setState];
68
+ }
69
+ //# sourceMappingURL=usePersistedState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePersistedState.js","sourceRoot":"","sources":["../../../../src/react/usePersistedState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,2DAA2D;AAC3D,IAAI,mBAAmB,GAAwB,IAAI,CAAC;AAEpD,SAAS,sBAAsB;IAC7B,IAAI,CAAC,mBAAmB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAC1D,mBAAmB,GAAG,YAAY,CAAC,WAAW,CAC5C,aAAa,CAAC,cAAc,EAC5B,IAAI,mBAAmB,EAAE,CAC1B,CAAC;IACJ,CAAC;IACD,OAAO,mBAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,YAAe;IAEf,gDAAgD;IAChD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAI,YAAY,CAAC,CAAC;IACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,iDAAiD;IACjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,MAAM,YAAY,GAAG,sBAAsB,EAAE,CAAC;QAE9C,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,CAAgC,GAAG,CAAC,CAAC;gBAC1E,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;oBAChC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,uCAAuC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,2DAA2D;IAC3D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAEzD,MAAM,YAAY,GAAG,sBAAsB,EAAE,CAAC;QAE9C,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,MAAM,YAAY,CAAC,GAAG,CAAgC,GAAG,EAAE;oBACzD,IAAI,EAAE,cAAc;oBACpB,WAAW,EAAE,GAAG;oBAChB,KAAK,EAAE,KAAK;iBACN,CAAC,CAAC,CAAE,6DAA6D;YAC3E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,uCAAuC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAE7B,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * useToolBinding Hook
3
+ * Auto-wires DOM elements to @Tool decorators based on data-testid
4
+ *
5
+ * Simplified version - tools receive raw events and handle their own logic
6
+ */
7
+ export declare function useToolBinding(containerRef: React.RefObject<HTMLElement>, containerTestId: string, instanceId?: string): void;
8
+ //# sourceMappingURL=useToolBinding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToolBinding.d.ts","sourceRoot":"","sources":["../../../../src/react/useToolBinding.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,EAC1C,eAAe,EAAE,MAAM,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CA2GN"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * useToolBinding Hook
3
+ * Auto-wires DOM elements to @Tool decorators based on data-testid
4
+ *
5
+ * Simplified version - tools receive raw events and handle their own logic
6
+ */
7
+ import { useEffect } from 'react';
8
+ import { ToolRegistry } from '../background/registry/ToolRegistry.js';
9
+ export function useToolBinding(containerRef, containerTestId, instanceId) {
10
+ useEffect(() => {
11
+ if (!containerRef.current)
12
+ return;
13
+ const storageKey = instanceId ? `${containerTestId}:${instanceId}` : containerTestId;
14
+ // 1. Register instance for duplicate detection
15
+ try {
16
+ ToolRegistry.registerInstance(storageKey, containerRef.current);
17
+ }
18
+ catch (error) {
19
+ console.error(`[useToolBinding] Instance already exists: ${storageKey}`, error);
20
+ return; // Don't wire up duplicate instances
21
+ }
22
+ // 2. Find all elements with data-testid within container (and the container itself)
23
+ const elements = [];
24
+ // Check if container itself has data-testid
25
+ if (containerRef.current.hasAttribute('data-testid')) {
26
+ elements.push(containerRef.current);
27
+ }
28
+ // Find children with data-testid
29
+ const childElements = containerRef.current.querySelectorAll('[data-testid]');
30
+ elements.push(...Array.from(childElements));
31
+ const handlers = [];
32
+ elements.forEach((element) => {
33
+ const testId = element.getAttribute('data-testid');
34
+ if (!testId)
35
+ return;
36
+ // 3. Find matching tool from registry
37
+ const tool = ToolRegistry.findToolByElementId(testId);
38
+ if (!tool || !tool.method) {
39
+ console.warn(`[useToolBinding] Tool not found or has no method for elementId: ${testId}`);
40
+ return;
41
+ }
42
+ // Note: instance may not be set yet (lazy initialization)
43
+ // We'll check for it when the event fires
44
+ // 4. Create handler that extracts values from events and calls tool
45
+ const handler = async (event) => {
46
+ if (!tool.method || !tool.instance) {
47
+ console.warn(`[useToolBinding] Tool ${tool.name} missing method or instance`);
48
+ return;
49
+ }
50
+ // Extract value from event based on element type
51
+ let value;
52
+ const target = event.target;
53
+ if (target instanceof HTMLInputElement) {
54
+ if (target.type === 'checkbox') {
55
+ value = target.checked;
56
+ }
57
+ else if (target.type === 'radio') {
58
+ value = target.value;
59
+ }
60
+ else {
61
+ value = target.value;
62
+ }
63
+ }
64
+ else if (target instanceof HTMLSelectElement) {
65
+ value = target.value;
66
+ }
67
+ else if (target instanceof HTMLTextAreaElement) {
68
+ value = target.value;
69
+ }
70
+ // For buttons and other elements, no value needed (void call)
71
+ const options = {
72
+ // Storage will be added in next step
73
+ // For now, tools get extracted value
74
+ };
75
+ try {
76
+ // Call the actual decorated method with extracted value
77
+ const result = value !== undefined
78
+ ? await tool.method.call(tool.instance, value, options)
79
+ : await tool.method.call(tool.instance, options);
80
+ console.log(`[useToolBinding] Tool ${tool.name} executed successfully`, result);
81
+ }
82
+ catch (error) {
83
+ console.error(`[useToolBinding] Tool execution failed: ${tool.name}`, error);
84
+ }
85
+ };
86
+ // 5. Wire up with appropriate event type
87
+ // Use tool's actionType if specified, otherwise infer from element
88
+ let eventType = tool.actionType || 'click';
89
+ if (!tool.actionType) {
90
+ if (element instanceof HTMLInputElement || element instanceof HTMLSelectElement || element instanceof HTMLTextAreaElement) {
91
+ eventType = 'change';
92
+ }
93
+ }
94
+ console.log(`[useToolBinding] Wiring ${testId} with event: ${eventType}`);
95
+ element.addEventListener(eventType, handler);
96
+ handlers.push({ element, event: eventType, handler });
97
+ });
98
+ // 6. Cleanup
99
+ return () => {
100
+ handlers.forEach(({ element, event, handler }) => {
101
+ element.removeEventListener(event, handler);
102
+ });
103
+ ToolRegistry.unregisterInstance(storageKey);
104
+ };
105
+ }, [containerRef, containerTestId, instanceId]);
106
+ }
107
+ //# sourceMappingURL=useToolBinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToolBinding.js","sourceRoot":"","sources":["../../../../src/react/useToolBinding.ts"],"names":[],"mappings":"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"}