@tleblancureta/proto 0.1.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 (231) hide show
  1. package/core-web/src/ProtoApp.tsx +163 -0
  2. package/core-web/src/components/Shell.tsx +276 -0
  3. package/core-web/src/components/shell/EmptyState.tsx +33 -0
  4. package/core-web/src/components/shell/FocusView.tsx +55 -0
  5. package/core-web/src/components/shell/Toolbar.tsx +233 -0
  6. package/core-web/src/components/shell/persistence.ts +20 -0
  7. package/core-web/src/components/shell/types.ts +14 -0
  8. package/core-web/src/components/ui/avatar.tsx +18 -0
  9. package/core-web/src/components/ui/badge.tsx +28 -0
  10. package/core-web/src/components/ui/button.tsx +40 -0
  11. package/core-web/src/components/ui/card.tsx +32 -0
  12. package/core-web/src/components/ui/inline-edit.tsx +120 -0
  13. package/core-web/src/components/ui/input.tsx +18 -0
  14. package/core-web/src/components/ui/scroll-area.tsx +12 -0
  15. package/core-web/src/components/ui/separator.tsx +23 -0
  16. package/core-web/src/components/ui/shell-dialog.tsx +79 -0
  17. package/core-web/src/components/ui/skeleton.tsx +9 -0
  18. package/core-web/src/components/ui/textarea.tsx +17 -0
  19. package/core-web/src/components/widgets/agent/Generative.tsx +74 -0
  20. package/core-web/src/components/widgets/agent/Primitives.tsx +225 -0
  21. package/core-web/src/components/widgets/agent/actions.ts +52 -0
  22. package/core-web/src/hooks/useAuth.ts +80 -0
  23. package/core-web/src/hooks/useData.ts +44 -0
  24. package/core-web/src/hooks/useMountEffect.ts +10 -0
  25. package/core-web/src/hooks/useTheme.ts +37 -0
  26. package/core-web/src/index.ts +52 -0
  27. package/core-web/src/lib/api.ts +231 -0
  28. package/core-web/src/lib/config.ts +14 -0
  29. package/core-web/src/lib/define-widget.ts +71 -0
  30. package/core-web/src/lib/drag.ts +45 -0
  31. package/core-web/src/lib/supabase.ts +6 -0
  32. package/core-web/src/lib/utils.ts +6 -0
  33. package/core-web/src/lib/widgetCache.ts +29 -0
  34. package/core-web/src/vite-env.d.ts +1 -0
  35. package/dist/core-mcp/src/app.d.ts +40 -0
  36. package/dist/core-mcp/src/app.d.ts.map +1 -0
  37. package/dist/core-mcp/src/app.js +141 -0
  38. package/dist/core-mcp/src/app.js.map +1 -0
  39. package/dist/core-mcp/src/define-tool.d.ts +70 -0
  40. package/dist/core-mcp/src/define-tool.d.ts.map +1 -0
  41. package/dist/core-mcp/src/define-tool.js +38 -0
  42. package/dist/core-mcp/src/define-tool.js.map +1 -0
  43. package/dist/core-mcp/src/entity-tools.d.ts +27 -0
  44. package/dist/core-mcp/src/entity-tools.d.ts.map +1 -0
  45. package/dist/core-mcp/src/entity-tools.js +99 -0
  46. package/dist/core-mcp/src/entity-tools.js.map +1 -0
  47. package/dist/core-mcp/src/index.d.ts +36 -0
  48. package/dist/core-mcp/src/index.d.ts.map +1 -0
  49. package/dist/core-mcp/src/index.js +116 -0
  50. package/dist/core-mcp/src/index.js.map +1 -0
  51. package/dist/core-mcp/src/supabase.d.ts +7 -0
  52. package/dist/core-mcp/src/supabase.d.ts.map +1 -0
  53. package/dist/core-mcp/src/supabase.js +18 -0
  54. package/dist/core-mcp/src/supabase.js.map +1 -0
  55. package/dist/core-mcp/src/tools/_helpers.d.ts +44 -0
  56. package/dist/core-mcp/src/tools/_helpers.d.ts.map +1 -0
  57. package/dist/core-mcp/src/tools/_helpers.js +23 -0
  58. package/dist/core-mcp/src/tools/_helpers.js.map +1 -0
  59. package/dist/core-mcp/src/tools/ui.d.ts +9 -0
  60. package/dist/core-mcp/src/tools/ui.d.ts.map +1 -0
  61. package/dist/core-mcp/src/tools/ui.js +100 -0
  62. package/dist/core-mcp/src/tools/ui.js.map +1 -0
  63. package/dist/core-mcp/src/workflow-tools.d.ts +41 -0
  64. package/dist/core-mcp/src/workflow-tools.d.ts.map +1 -0
  65. package/dist/core-mcp/src/workflow-tools.js +382 -0
  66. package/dist/core-mcp/src/workflow-tools.js.map +1 -0
  67. package/dist/core-shared/src/define-entity.d.ts +73 -0
  68. package/dist/core-shared/src/define-entity.d.ts.map +1 -0
  69. package/dist/core-shared/src/define-entity.js +47 -0
  70. package/dist/core-shared/src/define-entity.js.map +1 -0
  71. package/dist/core-shared/src/define-workflow.d.ts +111 -0
  72. package/dist/core-shared/src/define-workflow.d.ts.map +1 -0
  73. package/dist/core-shared/src/define-workflow.js +92 -0
  74. package/dist/core-shared/src/define-workflow.js.map +1 -0
  75. package/dist/core-shared/src/index.d.ts +5 -0
  76. package/dist/core-shared/src/index.d.ts.map +1 -0
  77. package/dist/core-shared/src/index.js +7 -0
  78. package/dist/core-shared/src/index.js.map +1 -0
  79. package/dist/core-shared/src/scheduling.d.ts +69 -0
  80. package/dist/core-shared/src/scheduling.d.ts.map +1 -0
  81. package/dist/core-shared/src/scheduling.js +39 -0
  82. package/dist/core-shared/src/scheduling.js.map +1 -0
  83. package/dist/core-shared/src/schemas.d.ts +51 -0
  84. package/dist/core-shared/src/schemas.d.ts.map +1 -0
  85. package/dist/core-shared/src/schemas.js +18 -0
  86. package/dist/core-shared/src/schemas.js.map +1 -0
  87. package/dist/core-web/src/ProtoApp.d.ts +19 -0
  88. package/dist/core-web/src/ProtoApp.d.ts.map +1 -0
  89. package/dist/core-web/src/ProtoApp.js +92 -0
  90. package/dist/core-web/src/ProtoApp.js.map +1 -0
  91. package/dist/core-web/src/components/Shell.d.ts +46 -0
  92. package/dist/core-web/src/components/Shell.d.ts.map +1 -0
  93. package/dist/core-web/src/components/Shell.js +104 -0
  94. package/dist/core-web/src/components/Shell.js.map +1 -0
  95. package/dist/core-web/src/components/shell/EmptyState.d.ts +13 -0
  96. package/dist/core-web/src/components/shell/EmptyState.d.ts.map +1 -0
  97. package/dist/core-web/src/components/shell/EmptyState.js +7 -0
  98. package/dist/core-web/src/components/shell/EmptyState.js.map +1 -0
  99. package/dist/core-web/src/components/shell/FocusView.d.ts +16 -0
  100. package/dist/core-web/src/components/shell/FocusView.d.ts.map +1 -0
  101. package/dist/core-web/src/components/shell/FocusView.js +12 -0
  102. package/dist/core-web/src/components/shell/FocusView.js.map +1 -0
  103. package/dist/core-web/src/components/shell/Toolbar.d.ts +35 -0
  104. package/dist/core-web/src/components/shell/Toolbar.d.ts.map +1 -0
  105. package/dist/core-web/src/components/shell/Toolbar.js +42 -0
  106. package/dist/core-web/src/components/shell/Toolbar.js.map +1 -0
  107. package/dist/core-web/src/components/shell/persistence.d.ts +8 -0
  108. package/dist/core-web/src/components/shell/persistence.d.ts.map +1 -0
  109. package/dist/core-web/src/components/shell/persistence.js +20 -0
  110. package/dist/core-web/src/components/shell/persistence.js.map +1 -0
  111. package/dist/core-web/src/components/shell/types.d.ts +13 -0
  112. package/dist/core-web/src/components/shell/types.d.ts.map +1 -0
  113. package/dist/core-web/src/components/shell/types.js +2 -0
  114. package/dist/core-web/src/components/shell/types.js.map +1 -0
  115. package/dist/core-web/src/components/ui/avatar.d.ts +5 -0
  116. package/dist/core-web/src/components/ui/avatar.d.ts.map +1 -0
  117. package/dist/core-web/src/components/ui/avatar.js +9 -0
  118. package/dist/core-web/src/components/ui/avatar.js.map +1 -0
  119. package/dist/core-web/src/components/ui/badge.d.ts +13 -0
  120. package/dist/core-web/src/components/ui/badge.d.ts.map +1 -0
  121. package/dist/core-web/src/components/ui/badge.js +13 -0
  122. package/dist/core-web/src/components/ui/badge.js.map +1 -0
  123. package/dist/core-web/src/components/ui/button.d.ts +22 -0
  124. package/dist/core-web/src/components/ui/button.d.ts.map +1 -0
  125. package/dist/core-web/src/components/ui/button.js +21 -0
  126. package/dist/core-web/src/components/ui/button.js.map +1 -0
  127. package/dist/core-web/src/components/ui/card.d.ts +7 -0
  128. package/dist/core-web/src/components/ui/card.d.ts.map +1 -0
  129. package/dist/core-web/src/components/ui/card.js +13 -0
  130. package/dist/core-web/src/components/ui/card.js.map +1 -0
  131. package/dist/core-web/src/components/ui/inline-edit.d.ts +20 -0
  132. package/dist/core-web/src/components/ui/inline-edit.d.ts.map +1 -0
  133. package/dist/core-web/src/components/ui/inline-edit.js +63 -0
  134. package/dist/core-web/src/components/ui/inline-edit.js.map +1 -0
  135. package/dist/core-web/src/components/ui/input.d.ts +4 -0
  136. package/dist/core-web/src/components/ui/input.d.ts.map +1 -0
  137. package/dist/core-web/src/components/ui/input.js +7 -0
  138. package/dist/core-web/src/components/ui/input.js.map +1 -0
  139. package/dist/core-web/src/components/ui/scroll-area.d.ts +4 -0
  140. package/dist/core-web/src/components/ui/scroll-area.d.ts.map +1 -0
  141. package/dist/core-web/src/components/ui/scroll-area.js +7 -0
  142. package/dist/core-web/src/components/ui/scroll-area.js.map +1 -0
  143. package/dist/core-web/src/components/ui/separator.d.ts +7 -0
  144. package/dist/core-web/src/components/ui/separator.d.ts.map +1 -0
  145. package/dist/core-web/src/components/ui/separator.js +7 -0
  146. package/dist/core-web/src/components/ui/separator.js.map +1 -0
  147. package/dist/core-web/src/components/ui/shell-dialog.d.ts +16 -0
  148. package/dist/core-web/src/components/ui/shell-dialog.d.ts.map +1 -0
  149. package/dist/core-web/src/components/ui/shell-dialog.js +36 -0
  150. package/dist/core-web/src/components/ui/shell-dialog.js.map +1 -0
  151. package/dist/core-web/src/components/ui/skeleton.d.ts +3 -0
  152. package/dist/core-web/src/components/ui/skeleton.d.ts.map +1 -0
  153. package/dist/core-web/src/components/ui/skeleton.js +7 -0
  154. package/dist/core-web/src/components/ui/skeleton.js.map +1 -0
  155. package/dist/core-web/src/components/ui/textarea.d.ts +4 -0
  156. package/dist/core-web/src/components/ui/textarea.d.ts.map +1 -0
  157. package/dist/core-web/src/components/ui/textarea.js +7 -0
  158. package/dist/core-web/src/components/ui/textarea.js.map +1 -0
  159. package/dist/core-web/src/components/widgets/agent/Generative.d.ts +13 -0
  160. package/dist/core-web/src/components/widgets/agent/Generative.d.ts.map +1 -0
  161. package/dist/core-web/src/components/widgets/agent/Generative.js +42 -0
  162. package/dist/core-web/src/components/widgets/agent/Generative.js.map +1 -0
  163. package/dist/core-web/src/components/widgets/agent/Primitives.d.ts +79 -0
  164. package/dist/core-web/src/components/widgets/agent/Primitives.d.ts.map +1 -0
  165. package/dist/core-web/src/components/widgets/agent/Primitives.js +116 -0
  166. package/dist/core-web/src/components/widgets/agent/Primitives.js.map +1 -0
  167. package/dist/core-web/src/components/widgets/agent/actions.d.ts +3 -0
  168. package/dist/core-web/src/components/widgets/agent/actions.d.ts.map +1 -0
  169. package/dist/core-web/src/components/widgets/agent/actions.js +33 -0
  170. package/dist/core-web/src/components/widgets/agent/actions.js.map +1 -0
  171. package/dist/core-web/src/hooks/useAuth.d.ts +25 -0
  172. package/dist/core-web/src/hooks/useAuth.d.ts.map +1 -0
  173. package/dist/core-web/src/hooks/useAuth.js +53 -0
  174. package/dist/core-web/src/hooks/useAuth.js.map +1 -0
  175. package/dist/core-web/src/hooks/useData.d.ts +10 -0
  176. package/dist/core-web/src/hooks/useData.d.ts.map +1 -0
  177. package/dist/core-web/src/hooks/useData.js +37 -0
  178. package/dist/core-web/src/hooks/useData.js.map +1 -0
  179. package/dist/core-web/src/hooks/useMountEffect.d.ts +6 -0
  180. package/dist/core-web/src/hooks/useMountEffect.d.ts.map +1 -0
  181. package/dist/core-web/src/hooks/useMountEffect.js +10 -0
  182. package/dist/core-web/src/hooks/useMountEffect.js.map +1 -0
  183. package/dist/core-web/src/hooks/useTheme.d.ts +6 -0
  184. package/dist/core-web/src/hooks/useTheme.d.ts.map +1 -0
  185. package/dist/core-web/src/hooks/useTheme.js +31 -0
  186. package/dist/core-web/src/hooks/useTheme.js.map +1 -0
  187. package/dist/core-web/src/index.d.ts +33 -0
  188. package/dist/core-web/src/index.d.ts.map +1 -0
  189. package/dist/core-web/src/index.js +38 -0
  190. package/dist/core-web/src/index.js.map +1 -0
  191. package/dist/core-web/src/lib/api.d.ts +60 -0
  192. package/dist/core-web/src/lib/api.d.ts.map +1 -0
  193. package/dist/core-web/src/lib/api.js +204 -0
  194. package/dist/core-web/src/lib/api.js.map +1 -0
  195. package/dist/core-web/src/lib/config.d.ts +10 -0
  196. package/dist/core-web/src/lib/config.d.ts.map +1 -0
  197. package/dist/core-web/src/lib/config.js +10 -0
  198. package/dist/core-web/src/lib/config.js.map +1 -0
  199. package/dist/core-web/src/lib/define-widget.d.ts +52 -0
  200. package/dist/core-web/src/lib/define-widget.d.ts.map +1 -0
  201. package/dist/core-web/src/lib/define-widget.js +14 -0
  202. package/dist/core-web/src/lib/define-widget.js.map +1 -0
  203. package/dist/core-web/src/lib/drag.d.ts +20 -0
  204. package/dist/core-web/src/lib/drag.d.ts.map +1 -0
  205. package/dist/core-web/src/lib/drag.js +33 -0
  206. package/dist/core-web/src/lib/drag.js.map +1 -0
  207. package/dist/core-web/src/lib/supabase.d.ts +2 -0
  208. package/dist/core-web/src/lib/supabase.d.ts.map +1 -0
  209. package/dist/core-web/src/lib/supabase.js +5 -0
  210. package/dist/core-web/src/lib/supabase.js.map +1 -0
  211. package/dist/core-web/src/lib/utils.d.ts +3 -0
  212. package/dist/core-web/src/lib/utils.d.ts.map +1 -0
  213. package/dist/core-web/src/lib/utils.js +6 -0
  214. package/dist/core-web/src/lib/utils.js.map +1 -0
  215. package/dist/core-web/src/lib/widgetCache.d.ts +18 -0
  216. package/dist/core-web/src/lib/widgetCache.d.ts.map +1 -0
  217. package/dist/core-web/src/lib/widgetCache.js +28 -0
  218. package/dist/core-web/src/lib/widgetCache.js.map +1 -0
  219. package/dist/mcp.d.ts +2 -0
  220. package/dist/mcp.d.ts.map +1 -0
  221. package/dist/mcp.js +2 -0
  222. package/dist/mcp.js.map +1 -0
  223. package/dist/shared.d.ts +2 -0
  224. package/dist/shared.d.ts.map +1 -0
  225. package/dist/shared.js +2 -0
  226. package/dist/shared.js.map +1 -0
  227. package/dist/web.d.ts +2 -0
  228. package/dist/web.d.ts.map +1 -0
  229. package/dist/web.js +2 -0
  230. package/dist/web.js.map +1 -0
  231. package/package.json +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMountEffect.js","sourceRoot":"","sources":["../../../../core-web/src/hooks/useMountEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAiC;IAC9D,uDAAuD;IACvD,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACvB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type Theme = 'light' | 'dark' | 'system';
2
+ export declare function useTheme(): {
3
+ theme: Theme;
4
+ setTheme: (t: Theme) => void;
5
+ };
6
+ //# sourceMappingURL=useTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.d.ts","sourceRoot":"","sources":["../../../../core-web/src/hooks/useTheme.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;AAwB/C,wBAAgB,QAAQ;;kBAGW,KAAK;EAOvC"}
@@ -0,0 +1,31 @@
1
+ import { useState, useCallback } from 'react';
2
+ function getStoredTheme() {
3
+ return localStorage.getItem('proto-theme') || 'dark';
4
+ }
5
+ function applyTheme(theme) {
6
+ const root = document.documentElement;
7
+ if (theme === 'system') {
8
+ const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
9
+ root.classList.toggle('dark', isDark);
10
+ }
11
+ else {
12
+ root.classList.toggle('dark', theme === 'dark');
13
+ }
14
+ }
15
+ // Apply on load (before React renders)
16
+ applyTheme(getStoredTheme());
17
+ // Listen for system theme changes
18
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
19
+ if (getStoredTheme() === 'system')
20
+ applyTheme('system');
21
+ });
22
+ export function useTheme() {
23
+ const [theme, setThemeState] = useState(getStoredTheme);
24
+ const setTheme = useCallback((t) => {
25
+ localStorage.setItem('proto-theme', t);
26
+ setThemeState(t);
27
+ applyTheme(t);
28
+ }, []);
29
+ return { theme, setTheme };
30
+ }
31
+ //# sourceMappingURL=useTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.js","sourceRoot":"","sources":["../../../../core-web/src/hooks/useTheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAI7C,SAAS,cAAc;IACrB,OAAQ,YAAY,CAAC,OAAO,CAAC,aAAa,CAAW,IAAI,MAAM,CAAA;AACjE,CAAC;AAED,SAAS,UAAU,CAAC,KAAY;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAA;IACrC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAA;QACxE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,CAAA;IACjD,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AAE5B,kCAAkC;AAClC,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;IAChF,IAAI,cAAc,EAAE,KAAK,QAAQ;QAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;AACzD,CAAC,CAAC,CAAA;AAEF,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAQ,cAAc,CAAC,CAAA;IAE9D,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAQ,EAAE,EAAE;QACxC,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;QACtC,aAAa,CAAC,CAAC,CAAC,CAAA;QAChB,UAAU,CAAC,CAAC,CAAC,CAAA;IACf,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @proto/core-web — framework library for proto SPAs.
3
+ *
4
+ * Apps import Shell, defineWidget, hooks, lib helpers, and shadcn primitives
5
+ * from this barrel. Nothing in here is Hermes-specific.
6
+ */
7
+ export { default as Shell, type CockpitDefinition } from './components/Shell';
8
+ export { ProtoApp, type ProtoAppProps } from './ProtoApp';
9
+ export { defineWidget, buildWidgetRegistry, type WidgetDefinition, type WidgetRegistry, type WidgetCategory, type WidgetSize, type ShellContext, } from './lib/define-widget';
10
+ export type { ActiveEntity, WidgetInstance, WidgetType } from './components/shell/types';
11
+ export { useAuth } from './hooks/useAuth';
12
+ export { useData } from './hooks/useData';
13
+ export { useMountEffect } from './hooks/useMountEffect';
14
+ export { useTheme, type Theme } from './hooks/useTheme';
15
+ export * from './lib/api';
16
+ export * from './lib/config';
17
+ export { supabase } from './lib/supabase';
18
+ export { cn } from './lib/utils';
19
+ export * from './lib/drag';
20
+ export * from './lib/widgetCache';
21
+ export { Generative } from './components/widgets/agent/Generative';
22
+ export { Avatar, AvatarFallback } from './components/ui/avatar';
23
+ export { Badge } from './components/ui/badge';
24
+ export { Button } from './components/ui/button';
25
+ export { Card, CardContent, CardFooter, CardHeader } from './components/ui/card';
26
+ export { InlineEdit } from './components/ui/inline-edit';
27
+ export { Input } from './components/ui/input';
28
+ export { ScrollArea } from './components/ui/scroll-area';
29
+ export { Separator } from './components/ui/separator';
30
+ export { ShellDialog } from './components/ui/shell-dialog';
31
+ export { Skeleton } from './components/ui/skeleton';
32
+ export { Textarea } from './components/ui/textarea';
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core-web/src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAGzD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAGxF,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAGvD,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AAGjC,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAA;AAGlE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @proto/core-web — framework library for proto SPAs.
3
+ *
4
+ * Apps import Shell, defineWidget, hooks, lib helpers, and shadcn primitives
5
+ * from this barrel. Nothing in here is Hermes-specific.
6
+ */
7
+ // Framework components
8
+ export { default as Shell } from './components/Shell';
9
+ export { ProtoApp } from './ProtoApp';
10
+ // Extension API
11
+ export { defineWidget, buildWidgetRegistry, } from './lib/define-widget';
12
+ // Hooks
13
+ export { useAuth } from './hooks/useAuth';
14
+ export { useData } from './hooks/useData';
15
+ export { useMountEffect } from './hooks/useMountEffect';
16
+ export { useTheme } from './hooks/useTheme';
17
+ // Lib
18
+ export * from './lib/api';
19
+ export * from './lib/config';
20
+ export { supabase } from './lib/supabase';
21
+ export { cn } from './lib/utils';
22
+ export * from './lib/drag';
23
+ export * from './lib/widgetCache';
24
+ // Agent runtime (render_ui)
25
+ export { Generative } from './components/widgets/agent/Generative';
26
+ // UI primitives (shadcn)
27
+ export { Avatar, AvatarFallback } from './components/ui/avatar';
28
+ export { Badge } from './components/ui/badge';
29
+ export { Button } from './components/ui/button';
30
+ export { Card, CardContent, CardFooter, CardHeader } from './components/ui/card';
31
+ export { InlineEdit } from './components/ui/inline-edit';
32
+ export { Input } from './components/ui/input';
33
+ export { ScrollArea } from './components/ui/scroll-area';
34
+ export { Separator } from './components/ui/separator';
35
+ export { ShellDialog } from './components/ui/shell-dialog';
36
+ export { Skeleton } from './components/ui/skeleton';
37
+ export { Textarea } from './components/ui/textarea';
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../core-web/src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uBAAuB;AACvB,OAAO,EAAE,OAAO,IAAI,KAAK,EAA0B,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,QAAQ,EAAsB,MAAM,YAAY,CAAA;AAEzD,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,mBAAmB,GAMpB,MAAM,qBAAqB,CAAA;AAG5B,QAAQ;AACR,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAA;AAEvD,MAAM;AACN,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AAEjC,4BAA4B;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAA;AAElE,yBAAyB;AACzB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,60 @@
1
+ export interface StreamEvent {
2
+ type: 'init' | 'text' | 'tool_use' | 'tool_result' | 'result' | 'error' | 'thinking' | 'auth' | 'pong' | 'shell_refresh';
3
+ text?: string;
4
+ tool?: string;
5
+ args?: Record<string, unknown>;
6
+ content?: string;
7
+ message?: string;
8
+ session_id?: string;
9
+ duration_ms?: number;
10
+ cost_usd?: number;
11
+ status?: string;
12
+ }
13
+ type EventHandler = (event: StreamEvent) => void;
14
+ declare class ProtoSocket {
15
+ private ws;
16
+ private authenticated;
17
+ private messageHandler;
18
+ private shellRefreshHandler;
19
+ private connectPromise;
20
+ private reconnectTimer;
21
+ private pingTimer;
22
+ private reconnectDelay;
23
+ private static readonly MAX_RECONNECT_DELAY;
24
+ connect(): Promise<void>;
25
+ onMessage(handler: EventHandler): void;
26
+ onShellRefresh(handler: () => void): void;
27
+ send(data: any): Promise<void>;
28
+ isConnected(): boolean;
29
+ disconnect(): void;
30
+ }
31
+ export declare const protoSocket: ProtoSocket;
32
+ /** @deprecated Use protoSocket instead. */
33
+ export declare const hermesSocket: ProtoSocket;
34
+ interface ChatParams {
35
+ company_id: string;
36
+ user_id: string;
37
+ message: string;
38
+ session_key?: string;
39
+ enabled_skills?: string[];
40
+ company_context?: string;
41
+ }
42
+ /**
43
+ * Send a chat message via WebSocket. Events come through protoSocket.onMessage().
44
+ */
45
+ export declare function sendChatWs(params: ChatParams): Promise<void>;
46
+ /**
47
+ * Reset the Claude CLI session for a company so the next message starts
48
+ * a fresh conversation (no --resume history).
49
+ */
50
+ export declare function resetSession(companyId: string, sessionKey?: string): Promise<void>;
51
+ /**
52
+ * Legacy: Send chat via REST (blocking).
53
+ */
54
+ export declare function sendChat(params: ChatParams): Promise<any>;
55
+ /**
56
+ * Legacy: SSE stream (kept for fallback).
57
+ */
58
+ export declare function streamChat(params: ChatParams, onEvent: (event: StreamEvent) => void): AbortController;
59
+ export {};
60
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../core-web/src/lib/api.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,eAAe,CAAA;IACxH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;AAEhD,cAAM,WAAW;IACf,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,mBAAmB,CAA4B;IACvD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;IAEnD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmFxB,SAAS,CAAC,OAAO,EAAE,YAAY;IAI/B,cAAc,CAAC,OAAO,EAAE,MAAM,IAAI;IAI5B,IAAI,CAAC,IAAI,EAAE,GAAG;IAKpB,WAAW,IAAI,OAAO;IAItB,UAAU;CAMX;AAGD,eAAO,MAAM,WAAW,aAAoB,CAAA;AAE5C,2CAA2C;AAC3C,eAAO,MAAM,YAAY,aAAc,CAAA;AAGvC,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,iBAElD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,SAAQ,iBAQvE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,UAAU,gBAQhD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GACpC,eAAe,CAsCjB"}
@@ -0,0 +1,204 @@
1
+ import { GATEWAY_URL, INTERNAL_SECRET as SECRET, WS_URL } from './config';
2
+ class ProtoSocket {
3
+ ws = null;
4
+ authenticated = false;
5
+ messageHandler = null;
6
+ shellRefreshHandler = null;
7
+ connectPromise = null;
8
+ reconnectTimer = null;
9
+ pingTimer = null;
10
+ reconnectDelay = 3000;
11
+ static MAX_RECONNECT_DELAY = 60000;
12
+ connect() {
13
+ if (this.ws?.readyState === WebSocket.OPEN && this.authenticated) {
14
+ return Promise.resolve();
15
+ }
16
+ if (this.connectPromise)
17
+ return this.connectPromise;
18
+ this.connectPromise = new Promise((resolve, reject) => {
19
+ this.ws = new WebSocket(WS_URL);
20
+ this.ws.onopen = () => {
21
+ // Authenticate
22
+ this.ws.send(JSON.stringify({ type: 'auth', secret: SECRET }));
23
+ };
24
+ this.ws.onmessage = (e) => {
25
+ try {
26
+ const event = JSON.parse(e.data);
27
+ if (event.type === 'auth' && event.status === 'ok') {
28
+ this.authenticated = true;
29
+ this.connectPromise = null;
30
+ this.reconnectDelay = 3000; // reset on successful auth
31
+ // Start keepalive ping every 25s to prevent idle disconnects
32
+ if (this.pingTimer)
33
+ clearInterval(this.pingTimer);
34
+ this.pingTimer = setInterval(() => {
35
+ if (this.ws?.readyState === WebSocket.OPEN) {
36
+ try {
37
+ this.ws.send(JSON.stringify({ type: 'ping' }));
38
+ }
39
+ catch { }
40
+ }
41
+ }, 25000);
42
+ resolve();
43
+ return;
44
+ }
45
+ if (event.type === 'shell_refresh') {
46
+ this.shellRefreshHandler?.();
47
+ return;
48
+ }
49
+ if (event.type === 'pong')
50
+ return;
51
+ this.messageHandler?.(event);
52
+ }
53
+ catch { }
54
+ };
55
+ this.ws.onclose = () => {
56
+ this.authenticated = false;
57
+ this.connectPromise = null;
58
+ if (this.pingTimer) {
59
+ clearInterval(this.pingTimer);
60
+ this.pingTimer = null;
61
+ }
62
+ // Synthesize an error event ONLY if a stream is in flight (handler set)
63
+ // so the chat turn can reset. Fire only once then clear.
64
+ if (this.messageHandler) {
65
+ try {
66
+ this.messageHandler({ type: 'error', message: 'Conexion perdida. Reintenta.' });
67
+ }
68
+ catch { }
69
+ this.messageHandler = null;
70
+ }
71
+ // Auto-reconnect with exponential backoff (3s → 6s → 12s → ... → 60s max)
72
+ if (!this.reconnectTimer) {
73
+ this.reconnectTimer = setTimeout(() => {
74
+ this.reconnectTimer = null;
75
+ this.connect().catch(() => { });
76
+ }, this.reconnectDelay);
77
+ this.reconnectDelay = Math.min(this.reconnectDelay * 2, ProtoSocket.MAX_RECONNECT_DELAY);
78
+ }
79
+ };
80
+ this.ws.onerror = () => {
81
+ this.connectPromise = null;
82
+ try {
83
+ this.messageHandler?.({ type: 'error', message: 'Error de conexion WebSocket' });
84
+ }
85
+ catch { }
86
+ reject(new Error('WebSocket connection failed'));
87
+ };
88
+ // Timeout
89
+ setTimeout(() => {
90
+ if (!this.authenticated) {
91
+ this.connectPromise = null;
92
+ reject(new Error('WebSocket auth timeout'));
93
+ }
94
+ }, 10000);
95
+ });
96
+ return this.connectPromise;
97
+ }
98
+ onMessage(handler) {
99
+ this.messageHandler = handler;
100
+ }
101
+ onShellRefresh(handler) {
102
+ this.shellRefreshHandler = handler;
103
+ }
104
+ async send(data) {
105
+ await this.connect();
106
+ this.ws?.send(JSON.stringify(data));
107
+ }
108
+ isConnected() {
109
+ return this.ws?.readyState === WebSocket.OPEN && this.authenticated;
110
+ }
111
+ disconnect() {
112
+ if (this.reconnectTimer)
113
+ clearTimeout(this.reconnectTimer);
114
+ this.ws?.close();
115
+ this.ws = null;
116
+ this.authenticated = false;
117
+ }
118
+ }
119
+ // Singleton
120
+ export const protoSocket = new ProtoSocket();
121
+ /** @deprecated Use protoSocket instead. */
122
+ export const hermesSocket = protoSocket;
123
+ /**
124
+ * Send a chat message via WebSocket. Events come through protoSocket.onMessage().
125
+ */
126
+ export async function sendChatWs(params) {
127
+ await protoSocket.send({ type: 'chat', channel: 'web', ...params });
128
+ }
129
+ /**
130
+ * Reset the Claude CLI session for a company so the next message starts
131
+ * a fresh conversation (no --resume history).
132
+ */
133
+ export async function resetSession(companyId, sessionKey = 'web') {
134
+ try {
135
+ await fetch(`${GATEWAY_URL}/reset`, {
136
+ method: 'POST',
137
+ headers: { 'Content-Type': 'application/json', 'X-Internal-Secret': SECRET },
138
+ body: JSON.stringify({ company_id: companyId, session_key: sessionKey }),
139
+ });
140
+ }
141
+ catch { }
142
+ }
143
+ /**
144
+ * Legacy: Send chat via REST (blocking).
145
+ */
146
+ export async function sendChat(params) {
147
+ const res = await fetch(`${GATEWAY_URL}/chat`, {
148
+ method: 'POST',
149
+ headers: { 'Content-Type': 'application/json', 'X-Internal-Secret': SECRET },
150
+ body: JSON.stringify({ channel: 'web', ...params }),
151
+ });
152
+ if (!res.ok)
153
+ throw new Error(`Error ${res.status}`);
154
+ return res.json();
155
+ }
156
+ /**
157
+ * Legacy: SSE stream (kept for fallback).
158
+ */
159
+ export function streamChat(params, onEvent) {
160
+ const controller = new AbortController();
161
+ fetch(`${GATEWAY_URL}/chat/stream`, {
162
+ method: 'POST',
163
+ headers: { 'Content-Type': 'application/json', 'X-Internal-Secret': SECRET },
164
+ body: JSON.stringify({ channel: 'web', ...params }),
165
+ signal: controller.signal,
166
+ }).then(async (res) => {
167
+ if (!res.ok) {
168
+ onEvent({ type: 'error', message: `Error ${res.status}` });
169
+ return;
170
+ }
171
+ const reader = res.body?.getReader();
172
+ if (!reader)
173
+ return;
174
+ const decoder = new TextDecoder();
175
+ let buffer = '';
176
+ let gotResult = false;
177
+ while (true) {
178
+ const { done, value } = await reader.read();
179
+ if (done)
180
+ break;
181
+ buffer += decoder.decode(value, { stream: true });
182
+ const lines = buffer.split('\n');
183
+ buffer = lines.pop() || '';
184
+ for (const line of lines) {
185
+ if (line.startsWith('data: ')) {
186
+ try {
187
+ const event = JSON.parse(line.slice(6));
188
+ if (event.type === 'result' || event.type === 'error')
189
+ gotResult = true;
190
+ onEvent(event);
191
+ }
192
+ catch { }
193
+ }
194
+ }
195
+ }
196
+ if (!gotResult)
197
+ onEvent({ type: 'result', text: '' });
198
+ }).catch((err) => {
199
+ if (err.name !== 'AbortError')
200
+ onEvent({ type: 'error', message: err.message });
201
+ });
202
+ return controller;
203
+ }
204
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../core-web/src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Centralized frontend config. Every module that needs the gateway URL or
3
+ * the internal secret should import from here — do NOT read
4
+ * `import.meta.env.VITE_*` directly, so the default values stay in sync.
5
+ */
6
+ export declare const GATEWAY_URL: string;
7
+ export declare const INTERNAL_SECRET: string;
8
+ /** WebSocket endpoint, derived from GATEWAY_URL. */
9
+ export declare const WS_URL: string;
10
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../core-web/src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,WAAW,EAAE,MAC+C,CAAA;AAEzE,eAAO,MAAM,eAAe,EAAE,MAC0B,CAAA;AAExD,oDAAoD;AACpD,eAAO,MAAM,MAAM,EAAE,MAAmD,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Centralized frontend config. Every module that needs the gateway URL or
3
+ * the internal secret should import from here — do NOT read
4
+ * `import.meta.env.VITE_*` directly, so the default values stay in sync.
5
+ */
6
+ export const GATEWAY_URL = import.meta.env.VITE_GATEWAY_URL || 'http://localhost:8092';
7
+ export const INTERNAL_SECRET = import.meta.env.VITE_INTERNAL_SECRET || '';
8
+ /** WebSocket endpoint, derived from GATEWAY_URL. */
9
+ export const WS_URL = GATEWAY_URL.replace(/^http/, 'ws') + '/ws';
10
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../core-web/src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,WAAW,GACrB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAA2B,IAAI,uBAAuB,CAAA;AAEzE,MAAM,CAAC,MAAM,eAAe,GACzB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,oBAA+B,IAAI,EAAE,CAAA;AAExD,oDAAoD;AACpD,MAAM,CAAC,MAAM,MAAM,GAAW,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,KAAK,CAAA"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * defineWidget — declarative shell widget definition.
3
+ *
4
+ * App code declares widgets as data instead of hardcoding a switch in Shell.
5
+ * Each widget provides a `render(instance, ctx)` function that returns the
6
+ * React node, pulling whatever it needs from the shared ShellContext.
7
+ *
8
+ * The `ShellContext` interface below contains the framework-level fields every
9
+ * widget receives. Apps extend it via TypeScript module augmentation to add
10
+ * their own fields (cart state, app-specific callbacks, etc).
11
+ *
12
+ * Example augmentation in an app:
13
+ *
14
+ * declare module 'proto/web' {
15
+ * interface ShellContext {
16
+ * cartItems: CartItem[]
17
+ * addToCart: (item: CartItem) => void
18
+ * }
19
+ * }
20
+ */
21
+ import type { ReactNode } from 'react';
22
+ import type { ActiveEntity, WidgetInstance } from '../components/shell/types';
23
+ export interface ShellContext {
24
+ companyId: string;
25
+ refreshKey: number;
26
+ activeEntity: ActiveEntity | null;
27
+ onSendToChat: (message: string) => void;
28
+ onActivateEntity?: (e: ActiveEntity) => void;
29
+ onDeactivateEntity?: () => void;
30
+ onCloseTab?: (e: ActiveEntity) => void;
31
+ /** Force widgets to re-fetch without a full shell reload. */
32
+ triggerLocalRefresh: () => void;
33
+ }
34
+ export type WidgetCategory = 'general' | 'cockpit';
35
+ export interface WidgetSize {
36
+ w: number;
37
+ h: number;
38
+ minW: number;
39
+ minH: number;
40
+ }
41
+ export interface WidgetDefinition {
42
+ type: string;
43
+ title: string;
44
+ icon?: string;
45
+ category: WidgetCategory;
46
+ defaultSize?: WidgetSize;
47
+ render: (instance: WidgetInstance, ctx: ShellContext) => ReactNode;
48
+ }
49
+ export declare function defineWidget(def: WidgetDefinition): WidgetDefinition;
50
+ export type WidgetRegistry = Map<string, WidgetDefinition>;
51
+ export declare function buildWidgetRegistry(defs: readonly WidgetDefinition[]): WidgetRegistry;
52
+ //# sourceMappingURL=define-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-widget.d.ts","sourceRoot":"","sources":["../../../../core-web/src/lib/define-widget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE7E,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;IAEjC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;IAC5C,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC/B,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;IAEtC,6DAA6D;IAC7D,mBAAmB,EAAE,MAAM,IAAI,CAAA;CAChC;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAA;AAElD,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,cAAc,CAAA;IACxB,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,MAAM,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,KAAK,SAAS,CAAA;CACnE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,gBAAgB,CAEpE;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;AAE1D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAAG,cAAc,CASrF"}
@@ -0,0 +1,14 @@
1
+ export function defineWidget(def) {
2
+ return def;
3
+ }
4
+ export function buildWidgetRegistry(defs) {
5
+ const map = new Map();
6
+ for (const def of defs) {
7
+ if (map.has(def.type)) {
8
+ console.warn(`[defineWidget] duplicate widget type: ${def.type}`);
9
+ }
10
+ map.set(def.type, def);
11
+ }
12
+ return map;
13
+ }
14
+ //# sourceMappingURL=define-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-widget.js","sourceRoot":"","sources":["../../../../core-web/src/lib/define-widget.ts"],"names":[],"mappings":"AAuDA,MAAM,UAAU,YAAY,CAAC,GAAqB;IAChD,OAAO,GAAG,CAAA;AACZ,CAAC;AAID,MAAM,UAAU,mBAAmB,CAAC,IAAiC;IACnE,MAAM,GAAG,GAAmB,IAAI,GAAG,EAAE,CAAA;IACrC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface DragContext {
2
+ type: string;
3
+ id: string;
4
+ label: string;
5
+ meta?: string;
6
+ agentContext: {
7
+ entity: string;
8
+ id: string;
9
+ summary: Record<string, any>;
10
+ };
11
+ }
12
+ export declare function setDragData(e: React.DragEvent, ctx: DragContext): void;
13
+ export declare function getDragData(e: React.DragEvent): DragContext | null;
14
+ export declare function hasDragData(e: React.DragEvent): boolean;
15
+ /**
16
+ * Build structured context for the agent.
17
+ * Injected as context prefix, not as user message text.
18
+ */
19
+ export declare function buildAgentPrompt(ctx: DragContext): string;
20
+ //# sourceMappingURL=drag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag.d.ts","sourceRoot":"","sources":["../../../../core-web/src/lib/drag.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,EAAE,EAAE,MAAM,CAAA;QACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAC7B,CAAA;CACF;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,QAG/D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,WAAW,GAAG,IAAI,CAKlE;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAYzD"}
@@ -0,0 +1,33 @@
1
+ export function setDragData(e, ctx) {
2
+ e.dataTransfer.setData('application/proto', JSON.stringify(ctx));
3
+ e.dataTransfer.effectAllowed = 'copy';
4
+ }
5
+ export function getDragData(e) {
6
+ try {
7
+ const raw = e.dataTransfer.getData('application/proto');
8
+ return raw ? JSON.parse(raw) : null;
9
+ }
10
+ catch {
11
+ return null;
12
+ }
13
+ }
14
+ export function hasDragData(e) {
15
+ return e.dataTransfer.types.includes('application/proto');
16
+ }
17
+ /**
18
+ * Build structured context for the agent.
19
+ * Injected as context prefix, not as user message text.
20
+ */
21
+ export function buildAgentPrompt(ctx) {
22
+ const { entity, id, summary } = ctx.agentContext;
23
+ const lines = Object.entries(summary)
24
+ .filter(([_, v]) => v != null && v !== '')
25
+ .map(([k, v]) => ` ${k}: ${typeof v === 'object' ? JSON.stringify(v) : v}`);
26
+ return [
27
+ `[CONTEXTO: El usuario selecciono un ${entity}]`,
28
+ `ID: ${id}`,
29
+ ...lines,
30
+ `[Consulta datos actualizados con los tools MCP si necesitas mas detalle. No repitas info que ya tienes.]`,
31
+ ].join('\n');
32
+ }
33
+ //# sourceMappingURL=drag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag.js","sourceRoot":"","sources":["../../../../core-web/src/lib/drag.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,WAAW,CAAC,CAAkB,EAAE,GAAgB;IAC9D,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IAChE,CAAC,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAkB;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QACvD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAA;IAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAkB;IAC5C,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAA;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAgB;IAC/C,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,YAAY,CAAA;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;SACzC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAE9E,OAAO;QACL,uCAAuC,MAAM,GAAG;QAChD,OAAO,EAAE,EAAE;QACX,GAAG,KAAK;QACR,0GAA0G;KAC3G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const supabase: import("@supabase/supabase-js").SupabaseClient<any, "public", "public", any, any>;
2
+ //# sourceMappingURL=supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../../../core-web/src/lib/supabase.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ,mFAA6B,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { createClient } from '@supabase/supabase-js';
2
+ const url = import.meta.env.VITE_SUPABASE_URL;
3
+ const anonKey = import.meta.env.VITE_SUPABASE_ANON_KEY;
4
+ export const supabase = createClient(url, anonKey);
5
+ //# sourceMappingURL=supabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../../../core-web/src/lib/supabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,iBAA2B,CAAA;AACvD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAgC,CAAA;AAEhE,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { type ClassValue } from "clsx";
2
+ export declare function cn(...inputs: ClassValue[]): string;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../core-web/src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAG5C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
@@ -0,0 +1,6 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
6
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../core-web/src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAC9B,CAAC"}