wadi 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 (294) hide show
  1. package/.agent/workflows/auto_sync.md +19 -0
  2. package/.agent/workflows/kivo_pipeline.md +27 -0
  3. package/.devcontainer/devcontainer.json +27 -0
  4. package/.github/workflows/kivo-cicd.yml +45 -0
  5. package/.github/workflows/monorepo-ci.yml +51 -0
  6. package/.github/workflows/wadi-ci.yml +38 -0
  7. package/.husky/pre-commit +2 -0
  8. package/.prettierignore +12 -0
  9. package/.prettierrc +9 -0
  10. package/.vscode/settings.json +19 -0
  11. package/CHANGELOG.md +56 -0
  12. package/CODE_OF_CONDUCT.md +43 -0
  13. package/CONTRIBUTING.md +42 -0
  14. package/DEPLOY_GUIDE.md +143 -0
  15. package/GO_LIVE_CHECKLIST.md +41 -0
  16. package/GO_LIVE_COMPLETE_REPORT.md +58 -0
  17. package/GO_LIVE_VALIDATION.md +39 -0
  18. package/LEGAL.md +38 -0
  19. package/MANIFESTO.md +40 -0
  20. package/MANUAL.md +82 -0
  21. package/OPS_PLAN.md +90 -0
  22. package/README.md +126 -0
  23. package/RELEASE_NOTES.md +51 -0
  24. package/ROADMAP.md +51 -0
  25. package/api_listado.txt +2197 -0
  26. package/apps/api/WADI_PROTOCOL.md +52 -0
  27. package/apps/api/debug-brain.js +11 -0
  28. package/apps/api/package.json +21 -0
  29. package/apps/api/src/core/analisis.js +17 -0
  30. package/apps/api/src/core/errors.js +31 -0
  31. package/apps/api/src/core/logger.js +32 -0
  32. package/apps/api/src/core/prompt-kivo.js +62 -0
  33. package/apps/api/src/index.js +212 -0
  34. package/apps/api/src/layers/human_pattern/composeResponse.js +35 -0
  35. package/apps/api/src/layers/human_pattern/detectPattern.js +39 -0
  36. package/apps/api/src/layers/human_pattern/heuristics.js +28 -0
  37. package/apps/api/src/layers/human_pattern/index.js +28 -0
  38. package/apps/api/src/layers/human_pattern/socialMemory.js +35 -0
  39. package/apps/api/src/middleware/errorHandler.js +24 -0
  40. package/apps/api/src/middleware/rateLimiter.js +38 -0
  41. package/apps/api/src/middleware/requestLogger.js +31 -0
  42. package/apps/api/src/middleware/upload.js +21 -0
  43. package/apps/api/src/middleware/validation.js +70 -0
  44. package/apps/api/src/modules/data.js +25 -0
  45. package/apps/api/src/modules/marketing.js +54 -0
  46. package/apps/api/src/modules/projects.js +40 -0
  47. package/apps/api/src/openai.js +16 -0
  48. package/apps/api/src/preferences/index.js +20 -0
  49. package/apps/api/src/register_user.js +22 -0
  50. package/apps/api/src/routes/kivo.js +58 -0
  51. package/apps/api/src/routes/monitoring.js +55 -0
  52. package/apps/api/src/routes.js +656 -0
  53. package/apps/api/src/supabase.js +17 -0
  54. package/apps/api/src/tools/index.js +57 -0
  55. package/apps/api/src/wadi-brain.js +171 -0
  56. package/apps/api/supabase/migrations/20251218_audit_logs.sql +27 -0
  57. package/apps/api/supabase/migrations/v2-chat-persistence.sql +83 -0
  58. package/apps/api/supabase/migrations/v3-cascade-delete.sql +11 -0
  59. package/apps/api/supabase/migrations/v3-security-fix.sql +90 -0
  60. package/apps/api/supabase/migrations/v3-storage.sql +36 -0
  61. package/apps/api/supabase/migrations/v4-gamification.sql +83 -0
  62. package/apps/api/supabase/migrations/v5-smoke-index.sql +6 -0
  63. package/apps/api/supabase/migrations/v6-schema-integrity-fix.sql +98 -0
  64. package/apps/api/supabase/migrations/v7-performance-indexes.sql +5 -0
  65. package/apps/api/supabase/migrations/v7-security-hardening.sql +132 -0
  66. package/apps/api/supabase/migrations/v8-security-hardening.sql +79 -0
  67. package/apps/api/test_human_pattern.js +30 -0
  68. package/apps/api/test_human_pattern_vague.js +30 -0
  69. package/apps/api/test_output.txt +76 -0
  70. package/apps/api/test_vague.js +30 -0
  71. package/apps/api/test_vague_block.js +30 -0
  72. package/apps/api/test_wadi.js +31 -0
  73. package/apps/api/tsconfig.json +13 -0
  74. package/apps/frontend/.env.local +3 -0
  75. package/apps/frontend/README.md +73 -0
  76. package/apps/frontend/eslint.config.js +27 -0
  77. package/apps/frontend/index.html +49 -0
  78. package/apps/frontend/package.json +41 -0
  79. package/apps/frontend/postcss.config.cjs +6 -0
  80. package/apps/frontend/public/cursors/wadi-neutral.svg +1 -0
  81. package/apps/frontend/public/cursors/wadi-select.svg +1 -0
  82. package/apps/frontend/public/icon-192.svg +1 -0
  83. package/apps/frontend/public/icon-512.svg +1 -0
  84. package/apps/frontend/public/manifest.webmanifest +23 -0
  85. package/apps/frontend/public/sw.js +57 -0
  86. package/apps/frontend/public/vite.svg +1 -0
  87. package/apps/frontend/public/wadi.svg +5 -0
  88. package/apps/frontend/src/assets/react.svg +1 -0
  89. package/apps/frontend/src/components/AuthLoader.tsx +50 -0
  90. package/apps/frontend/src/components/ChatInput.tsx +272 -0
  91. package/apps/frontend/src/components/ChatInterface.tsx +202 -0
  92. package/apps/frontend/src/components/ErrorBoundary.tsx +52 -0
  93. package/apps/frontend/src/components/InputArea.tsx +201 -0
  94. package/apps/frontend/src/components/Layout.tsx +73 -0
  95. package/apps/frontend/src/components/MessageBubble.tsx +66 -0
  96. package/apps/frontend/src/components/OnboardingModal.tsx +108 -0
  97. package/apps/frontend/src/components/SettingsModal.tsx +187 -0
  98. package/apps/frontend/src/components/Sidebar.tsx +171 -0
  99. package/apps/frontend/src/components/WadiOnboarding.tsx +71 -0
  100. package/apps/frontend/src/components/auditor/AuditReport.tsx +166 -0
  101. package/apps/frontend/src/components/auditor/AuditorHeader.tsx +34 -0
  102. package/apps/frontend/src/components/auditor/ContextPanel.tsx +138 -0
  103. package/apps/frontend/src/components/auditor/DataDeconstructor.tsx +85 -0
  104. package/apps/frontend/src/components/auditor/DecisionWall.tsx +65 -0
  105. package/apps/frontend/src/components/auditor/Dropzone.tsx +137 -0
  106. package/apps/frontend/src/components/common/Button.tsx +97 -0
  107. package/apps/frontend/src/components/common/Card.tsx +43 -0
  108. package/apps/frontend/src/components/common/Input.tsx +73 -0
  109. package/apps/frontend/src/components/common/Modal.tsx +53 -0
  110. package/apps/frontend/src/components/ui/Button.tsx +68 -0
  111. package/apps/frontend/src/components/ui/Card.tsx +86 -0
  112. package/apps/frontend/src/components/ui/Input.tsx +28 -0
  113. package/apps/frontend/src/components/ui/LogItem.tsx +64 -0
  114. package/apps/frontend/src/components/ui/MondayButton.tsx +40 -0
  115. package/apps/frontend/src/components/ui/MondayCard.tsx +24 -0
  116. package/apps/frontend/src/components/ui/Scouter.tsx +208 -0
  117. package/apps/frontend/src/components/ui/TerminalInput.tsx +202 -0
  118. package/apps/frontend/src/components/ui/Tooltip.tsx +67 -0
  119. package/apps/frontend/src/config/chatShortcuts.ts +20 -0
  120. package/apps/frontend/src/config/supabase.ts +6 -0
  121. package/apps/frontend/src/final_status.txt +3 -0
  122. package/apps/frontend/src/hooks/useScouter.ts +28 -0
  123. package/apps/frontend/src/hooks/useStoreHydration.ts +24 -0
  124. package/apps/frontend/src/improvement_status.txt +5 -0
  125. package/apps/frontend/src/index.css +88 -0
  126. package/apps/frontend/src/main.tsx +62 -0
  127. package/apps/frontend/src/monday_status.txt +7 -0
  128. package/apps/frontend/src/pages/ChatPage.tsx +201 -0
  129. package/apps/frontend/src/pages/DashboardPage.tsx +375 -0
  130. package/apps/frontend/src/pages/IntroWadi.tsx +114 -0
  131. package/apps/frontend/src/pages/LandingPage.tsx +103 -0
  132. package/apps/frontend/src/pages/Login.tsx +190 -0
  133. package/apps/frontend/src/pages/PrivacyPage.tsx +213 -0
  134. package/apps/frontend/src/pages/ProjectDetail.tsx +80 -0
  135. package/apps/frontend/src/pages/Projects.tsx +247 -0
  136. package/apps/frontend/src/pages/TermsPage.tsx +202 -0
  137. package/apps/frontend/src/router.tsx +83 -0
  138. package/apps/frontend/src/store/authStore.ts +152 -0
  139. package/apps/frontend/src/store/chatStore.ts +837 -0
  140. package/apps/frontend/src/store/documentStore.ts +89 -0
  141. package/apps/frontend/src/store/projectsStore.ts +111 -0
  142. package/apps/frontend/src/store/runsStore.ts +98 -0
  143. package/apps/frontend/src/utils/api.ts +34 -0
  144. package/apps/frontend/src/vite-env.d.ts +7 -0
  145. package/apps/frontend/tailwind.config.cjs +32 -0
  146. package/apps/frontend/tsconfig.app.json +27 -0
  147. package/apps/frontend/tsconfig.json +7 -0
  148. package/apps/frontend/tsconfig.node.json +26 -0
  149. package/apps/frontend/vite.config.ts +25 -0
  150. package/apps/kivo/.firebase/hosting.d3d3.cache +11 -0
  151. package/apps/kivo/.firebaserc +5 -0
  152. package/apps/kivo/BRANDING_GUIDE.md +71 -0
  153. package/apps/kivo/DEPLOYMENT_READY.md +46 -0
  154. package/apps/kivo/DEPLOY_URL.md +12 -0
  155. package/apps/kivo/IMPLEMENTATION_REPORT.md +35 -0
  156. package/apps/kivo/IMPLEMENTATION_REPORT_FINAL.md +49 -0
  157. package/apps/kivo/PLAN_MOBILE_2.0.md +44 -0
  158. package/apps/kivo/PWA_VERIFICATION_GUIDE.md +77 -0
  159. package/apps/kivo/README.md +28 -0
  160. package/apps/kivo/REBUILD_REPORT.md +34 -0
  161. package/apps/kivo/UPGRADE_REPORT.md +35 -0
  162. package/apps/kivo/android/app/build.gradle +54 -0
  163. package/apps/kivo/android/app/capacitor.build.gradle +19 -0
  164. package/apps/kivo/android/app/proguard-rules.pro +21 -0
  165. package/apps/kivo/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
  166. package/apps/kivo/android/app/src/main/AndroidManifest.xml +35 -0
  167. package/apps/kivo/android/app/src/main/java/com/kivo/app/MainActivity.java +5 -0
  168. package/apps/kivo/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
  169. package/apps/kivo/android/app/src/main/res/drawable/splash.png +0 -0
  170. package/apps/kivo/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
  171. package/apps/kivo/android/app/src/main/res/drawable-land-ldpi/splash.png +0 -0
  172. package/apps/kivo/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
  173. package/apps/kivo/android/app/src/main/res/drawable-land-night-hdpi/splash.png +0 -0
  174. package/apps/kivo/android/app/src/main/res/drawable-land-night-ldpi/splash.png +0 -0
  175. package/apps/kivo/android/app/src/main/res/drawable-land-night-mdpi/splash.png +0 -0
  176. package/apps/kivo/android/app/src/main/res/drawable-land-night-xhdpi/splash.png +0 -0
  177. package/apps/kivo/android/app/src/main/res/drawable-land-night-xxhdpi/splash.png +0 -0
  178. package/apps/kivo/android/app/src/main/res/drawable-land-night-xxxhdpi/splash.png +0 -0
  179. package/apps/kivo/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
  180. package/apps/kivo/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
  181. package/apps/kivo/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
  182. package/apps/kivo/android/app/src/main/res/drawable-night/splash.png +0 -0
  183. package/apps/kivo/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
  184. package/apps/kivo/android/app/src/main/res/drawable-port-ldpi/splash.png +0 -0
  185. package/apps/kivo/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
  186. package/apps/kivo/android/app/src/main/res/drawable-port-night-hdpi/splash.png +0 -0
  187. package/apps/kivo/android/app/src/main/res/drawable-port-night-ldpi/splash.png +0 -0
  188. package/apps/kivo/android/app/src/main/res/drawable-port-night-mdpi/splash.png +0 -0
  189. package/apps/kivo/android/app/src/main/res/drawable-port-night-xhdpi/splash.png +0 -0
  190. package/apps/kivo/android/app/src/main/res/drawable-port-night-xxhdpi/splash.png +0 -0
  191. package/apps/kivo/android/app/src/main/res/drawable-port-night-xxxhdpi/splash.png +0 -0
  192. package/apps/kivo/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
  193. package/apps/kivo/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
  194. package/apps/kivo/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
  195. package/apps/kivo/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
  196. package/apps/kivo/android/app/src/main/res/layout/activity_main.xml +12 -0
  197. package/apps/kivo/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +9 -0
  198. package/apps/kivo/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +9 -0
  199. package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  200. package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png +0 -0
  201. package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  202. package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  203. package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher.png +0 -0
  204. package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher_background.png +0 -0
  205. package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher_foreground.png +0 -0
  206. package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png +0 -0
  207. package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  208. package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png +0 -0
  209. package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  210. package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  211. package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  212. package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png +0 -0
  213. package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  214. package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  215. package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  216. package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png +0 -0
  217. package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  218. package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  219. package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  220. package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png +0 -0
  221. package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  222. package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  223. package/apps/kivo/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
  224. package/apps/kivo/android/app/src/main/res/values/strings.xml +7 -0
  225. package/apps/kivo/android/app/src/main/res/values/styles.xml +22 -0
  226. package/apps/kivo/android/app/src/main/res/xml/file_paths.xml +5 -0
  227. package/apps/kivo/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
  228. package/apps/kivo/android/build.gradle +29 -0
  229. package/apps/kivo/android/capacitor.settings.gradle +3 -0
  230. package/apps/kivo/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  231. package/apps/kivo/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  232. package/apps/kivo/android/gradle.properties +22 -0
  233. package/apps/kivo/android/gradlew +252 -0
  234. package/apps/kivo/android/gradlew.bat +94 -0
  235. package/apps/kivo/android/settings.gradle +5 -0
  236. package/apps/kivo/android/variables.gradle +16 -0
  237. package/apps/kivo/assets/icon.png +0 -0
  238. package/apps/kivo/assets/splash.png +0 -0
  239. package/apps/kivo/capacitor.config.json +16 -0
  240. package/apps/kivo/firebase.json +6 -0
  241. package/apps/kivo/jest.config.js +4 -0
  242. package/apps/kivo/package.json +26 -0
  243. package/apps/kivo/tests_disabled/logic.test.js +34 -0
  244. package/apps/kivo/www/assets/icon-192.png +0 -0
  245. package/apps/kivo/www/assets/icon-512.png +0 -0
  246. package/apps/kivo/www/assets/kivo-icon.png +0 -0
  247. package/apps/kivo/www/assets/pop.mp3 +0 -0
  248. package/apps/kivo/www/favicon.ico +0 -0
  249. package/apps/kivo/www/firebase-config.js +75 -0
  250. package/apps/kivo/www/index.html +38 -0
  251. package/apps/kivo/www/manifest.json +29 -0
  252. package/apps/kivo/www/script.js +72 -0
  253. package/apps/kivo/www/style.css +82 -0
  254. package/apps/kivo/www/sw.js +46 -0
  255. package/apps/kivo-brain-api/.env.example +2 -0
  256. package/apps/kivo-brain-api/KIVO_BACKEND_SETUP.md +27 -0
  257. package/apps/kivo-brain-api/controllers/kivoController.js +31 -0
  258. package/apps/kivo-brain-api/index.js +24 -0
  259. package/apps/kivo-brain-api/package.json +17 -0
  260. package/apps/kivo-brain-api/routes/message.js +8 -0
  261. package/apps/kivo-brain-api/services/openaiService.js +64 -0
  262. package/apps/tests/wadi-tests.js +155 -0
  263. package/apps/wadi-brain/docs/README_REMOVE_OPTIONS.md +26 -0
  264. package/cli/commands/deploy.js +10 -0
  265. package/cli/commands/docs.js +16 -0
  266. package/cli/commands/explain.js +29 -0
  267. package/cli/commands/lint.js +14 -0
  268. package/cli/index.js +26 -0
  269. package/cli/package.json +12 -0
  270. package/docs/CNAME +1 -0
  271. package/docs/README.md +38 -0
  272. package/docs/USO.md +30 -0
  273. package/docs/index.html +46 -0
  274. package/eslint.config.js +101 -0
  275. package/final_validation.json +27 -0
  276. package/frontend_listado.txt +33387 -0
  277. package/listado.txt +12591 -0
  278. package/package.json +46 -0
  279. package/packages/logger/index.js +43 -0
  280. package/packages/logger/package.json +19 -0
  281. package/packages/logger/test-logger.js +7 -0
  282. package/packages_listado.txt +801 -0
  283. package/pnpm-workspace.yaml +6 -0
  284. package/reseteador_existencial.ps1 +40 -0
  285. package/scripts/bump-version.js +26 -0
  286. package/scripts/env.ps1 +13 -0
  287. package/scripts/setup_android.ps1 +25 -0
  288. package/scripts/setup_virtual_env.ps1 +77 -0
  289. package/scripts/smoke-test.js +84 -0
  290. package/scripts/trigger_render_deploy.ps1 +3 -0
  291. package/scripts/validate-release.js +34 -0
  292. package/temp_check.js +57 -0
  293. package/tsconfig.json +5 -0
  294. package/validation_report.json +27 -0
@@ -0,0 +1,155 @@
1
+ // apps/tests/wadi-tests.js
2
+
3
+ const assert = require("assert");
4
+
5
+ // 🧠 Simula la respuesta que devuelve tu brain (Con WADI v. "Tensión Estructurante")
6
+ function mockWadiResponse(userInput) {
7
+ if (userInput.includes("ideas") && userInput.includes("medio trabado")) {
8
+ return `Esto es una bolsa de gatos. Hay intención, pero no hay dirección.
9
+
10
+ Elegí uno:
11
+ 1. ¿Qué idea vale la pena profundizar?
12
+ 2. ¿Cómo empezar a trabajar en alguna de tus ideas actuales?
13
+
14
+ Si no, esto es ruido.`;
15
+ }
16
+
17
+ if (
18
+ userInput.includes("feature") &&
19
+ userInput.includes("retención") &&
20
+ userInput.includes("inversión")
21
+ ) {
22
+ return `Esto es un buffet libre. Tenés tres platos mezclados.
23
+
24
+ Te ordeno dos caminos:
25
+ 1. Priorizás producto (feature vs retención)
26
+ 2. Priorizás negocio (levantar ronda)
27
+
28
+ Elegí uno y cortá el resto.`;
29
+ }
30
+
31
+ if (
32
+ userInput.includes("más adelante") ||
33
+ userInput.includes("no sé todavía")
34
+ ) {
35
+ return `Eso es una excusa con delay.
36
+
37
+ Cuando tengas algo real, sigo.
38
+ Mientras tanto, no hay nada que pensar.`;
39
+ }
40
+
41
+ if (userInput.includes("onboarding o retención")) {
42
+ return `Bien. Hay una decisión concreta.
43
+
44
+ Dos criterios:
45
+ 1. Onboarding = adquisición más rápida.
46
+ 2. Retención = mayor valor a largo plazo.
47
+
48
+ ¿Querés escalar rápido o construir base sólida?`;
49
+ }
50
+
51
+ // Nuevo test: Charla con estructura (miedo a elegir)
52
+ if (
53
+ userInput.includes("muchas ideas") &&
54
+ userInput.includes("miedo elegir")
55
+ ) {
56
+ return `El miedo es falta de datos o falta de coraje. Hay una tensión real acá.
57
+
58
+ Puedo acompañar el análisis, pero necesitás elegir un eje para empezar a cortar.
59
+
60
+ ¿Cuál duele menos soltar hoy?`;
61
+ }
62
+
63
+ // Test negativo para simpatía
64
+ if (userInput.includes("ayudar") || userInput.includes("Hola")) {
65
+ return `WADI no está para ayudar. Está para pensar.
66
+ ¿Qué querés resolver? Si es vago, no hay ayuda posible.`;
67
+ }
68
+
69
+ return `ERROR: Input no reconocido por mock.`;
70
+ }
71
+
72
+ // ✅ Tests
73
+
74
+ function runTests() {
75
+ console.log("\n🧪 Ejecutando tests de personalidad de WADI...\n");
76
+
77
+ const tests = [
78
+ {
79
+ name: "Test 1 – Input vago (bolsa de gatos)",
80
+ input: "Estoy medio trabado últimamente con mis ideas…",
81
+ mustInclude: ["bolsa de gatos", "dirección", "Elegí", "ruido"],
82
+ },
83
+ {
84
+ name: "Test 2 – Input buffet (tres temas)",
85
+ input:
86
+ "Estoy entre lanzar feature, mejorar retención y levantar inversión.",
87
+ mustInclude: ["buffet libre", "tres platos", "dos caminos", "Elegí"],
88
+ },
89
+ {
90
+ name: "Test 3 – Excusa con delay",
91
+ input: "No sé, capaz más adelante lo veo…",
92
+ mustInclude: ["excusa con delay", "real", "no hay nada que pensar"],
93
+ },
94
+ {
95
+ name: "Test 4 – Decisión concreta",
96
+ input: "Debo priorizar onboarding o retención primero?",
97
+ mustInclude: ["decisión concreta", "criterios", "rápido", "base sólida"],
98
+ },
99
+ {
100
+ name: "Test 5 – Charla con estructura (miedo)",
101
+ input: "Tengo muchas ideas pero me da miedo elegir.",
102
+ mustInclude: [
103
+ "tensión real",
104
+ "Puedo acompañar",
105
+ "necesitás elegir un eje",
106
+ ],
107
+ },
108
+ {
109
+ name: "Test 6 – No responde con simpatía artificial",
110
+ input: "Hola, ¿me podés ayudar?",
111
+ mustInclude: ["Está para pensar", "Qué querés resolver"],
112
+ mustNotInclude: ["con gusto", "¡Hola!", "😊", "encantado"],
113
+ },
114
+ ];
115
+
116
+ let passed = 0;
117
+ for (const test of tests) {
118
+ try {
119
+ const output = mockWadiResponse(test.input);
120
+ console.log(`🔹 ${test.name}`);
121
+
122
+ if (test.mustInclude) {
123
+ for (const phrase of test.mustInclude) {
124
+ assert(
125
+ output.includes(phrase),
126
+ `❌ Falla: no encontró "${phrase}" en la respuesta:\n${output}`
127
+ );
128
+ }
129
+ }
130
+
131
+ if (test.mustNotInclude) {
132
+ for (const phrase of test.mustNotInclude) {
133
+ assert(
134
+ !output.includes(phrase),
135
+ `❌ Falla: encontró validación prohibida "${phrase}" en la respuesta:\n${output}`
136
+ );
137
+ }
138
+ }
139
+
140
+ console.log("✅ OK");
141
+ passed++;
142
+ } catch (e) {
143
+ console.error(e.message);
144
+ }
145
+ }
146
+
147
+ if (passed === tests.length) {
148
+ console.log("\n🎉 Todos los tests pasaron. WADI mantiene su eje.\n");
149
+ } else {
150
+ console.error("\n❌ Algunos tests fallaron. Revisar personalidad.\n");
151
+ process.exit(1);
152
+ }
153
+ }
154
+
155
+ runTests();
@@ -0,0 +1,26 @@
1
+ # Eliminación del menú de opciones en WADI
2
+
3
+ WADI ahora funciona como un sistema de pensamiento conversacional directo.
4
+
5
+ Se eliminó:
6
+
7
+ - El bloque de opciones del tipo “Quiero entender algo mejor”
8
+ - El onboarding tipo “elige tu camino”
9
+ - Los mensajes genéricos de bienvenida
10
+
11
+ Se mantiene:
12
+
13
+ - Solo el campo de texto y la conversación directa
14
+ - Diagnóstico inmediato al primer mensaje del usuario
15
+ - Fricción lúcida, sin validación emocional
16
+
17
+ Motivo:
18
+
19
+ → Las opciones rompían el carácter de WADI
20
+ → Forzaban un flujo de UX genérico
21
+ → Bloqueaban el inicio de una conversación real
22
+
23
+ Estado final:
24
+
25
+ ✅ WADI ya no parece una IA de soporte.
26
+ ✅ WADI ahora piensa con el usuario desde el primer mensaje.
@@ -0,0 +1,10 @@
1
+ function deploy() {
2
+ console.log("🚀 Pasos para desplegar WADI:\n");
3
+ console.log("1. npm run build");
4
+ console.log("2. Validar que /docs tenga el index.html correcto.");
5
+ console.log("3. Confirmar CNAME apuntando al dominio correcto.");
6
+ console.log('4. git add . && git commit -m "Deploy" && git push');
7
+ console.log("5. Listo.");
8
+ }
9
+
10
+ module.exports = { deploy };
@@ -0,0 +1,16 @@
1
+ const { exec } = require("child_process");
2
+
3
+ function docs() {
4
+ const url = "https://masosa96-hash.github.io/WADINEW/";
5
+ console.log(`📚 Abriendo documentación oficial: ${url}`);
6
+ const command = process.platform === "win32" ? `start ${url}` : `open ${url}`;
7
+
8
+ exec(command, (err) => {
9
+ if (err) {
10
+ console.error("❌ Error al abrir el navegador:", err);
11
+ console.log(`🔗 Por favor visita manualmente: ${url}`);
12
+ }
13
+ });
14
+ }
15
+
16
+ module.exports = { docs };
@@ -0,0 +1,29 @@
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+
4
+ function explain(fileName) {
5
+ // Búsqueda más flexible: intenta encontrar el archivo en varios directorios
6
+ const potentialPaths = [
7
+ path.join(__dirname, "../../apps/frontend/src/components", fileName),
8
+ path.join(__dirname, "../../apps/frontend/src/components/ui", fileName),
9
+ path.join(__dirname, "../../apps/frontend/src/pages", fileName),
10
+ path.join(__dirname, "../../apps/frontend/src/hooks", fileName),
11
+ ];
12
+
13
+ let filePath = potentialPaths.find((p) => fs.existsSync(p));
14
+
15
+ if (!filePath) {
16
+ console.log(`❌ No se encontró el archivo: ${fileName}`);
17
+ return;
18
+ }
19
+
20
+ console.log(`📄 Explicación de: ${fileName}`);
21
+ console.log(
22
+ "Este componente forma parte del sistema WADI y probablemente está conectado con el flujo de UI o input."
23
+ );
24
+ console.log(
25
+ "⚠️ Este es un resumen simulado. Para explicación real, integrá WADI con LLM."
26
+ );
27
+ }
28
+
29
+ module.exports = { explain };
@@ -0,0 +1,14 @@
1
+ const { exec } = require("child_process");
2
+
3
+ function lint() {
4
+ console.log("🔍 Ejecutando linter...");
5
+ exec("npx eslint apps/frontend/src/**/*.{ts,tsx}", (err, stdout, stderr) => {
6
+ if (err) {
7
+ console.error(stderr);
8
+ return;
9
+ }
10
+ console.log(stdout || "✅ Todo limpio.");
11
+ });
12
+ }
13
+
14
+ module.exports = { lint };
package/cli/index.js ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ const { explain } = require("./commands/explain");
3
+ const { deploy } = require("./commands/deploy");
4
+ const { docs } = require("./commands/docs");
5
+ const { lint } = require("./commands/lint");
6
+
7
+ const command = process.argv[2];
8
+ const arg = process.argv[3];
9
+
10
+ switch (command) {
11
+ case "explain":
12
+ explain(arg);
13
+ break;
14
+ case "deploy":
15
+ deploy();
16
+ break;
17
+ case "docs":
18
+ docs();
19
+ break;
20
+ case "lint":
21
+ lint();
22
+ break;
23
+ default:
24
+ console.log("Comando no reconocido.");
25
+ console.log("Uso: node cli/index.js [explain|deploy|docs|lint]");
26
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "wadi-cli",
3
+ "version": "1.0.0",
4
+ "description": "CLI tool for WADI",
5
+ "main": "index.js",
6
+ "bin": {
7
+ "wadi": "./index.js"
8
+ },
9
+ "dependencies": {
10
+ "commander": "^11.1.0"
11
+ }
12
+ }
package/docs/CNAME ADDED
@@ -0,0 +1 @@
1
+ wadi.tudominio.com
package/docs/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # 🧠 Bienvenido a la Documentación de WADI
2
+
3
+ WADI es un asistente técnico sin alma ni paciencia, diseñado para ayudarte a construir sin estorbar.
4
+
5
+ ---
6
+
7
+ ## 📦 Instalación
8
+
9
+ ```bash
10
+ git clone <este_repo>
11
+ cd wadi
12
+ npm install
13
+ npm run dev
14
+ ```
15
+
16
+ ## 🛠 Estructura de Archivos
17
+
18
+ - **TerminalInput.tsx**: Entrada tipo terminal.
19
+ - **Sidebar.tsx**: Panel de navegación lateral.
20
+ - **Layout.tsx**: Estructura base.
21
+ - **wadi-brain.js**: Motor de procesamiento de entrada.
22
+
23
+ ## 🔒 Restricciones
24
+
25
+ - No branding antiguo.
26
+ - No audio.
27
+ - No reseteos inútiles.
28
+ - No variables sin usar.
29
+
30
+ ## 📈 Roadmap
31
+
32
+ - [ ] Integración con APIs externas.
33
+ - [ ] Modo contexto persistente.
34
+ - [ ] Sistema de personalidades.
35
+
36
+ ---
37
+
38
+ _Made by un desarrollador sin ganas de repetir errores del pasado._
package/docs/USO.md ADDED
@@ -0,0 +1,30 @@
1
+ # 🛠 Guía de Uso Interno — WADI
2
+
3
+ ## 🔧 Instalación Local
4
+
5
+ ```bash
6
+ npm install
7
+ npm run dev
8
+ ```
9
+
10
+ ## 📂 Estructura de Carpetas
11
+
12
+ - **apps/frontend/src/components**: Componentes React principales
13
+ - **apps/api/src/wadi-brain.js**: Motor de respuesta
14
+ - **docs/**: Documentación pública
15
+ - **cli/**: CLI local de WADI
16
+
17
+ ## ⚙️ Comandos CLI
18
+
19
+ ```bash
20
+ node cli/index.js explain TerminalInput.tsx
21
+ node cli/index.js docs
22
+ node cli/index.js deploy
23
+ node cli/index.js lint
24
+ ```
25
+
26
+ ## 🧠 Qué NO tocar
27
+
28
+ - **CNAME**: solo cambiar si tenés el dominio listo
29
+ - **wadi-brain.js**: cualquier cambio afecta la personalidad de WADI
30
+ - **docs/**: no borrar index.html o rompes todo
@@ -0,0 +1,46 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <title>Documentación WADI</title>
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
7
+ <meta name="description" content="Description" />
8
+ <meta
9
+ name="viewport"
10
+ content="width=device-width, initial-scale=1.0, minimum-scale=1.0"
11
+ />
12
+ <link
13
+ rel="stylesheet"
14
+ href="//cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css"
15
+ />
16
+ <style>
17
+ :root {
18
+ --base-font-size: 16px;
19
+ --theme-color: #8b5cf6;
20
+ }
21
+ body {
22
+ background-color: #0f111a;
23
+ color: #e2e8f0;
24
+ }
25
+ .markdown-section {
26
+ color: #e2e8f0;
27
+ }
28
+ .sidebar {
29
+ background-color: #1e293b;
30
+ color: #94a3b8;
31
+ }
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <div id="app"></div>
36
+ <script>
37
+ window.$docsify = {
38
+ name: "WADI v1.0",
39
+ repo: "masosa96-hash/WADINEW",
40
+ color: "#8B5CF6",
41
+ };
42
+ </script>
43
+ <!-- Docsify v4 -->
44
+ <script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
45
+ </body>
46
+ </html>
@@ -0,0 +1,101 @@
1
+ import js from "@eslint/js";
2
+ import globals from "globals";
3
+ import tseslint from "typescript-eslint";
4
+ import prettierRecommended from "eslint-plugin-prettier/recommended";
5
+
6
+ export default tseslint.config(
7
+ {
8
+ ignores: [
9
+ "**/node_modules/**",
10
+ "**/dist/**",
11
+ "**/build/**",
12
+ "**/.git/**",
13
+ "**/coverage/**",
14
+ "**/.firebase/**",
15
+ "**/.turbo/**",
16
+ "scripts/**",
17
+ "apps/tests/**",
18
+ "eslint.config.js",
19
+ "*.js",
20
+ ],
21
+ },
22
+ js.configs.recommended,
23
+ ...tseslint.configs.recommended,
24
+ prettierRecommended,
25
+ {
26
+ languageOptions: {
27
+ ecmaVersion: 2022,
28
+ sourceType: "module",
29
+ globals: {
30
+ ...globals.browser,
31
+ ...globals.node,
32
+ ...globals.es2021,
33
+ },
34
+ },
35
+ rules: {
36
+ "no-unused-vars": "off", // Handled by typescript-eslint
37
+ "@typescript-eslint/no-unused-vars": [
38
+ "error",
39
+ { argsIgnorePattern: "^_" },
40
+ ],
41
+ "no-console": ["warn", { allow: ["warn", "error", "info"] }], // Discourage plain console.log
42
+ "@typescript-eslint/no-explicit-any": "error", // Strict mode
43
+ eqeqeq: "error", // Enforce type-safe equality
44
+ "no-var": "error",
45
+ "prefer-const": "error",
46
+ "prettier/prettier": "error",
47
+ },
48
+ },
49
+ {
50
+ files: ["apps/frontend/**/*.{ts,tsx}"],
51
+ languageOptions: {
52
+ globals: { ...globals.browser },
53
+ },
54
+ },
55
+ {
56
+ files: [
57
+ "apps/api/**/*.js",
58
+ "apps/kivo-brain-api/**/*.js",
59
+ "packages/**/*.js",
60
+ ],
61
+ languageOptions: {
62
+ globals: { ...globals.node },
63
+ },
64
+ rules: {
65
+ "@typescript-eslint/no-var-requires": "off",
66
+ "@typescript-eslint/no-require-imports": "off",
67
+ "no-undef": "off",
68
+ },
69
+ },
70
+ {
71
+ files: ["apps/kivo/www/**/*.js", "apps/kivo/android/**/*.js"],
72
+ languageOptions: {
73
+ globals: {
74
+ ...globals.browser,
75
+ firebase: "readonly",
76
+ db: "writable",
77
+ module: "readonly",
78
+ },
79
+ },
80
+ rules: {
81
+ "no-undef": "off",
82
+ "@typescript-eslint/no-unused-vars": "off",
83
+ "no-console": "off",
84
+ "@typescript-eslint/no-explicit-any": "off",
85
+ "prefer-const": "off",
86
+ },
87
+ },
88
+ {
89
+ files: ["apps/kivo/tests/**/*.js"],
90
+ languageOptions: {
91
+ globals: {
92
+ ...globals.jest,
93
+ ...globals.node,
94
+ },
95
+ },
96
+ rules: {
97
+ "@typescript-eslint/no-require-imports": "off",
98
+ "no-undef": "off",
99
+ },
100
+ }
101
+ );
@@ -0,0 +1,27 @@
1
+ [
2
+ {
3
+ "task": "API Stability",
4
+ "status": "PASSED",
5
+ "details": "Endpoint /system/health returned 200 OK. Uptime verified."
6
+ },
7
+ {
8
+ "task": "Frontend Config",
9
+ "status": "UPDATED",
10
+ "details": "Kivo script.js and Frontend .env updated with Production URL."
11
+ },
12
+ {
13
+ "task": "Logging",
14
+ "status": "UPDATED",
15
+ "details": "API is now using @wadi/logger for structured JSON logs."
16
+ },
17
+ {
18
+ "task": "CI/CD",
19
+ "status": "VERIFIED",
20
+ "details": "kivo-cicd.yml confirms Staging (Preview) and Prod (Live) workflows."
21
+ },
22
+ {
23
+ "task": "Production Readiness",
24
+ "status": "READY",
25
+ "details": "System is configured for 24/7 operation. User must set Env Vars in Railway."
26
+ }
27
+ ]