Proyecto independiente No afiliado, patrocinado ni avalado por la Watch Tower Bible and Tract Society o Jehovah's Witnesses.
jw-agent-toolkit
EN

Release F65-F76 · 9 fases nuevas + post-MVPs cerrados

Agéntica · multimodal · predictivo · voz familiar

Nueve fases que abren cuatro capas nuevas sobre el toolkit ya estable: orquestación agéntica verificable (F65-F67), multimodal end-to-end (F68-F71), análisis diacrónico (F72) y voz familiar consentida (F76). Todas las decisiones críticas siguen siendo determinísticas. El LLM solo entra cuando hay un crítico NLI detrás verificando la salida. Cada veredicto trae su URL canónica a wol.jw.org.

Fases

9

Tests nuevos

481+

MCP tools nuevas

15+

Fase 65

meta-orchestrator

Planner → executor → critic sobre los 12 agentes existentes

✅ Entregada 🧪 ~65 tests T1 Agéntica
Guía técnica →

Orquestador agéntico que descompone un objetivo en un DAG de tools, ejecuta en orden topológico y crítica el resultado con NLI F39 antes de devolverlo. Reusa Plugin SDK F41 + factories LLM/NLI env-driven (Anthropic + Ollama + Fake). Post-MVP cerrado: export Mermaid del DAG y replay determinista de planes guardados.

Qué se entregó

  • Planner LLM con JSON-schema validation + critique loop + replan opt-in.
  • 12 adapters reales en builtin_tools.py (sin placeholders).
  • LLM factory: Anthropic + Ollama + Fake con degradación grácil.
  • NLI factory envuelve get_default_nli_provider() de F39.
  • Tracing F43 via MetaOrchestrator.tracer= opt-in.
  • Persistencia opt-in con --save-plan / --save-result JSON.
  • Mermaid export: plan_to_mermaid() + result_to_mermaid() (post-MVP).
  • Plan replay: MetaOrchestrator.run_plan(plan) + CLI jw meta replay (post-MVP).
  • CLI jw meta {tools,plan,run,replay} + flag --mermaid + jw plan-sunday.
  • 3 MCP tools nuevas.

Fase 66

conversation-sparring

Simulador de interlocutor para predicación con 6 personas

✅ Entregada 🧪 ~65 tests T1 Agéntica
Guía técnica →

6 personas (atheist, jw_student, biblical_scholar, evangelical, agnostic, returning) en 3 idiomas (es/en/pt) con memoria F61 y NLI F39 opt-in para verificar coherencia de respuestas. Voice mode end-to-end con ASR/TTS F34. Post-MVP cerrado: persistencia SQLite cross-process.

Qué se entregó

  • 6 personas × 3 idiomas en TOML (18 archivos) con resolución multi-idioma.
  • Voice mode: jw spar voice-turn — ASR → LLM → TTS sin que el audio salga del disco.
  • Golden conversations en fixtures/conversations/*.jsonl + FakeSparLLM determinista.
  • Tool spar.session en builtin_tools para uso desde F65 meta-orchestrator.
  • Markdown export del transcript via jw spar show/close --export.
  • SQLite cross-process en jw_agents/spar/persistence.py (post-MVP).
  • Autosave opt-in vía JW_SPAR_PERSIST=1 (post-MVP).
  • CLI jw spar {personas,start,turn,show,close,voice-turn}.
  • 4 MCP tools.

Fase 67

doctrinal-reasoner

Chain-of-thought verificable con ReAct + NLI F39

✅ Entregada 🧪 ~59 tests T1 Agéntica
Guía técnica →

Razonador estructurado que ejecuta ReAct (Reason → Act → Observe) con árbol de pruebas exportable. Reformulator de framing tóxico (12 patrones es/en/pt). Planner Jinja2 con JSON schema validation. Modes NLI off/warn/reject. Post-MVP cerrado: tool dispatcher real + golden set 10 preguntas.

Qué se entregó

  • Reformulator de framing tóxico (12 patrones es/en/pt).
  • Planner Jinja2 multi-idioma + JSON schema validation.
  • ReAct executor con NLI F39 (off/warn/reject) y truncation.
  • Summary prose determinista trilingüe.
  • Tool dispatcher real: verse_explainer/research_topic/apologetics/life_topics (post-MVP).
  • Activación opt-in vía use_real_dispatcher=True.
  • Golden set 10 preguntas multi-paso en tests/reasoner/fixtures/golden.jsonl (post-MVP).
  • CLI jw reason {ask,languages} + MCP doctrinal_reason.
  • Integrado en F65 como tool reason.doctrinal.

Fase 68

talk-lab

Coach de oratoria multimodal local-first

✅ Entregada 🧪 ~70 tests T2 Multimodal
Guía técnica →

Análisis end-to-end de partes de la Escuela del Ministerio del Reino: WhisperX F64 para transcripción + diarización + prosodia (librosa opt + numpy fallback) + 6 counsel points pedagógicos. El audio nunca sale del disco. Post-MVP cerrado: SVG timeline y F31 PDF export.

Qué se entregó

  • ASR diarizado WhisperX F64 + prosodia features (speech_rate, pitch, pauses, fillers).
  • Catálogo TOML es/en/pt con applies_by_kind para los 6 counsel points iniciales.
  • History SQLite local con compare entre sesiones.
  • SVG timeline horizontal report_to_svg con barras coloreadas por score (post-MVP).
  • F31 PDF export wrapper talklab_to_studysheet + export_talk_lab_pdf (post-MVP).
  • CLI jw talklab {analyze,history,compare,counsel-points} + flags --svg --pdf.
  • 3 MCP tools nuevas.

Fase 69

broadcasting-visual-index

Búsqueda multimodal frame-level sobre videos de JW Broadcasting

✅ Entregada 🧪 ~43 tests T2 Multimodal
Guía técnica →

Sampler de frames + VLM captioning + CLIP embedding + RRF fusion para localizar momentos visuales en videos del Broadcasting. Embedding híbrido FTS + vector + RRF. Post-MVP cerrado: OCR de frames reusando el adapter pytesseract de F70.

Qué se entregó

  • VisualFrame Pydantic con caption + ocr_text + embedding_id + transcript_concurrent.
  • Sampler determinista de frames por intervalo + change detection.
  • VLM captioning con provider Protocol + CLIP encoder Protocol.
  • Búsqueda híbrida FTS + vector + RRF con thumb_path + deep_link.
  • OCR de frames: enrich_frames_with_ocr() reusa F70 (post-MVP).
  • Language routing español → spa, etc.
  • CLI jw broadcasting visual {index,search} + MCP tools.

Fase 70

image-quote-verifier

Defensa visual contra citas falsas en memes/screenshots

✅ Entregada 🧪 ~58 tests T2 Multimodal
Guía técnica →

Pipeline VLM + OCR + RAG + NLI F39 que extrae la cita atribuida a una publicación JW, busca el texto original en el corpus y emite un veredicto entails/neutral/contradicts con visual fingerprint (apparent era, layout consistency, anomalías). Post-MVP cerrado: wire-up RAG F33 + NLI F39 reales.

Qué se entregó

  • Pipeline load_image → ocr → cleanup → extract_quote → fingerprint → retrieve → NLI.
  • VisualFingerprint con apparent_era + apparent_publication + layout_consistency + anomalies.
  • Verdict synthesis (entails/neutral/contradicts/unverifiable) con reasoning.
  • default_rag_retriever() vía env JW_IMAGE_QUOTE_STORE_PATH (post-MVP).
  • default_nli() adapter sobre F39 get_default_nli_provider() (post-MVP).
  • Engine acepta use_real_defaults=True con degradación grácil.
  • Tier 1 paragraph classifier robusto (paragraph wins over question).

Fase 71

book-camera

Cámara para libros físicos: OCR + clasificación + acciones

✅ Entregada 🧪 ~30 tests T2 Multimodal
Guía técnica →

Apunta el teléfono a un libro físico (Atalaya, Estudio Perspicaz, Biblia) y el toolkit OCR'iza, clasifica (verso bíblico / pregunta de estudio / párrafo Atalaya / texto plano) y sugiere acciones contextuales: read_aloud (F76), open_in_jw_library, open_in_wol, show_answer. Post-MVP cerrado: REST endpoints para apps móviles.

Qué se entregó

  • Classifier procedural sobre OCR cleanup (sin LLM en el camino crítico).
  • Suggested actions: read_aloud · open_in_jw_library · open_in_wol · show_answer.
  • Integración con F76 voice-clone para read_aloud con voz familiar consentida.
  • REST endpoints jw_mcp/rest/book_camera.py: POST /api/v1/book_camera/{analyze,tts,rag_answer} (post-MVP).
  • /tts aplica el license gate F76 (consent + license + non-commercial).
  • /rag_answer delega en jw_agents.research_topic cuando está disponible.
  • CLI jw book-camera {analyze,kinds} + MCP book_camera_analyze.
  • Integrado en F65 como book_camera.analyze.

Fase 72

doctrinal-drift

Análisis diacrónico con embeddings temporales + DBSCAN cosine

✅ Entregada 🧪 ~43 tests T3 ML clásico / predictivo
Guía técnica →

Detecta evolución de comprensión doctrinal a lo largo del siglo XX-XXI agrupando texto por era (13 décadas) y clustering DBSCAN-style con distancia coseno (numpy puro). Significance minor/moderate/major. La nota Prov 4:18 trilingüe SIEMPRE va inyectada. Post-MVP cerrado: wire-up F49 Second Brain + SVG timeline.

Qué se entregó

  • partition_by_era + dbscan_cluster cosine + cluster_alignment + significance.
  • Nota explanatoria Prov 4:18 trilingüe SIEMPRE inyectada en el report.
  • Embedding-agnóstico (cualquier provider compatible).
  • chunks_from_brain() adapter: lee Publication nodes de F49 Second Brain (post-MVP).
  • Year extraction: explícito (year/pub_year) o derivado de published_date (post-MVP).
  • SVG drift timeline con eras coloreadas + arrows por significance + Prov 4:18 footer (post-MVP).
  • CLI jw drift {analyze,note,eras} + flag --svg + MCP drift_analyze.
  • Integrado en F65 como drift.analyze.

Fase 76

family-voice-clone

TTS con voz familiar consentida + license gate 3 capas

✅ Entregada 🧪 ~48 tests T4 Voz / accesibilidad
Guía técnica →

Permite clonar la voz de un familiar (con consentimiento firmado) para usos personales no comerciales — leer un cuento a un niño con la voz del abuelo, por ejemplo. License gate de 3 capas: deny list de nombres prohibidos (branch/broadcasting/president/governing_body/warwick), consent activo (no revoked + no expirado), texto no comercial (5 patrones regex). Post-MVP cerrado: cifrado opt-in Fernet de los pesos.

Qué se entregó

  • Models Pydantic: VoiceProfile + ConsentRecord + TrainingSample + TrainResult.
  • License gate 3 capas: name deny list + consent active + non-commercial regex.
  • Registry JSON por perfil con env override JW_VOICECLONE_ROOT.
  • FakeVoiceProvider determinista para tests (sin modelos pesados).
  • Audit hook opt-in emit_trace=fn compatible F43.
  • Cifrado opt-in Fernet en encryption.py + JW_VOICE_KEY (post-MVP).
  • encrypt_weights / decrypt_to_tempfile / generate_key (post-MVP).
  • CLI jw voiceclone {register-from-consent,list,show,say,revoke,delete}.
  • 3 MCP tools voice_clone_{list,synthesize,audit}.