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.
- package/.agent/workflows/auto_sync.md +19 -0
- package/.agent/workflows/kivo_pipeline.md +27 -0
- package/.devcontainer/devcontainer.json +27 -0
- package/.github/workflows/kivo-cicd.yml +45 -0
- package/.github/workflows/monorepo-ci.yml +51 -0
- package/.github/workflows/wadi-ci.yml +38 -0
- package/.husky/pre-commit +2 -0
- package/.prettierignore +12 -0
- package/.prettierrc +9 -0
- package/.vscode/settings.json +19 -0
- package/CHANGELOG.md +56 -0
- package/CODE_OF_CONDUCT.md +43 -0
- package/CONTRIBUTING.md +42 -0
- package/DEPLOY_GUIDE.md +143 -0
- package/GO_LIVE_CHECKLIST.md +41 -0
- package/GO_LIVE_COMPLETE_REPORT.md +58 -0
- package/GO_LIVE_VALIDATION.md +39 -0
- package/LEGAL.md +38 -0
- package/MANIFESTO.md +40 -0
- package/MANUAL.md +82 -0
- package/OPS_PLAN.md +90 -0
- package/README.md +126 -0
- package/RELEASE_NOTES.md +51 -0
- package/ROADMAP.md +51 -0
- package/api_listado.txt +2197 -0
- package/apps/api/WADI_PROTOCOL.md +52 -0
- package/apps/api/debug-brain.js +11 -0
- package/apps/api/package.json +21 -0
- package/apps/api/src/core/analisis.js +17 -0
- package/apps/api/src/core/errors.js +31 -0
- package/apps/api/src/core/logger.js +32 -0
- package/apps/api/src/core/prompt-kivo.js +62 -0
- package/apps/api/src/index.js +212 -0
- package/apps/api/src/layers/human_pattern/composeResponse.js +35 -0
- package/apps/api/src/layers/human_pattern/detectPattern.js +39 -0
- package/apps/api/src/layers/human_pattern/heuristics.js +28 -0
- package/apps/api/src/layers/human_pattern/index.js +28 -0
- package/apps/api/src/layers/human_pattern/socialMemory.js +35 -0
- package/apps/api/src/middleware/errorHandler.js +24 -0
- package/apps/api/src/middleware/rateLimiter.js +38 -0
- package/apps/api/src/middleware/requestLogger.js +31 -0
- package/apps/api/src/middleware/upload.js +21 -0
- package/apps/api/src/middleware/validation.js +70 -0
- package/apps/api/src/modules/data.js +25 -0
- package/apps/api/src/modules/marketing.js +54 -0
- package/apps/api/src/modules/projects.js +40 -0
- package/apps/api/src/openai.js +16 -0
- package/apps/api/src/preferences/index.js +20 -0
- package/apps/api/src/register_user.js +22 -0
- package/apps/api/src/routes/kivo.js +58 -0
- package/apps/api/src/routes/monitoring.js +55 -0
- package/apps/api/src/routes.js +656 -0
- package/apps/api/src/supabase.js +17 -0
- package/apps/api/src/tools/index.js +57 -0
- package/apps/api/src/wadi-brain.js +171 -0
- package/apps/api/supabase/migrations/20251218_audit_logs.sql +27 -0
- package/apps/api/supabase/migrations/v2-chat-persistence.sql +83 -0
- package/apps/api/supabase/migrations/v3-cascade-delete.sql +11 -0
- package/apps/api/supabase/migrations/v3-security-fix.sql +90 -0
- package/apps/api/supabase/migrations/v3-storage.sql +36 -0
- package/apps/api/supabase/migrations/v4-gamification.sql +83 -0
- package/apps/api/supabase/migrations/v5-smoke-index.sql +6 -0
- package/apps/api/supabase/migrations/v6-schema-integrity-fix.sql +98 -0
- package/apps/api/supabase/migrations/v7-performance-indexes.sql +5 -0
- package/apps/api/supabase/migrations/v7-security-hardening.sql +132 -0
- package/apps/api/supabase/migrations/v8-security-hardening.sql +79 -0
- package/apps/api/test_human_pattern.js +30 -0
- package/apps/api/test_human_pattern_vague.js +30 -0
- package/apps/api/test_output.txt +76 -0
- package/apps/api/test_vague.js +30 -0
- package/apps/api/test_vague_block.js +30 -0
- package/apps/api/test_wadi.js +31 -0
- package/apps/api/tsconfig.json +13 -0
- package/apps/frontend/.env.local +3 -0
- package/apps/frontend/README.md +73 -0
- package/apps/frontend/eslint.config.js +27 -0
- package/apps/frontend/index.html +49 -0
- package/apps/frontend/package.json +41 -0
- package/apps/frontend/postcss.config.cjs +6 -0
- package/apps/frontend/public/cursors/wadi-neutral.svg +1 -0
- package/apps/frontend/public/cursors/wadi-select.svg +1 -0
- package/apps/frontend/public/icon-192.svg +1 -0
- package/apps/frontend/public/icon-512.svg +1 -0
- package/apps/frontend/public/manifest.webmanifest +23 -0
- package/apps/frontend/public/sw.js +57 -0
- package/apps/frontend/public/vite.svg +1 -0
- package/apps/frontend/public/wadi.svg +5 -0
- package/apps/frontend/src/assets/react.svg +1 -0
- package/apps/frontend/src/components/AuthLoader.tsx +50 -0
- package/apps/frontend/src/components/ChatInput.tsx +272 -0
- package/apps/frontend/src/components/ChatInterface.tsx +202 -0
- package/apps/frontend/src/components/ErrorBoundary.tsx +52 -0
- package/apps/frontend/src/components/InputArea.tsx +201 -0
- package/apps/frontend/src/components/Layout.tsx +73 -0
- package/apps/frontend/src/components/MessageBubble.tsx +66 -0
- package/apps/frontend/src/components/OnboardingModal.tsx +108 -0
- package/apps/frontend/src/components/SettingsModal.tsx +187 -0
- package/apps/frontend/src/components/Sidebar.tsx +171 -0
- package/apps/frontend/src/components/WadiOnboarding.tsx +71 -0
- package/apps/frontend/src/components/auditor/AuditReport.tsx +166 -0
- package/apps/frontend/src/components/auditor/AuditorHeader.tsx +34 -0
- package/apps/frontend/src/components/auditor/ContextPanel.tsx +138 -0
- package/apps/frontend/src/components/auditor/DataDeconstructor.tsx +85 -0
- package/apps/frontend/src/components/auditor/DecisionWall.tsx +65 -0
- package/apps/frontend/src/components/auditor/Dropzone.tsx +137 -0
- package/apps/frontend/src/components/common/Button.tsx +97 -0
- package/apps/frontend/src/components/common/Card.tsx +43 -0
- package/apps/frontend/src/components/common/Input.tsx +73 -0
- package/apps/frontend/src/components/common/Modal.tsx +53 -0
- package/apps/frontend/src/components/ui/Button.tsx +68 -0
- package/apps/frontend/src/components/ui/Card.tsx +86 -0
- package/apps/frontend/src/components/ui/Input.tsx +28 -0
- package/apps/frontend/src/components/ui/LogItem.tsx +64 -0
- package/apps/frontend/src/components/ui/MondayButton.tsx +40 -0
- package/apps/frontend/src/components/ui/MondayCard.tsx +24 -0
- package/apps/frontend/src/components/ui/Scouter.tsx +208 -0
- package/apps/frontend/src/components/ui/TerminalInput.tsx +202 -0
- package/apps/frontend/src/components/ui/Tooltip.tsx +67 -0
- package/apps/frontend/src/config/chatShortcuts.ts +20 -0
- package/apps/frontend/src/config/supabase.ts +6 -0
- package/apps/frontend/src/final_status.txt +3 -0
- package/apps/frontend/src/hooks/useScouter.ts +28 -0
- package/apps/frontend/src/hooks/useStoreHydration.ts +24 -0
- package/apps/frontend/src/improvement_status.txt +5 -0
- package/apps/frontend/src/index.css +88 -0
- package/apps/frontend/src/main.tsx +62 -0
- package/apps/frontend/src/monday_status.txt +7 -0
- package/apps/frontend/src/pages/ChatPage.tsx +201 -0
- package/apps/frontend/src/pages/DashboardPage.tsx +375 -0
- package/apps/frontend/src/pages/IntroWadi.tsx +114 -0
- package/apps/frontend/src/pages/LandingPage.tsx +103 -0
- package/apps/frontend/src/pages/Login.tsx +190 -0
- package/apps/frontend/src/pages/PrivacyPage.tsx +213 -0
- package/apps/frontend/src/pages/ProjectDetail.tsx +80 -0
- package/apps/frontend/src/pages/Projects.tsx +247 -0
- package/apps/frontend/src/pages/TermsPage.tsx +202 -0
- package/apps/frontend/src/router.tsx +83 -0
- package/apps/frontend/src/store/authStore.ts +152 -0
- package/apps/frontend/src/store/chatStore.ts +837 -0
- package/apps/frontend/src/store/documentStore.ts +89 -0
- package/apps/frontend/src/store/projectsStore.ts +111 -0
- package/apps/frontend/src/store/runsStore.ts +98 -0
- package/apps/frontend/src/utils/api.ts +34 -0
- package/apps/frontend/src/vite-env.d.ts +7 -0
- package/apps/frontend/tailwind.config.cjs +32 -0
- package/apps/frontend/tsconfig.app.json +27 -0
- package/apps/frontend/tsconfig.json +7 -0
- package/apps/frontend/tsconfig.node.json +26 -0
- package/apps/frontend/vite.config.ts +25 -0
- package/apps/kivo/.firebase/hosting.d3d3.cache +11 -0
- package/apps/kivo/.firebaserc +5 -0
- package/apps/kivo/BRANDING_GUIDE.md +71 -0
- package/apps/kivo/DEPLOYMENT_READY.md +46 -0
- package/apps/kivo/DEPLOY_URL.md +12 -0
- package/apps/kivo/IMPLEMENTATION_REPORT.md +35 -0
- package/apps/kivo/IMPLEMENTATION_REPORT_FINAL.md +49 -0
- package/apps/kivo/PLAN_MOBILE_2.0.md +44 -0
- package/apps/kivo/PWA_VERIFICATION_GUIDE.md +77 -0
- package/apps/kivo/README.md +28 -0
- package/apps/kivo/REBUILD_REPORT.md +34 -0
- package/apps/kivo/UPGRADE_REPORT.md +35 -0
- package/apps/kivo/android/app/build.gradle +54 -0
- package/apps/kivo/android/app/capacitor.build.gradle +19 -0
- package/apps/kivo/android/app/proguard-rules.pro +21 -0
- package/apps/kivo/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
- package/apps/kivo/android/app/src/main/AndroidManifest.xml +35 -0
- package/apps/kivo/android/app/src/main/java/com/kivo/app/MainActivity.java +5 -0
- package/apps/kivo/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
- package/apps/kivo/android/app/src/main/res/drawable/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-ldpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-hdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-ldpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-mdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-xhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-xxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-xxxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-night/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-ldpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-hdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-ldpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-mdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-xhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-xxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-xxxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
- package/apps/kivo/android/app/src/main/res/layout/activity_main.xml +12 -0
- package/apps/kivo/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +9 -0
- package/apps/kivo/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +9 -0
- package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
- package/apps/kivo/android/app/src/main/res/values/strings.xml +7 -0
- package/apps/kivo/android/app/src/main/res/values/styles.xml +22 -0
- package/apps/kivo/android/app/src/main/res/xml/file_paths.xml +5 -0
- package/apps/kivo/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
- package/apps/kivo/android/build.gradle +29 -0
- package/apps/kivo/android/capacitor.settings.gradle +3 -0
- package/apps/kivo/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/apps/kivo/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/apps/kivo/android/gradle.properties +22 -0
- package/apps/kivo/android/gradlew +252 -0
- package/apps/kivo/android/gradlew.bat +94 -0
- package/apps/kivo/android/settings.gradle +5 -0
- package/apps/kivo/android/variables.gradle +16 -0
- package/apps/kivo/assets/icon.png +0 -0
- package/apps/kivo/assets/splash.png +0 -0
- package/apps/kivo/capacitor.config.json +16 -0
- package/apps/kivo/firebase.json +6 -0
- package/apps/kivo/jest.config.js +4 -0
- package/apps/kivo/package.json +26 -0
- package/apps/kivo/tests_disabled/logic.test.js +34 -0
- package/apps/kivo/www/assets/icon-192.png +0 -0
- package/apps/kivo/www/assets/icon-512.png +0 -0
- package/apps/kivo/www/assets/kivo-icon.png +0 -0
- package/apps/kivo/www/assets/pop.mp3 +0 -0
- package/apps/kivo/www/favicon.ico +0 -0
- package/apps/kivo/www/firebase-config.js +75 -0
- package/apps/kivo/www/index.html +38 -0
- package/apps/kivo/www/manifest.json +29 -0
- package/apps/kivo/www/script.js +72 -0
- package/apps/kivo/www/style.css +82 -0
- package/apps/kivo/www/sw.js +46 -0
- package/apps/kivo-brain-api/.env.example +2 -0
- package/apps/kivo-brain-api/KIVO_BACKEND_SETUP.md +27 -0
- package/apps/kivo-brain-api/controllers/kivoController.js +31 -0
- package/apps/kivo-brain-api/index.js +24 -0
- package/apps/kivo-brain-api/package.json +17 -0
- package/apps/kivo-brain-api/routes/message.js +8 -0
- package/apps/kivo-brain-api/services/openaiService.js +64 -0
- package/apps/tests/wadi-tests.js +155 -0
- package/apps/wadi-brain/docs/README_REMOVE_OPTIONS.md +26 -0
- package/cli/commands/deploy.js +10 -0
- package/cli/commands/docs.js +16 -0
- package/cli/commands/explain.js +29 -0
- package/cli/commands/lint.js +14 -0
- package/cli/index.js +26 -0
- package/cli/package.json +12 -0
- package/docs/CNAME +1 -0
- package/docs/README.md +38 -0
- package/docs/USO.md +30 -0
- package/docs/index.html +46 -0
- package/eslint.config.js +101 -0
- package/final_validation.json +27 -0
- package/frontend_listado.txt +33387 -0
- package/listado.txt +12591 -0
- package/package.json +46 -0
- package/packages/logger/index.js +43 -0
- package/packages/logger/package.json +19 -0
- package/packages/logger/test-logger.js +7 -0
- package/packages_listado.txt +801 -0
- package/pnpm-workspace.yaml +6 -0
- package/reseteador_existencial.ps1 +40 -0
- package/scripts/bump-version.js +26 -0
- package/scripts/env.ps1 +13 -0
- package/scripts/setup_android.ps1 +25 -0
- package/scripts/setup_virtual_env.ps1 +77 -0
- package/scripts/smoke-test.js +84 -0
- package/scripts/trigger_render_deploy.ps1 +3 -0
- package/scripts/validate-release.js +34 -0
- package/temp_check.js +57 -0
- package/tsconfig.json +5 -0
- 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
|
+
}
|
package/cli/package.json
ADDED
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
|
package/docs/index.html
ADDED
|
@@ -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>
|
package/eslint.config.js
ADDED
|
@@ -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
|
+
]
|