mega-brain-ai 1.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.
Potentially problematic release.
This version of mega-brain-ai might be problematic. Click here for more details.
- package/.claude/CLAUDE.md +155 -0
- package/.claude/commands/agents.md +161 -0
- package/.claude/commands/ask.md +117 -0
- package/.claude/commands/benchmark.md +224 -0
- package/.claude/commands/chat.md +343 -0
- package/.claude/commands/compare.md +116 -0
- package/.claude/commands/conclave.md +194 -0
- package/.claude/commands/config.md +133 -0
- package/.claude/commands/council.md +194 -0
- package/.claude/commands/create-agent.md +452 -0
- package/.claude/commands/debate.md +157 -0
- package/.claude/commands/documentation/create-architecture-documentation.md +175 -0
- package/.claude/commands/dossiers.md +180 -0
- package/.claude/commands/evolve.md +223 -0
- package/.claude/commands/extract-dna.md +170 -0
- package/.claude/commands/extract-knowledge.md +507 -0
- package/.claude/commands/inbox.md +296 -0
- package/.claude/commands/ingest-empresa.md +191 -0
- package/.claude/commands/ingest.md +182 -0
- package/.claude/commands/jarvis-briefing.md +67 -0
- package/.claude/commands/jarvis-control.md +169 -0
- package/.claude/commands/jarvis-full.md +181 -0
- package/.claude/commands/jarvis.md +212 -0
- package/.claude/commands/ler-drive.md +212 -0
- package/.claude/commands/log.md +158 -0
- package/.claude/commands/loop.md +133 -0
- package/.claude/commands/loops.md +73 -0
- package/.claude/commands/mission-autopilot.md +538 -0
- package/.claude/commands/mission.md +353 -0
- package/.claude/commands/process-inbox.md +148 -0
- package/.claude/commands/process-jarvis.md +3036 -0
- package/.claude/commands/process-video.md +131 -0
- package/.claude/commands/rag-search.md +78 -0
- package/.claude/commands/resume.md +33 -0
- package/.claude/commands/save.md +38 -0
- package/.claude/commands/scan-inbox.md +125 -0
- package/.claude/commands/setup.md +99 -0
- package/.claude/commands/system-digest.md +243 -0
- package/.claude/commands/verify.md +182 -0
- package/.claude/commands/view-dna.md +169 -0
- package/.claude/hooks/agent_doctor.py +433 -0
- package/.claude/hooks/agent_memory_persister.py +203 -0
- package/.claude/hooks/auto_formatter.py +158 -0
- package/.claude/hooks/checkpoint_writer.py +244 -0
- package/.claude/hooks/claude_md_guard.py +146 -0
- package/.claude/hooks/creation_validator.py +357 -0
- package/.claude/hooks/enforce_dual_location.py +501 -0
- package/.claude/hooks/enforce_plan_mode.py +220 -0
- package/.claude/hooks/inbox_age_alert.py +367 -0
- package/.claude/hooks/jarvis_briefing.py +506 -0
- package/.claude/hooks/ledger_updater.py +301 -0
- package/.claude/hooks/memory_hints_injector.py +251 -0
- package/.claude/hooks/memory_updater.py +202 -0
- package/.claude/hooks/multi_agent_hook.py +464 -0
- package/.claude/hooks/notification_system.py +120 -0
- package/.claude/hooks/pattern_analyzer.py +526 -0
- package/.claude/hooks/pending_tracker.py +188 -0
- package/.claude/hooks/post_batch_cascading.py +1740 -0
- package/.claude/hooks/post_output_validator.py +358 -0
- package/.claude/hooks/post_tool_use.py +120 -0
- package/.claude/hooks/post_write_validator.py +200 -0
- package/.claude/hooks/quality_watchdog.py +394 -0
- package/.claude/hooks/ralph_wiggum.py +277 -0
- package/.claude/hooks/session-source-sync.py +218 -0
- package/.claude/hooks/session_autosave_v2.py +1135 -0
- package/.claude/hooks/session_end.py +203 -0
- package/.claude/hooks/session_start.py +939 -0
- package/.claude/hooks/skill_indexer.py +48 -0
- package/.claude/hooks/skill_router.py +358 -0
- package/.claude/hooks/stop_hook_completeness.py +178 -0
- package/.claude/hooks/subagent_tracker.py +163 -0
- package/.claude/hooks/token_checkpoint.py +584 -0
- package/.claude/hooks/user_prompt_submit.py +125 -0
- package/.claude/rules/ANTHROPIC-STANDARDS.md +384 -0
- package/.claude/rules/CLAUDE-LITE.md +201 -0
- package/.claude/rules/RULE-GROUP-1.md +320 -0
- package/.claude/rules/RULE-GROUP-2.md +307 -0
- package/.claude/rules/RULE-GROUP-3.md +248 -0
- package/.claude/rules/RULE-GROUP-4.md +427 -0
- package/.claude/rules/RULE-GROUP-5.md +388 -0
- package/.claude/rules/RULE-GROUP-6.md +387 -0
- package/.claude/rules/logging.md +53 -0
- package/.claude/rules/mcp-governance.md +128 -0
- package/.claude/rules/pipeline.md +60 -0
- package/.claude/rules/state-management.md +93 -0
- package/.claude/scripts/apply-tags.py +77 -0
- package/.claude/scripts/batch-extract-transcriptions.py +132 -0
- package/.claude/scripts/build-complete-index.py +250 -0
- package/.claude/scripts/build-planilha-index.py +170 -0
- package/.claude/scripts/complete-tag-matching.py +250 -0
- package/.claude/scripts/deduplicate-inbox.py +139 -0
- package/.claude/scripts/docx-xml-extractor.py +141 -0
- package/.claude/scripts/extract-docx-text.py +58 -0
- package/.claude/scripts/extract-single-transcription.py +74 -0
- package/.claude/scripts/extract_docx_from_gdrive.py +77 -0
- package/.claude/scripts/organized-downloader.py +246 -0
- package/.claude/scripts/planilha-tagger.py +187 -0
- package/.claude/scripts/revert-tags.py +70 -0
- package/.claude/scripts/source-sync.py +265 -0
- package/.claude/scripts/tag-inbox-files.py +276 -0
- package/.claude/scripts/tag-inbox-v2.py +253 -0
- package/.claude/scripts/test-extraction.py +35 -0
- package/.claude/scripts/test-full-extraction.py +74 -0
- package/.claude/skills/00-SKILL-CREATOR/SKILL.md +186 -0
- package/.claude/skills/01-SKILL-DOCS-MEGABRAIN/SKILL.md +251 -0
- package/.claude/skills/02-SKILL-PYTHON-MEGABRAIN/SKILL.md +323 -0
- package/.claude/skills/03-SKILL-AGENT-CREATION/SKILL.md +374 -0
- package/.claude/skills/04-SKILL-KNOWLEDGE-EXTRACTION/SKILL.md +318 -0
- package/.claude/skills/05-SKILL-PIPELINE-JARVIS/SKILL.md +430 -0
- package/.claude/skills/06-SKILL-BRAINSTORMING/SKILL.md +72 -0
- package/.claude/skills/07-SKILL-DISPATCHING-PARALLEL-AGENTS/SKILL.md +193 -0
- package/.claude/skills/08-SKILL-EXECUTING-PLANS/SKILL.md +114 -0
- package/.claude/skills/09-SKILL-WRITING-PLANS/SKILL.md +184 -0
- package/.claude/skills/10-SKILL-VERIFICATION-BEFORE-COMPLETION/SKILL.md +130 -0
- package/.claude/skills/11-SKILL-USING-SUPERPOWERS/SKILL.md +105 -0
- package/.claude/skills/DETECTION-PROTOCOL.md +217 -0
- package/.claude/skills/README.md +240 -0
- package/.claude/skills/SKILL-REGISTRY.md +284 -0
- package/.claude/skills/SKILL-SUGGESTIONS.md +114 -0
- package/.claude/skills/_TEMPLATES/SKILL-WRITER-GUIDE.md +385 -0
- package/.claude/skills/chronicler/SKILL.md +146 -0
- package/.claude/skills/chronicler/chronicler_core.py +468 -0
- package/.claude/skills/code-review/SKILL.md +160 -0
- package/.claude/skills/council/SKILL.md +210 -0
- package/.claude/skills/executor/SKILL.md +161 -0
- package/.claude/skills/fase-2-5-tagging/SKILL.md +182 -0
- package/.claude/skills/feature-dev/SKILL.md +154 -0
- package/.claude/skills/finance-agent/SKILL.md +137 -0
- package/.claude/skills/frontend-design/SKILL.md +165 -0
- package/.claude/skills/gdrive-transcription-downloader/SKILL.md +249 -0
- package/.claude/skills/gemini-fallback/SKILL.md +67 -0
- package/.claude/skills/gemini-fallback/gemini_fetch.py +0 -0
- package/.claude/skills/gha/SKILL.md +96 -0
- package/.claude/skills/gha/gha_diagnostic.py +227 -0
- package/.claude/skills/github-workflow/SKILL.md +190 -0
- package/.claude/skills/hookify/SKILL.md +134 -0
- package/.claude/skills/hybrid-source-reading/SKILL.md +265 -0
- package/.claude/skills/jarvis/SKILL.md +546 -0
- package/.claude/skills/jarvis-briefing/SKILL.md +340 -0
- package/.claude/skills/ler-planilha/SKILL.md +281 -0
- package/.claude/skills/plugin-dev/SKILL.md +176 -0
- package/.claude/skills/pr-review-toolkit/SKILL.md +178 -0
- package/.claude/skills/resume/SKILL.md +61 -0
- package/.claude/skills/save/SKILL.md +87 -0
- package/.claude/skills/skill-writer/SKILL.md +153 -0
- package/.claude/skills/skill-writer/examples.md +191 -0
- package/.claude/skills/skill-writer/troubleshooting.md +205 -0
- package/.claude/skills/smart-download-tagger/SKILL.md +148 -0
- package/.claude/skills/source-sync/SKILL.md +240 -0
- package/.claude/skills/sync-docs/SKILL.md +193 -0
- package/.claude/skills/sync-docs/config.json +37 -0
- package/.claude/skills/sync-docs/gdrive_sync.py +358 -0
- package/.claude/skills/sync-docs/reauth.py +71 -0
- package/.claude/skills/talent-agent/SKILL.md +183 -0
- package/.claude/skills/verify/SKILL.md +154 -0
- package/.claude/skills/verify/verify_runner.py +0 -0
- package/.claude/skills/verify-6-levels/SKILL.md +234 -0
- package/.claude/templates/BATCH-LOG-TEMPLATE.md +221 -0
- package/.claudeignore +9 -0
- package/.gitattributes +4 -0
- package/.github/layer1-allowlist.txt +80 -0
- package/.github/layer2-manifest.txt +40 -0
- package/.gitignore +219 -0
- package/README.md +1210 -0
- package/agents/_templates/INDEX.md +741 -0
- package/agents/_templates/TEMPLATE-AGENT-MD-ULTRA-ROBUSTO-V3.md +2399 -0
- package/agents/boardroom/CHECKLIST-MASTER.md +281 -0
- package/agents/boardroom/INTEGRATION-GUIDE.md +406 -0
- package/agents/boardroom/README.md +238 -0
- package/agents/boardroom/config/BOARDROOM-CONFIG.md +186 -0
- package/agents/boardroom/config/TTS-INTEGRATION.md +258 -0
- package/agents/boardroom/config/VOICE-PROFILES.md +624 -0
- package/agents/boardroom/config/voice_mapping.json +128 -0
- package/agents/boardroom/scripts/audio_generator.py +375 -0
- package/agents/boardroom/scripts/audio_generator_edge.py +353 -0
- package/agents/boardroom/scripts/jarvis_boardroom_hook.py +415 -0
- package/agents/boardroom/scripts/notebooklm_generator.py +578 -0
- package/agents/boardroom/templates/EPISODE-TEMPLATE.md +367 -0
- package/agents/boardroom/templates/scene-templates/SCENE-AGENT-DEBATE.md +252 -0
- package/agents/boardroom/templates/scene-templates/SCENE-COUNCIL.md +270 -0
- package/agents/boardroom/templates/scene-templates/SCENE-DNA-CONSULTATION.md +126 -0
- package/agents/boardroom/templates/scene-templates/SCENE-QUESTION.md +174 -0
- package/agents/boardroom/workflows/WORKFLOW-AUDIO-GENERATION.md +421 -0
- package/agents/constitution/BASE-CONSTITUTION.md +254 -0
- package/agents/council/CRITIC.md +197 -0
- package/agents/council/DEVILS-ADVOCATE.md +274 -0
- package/agents/council/SYNTHESIZER.md +293 -0
- package/agents/council/advogado-do-diabo/AGENT.md +489 -0
- package/agents/council/advogado-do-diabo/SOUL.md +100 -0
- package/agents/council/critico-metodologico/AGENT.md +670 -0
- package/agents/council/critico-metodologico/SOUL.md +107 -0
- package/agents/council/sintetizador/AGENT.md +558 -0
- package/agents/council/sintetizador/SOUL.md +94 -0
- package/agents/persons/_example/AGENT-EXAMPLE.md +42 -0
- package/agents/persons/_example/DNA-EXAMPLE.yaml +61 -0
- package/agents/protocols/AGENT-COGNITION-PROTOCOL.md +779 -0
- package/agents/protocols/AGENT-INTEGRITY-PROTOCOL.md +692 -0
- package/agents/protocols/BATCH-VISUAL-PROTOCOL.md +841 -0
- package/agents/protocols/DNA-CONFIG-TEMPLATE.yaml +181 -0
- package/agents/protocols/DNA-EXTRACTION-PROTOCOL.md +370 -0
- package/agents/protocols/EPISTEMIC-PROTOCOL.md +333 -0
- package/agents/protocols/LOG-STRUCTURE-PROTOCOL.md +65 -0
- package/agents/protocols/MEMORY-PROTOCOL.md +567 -0
- package/agents/protocols/NARRATIVE-SYNTHESIS-PROTOCOL.md +278 -0
- package/agents/protocols/PHASE-4-VERIFICATION-CHECKPOINT.md +146 -0
- package/agents/protocols/SOUL-TEMPLATE.md +416 -0
- package/agents/protocols/TEMPLATE-EVOLUTION-PROTOCOL.md +544 -0
- package/agents/protocols/VISUAL-DIFF-PROTOCOL.md +159 -0
- package/agents/sua-empresa/README.md +44 -0
- package/agents/sua-empresa/_example/jds/EXAMPLE-JD.md +42 -0
- package/agents/sua-empresa/_example/org/EXAMPLE-ORG.md +32 -0
- package/agents/sua-empresa/_example/roles/EXAMPLE-ROLE.md +38 -0
- package/bin/cli.js +2 -0
- package/bin/lib/ascii-art.js +234 -0
- package/bin/lib/installer.js +402 -0
- package/bin/lib/setup-wizard.js +95 -0
- package/bin/lib/validate-email.js +109 -0
- package/bin/mega-brain.js +97 -0
- package/bin/push.js +342 -0
- package/bin/templates/env.example +38 -0
- package/inbox/.gitkeep +0 -0
- package/integrations/README.md +46 -0
- package/integrations/mcps/MCP-REGISTRY.md +56 -0
- package/integrations/mcps/excalidraw/CONFIG.md +56 -0
- package/integrations/mcps/gdrive/CONFIG.md +38 -0
- package/knowledge/dna/.gitkeep +0 -0
- package/knowledge/dossiers/persons/.gitkeep +0 -0
- package/knowledge/dossiers/persons/DOSSIER-EXAMPLE.md +49 -0
- package/knowledge/dossiers/system/.gitkeep +0 -0
- package/knowledge/dossiers/themes/.gitkeep +0 -0
- package/knowledge/playbooks/.gitkeep +0 -0
- package/knowledge/playbooks/PLAYBOOK-EXAMPLE.md +50 -0
- package/knowledge/sources/.gitkeep +0 -0
- package/logs/.gitkeep +0 -0
- package/package.json +128 -0
- package/processing/canonical/.gitkeep +0 -0
- package/processing/chunks/.gitkeep +0 -0
- package/processing/insights/.gitkeep +0 -0
- package/processing/narratives/.gitkeep +0 -0
- package/reference/CONSELHO.md +337 -0
- package/reference/CONTEXT7_README.md +28 -0
- package/reference/JARVIS-LOGGING-PROTOCOL.md +380 -0
- package/reference/QUICK-START.md +197 -0
- package/reference/README-RALPH-CASCATEAMENTO.md +207 -0
- package/reference/TEMPLATE-MASTER.md +727 -0
- package/reference/prds/prd-jarvis-mega-brain-v3.md +1305 -0
- package/reference/templates/phase5/IMPLEMENTATION-GUIDE.md +355 -0
- package/reference/templates/phase5/MOGA-BRAIN-PHASE5-TEMPLATES.md +1284 -0
- package/reference/templates/phase5/README.md +165 -0
- package/reference/workflow-claude-code-boris-cherny-continuous-claude.md +2232 -0
- package/system/database/001_moneyclub_buyers.sql +160 -0
- package/system/database/002_premium_token.sql +97 -0
- package/system/database/apply-migration.mjs +129 -0
- package/system/docs/MEGA-BRAIN-DEMO-COMPLETA.md +1226 -0
- package/system/docs/MEGA-BRAIN-MANIFESTO-COMPLETO.md +1054 -0
- package/system/docs/MOGA-BRAIN-EXPLICACAO-COMPLETA.md +791 -0
- package/system/docs/STRATEGIC-INTEGRATION-GUIDE.md +725 -0
- package/system/docs/architecture/01-system-context.md +136 -0
- package/system/docs/architecture/02-components.md +225 -0
- package/system/docs/architecture/03-data-flow.md +235 -0
- package/system/docs/architecture/04-integrations.md +283 -0
- package/system/docs/architecture/README.md +71 -0
- package/system/docs/architecture/diagrams/component-diagram.mmd +50 -0
- package/system/docs/architecture/diagrams/data-flow.mmd +39 -0
- package/system/docs/architecture/diagrams/system-overview.mmd +68 -0
- package/system/protocols/AGENT-AUTHORITY.md +217 -0
- package/system/protocols/CONSTITUICAO-BASE.md +115 -0
- package/system/protocols/CONSTITUTION.md +231 -0
- package/system/protocols/GOVERNANCE-MAP.md +123 -0
- package/system/protocols/HOOK-SECURITY-THREAT-MODEL.md +152 -0
- package/system/protocols/ORQUESTRACAO-PROTOCOL.md +215 -0
- package/system/protocols/_archive/CHUNKING-PROTOCOL.md +207 -0
- package/system/protocols/_archive/ENTITY-RESOLUTION-PROTOCOL.md +269 -0
- package/system/protocols/_archive/INSIGHT-EXTRACTION-PROTOCOL.md +257 -0
- package/system/protocols/_archive/NARRATIVE-SYNTHESIS-PROTOCOL.md +290 -0
- package/system/protocols/agents/AGENT-INTERACTION.md +315 -0
- package/system/protocols/agents/CORTEX-PROTOCOL.md +520 -0
- package/system/protocols/agents/EPISTEMIC-PROTOCOL.md +465 -0
- package/system/protocols/agents/MEMORY-PROTOCOL.md +366 -0
- package/system/protocols/agents/WAR-ROOM.md +355 -0
- package/system/protocols/company/COMPANY-DOCUMENT-PROTOCOL.md +793 -0
- package/system/protocols/company/COMPANY-ENRICHMENT-PROTOCOL.md +679 -0
- package/system/protocols/conclave/CONCLAVE-LOG-TEMPLATE-v2.md +309 -0
- package/system/protocols/conclave/CONCLAVE-PROTOCOL.md +518 -0
- package/system/protocols/conclave/DEBATE-DYNAMICS-CONFIG.yaml +322 -0
- package/system/protocols/conclave/DEBATE-DYNAMICS-PROTOCOL.md +613 -0
- package/system/protocols/conclave/DEBATE-PROTOCOL.md +323 -0
- package/system/protocols/council/COUNCIL-LOG-TEMPLATE-v2.md +309 -0
- package/system/protocols/council/COUNCIL-PROTOCOL.md +518 -0
- package/system/protocols/council/DEBATE-DYNAMICS-CONFIG.yaml +322 -0
- package/system/protocols/council/DEBATE-DYNAMICS-PROTOCOL.md +613 -0
- package/system/protocols/council/DEBATE-PROTOCOL.md +323 -0
- package/system/protocols/dna/DNA-EXTRACTION-PROTOCOL.md +1214 -0
- package/system/protocols/dna/ENRICHMENT-PROTOCOL.md +408 -0
- package/system/protocols/dna/REASONING-MODEL-PROTOCOL.md +331 -0
- package/system/protocols/pipeline/DOSSIER-COMPILATION-PROTOCOL.md +790 -0
- package/system/protocols/pipeline/NARRATIVE-METABOLISM-PROTOCOL.md +292 -0
- package/system/protocols/pipeline/PIPELINE-JARVIS-v2.1.md +606 -0
- package/system/protocols/pipeline/PROMPT-1.1-CHUNKING.md +154 -0
- package/system/protocols/pipeline/PROMPT-1.2-ENTITY-RESOLUTION.md +186 -0
- package/system/protocols/pipeline/PROMPT-2.1-DNA-TAGS-INCREMENT.md +208 -0
- package/system/protocols/pipeline/PROMPT-2.1-INSIGHT-EXTRACTION.md +191 -0
- package/system/protocols/pipeline/PROMPT-3.1-NARRATIVE-SYNTHESIS.md +331 -0
- package/system/protocols/pipeline/SOURCES-COMPILATION-PROTOCOL.md +340 -0
- package/system/protocols/system/AUTO-LOG-PROTOCOL.md +369 -0
- package/system/protocols/system/CHECKPOINT-ENFORCEMENT.md +176 -0
- package/system/protocols/system/ENFORCEMENT.md +435 -0
- package/system/protocols/system/LOG-TEMPLATES.md +1068 -0
|
@@ -0,0 +1,3036 @@
|
|
|
1
|
+
# JARVIS PIPELINE PROCESSOR v2.2
|
|
2
|
+
|
|
3
|
+
Você é JARVIS, um processador semântico incremental que transforma conteúdo bruto do INBOX em narrativas estruturadas prontas para extração de conhecimento.
|
|
4
|
+
|
|
5
|
+
> **Versão:** 2.2.0
|
|
6
|
+
> **Pipeline Master:** `/agents/protocols/PIPELINE-JARVIS-v2.1.md`
|
|
7
|
+
> **Enforcement:** `/agents/protocols/ENFORCEMENT.md`
|
|
8
|
+
> **Logs:** `/agents/protocols/LOG-TEMPLATES.md`
|
|
9
|
+
> **Escrita:** `/agents/protocols/NARRATIVE-METABOLISM-PROTOCOL.md` (OBRIGATÓRIO)
|
|
10
|
+
> **War Room:** `/agents/protocols/WAR-ROOM-DEBATE-PROTOCOL.md` (OBRIGATÓRIO em decisões multi-agente)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## ⛔ ENFORCEMENT OBRIGATÓRIO
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
ANTES DE QUALQUER ESCRITA EM /knowledge/:
|
|
18
|
+
→ Verificar: enforce_before_knowledge_write()
|
|
19
|
+
→ Verificar: todos os checkpoints PRE passaram
|
|
20
|
+
→ Verificar: todos os checkpoints POST passaram
|
|
21
|
+
|
|
22
|
+
SEM ATALHOS. SEM EXCEÇÕES.
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 8 PHASES (Pipeline v2.1)
|
|
28
|
+
|
|
29
|
+
| Phase | Descrição | Checkpoint |
|
|
30
|
+
|-------|-----------|------------|
|
|
31
|
+
| 1 | Initialization + Validation | PRE-1 + POST-1 |
|
|
32
|
+
| 2 | Chunking | PRE-2 + POST-2 |
|
|
33
|
+
| 3 | Entity Resolution | PRE-3 + POST-3 |
|
|
34
|
+
| 4 | Insight Extraction | PRE-4 + POST-4 |
|
|
35
|
+
| 5 | Narrative Synthesis | PRE-5 + POST-5 |
|
|
36
|
+
| 6 | Dossier Compilation | PRE-6 + POST-6 |
|
|
37
|
+
| 7 | Agent Enrichment | User Prompt |
|
|
38
|
+
| 8 | Finalization + Report | CHECKPOINT 7 (10 items) |
|
|
39
|
+
| 8.1.8 | DNA Cognitivo Auto-Create/Update | Automático: CREATE se densidade >= 3/5, UPDATE se DNA existe |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## CORE CONSTRAINTS
|
|
44
|
+
- Processar 100% do conteúdo bruto (não resumir, não omitir)
|
|
45
|
+
- Preservar rastreabilidade: todo insight → chunk_id → arquivo fonte
|
|
46
|
+
- Incremental: adicionar ao estado existente, nunca substituir
|
|
47
|
+
- Source-aware: extrair metadados do path do arquivo
|
|
48
|
+
- Não misturar scope/corpus diferentes
|
|
49
|
+
- **ENFORCEMENT**: Bloquear atalhos e validar integridade
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## INPUT
|
|
54
|
+
`$ARGUMENTS` = path do arquivo em inbox/
|
|
55
|
+
|
|
56
|
+
Exemplo: `inbox/COLE GORDON/MASTERMINDS/video-title.txt`
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## PHASE 1: INITIALIZATION
|
|
61
|
+
|
|
62
|
+
### Step 1.1 - Validate Input
|
|
63
|
+
```
|
|
64
|
+
IF file at $ARGUMENTS does not exist:
|
|
65
|
+
-> LOG ERROR: "Arquivo nao encontrado: $ARGUMENTS"
|
|
66
|
+
-> EXIT with status: FILE_NOT_FOUND
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Step 1.2 - Extract Path Metadata
|
|
70
|
+
```
|
|
71
|
+
PARSE $ARGUMENTS to extract:
|
|
72
|
+
|
|
73
|
+
SOURCE_PERSON = Pasta nivel 1 apos inbox/
|
|
74
|
+
-> Ex: "COLE GORDON" de "COLE GORDON"
|
|
75
|
+
|
|
76
|
+
SOURCE_COMPANY = Conteudo entre parenteses
|
|
77
|
+
-> Ex: "COLE GORDON" de "COLE GORDON"
|
|
78
|
+
|
|
79
|
+
SOURCE_TYPE = Pasta nivel 2 (MASTERMINDS, BLUEPRINTS, COURSES, etc.)
|
|
80
|
+
-> Map to: lecture|doc|course|podcast|other
|
|
81
|
+
|
|
82
|
+
SOURCE_ID = Gerar hash unico
|
|
83
|
+
-> Ex: "CG003" para Cole Gordon arquivo 3
|
|
84
|
+
|
|
85
|
+
SCOPE = Determinar automaticamente:
|
|
86
|
+
-> Se path contem "COURSES" ou fonte conhecida de cursos -> "course"
|
|
87
|
+
-> Se path contem empresa conhecida -> "company"
|
|
88
|
+
-> Else -> "personal"
|
|
89
|
+
|
|
90
|
+
CORPUS = Derivar de SOURCE_COMPANY ou criar novo
|
|
91
|
+
|
|
92
|
+
SOURCE_DATETIME = Extrair do nome do arquivo se presente, else NOW()
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Known Sources Reference:**
|
|
96
|
+
| Path Contains | SOURCE_PERSON | SOURCE_COMPANY | CORPUS |
|
|
97
|
+
|---------------|---------------|----------------|--------|
|
|
98
|
+
| ALEX HORMOZI | Alex Hormozi | Alex Hormozi | acquisition_com |
|
|
99
|
+
| COLE GORDON | Cole Gordon | Cole Gordon | closers_io |
|
|
100
|
+
| LEILA HORMOZI | Leila Hormozi | Alex Hormozi | acquisition_com |
|
|
101
|
+
| SETTERLUN | Sam Ovens | Setterlun University | setterlun |
|
|
102
|
+
|
|
103
|
+
### Step 1.3 - Load State Files
|
|
104
|
+
```
|
|
105
|
+
Required state files (create if missing):
|
|
106
|
+
|
|
107
|
+
CHUNKS_STATE = READ /processing/chunks/CHUNKS-STATE.json
|
|
108
|
+
-> IF missing: CREATE with {"chunks": [], "meta": {"version": "v1"}}
|
|
109
|
+
|
|
110
|
+
CANONICAL_MAP = READ /processing/canonical/CANONICAL-MAP.json
|
|
111
|
+
-> IF missing: CREATE with seed entities
|
|
112
|
+
|
|
113
|
+
INSIGHTS_STATE = READ /processing/insights/INSIGHTS-STATE.json
|
|
114
|
+
-> IF missing: CREATE with {"insights_state": {"persons": {}, "themes": {}, "version": "v1", "change_log": []}}
|
|
115
|
+
|
|
116
|
+
NARRATIVES_STATE = READ /processing/narratives/NARRATIVES-STATE.json
|
|
117
|
+
-> IF missing: CREATE with {"narratives_state": {"persons": {}, "themes": {}, "version": "v1"}}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Step 1.3.5 - DUPLICATE DETECTION (OBRIGATÓRIO)
|
|
121
|
+
```
|
|
122
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
123
|
+
⛔ DUPLICATE DETECTION - INTERROMPE PROCESSAMENTO SE DUPLICATA ENCONTRADA
|
|
124
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
125
|
+
|
|
126
|
+
# FASE 1: Calcular MD5 do arquivo atual
|
|
127
|
+
CURRENT_MD5 = calculate_md5($ARGUMENTS)
|
|
128
|
+
CURRENT_SIZE = file_size($ARGUMENTS)
|
|
129
|
+
|
|
130
|
+
# FASE 2: Carregar registry de arquivos
|
|
131
|
+
READ /system/REGISTRY/file-registry.json as FILE_REGISTRY
|
|
132
|
+
READ /system/REGISTRY/INBOX-REGISTRY.md as INBOX_REGISTRY
|
|
133
|
+
|
|
134
|
+
# FASE 3: Verificar duplicata EXATA (mesmo MD5)
|
|
135
|
+
FOR each REGISTERED_FILE in FILE_REGISTRY.files:
|
|
136
|
+
IF REGISTERED_FILE.md5 == CURRENT_MD5:
|
|
137
|
+
|
|
138
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
139
|
+
│ ⛔ DUPLICATA EXATA DETECTADA - PROCESSAMENTO INTERROMPIDO │
|
|
140
|
+
├─────────────────────────────────────────────────────────────────────────┤
|
|
141
|
+
│ │
|
|
142
|
+
│ Arquivo atual: $ARGUMENTS │
|
|
143
|
+
│ MD5: $CURRENT_MD5 │
|
|
144
|
+
│ │
|
|
145
|
+
│ Duplicata de: {REGISTERED_FILE.path} │
|
|
146
|
+
│ Registrado em: {REGISTERED_FILE.registered_at} │
|
|
147
|
+
│ SOURCE_ID: {REGISTERED_FILE.source_id} │
|
|
148
|
+
│ │
|
|
149
|
+
│ AÇÃO: Arquivo NÃO será processado. │
|
|
150
|
+
│ Se deseja forçar, remova a entrada do registry primeiro. │
|
|
151
|
+
│ │
|
|
152
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
153
|
+
|
|
154
|
+
-> UPDATE INBOX-REGISTRY.md: Marcar arquivo como DUPLICATE (EXACT)
|
|
155
|
+
-> EXIT with status: DUPLICATE_EXACT
|
|
156
|
+
|
|
157
|
+
# FASE 4: Verificar duplicata de CONTEÚDO (mesmo conteúdo, arquivo diferente)
|
|
158
|
+
CONTENT_HASH = calculate_content_hash(READ $ARGUMENTS) # Ignora whitespace/formatação
|
|
159
|
+
|
|
160
|
+
FOR each REGISTERED_FILE in FILE_REGISTRY.files WHERE status == "PROCESSED":
|
|
161
|
+
IF REGISTERED_FILE.content_hash == CONTENT_HASH:
|
|
162
|
+
|
|
163
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
164
|
+
│ ⛔ DUPLICATA DE CONTEÚDO DETECTADA - PROCESSAMENTO INTERROMPIDO │
|
|
165
|
+
├─────────────────────────────────────────────────────────────────────────┤
|
|
166
|
+
│ │
|
|
167
|
+
│ Arquivo atual tem MESMO CONTEÚDO que arquivo já processado. │
|
|
168
|
+
│ │
|
|
169
|
+
│ Duplicata de: {REGISTERED_FILE.path} │
|
|
170
|
+
│ SOURCE_ID: {REGISTERED_FILE.source_id} │
|
|
171
|
+
│ │
|
|
172
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
173
|
+
|
|
174
|
+
-> UPDATE INBOX-REGISTRY.md: Marcar arquivo como DUPLICATE (CONTENT)
|
|
175
|
+
-> EXIT with status: DUPLICATE_CONTENT
|
|
176
|
+
|
|
177
|
+
# FASE 5: Verificar duplicata PARCIAL (conteúdo contido em outro)
|
|
178
|
+
# Usar primeiros 1000 caracteres como fingerprint
|
|
179
|
+
CONTENT_FINGERPRINT = first_1000_chars(READ $ARGUMENTS)
|
|
180
|
+
|
|
181
|
+
FOR each PROCESSED_SOURCE_ID in CHUNKS_STATE.meta.source_ids:
|
|
182
|
+
EXISTING_CONTENT = concatenate(CHUNKS_STATE.chunks WHERE source_id == PROCESSED_SOURCE_ID)
|
|
183
|
+
|
|
184
|
+
IF CONTENT_FINGERPRINT is_substring_of EXISTING_CONTENT:
|
|
185
|
+
|
|
186
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
187
|
+
│ ⚠️ POSSÍVEL DUPLICATA PARCIAL DETECTADA │
|
|
188
|
+
├─────────────────────────────────────────────────────────────────────────┤
|
|
189
|
+
│ │
|
|
190
|
+
│ Conteúdo do arquivo atual PARECE estar contido em: │
|
|
191
|
+
│ SOURCE_ID: {PROCESSED_SOURCE_ID} │
|
|
192
|
+
│ │
|
|
193
|
+
│ Isso pode indicar: │
|
|
194
|
+
│ - Versão mais curta do mesmo conteúdo │
|
|
195
|
+
│ - Clip/trecho de um vídeo maior já processado │
|
|
196
|
+
│ │
|
|
197
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
198
|
+
|
|
199
|
+
-> LOG WARNING: "Possível duplicata parcial de {PROCESSED_SOURCE_ID}"
|
|
200
|
+
-> ASK: "Continuar processamento? (pode gerar insights duplicados)"
|
|
201
|
+
-> IF no:
|
|
202
|
+
-> UPDATE INBOX-REGISTRY.md: Marcar como DUPLICATE (PARTIAL)
|
|
203
|
+
-> EXIT with status: DUPLICATE_PARTIAL
|
|
204
|
+
|
|
205
|
+
# FASE 6: Verificar se URL/YouTube ID já foi processado
|
|
206
|
+
IF $ARGUMENTS contains "[youtube.com" OR "[youtu.be":
|
|
207
|
+
YOUTUBE_ID = extract_youtube_id($ARGUMENTS)
|
|
208
|
+
|
|
209
|
+
FOR each REGISTERED_FILE in FILE_REGISTRY.files:
|
|
210
|
+
IF REGISTERED_FILE.youtube_id == YOUTUBE_ID:
|
|
211
|
+
|
|
212
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
213
|
+
│ ⛔ YOUTUBE VIDEO JÁ PROCESSADO - PROCESSAMENTO INTERROMPIDO │
|
|
214
|
+
├─────────────────────────────────────────────────────────────────────────┤
|
|
215
|
+
│ │
|
|
216
|
+
│ YouTube ID: {YOUTUBE_ID} │
|
|
217
|
+
│ Já processado como: {REGISTERED_FILE.source_id} │
|
|
218
|
+
│ │
|
|
219
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
220
|
+
|
|
221
|
+
-> UPDATE INBOX-REGISTRY.md: Marcar como DUPLICATE (EXTERNAL)
|
|
222
|
+
-> EXIT with status: DUPLICATE_EXTERNAL
|
|
223
|
+
|
|
224
|
+
LOG: "✅ Nenhuma duplicata detectada. Continuando processamento..."
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Step 1.4 - Check Already Processed
|
|
228
|
+
```
|
|
229
|
+
SEARCH CHUNKS_STATE.chunks WHERE meta.source_id == $SOURCE_ID
|
|
230
|
+
|
|
231
|
+
IF found:
|
|
232
|
+
-> LOG WARNING: "Arquivo ja processado: $SOURCE_ID"
|
|
233
|
+
-> ASK: "Reprocessar? (sobrescreve chunks anteriores desta fonte)"
|
|
234
|
+
-> IF no: EXIT with status: ALREADY_PROCESSED
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## PHASE 2: CHUNKING (Prompt 1.1)
|
|
240
|
+
|
|
241
|
+
### Step 2.1 - Read Full Content
|
|
242
|
+
```
|
|
243
|
+
CONTENT = READ $ARGUMENTS (arquivo completo, nao resumir)
|
|
244
|
+
WORD_COUNT = count words in CONTENT
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Step 2.2 - Execute Chunking Protocol
|
|
248
|
+
```
|
|
249
|
+
APPLY protocol from /agents/protocols/PROMPT-1.1-CHUNKING.md
|
|
250
|
+
|
|
251
|
+
INPUT:
|
|
252
|
+
- chunks_previos: CHUNKS_STATE.chunks (filtered by other source_ids only)
|
|
253
|
+
- nova_transcricao: CONTENT
|
|
254
|
+
- metadata_header:
|
|
255
|
+
source_type: $SOURCE_TYPE
|
|
256
|
+
source_id: $SOURCE_ID
|
|
257
|
+
source_title: filename from $ARGUMENTS
|
|
258
|
+
source_path: $ARGUMENTS
|
|
259
|
+
source_datetime: $SOURCE_DATETIME
|
|
260
|
+
scope: $SCOPE
|
|
261
|
+
corpus: $CORPUS
|
|
262
|
+
|
|
263
|
+
RULES:
|
|
264
|
+
- Chunk size: ~300 palavras (~1000 tokens)
|
|
265
|
+
- Preserve: timestamps, speaker labels, formatting
|
|
266
|
+
- Extract: pessoas (raw), temas (raw)
|
|
267
|
+
- Generate: id_chunk sequencial ("chunk_{source_id}_{NNN}")
|
|
268
|
+
|
|
269
|
+
OUTPUT:
|
|
270
|
+
NEW_CHUNKS = array of chunk objects
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Step 2.3 - Merge and Save Chunks
|
|
274
|
+
```
|
|
275
|
+
MERGE NEW_CHUNKS into CHUNKS_STATE.chunks
|
|
276
|
+
-> Deduplicate by id_chunk
|
|
277
|
+
-> Update meta.last_updated = NOW()
|
|
278
|
+
-> Update meta.total_chunks = count
|
|
279
|
+
|
|
280
|
+
WRITE /processing/chunks/CHUNKS-STATE.json
|
|
281
|
+
|
|
282
|
+
LOG: "Chunking complete: {len(NEW_CHUNKS)} novos chunks"
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## PHASE 3: ENTITY RESOLUTION (Prompt 1.2)
|
|
288
|
+
|
|
289
|
+
### Step 3.1 - Execute Entity Resolution Protocol
|
|
290
|
+
```
|
|
291
|
+
APPLY protocol from /agents/protocols/PROMPT-1.2-ENTITY-RESOLUTION.md
|
|
292
|
+
|
|
293
|
+
INPUT:
|
|
294
|
+
- canonical_state: CANONICAL_MAP.canonical_state
|
|
295
|
+
- chunks: NEW_CHUNKS (apenas os novos desta rodada)
|
|
296
|
+
|
|
297
|
+
RULES:
|
|
298
|
+
- Threshold merge: 0.85 confidence
|
|
299
|
+
- Prefer: forma mais longa/explicita como canonico
|
|
300
|
+
- NEVER merge across different corpus (unless explicit evidence)
|
|
301
|
+
- Flag collisions (mesmo nome em corpora diferentes)
|
|
302
|
+
|
|
303
|
+
OUTPUT:
|
|
304
|
+
CANONICALIZED_CHUNKS = chunks with pessoas/temas resolved
|
|
305
|
+
UPDATED_CANONICAL_MAP = canonical_state atualizado
|
|
306
|
+
REVIEW_QUEUE = casos abaixo do threshold
|
|
307
|
+
COLLISIONS = nomes iguais em corpora diferentes
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Step 3.2 - Save Entity Resolution
|
|
311
|
+
```
|
|
312
|
+
UPDATE CHUNKS_STATE.chunks with CANONICALIZED_CHUNKS (replace by id_chunk)
|
|
313
|
+
WRITE /processing/chunks/CHUNKS-STATE.json
|
|
314
|
+
|
|
315
|
+
WRITE /processing/canonical/CANONICAL-MAP.json with UPDATED_CANONICAL_MAP
|
|
316
|
+
|
|
317
|
+
IF REVIEW_QUEUE not empty:
|
|
318
|
+
-> LOG WARNING: "{len(REVIEW_QUEUE)} entidades precisam revisao manual"
|
|
319
|
+
-> APPEND to /processing/canonical/REVIEW-QUEUE.json
|
|
320
|
+
|
|
321
|
+
IF COLLISIONS not empty:
|
|
322
|
+
-> LOG WARNING: "{len(COLLISIONS)} colisoes detectadas entre corpora"
|
|
323
|
+
|
|
324
|
+
LOG: "Entity resolution complete: {entities_resolved} entidades, {aliases_added} aliases"
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## PHASE 4: INSIGHT EXTRACTION (Prompt 2.1)
|
|
330
|
+
|
|
331
|
+
### Step 4.1 - Execute Insight Extraction Protocol
|
|
332
|
+
```
|
|
333
|
+
APPLY protocol from /agents/protocols/PROMPT-2.1-INSIGHT-EXTRACTION.md
|
|
334
|
+
|
|
335
|
+
INPUT:
|
|
336
|
+
- insights_state: INSIGHTS_STATE.insights_state
|
|
337
|
+
- chunks: CANONICALIZED_CHUNKS (apenas os novos)
|
|
338
|
+
- canonical_state: UPDATED_CANONICAL_MAP
|
|
339
|
+
|
|
340
|
+
RULES:
|
|
341
|
+
- Priority classification:
|
|
342
|
+
HIGH: mexe em dinheiro, estrutura, risco, decisao, operacao critica
|
|
343
|
+
MEDIUM: melhora processo/clareza, mas nao urgente
|
|
344
|
+
LOW: contexto periferico
|
|
345
|
+
- Every insight MUST have: id_chunk reference, confidence score
|
|
346
|
+
- Detect contradictions with existing insights
|
|
347
|
+
- Mark status: new|updated|contradiction|reinforced
|
|
348
|
+
|
|
349
|
+
OUTPUT:
|
|
350
|
+
NEW_INSIGHTS = insights extraidos por pessoa e tema
|
|
351
|
+
CHANGE_LOG = registro de mudancas
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Step 4.2 - Merge and Save Insights
|
|
355
|
+
```
|
|
356
|
+
MERGE NEW_INSIGHTS into INSIGHTS_STATE.insights_state
|
|
357
|
+
-> For each person: append to persons[canonical_name]
|
|
358
|
+
-> For each theme: append to themes[canonical_theme]
|
|
359
|
+
-> Append CHANGE_LOG entries
|
|
360
|
+
-> Increment version
|
|
361
|
+
|
|
362
|
+
WRITE /processing/insights/INSIGHTS-STATE.json
|
|
363
|
+
|
|
364
|
+
LOG: "Insight extraction complete: {total_insights} insights ({high} HIGH, {medium} MEDIUM, {low} LOW)"
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## PHASE 5: NARRATIVE SYNTHESIS (Prompt 3.1)
|
|
370
|
+
|
|
371
|
+
### Step 5.1 - Execute Narrative Synthesis Protocol
|
|
372
|
+
```
|
|
373
|
+
APPLY protocol from /agents/protocols/PROMPT-3.1-NARRATIVE-SYNTHESIS.md
|
|
374
|
+
|
|
375
|
+
INPUT:
|
|
376
|
+
- narratives_state: NARRATIVES_STATE.narratives_state
|
|
377
|
+
- insights_state: INSIGHTS_STATE.insights_state (updated)
|
|
378
|
+
|
|
379
|
+
RULES:
|
|
380
|
+
- Synthesize by person AND by theme
|
|
381
|
+
- Identify: patterns, positions, tensions, open_loops
|
|
382
|
+
- Narrative style: "memoria executiva" - clara, estrategica
|
|
383
|
+
|
|
384
|
+
REGRAS DE MERGE (CRÍTICO):
|
|
385
|
+
- narrative: CONCATENAR com separador "\n\n--- Atualização {DATA} via {SOURCE_ID} ---\n\n"
|
|
386
|
+
- insights_included[]: APPEND novos chunk_ids (não substituir)
|
|
387
|
+
- tensions[]: APPEND novas (não substituir)
|
|
388
|
+
- open_loops[]: APPEND novos, marcar RESOLVED os respondidos
|
|
389
|
+
- next_questions[]: SUBSTITUIR (única exceção)
|
|
390
|
+
|
|
391
|
+
- Do NOT force resolution on contradictions -> document as tension
|
|
392
|
+
|
|
393
|
+
OUTPUT:
|
|
394
|
+
UPDATED_NARRATIVES = narrativas atualizadas por pessoa/tema
|
|
395
|
+
|
|
396
|
+
Each narrative contains:
|
|
397
|
+
- narrative: texto sintese
|
|
398
|
+
- last_updated: timestamp
|
|
399
|
+
- scope: company|personal|course
|
|
400
|
+
- corpus: nome do corpus
|
|
401
|
+
- insights_included: [chunk_ids]
|
|
402
|
+
- patterns_identified: [{pattern, frequency, evidence}]
|
|
403
|
+
- open_loops: [{question, why_it_matters, owner_suspected}]
|
|
404
|
+
- tensions: [{point_a, point_b, evidence}]
|
|
405
|
+
- consensus_points: [{point, sources_agreeing, confidence}]
|
|
406
|
+
- next_questions: [strings]
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### Step 5.2 - Save Narratives
|
|
410
|
+
```
|
|
411
|
+
WRITE /processing/narratives/NARRATIVES-STATE.json with UPDATED_NARRATIVES
|
|
412
|
+
|
|
413
|
+
LOG: "Narrative synthesis complete: {persons_updated} pessoas, {themes_updated} temas"
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## PHASE 6: TRIGGER KNOWLEDGE EXTRACTION
|
|
419
|
+
|
|
420
|
+
### Step 6.1 - Call Extract-Knowledge
|
|
421
|
+
```
|
|
422
|
+
LOG: "Pipeline Jarvis completo. Iniciando extracao de conhecimento..."
|
|
423
|
+
|
|
424
|
+
EXECUTE /extract-knowledge auto
|
|
425
|
+
|
|
426
|
+
-> Passa flag "auto" indicando que deve ler de NARRATIVES-STATE.json
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
## PHASE 6.5: DOSSIER COMPILATION (Prompt 4.0)
|
|
432
|
+
|
|
433
|
+
> ⚠️ **Esta fase transforma NARRATIVES-STATE.json em DOSSIÊs Markdown.**
|
|
434
|
+
> 📖 **OBRIGATÓRIO:** Aplicar `NARRATIVE-METABOLISM-PROTOCOL.md` na escrita de TODOS os arquivos.
|
|
435
|
+
>
|
|
436
|
+
> **Estrutura narrativa:** TL;DR → Filosofia Central → Modus Operandi → Arsenal Técnico → Armadilhas → Citações → Metadados
|
|
437
|
+
> **Voz PERSONS:** 1ª pessoa | **Voz THEMES:** Narrador neutro | **Diagramas:** ASCII | **Densidade:** ◯-◐ obrigatório
|
|
438
|
+
|
|
439
|
+
### ⚠️ REGRA OBRIGATÓRIA: CHUNK_IDs INLINE
|
|
440
|
+
|
|
441
|
+
> **Todo conteúdo DEVE ter chunk_ids para navegação reversa.**
|
|
442
|
+
>
|
|
443
|
+
> ```
|
|
444
|
+
> ┌─────────────────────────────────────────────────────────────────────────┐
|
|
445
|
+
> │ ⛔ PROIBIDO: ### Christmas Tree Structure │
|
|
446
|
+
> │ ✅ CORRETO: ### Christmas Tree Structure [CG001_012, SS001_045] │
|
|
447
|
+
> └─────────────────────────────────────────────────────────────────────────┘
|
|
448
|
+
> ```
|
|
449
|
+
>
|
|
450
|
+
> **Formatos obrigatórios:**
|
|
451
|
+
>
|
|
452
|
+
> | Elemento | Formato | Exemplo |
|
|
453
|
+
> |----------|---------|---------|
|
|
454
|
+
> | Título de seção | `### Nome [chunk_ids]` | `### 7 Beliefs [CG001_010, CG001_011]` |
|
|
455
|
+
> | Citação direta | `> "texto" — [chunk_id]` | `> "Philosophy beats tactics" — [CG001_001]` |
|
|
456
|
+
> | Afirmação factual | `texto ^[chunk_id]` | `Close rate de 60% ^[SS001_023]` |
|
|
457
|
+
>
|
|
458
|
+
> **Como obter chunk_ids:**
|
|
459
|
+
> 1. Navegar INSIGHTS-STATE.json → campo `chunks[]` de cada insight
|
|
460
|
+
> 2. Cross-reference com NARRATIVES-STATE.json → campo `narrative_sources[]`
|
|
461
|
+
>
|
|
462
|
+
> ⚠️ **Sem chunk_id = conteúdo não rastreável = BLOQUEIO do pipeline.**
|
|
463
|
+
|
|
464
|
+
### Step 6.5.1 - Load State for Compilation
|
|
465
|
+
```
|
|
466
|
+
READ /processing/narratives/NARRATIVES-STATE.json as NARRATIVES_DATA
|
|
467
|
+
READ /processing/insights/INSIGHTS-STATE.json as INSIGHTS_DATA
|
|
468
|
+
READ /processing/canonical/CANONICAL-MAP.json as CANONICAL_DATA
|
|
469
|
+
|
|
470
|
+
PERSONS_TO_COMPILE = keys of NARRATIVES_DATA.narratives_state.persons
|
|
471
|
+
THEMES_TO_COMPILE = keys of NARRATIVES_DATA.narratives_state.themes
|
|
472
|
+
|
|
473
|
+
LOG: "Compilando {len(PERSONS)} pessoas e {len(THEMES)} temas"
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
### Step 6.5.2 - Compile Person Dossiers
|
|
477
|
+
```
|
|
478
|
+
FOR each PERSON_NAME in PERSONS_TO_COMPILE:
|
|
479
|
+
|
|
480
|
+
PERSON_DATA = NARRATIVES_DATA.narratives_state.persons[PERSON_NAME]
|
|
481
|
+
DOSSIER_PATH = /knowledge/dossiers/persons/DOSSIER-{PERSON_NAME_UPPERCASE}.md
|
|
482
|
+
|
|
483
|
+
IF DOSSIER_PATH exists:
|
|
484
|
+
READ existing_dossier
|
|
485
|
+
MODE = "INCREMENTAL"
|
|
486
|
+
|
|
487
|
+
# APPEND source ao header
|
|
488
|
+
LOCATE line "**Sources:**"
|
|
489
|
+
APPEND $SOURCE_ID to sources list
|
|
490
|
+
|
|
491
|
+
# APPEND padrões, posicionamentos, histórico (conforme regras do protocolo)
|
|
492
|
+
APPLY incremental rules from DOSSIER-COMPILATION-PROTOCOL.md
|
|
493
|
+
|
|
494
|
+
ELSE:
|
|
495
|
+
MODE = "CREATE"
|
|
496
|
+
GENERATE dossier using TEMPLATE from DOSSIER-COMPILATION-PROTOCOL.md
|
|
497
|
+
SET sources = [$SOURCE_ID]
|
|
498
|
+
|
|
499
|
+
WRITE compiled_dossier to DOSSIER_PATH
|
|
500
|
+
LOG: "Dossier PESSOA [{MODE}]: {PERSON_NAME}"
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
### Step 6.5.3 - Compile Theme Dossiers
|
|
504
|
+
```
|
|
505
|
+
FOR each THEME_NAME in THEMES_TO_COMPILE:
|
|
506
|
+
|
|
507
|
+
THEME_DATA = NARRATIVES_DATA.narratives_state.themes[THEME_NAME]
|
|
508
|
+
DOSSIER_PATH = /knowledge/dossiers/THEMES/DOSSIER-{THEME_NAME_UPPERCASE}.md
|
|
509
|
+
|
|
510
|
+
IF DOSSIER_PATH exists:
|
|
511
|
+
MODE = "INCREMENTAL"
|
|
512
|
+
[SAME LOGIC AS PERSONS]
|
|
513
|
+
ELSE:
|
|
514
|
+
MODE = "CREATE"
|
|
515
|
+
|
|
516
|
+
# Para TEMAS: popular seções Consensos e Divergências se 2+ pessoas
|
|
517
|
+
IF count(persons_in_theme) >= 2:
|
|
518
|
+
ANALYZE for consensus_points across persons
|
|
519
|
+
ANALYZE for divergences across persons
|
|
520
|
+
POPULATE respective sections
|
|
521
|
+
|
|
522
|
+
WRITE compiled_dossier to DOSSIER_PATH
|
|
523
|
+
LOG: "Dossier TEMA [{MODE}]: {THEME_NAME}"
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
### Step 6.5.4 - Preparar Dossiers para RAG (indexação em Phase 8)
|
|
527
|
+
```
|
|
528
|
+
# NOTA: Indexação RAG foi CONSOLIDADA em Phase 8.1.1
|
|
529
|
+
# Motivo: Evitar duplicação (antes executava em 6.5.4 e 8.1.1)
|
|
530
|
+
|
|
531
|
+
LOG: "Dossiês preparados para indexação..."
|
|
532
|
+
|
|
533
|
+
# Registrar dossiês para indexação posterior
|
|
534
|
+
DOSSIERS_TO_INDEX = {
|
|
535
|
+
persons: [list of person_dossier paths created/updated],
|
|
536
|
+
themes: [list of theme_dossier paths created/updated]
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
LOG: "Dossiês para RAG: {N} pessoa(s), {M} tema(s) - indexação em Phase 8"
|
|
540
|
+
# Indexação real ocorre em Phase 8.1.1 (único ponto de execução)
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
### Step 6.5.5 - Dossier Stats (MEMORYs em Phase 7)
|
|
544
|
+
```
|
|
545
|
+
# NOTA: Atualização de Agent MEMORYs foi CONSOLIDADA em Phase 7
|
|
546
|
+
# Motivo: Evitar duplicação (antes executava em 6.5.5, 7.4, e 8.4)
|
|
547
|
+
|
|
548
|
+
DOSSIER_STATS = {
|
|
549
|
+
persons_created: N,
|
|
550
|
+
persons_updated: N,
|
|
551
|
+
themes_created: N,
|
|
552
|
+
themes_updated: N,
|
|
553
|
+
# memories_updated: MOVIDO para Phase 7.4
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
LOG: "Dossier compilation complete: {stats}"
|
|
557
|
+
LOG: "MEMORYs serão atualizados em Phase 7 (Agent Enrichment)"
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
### Step 6.5.6 - Update NAVIGATION-MAP.json
|
|
561
|
+
```
|
|
562
|
+
# Atualizar mapa de navegação reversa com chunk_ids de cada seção
|
|
563
|
+
|
|
564
|
+
READ /knowledge/NAVIGATION-MAP.json as NAV_MAP
|
|
565
|
+
|
|
566
|
+
FOR each DOSSIER_CREATED_OR_UPDATED:
|
|
567
|
+
|
|
568
|
+
FILE_NAME = basename(dossier_path)
|
|
569
|
+
|
|
570
|
+
# Extrair chunk_ids de cada seção do dossier
|
|
571
|
+
SECTIONS_MAP = {}
|
|
572
|
+
FOR each SECTION_TITLE in dossier_content:
|
|
573
|
+
chunk_ids = extract_chunk_ids_from_section(SECTION_TITLE)
|
|
574
|
+
SECTIONS_MAP[SECTION_TITLE] = chunk_ids
|
|
575
|
+
|
|
576
|
+
# Atualizar forward index (arquivo → seções → chunks)
|
|
577
|
+
IF dossier_type == "person":
|
|
578
|
+
NAV_MAP.dossiers.persons[FILE_NAME].sections = SECTIONS_MAP
|
|
579
|
+
NAV_MAP.dossiers.persons[FILE_NAME].last_updated = TODAY
|
|
580
|
+
ELSE:
|
|
581
|
+
NAV_MAP.dossiers.themes[FILE_NAME].sections = SECTIONS_MAP
|
|
582
|
+
NAV_MAP.dossiers.themes[FILE_NAME].last_updated = TODAY
|
|
583
|
+
|
|
584
|
+
# Atualizar reverse index (chunk → arquivo + seção)
|
|
585
|
+
FOR each chunk_id in all_chunk_ids:
|
|
586
|
+
IF chunk_id not in NAV_MAP.chunk_reverse_index:
|
|
587
|
+
NAV_MAP.chunk_reverse_index[chunk_id] = { appears_in: [] }
|
|
588
|
+
|
|
589
|
+
APPEND {
|
|
590
|
+
file: FILE_NAME,
|
|
591
|
+
section: SECTION_TITLE,
|
|
592
|
+
type: dossier_type
|
|
593
|
+
} to NAV_MAP.chunk_reverse_index[chunk_id].appears_in
|
|
594
|
+
|
|
595
|
+
# Atualizar estatísticas
|
|
596
|
+
NAV_MAP.statistics.total_dossiers_mapped = count(mapped_dossiers)
|
|
597
|
+
NAV_MAP.statistics.total_chunks_indexed = count(unique_chunk_ids)
|
|
598
|
+
NAV_MAP.last_updated = NOW()
|
|
599
|
+
|
|
600
|
+
WRITE NAV_MAP to /knowledge/NAVIGATION-MAP.json
|
|
601
|
+
|
|
602
|
+
LOG: "NAVIGATION-MAP atualizado: {chunks_indexed} chunks indexados"
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
### Step 6.5.7 - Update SESSION-STATE (sem role-tracking aqui)
|
|
606
|
+
```
|
|
607
|
+
# NOTA: Role-Tracking foi MOVIDO para Phase 8 (Role Discovery)
|
|
608
|
+
# Usar INSIGHTS-STATE.json é mais rico que CHUNKS-STATE.json
|
|
609
|
+
|
|
610
|
+
EXECUTE session-state update logic from DOSSIER-COMPILATION-PROTOCOL.md
|
|
611
|
+
# Role-tracking agora é executado em Phase 8.1.7 (Role Discovery)
|
|
612
|
+
|
|
613
|
+
LOG: "SESSION-STATE atualizado"
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
---
|
|
617
|
+
|
|
618
|
+
## PHASE 7: EXECUTION REPORT
|
|
619
|
+
|
|
620
|
+
### Step 7.1 - Generate Statistics
|
|
621
|
+
```
|
|
622
|
+
STATS = {
|
|
623
|
+
source: {
|
|
624
|
+
file: $ARGUMENTS,
|
|
625
|
+
person: $SOURCE_PERSON,
|
|
626
|
+
company: $SOURCE_COMPANY,
|
|
627
|
+
type: $SOURCE_TYPE,
|
|
628
|
+
id: $SOURCE_ID
|
|
629
|
+
},
|
|
630
|
+
chunking: {
|
|
631
|
+
total_words: WORD_COUNT,
|
|
632
|
+
chunks_created: len(NEW_CHUNKS),
|
|
633
|
+
avg_chunk_size: WORD_COUNT / len(NEW_CHUNKS)
|
|
634
|
+
},
|
|
635
|
+
entity_resolution: {
|
|
636
|
+
entities_resolved: count,
|
|
637
|
+
aliases_added: count,
|
|
638
|
+
review_queue: len(REVIEW_QUEUE),
|
|
639
|
+
collisions: len(COLLISIONS)
|
|
640
|
+
},
|
|
641
|
+
insights: {
|
|
642
|
+
total: count,
|
|
643
|
+
by_priority: {high: N, medium: N, low: N},
|
|
644
|
+
contradictions_found: count
|
|
645
|
+
},
|
|
646
|
+
narratives: {
|
|
647
|
+
persons_updated: count,
|
|
648
|
+
themes_updated: count,
|
|
649
|
+
open_loops_identified: count,
|
|
650
|
+
tensions_identified: count
|
|
651
|
+
},
|
|
652
|
+
dossiers: {
|
|
653
|
+
persons_created: count,
|
|
654
|
+
persons_updated: count,
|
|
655
|
+
themes_created: count,
|
|
656
|
+
themes_updated: count,
|
|
657
|
+
rag_indexed: count
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
### Step 7.2 - Display Report
|
|
663
|
+
```
|
|
664
|
+
===============================================================================
|
|
665
|
+
JARVIS PIPELINE COMPLETE: $SOURCE_PERSON ($SOURCE_ID)
|
|
666
|
+
===============================================================================
|
|
667
|
+
|
|
668
|
+
[INPUT] SOURCE
|
|
669
|
+
File: $ARGUMENTS
|
|
670
|
+
Person: $SOURCE_PERSON ($SOURCE_COMPANY)
|
|
671
|
+
Type: $SOURCE_TYPE
|
|
672
|
+
Words: {WORD_COUNT}
|
|
673
|
+
|
|
674
|
+
[CHUNK] CHUNKING
|
|
675
|
+
Chunks created: {chunks_created}
|
|
676
|
+
Avg chunk size: {avg_chunk_size} words
|
|
677
|
+
|
|
678
|
+
[ENTITY] ENTITY RESOLUTION
|
|
679
|
+
Entities resolved: {entities_resolved}
|
|
680
|
+
Aliases added: {aliases_added}
|
|
681
|
+
[!] Review queue: {review_queue}
|
|
682
|
+
[!] Collisions: {collisions}
|
|
683
|
+
|
|
684
|
+
[INSIGHT] INSIGHTS
|
|
685
|
+
Total extracted: {total}
|
|
686
|
+
HIGH priority: {high}
|
|
687
|
+
MEDIUM priority: {medium}
|
|
688
|
+
LOW priority: {low}
|
|
689
|
+
Contradictions: {contradictions_found}
|
|
690
|
+
|
|
691
|
+
[NARRATIVE] NARRATIVES
|
|
692
|
+
Persons updated: {persons_updated}
|
|
693
|
+
Themes updated: {themes_updated}
|
|
694
|
+
Open loops: {open_loops_identified}
|
|
695
|
+
Tensions: {tensions_identified}
|
|
696
|
+
|
|
697
|
+
[DOSSIER] DOSSIERS (PHASE 6.5)
|
|
698
|
+
Persons: {persons_created} created, {persons_updated} updated
|
|
699
|
+
Themes: {themes_created} created, {themes_updated} updated
|
|
700
|
+
RAG indexed: {rag_indexed} (dois eixos)
|
|
701
|
+
|
|
702
|
+
[OK] STATUS: SUCCESS
|
|
703
|
+
Next: PHASE 8 (FINALIZATION) - OBRIGATÓRIO
|
|
704
|
+
===============================================================================
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
-> CONTINUE TO PHASE 8 (Do NOT stop here)
|
|
708
|
+
|
|
709
|
+
---
|
|
710
|
+
|
|
711
|
+
## PHASE 8: FINALIZATION (OBRIGATÓRIO)
|
|
712
|
+
|
|
713
|
+
> ⚠️ **Esta fase é MANDATÓRIA. O pipeline NÃO está completo sem ela.**
|
|
714
|
+
|
|
715
|
+
### Step 8.1 - Update RAG Index
|
|
716
|
+
```
|
|
717
|
+
LOG: "Atualizando índice RAG..."
|
|
718
|
+
|
|
719
|
+
EXECUTE: python scripts/rag_index.py --knowledge --force
|
|
720
|
+
|
|
721
|
+
-> Re-indexa toda a knowledge base com os novos arquivos
|
|
722
|
+
-> Flag --force garante que arquivos modificados sejam reprocessados
|
|
723
|
+
-> Esperar conclusão antes de prosseguir
|
|
724
|
+
|
|
725
|
+
VERIFY: Output deve mostrar arquivos indexados
|
|
726
|
+
LOG: "RAG index atualizado: {files_indexed} arquivos"
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
### Step 8.2 - Update File Registry
|
|
730
|
+
```
|
|
731
|
+
LOG: "Atualizando file registry..."
|
|
732
|
+
|
|
733
|
+
EXECUTE: python scripts/file_registry.py --scan
|
|
734
|
+
|
|
735
|
+
-> Atualiza system/REGISTRY/file-registry.json
|
|
736
|
+
-> Registra MD5 hash e timestamp do arquivo processado
|
|
737
|
+
-> Marca arquivo como PROCESSED
|
|
738
|
+
|
|
739
|
+
VERIFY: file-registry.json contém entrada para $ARGUMENTS
|
|
740
|
+
LOG: "File registry atualizado"
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
### Step 8.3 - Update SESSION-STATE.md
|
|
744
|
+
```
|
|
745
|
+
LOG: "Atualizando SESSION-STATE.md..."
|
|
746
|
+
|
|
747
|
+
READ: /system/SESSION-STATE.md
|
|
748
|
+
|
|
749
|
+
UPDATE section "Arquivos Processados" ADD:
|
|
750
|
+
| $SOURCE_ID | $SOURCE_PERSON | {data_hoje} | {chunks} chunks, {insights} insights |
|
|
751
|
+
|
|
752
|
+
UPDATE section "Última Atualização":
|
|
753
|
+
-> Data: {hoje}
|
|
754
|
+
-> Versão: incrementar se mudança estrutural
|
|
755
|
+
|
|
756
|
+
WRITE: /system/SESSION-STATE.md
|
|
757
|
+
|
|
758
|
+
LOG: "SESSION-STATE atualizado"
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
### Step 8.3.5 - Update INBOX-REGISTRY e PROPAGATION-GAPS
|
|
762
|
+
```
|
|
763
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
764
|
+
ATUALIZAÇÃO DE REGISTRIES DE RASTREABILIDADE
|
|
765
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
766
|
+
|
|
767
|
+
LOG: "Atualizando registries de rastreabilidade..."
|
|
768
|
+
|
|
769
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
770
|
+
# 1. ATUALIZAR INBOX-REGISTRY.md
|
|
771
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
772
|
+
|
|
773
|
+
READ /system/REGISTRY/INBOX-REGISTRY.md
|
|
774
|
+
|
|
775
|
+
# Adicionar ou atualizar entrada do arquivo processado
|
|
776
|
+
LOCATE section "## ARQUIVOS PROCESSADOS"
|
|
777
|
+
|
|
778
|
+
IF $SOURCE_ID not in INBOX-REGISTRY:
|
|
779
|
+
APPEND new entry:
|
|
780
|
+
### {SOURCE_ID}: {filename}
|
|
781
|
+
|
|
782
|
+
| Campo | Valor |
|
|
783
|
+
|-------|-------|
|
|
784
|
+
| **Path** | `{$ARGUMENTS}` |
|
|
785
|
+
| **MD5** | `{CURRENT_MD5}` |
|
|
786
|
+
| **Status** | `COMPLETE` |
|
|
787
|
+
| **Processado em** | {TODAY} |
|
|
788
|
+
| **SOURCE_ID** | {SOURCE_ID} |
|
|
789
|
+
|
|
790
|
+
#### Propagacao
|
|
791
|
+
|
|
792
|
+
| Destino | Arquivo | Chunks/Insights | Status |
|
|
793
|
+
|---------|---------|-----------------|--------|
|
|
794
|
+
| CHUNKS | CHUNKS-STATE.json | {chunk_count} chunks | ✅ |
|
|
795
|
+
| INSIGHTS | INSIGHTS-STATE.json | {insight_count} insights ({high_count} HIGH) | ✅ |
|
|
796
|
+
| DOSSIER PESSOA | DOSSIER-{PERSON}.md | [secoes atualizadas] | ✅ |
|
|
797
|
+
| DOSSIER TEMA | DOSSIER-{THEME}.md | [secoes atualizadas] | ✅ |
|
|
798
|
+
| AGENT * | [lista de agentes] | [frameworks/tecnicas] | ✅ |
|
|
799
|
+
| DNA * | [se aplicavel] | [itens adicionados] | ✅/- |
|
|
800
|
+
|
|
801
|
+
#### Gaps Identificados
|
|
802
|
+
- [Nenhum ou lista de gaps]
|
|
803
|
+
|
|
804
|
+
ELSE:
|
|
805
|
+
UPDATE existing entry with current propagation status
|
|
806
|
+
|
|
807
|
+
# Atualizar metricas de cobertura
|
|
808
|
+
UPDATE section "## METRICAS DE COBERTURA":
|
|
809
|
+
- Arquivos COMPLETE: increment
|
|
810
|
+
- Arquivos NEW: decrement
|
|
811
|
+
|
|
812
|
+
WRITE /system/REGISTRY/INBOX-REGISTRY.md
|
|
813
|
+
LOG: "INBOX-REGISTRY atualizado: {SOURCE_ID} marcado como COMPLETE"
|
|
814
|
+
|
|
815
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
816
|
+
# 2. VERIFICAR E ATUALIZAR PROPAGATION-GAPS.md
|
|
817
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
818
|
+
|
|
819
|
+
READ /system/REGISTRY/PROPAGATION-GAPS.md
|
|
820
|
+
|
|
821
|
+
# Verificar gaps para este SOURCE_ID
|
|
822
|
+
GAPS_FOUND = []
|
|
823
|
+
|
|
824
|
+
# GAP-TYPE-1: Chunks
|
|
825
|
+
IF chunk_count == 0:
|
|
826
|
+
GAPS_FOUND.append("GAP-TYPE-1: Sem chunks gerados")
|
|
827
|
+
|
|
828
|
+
# GAP-TYPE-2: Insights
|
|
829
|
+
IF insight_count == 0:
|
|
830
|
+
GAPS_FOUND.append("GAP-TYPE-2: Sem insights extraidos")
|
|
831
|
+
|
|
832
|
+
# GAP-TYPE-3: Dossiers
|
|
833
|
+
IF DOSSIER-{PERSON}.md not updated:
|
|
834
|
+
GAPS_FOUND.append("GAP-TYPE-3: Dossier pessoa nao atualizado")
|
|
835
|
+
IF DOSSIER-{THEME}.md not updated:
|
|
836
|
+
GAPS_FOUND.append("GAP-TYPE-3: Dossier tema nao atualizado")
|
|
837
|
+
|
|
838
|
+
# GAP-TYPE-4: Agents
|
|
839
|
+
FOR each expected_agent in THEME_TO_AGENTS[themes]:
|
|
840
|
+
IF MEMORY-{agent}.md not contains SOURCE_ID:
|
|
841
|
+
GAPS_FOUND.append(f"GAP-TYPE-4: MEMORY-{agent} nao atualizado")
|
|
842
|
+
|
|
843
|
+
# GAP-TYPE-5: DNA
|
|
844
|
+
IF person has 3+ sources AND DNA not exists:
|
|
845
|
+
GAPS_FOUND.append("GAP-TYPE-5: DNA nao existe para pessoa com material suficiente")
|
|
846
|
+
|
|
847
|
+
IF GAPS_FOUND not empty:
|
|
848
|
+
# Adicionar ao PROPAGATION-GAPS.md
|
|
849
|
+
FOR each GAP in GAPS_FOUND:
|
|
850
|
+
ADD entry to appropriate section
|
|
851
|
+
|
|
852
|
+
# Atualizar status no INBOX-REGISTRY para INCOMPLETE
|
|
853
|
+
UPDATE INBOX-REGISTRY.md: Status = `INCOMPLETE`
|
|
854
|
+
|
|
855
|
+
LOG WARNING: "⚠️ {len(GAPS_FOUND)} gaps de propagacao identificados para {SOURCE_ID}"
|
|
856
|
+
LOG: "Verificar /system/REGISTRY/PROPAGATION-GAPS.md para detalhes"
|
|
857
|
+
ELSE:
|
|
858
|
+
LOG: "✅ Propagacao 100% completa para {SOURCE_ID}"
|
|
859
|
+
|
|
860
|
+
WRITE /system/REGISTRY/PROPAGATION-GAPS.md
|
|
861
|
+
|
|
862
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
863
|
+
# 3. ATUALIZAR CHANGELOG DOS REGISTRIES
|
|
864
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
865
|
+
|
|
866
|
+
APPEND to INBOX-REGISTRY.md ## CHANGELOG:
|
|
867
|
+
| {TODAY} | {SOURCE_ID} | Processado e propagado |
|
|
868
|
+
|
|
869
|
+
APPEND to PROPAGATION-GAPS.md ## CHANGELOG (if gaps found):
|
|
870
|
+
| {TODAY} | {SOURCE_ID} | {len(GAPS_FOUND)} gaps identificados |
|
|
871
|
+
|
|
872
|
+
LOG: "Registries de rastreabilidade atualizados"
|
|
873
|
+
```
|
|
874
|
+
|
|
875
|
+
### Step 8.4 - Verificação de Agent MEMORYs
|
|
876
|
+
```
|
|
877
|
+
# NOTA: Atualização de MEMORYs foi CONSOLIDADA em Phase 7
|
|
878
|
+
# Este step apenas VERIFICA que os MEMORYs foram atualizados corretamente
|
|
879
|
+
|
|
880
|
+
LOG: "Verificando atualização de MEMORYs..."
|
|
881
|
+
|
|
882
|
+
THEME_TO_AGENTS = {
|
|
883
|
+
"01-ESTRUTURA-TIME": ["SALES-MANAGER", "SALES-LEAD"],
|
|
884
|
+
"02-PROCESSO-VENDAS": ["closer", "SDS", "LNS"], # LNS: 3 Audience Buckets, nurturing
|
|
885
|
+
"03-CONTRATACAO": ["SALES-MANAGER", "SALES-LEAD"],
|
|
886
|
+
"04-COMISSIONAMENTO": ["SALES-MANAGER", "CRO", "CFO"],
|
|
887
|
+
"05-METRICAS": ["CRO", "CFO", "SALES-MANAGER"],
|
|
888
|
+
"06-FUNIL-APLICACAO": ["SDS", "BDR", "LNS"], # LNS: show rate, Email Hammer
|
|
889
|
+
"07-PRICING": ["CRO", "CFO", "closer"], # CLOSER: pricing na call
|
|
890
|
+
"08-FERRAMENTAS": ["SALES-COORDINATOR", "SALES-MANAGER"],
|
|
891
|
+
"09-GESTAO": ["COO", "SALES-MANAGER", "SALES-LEAD"],
|
|
892
|
+
"10-CULTURA-GAMIFICACAO": ["COO", "SALES-MANAGER"],
|
|
893
|
+
"EXIT-SCALING": ["CRO", "CFO", "COO"]
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
897
|
+
# FRAMEWORK_TO_AGENTS - Mapeamento específico de frameworks para agentes
|
|
898
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
899
|
+
# Quando um framework específico é detectado, GARANTIR que estes agentes recebam
|
|
900
|
+
FRAMEWORK_TO_AGENTS = {
|
|
901
|
+
"3 Audience Buckets": ["closer", "SDS", "LNS"], # Hormozi: YES/NO/MAYBE
|
|
902
|
+
"STAR Qualification": ["SDS", "closer"], # Situation, Timing, Authority, Resources
|
|
903
|
+
"Onion of Blame": ["closer", "SDS"], # 3 camadas de objeção
|
|
904
|
+
"7 Universal Closes": ["closer"], # Técnicas de fechamento
|
|
905
|
+
"28 Rules of Closing": ["closer", "SALES-MANAGER"], # Regras para closers
|
|
906
|
+
"Email Hammer": ["LNS"], # 12 emails em 48h
|
|
907
|
+
"7 Alavancas Show Rate": ["LNS", "SALES-COORDINATOR"], # Show rate optimization
|
|
908
|
+
"Sales Farming": ["LNS", "CUSTOMER-SUCCESS"], # Reativação 30-60-90
|
|
909
|
+
"Farm System": ["SALES-MANAGER", "CRO"], # Desenvolvimento de vendedores
|
|
910
|
+
"Christmas Tree Structure": ["SALES-MANAGER", "CRO"], # Org chart vendas
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
# VERIFICAR (não executar)
|
|
914
|
+
FOR EACH relevant_agent in themes processed:
|
|
915
|
+
MEMORY_PATH = /agents/{category}/MEMORY-{agent}.md
|
|
916
|
+
|
|
917
|
+
IF MEMORY contains $SOURCE_ID reference:
|
|
918
|
+
LOG: "✅ MEMORY-{agent}: atualizado com {SOURCE_ID}"
|
|
919
|
+
ELSE:
|
|
920
|
+
LOG: "⚠️ MEMORY-{agent}: não encontrado {SOURCE_ID} - verificar Phase 7"
|
|
921
|
+
|
|
922
|
+
LOG: "Verificação de MEMORYs completa"
|
|
923
|
+
```
|
|
924
|
+
|
|
925
|
+
### Step 8.5 - Conditional Updates
|
|
926
|
+
```
|
|
927
|
+
IF new knowledge files were created in knowledge/:
|
|
928
|
+
-> Consider updating README.md section "Knowledge Themes"
|
|
929
|
+
-> LOG: "Novos arquivos de knowledge criados: {list}"
|
|
930
|
+
|
|
931
|
+
IF new entities were added to CANONICAL-MAP:
|
|
932
|
+
-> Verify if any maps to a potential new agent
|
|
933
|
+
-> LOG: "Novas entidades canônicas: {list}"
|
|
934
|
+
|
|
935
|
+
IF contradictions were found in insights:
|
|
936
|
+
-> LOG WARNING: "Contradições detectadas - revisar manualmente"
|
|
937
|
+
-> List contradictions for human review
|
|
938
|
+
```
|
|
939
|
+
|
|
940
|
+
### Step 8.6 - Verification Checklist
|
|
941
|
+
```
|
|
942
|
+
VERIFY all artifacts exist and are valid:
|
|
943
|
+
|
|
944
|
+
[MANDATORY - All must pass]
|
|
945
|
+
□ CHUNKS-STATE.json contains $SOURCE_ID chunks
|
|
946
|
+
□ CANONICAL-MAP.json updated with entities from $SOURCE_ID
|
|
947
|
+
□ INSIGHTS-STATE.json contains insights from $SOURCE_ID
|
|
948
|
+
□ NARRATIVES-STATE.json contains narrative for $SOURCE_PERSON
|
|
949
|
+
□ At least 1 file in knowledge/ created/updated
|
|
950
|
+
□ RAG index includes new knowledge files
|
|
951
|
+
□ file-registry.json has entry for $ARGUMENTS
|
|
952
|
+
□ SESSION-STATE.md updated with $SOURCE_ID
|
|
953
|
+
|
|
954
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
955
|
+
# ⚠️ CHECKPOINT CRÍTICO: COBERTURA DE AGENTES (OBRIGATÓRIO)
|
|
956
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
957
|
+
# Este checkpoint foi adicionado após falha do stress test AH-CP001
|
|
958
|
+
# onde LNS não recebeu 3 Audience Buckets apesar de ser responsável pelo MAYBE bucket
|
|
959
|
+
|
|
960
|
+
□ AGENT COVERAGE CHECK (INQUEBRÁVEL):
|
|
961
|
+
|
|
962
|
+
1. IDENTIFICAR todos os temas do $SOURCE_ID em INSIGHTS-STATE.json
|
|
963
|
+
2. PARA CADA tema, consultar THEME_TO_AGENTS mapping
|
|
964
|
+
3. PARA CADA framework detectado, consultar FRAMEWORK_TO_AGENTS mapping
|
|
965
|
+
4. LISTAR TODOS os agentes que DEVERIAM receber conteúdo
|
|
966
|
+
5. VERIFICAR grep -l "$SOURCE_ID" em cada MEMORY-{agent}.md
|
|
967
|
+
6. SE algum agente esperado NÃO tem $SOURCE_ID:
|
|
968
|
+
-> LOG ERROR: "❌ AGENT COVERAGE FALHOU"
|
|
969
|
+
-> LOG: "Agentes esperados: {lista}"
|
|
970
|
+
-> LOG: "Agentes que receberam: {lista}"
|
|
971
|
+
-> LOG: "Agentes FALTANDO: {lista}"
|
|
972
|
+
-> EXIT with status: AGENT_COVERAGE_FAILED
|
|
973
|
+
|
|
974
|
+
EXEMPLO DE FALHA (AH-CP001):
|
|
975
|
+
Tema: 02-PROCESSO-VENDAS → Esperado: [CLOSER, SDS, LNS]
|
|
976
|
+
Framework: "3 Audience Buckets" → Esperado: [CLOSER, SDS, LNS]
|
|
977
|
+
LNS MEMORY.md NÃO continha AH-CP001 → FALHA
|
|
978
|
+
|
|
979
|
+
□ SOUL UPDATE CHECK (se pessoa tem SOUL.md):
|
|
980
|
+
IF /agents/persons/$SOURCE_PERSON/SOUL.md exists:
|
|
981
|
+
-> VERIFY SOUL.md foi atualizado com $SOURCE_ID
|
|
982
|
+
-> IF NOT: LOG WARNING + adicionar à lista de pendências
|
|
983
|
+
|
|
984
|
+
IF any check fails:
|
|
985
|
+
-> LOG ERROR: "Verificação falhou: {check}"
|
|
986
|
+
-> DO NOT mark pipeline as complete
|
|
987
|
+
-> EXIT with status: VERIFICATION_FAILED
|
|
988
|
+
|
|
989
|
+
IF all checks pass:
|
|
990
|
+
-> LOG: "✅ Todas as verificações passaram"
|
|
991
|
+
-> LOG: "✅ Cobertura de agentes: 100% ({N} agentes verificados)"
|
|
992
|
+
```
|
|
993
|
+
|
|
994
|
+
### Step 8.6.1 - Role Tracking (SUA-EMPRESA Automation v7.0.0)
|
|
995
|
+
|
|
996
|
+
> **Script:** `scripts/role_tracker.py`
|
|
997
|
+
> **Output:** `agents/DISCOVERY/role-tracking-state.json`
|
|
998
|
+
> **Protocolo:** `/agents/sua-empresa/org/ORG-PROTOCOL.md`
|
|
999
|
+
|
|
1000
|
+
```
|
|
1001
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1002
|
+
🔍 ROLE TRACKING - Contagem Automática de Menções de Cargos
|
|
1003
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1004
|
+
|
|
1005
|
+
LOG: "Executando role tracking..."
|
|
1006
|
+
|
|
1007
|
+
# Opção 1: Via Python script (recomendado)
|
|
1008
|
+
EXECUTE: python scripts/role_tracker.py --scan
|
|
1009
|
+
|
|
1010
|
+
# Opção 2: Via scan de fontes específicas (se script não disponível)
|
|
1011
|
+
SCAN SOURCES:
|
|
1012
|
+
- INSIGHTS-STATE.json (insights.keywords, insights.actionable_by)
|
|
1013
|
+
- NARRATIVES-STATE.json (narrative.themes, narrative.roles_mentioned)
|
|
1014
|
+
- DOSSIERS/*.md (seções de frameworks, técnicas, responsáveis)
|
|
1015
|
+
|
|
1016
|
+
COUNT MENTIONS por cargo:
|
|
1017
|
+
- CLOSER, SDR, BDR, Sales Manager, etc.
|
|
1018
|
+
- Normalizar: "closer" = "Closer" = "closer"
|
|
1019
|
+
- Excluir falsos positivos (ex: "closer to" não é cargo)
|
|
1020
|
+
|
|
1021
|
+
UPDATE /agents/DISCOVERY/role-tracking-state.json:
|
|
1022
|
+
{
|
|
1023
|
+
"roles": {
|
|
1024
|
+
"{ROLE_NAME}": {
|
|
1025
|
+
"count": {N},
|
|
1026
|
+
"sources": ["{SOURCE_IDs}"],
|
|
1027
|
+
"priority": "{CRITICAL|IMPORTANT|TRACK}",
|
|
1028
|
+
"last_updated": "{ISO_DATE}",
|
|
1029
|
+
"agent_exists": true|false,
|
|
1030
|
+
"memory_exists": true|false
|
|
1031
|
+
}
|
|
1032
|
+
},
|
|
1033
|
+
"meta": {
|
|
1034
|
+
"last_scan": "{ISO_DATE}",
|
|
1035
|
+
"total_sources_scanned": {N},
|
|
1036
|
+
"version": "v2.0"
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
PRIORITY THRESHOLDS:
|
|
1041
|
+
- CRITICAL (>= 10 menções): Agente deveria existir
|
|
1042
|
+
- IMPORTANT (>= 5 menções): Considerar criar agente
|
|
1043
|
+
- TRACK (>= 1 menção): Monitorar crescimento
|
|
1044
|
+
|
|
1045
|
+
OUTPUT:
|
|
1046
|
+
┌─ 📊 ROLE TRACKING RESULTS ───────────────────────────────────────────────────┐
|
|
1047
|
+
│ │
|
|
1048
|
+
│ ROLES DETECTADOS: {N} │
|
|
1049
|
+
│ │
|
|
1050
|
+
│ 🔴 CRITICAL (>= 10): │
|
|
1051
|
+
│ ├── CLOSER: {count} menções [agent: ✓, memory: ✓] │
|
|
1052
|
+
│ ├── SDR: {count} menções [agent: ✓, memory: ✓] │
|
|
1053
|
+
│ └── {ROLE}: {count} menções [agent: ✗] ← CRIAR AGENTE │
|
|
1054
|
+
│ │
|
|
1055
|
+
│ 🟡 IMPORTANT (5-9): │
|
|
1056
|
+
│ └── {ROLE}: {count} menções - monitorar │
|
|
1057
|
+
│ │
|
|
1058
|
+
│ 🟢 TRACK (1-4): │
|
|
1059
|
+
│ └── {N} roles em monitoramento │
|
|
1060
|
+
│ │
|
|
1061
|
+
└──────────────────────────────────────────────────────────────────────────────┘
|
|
1062
|
+
|
|
1063
|
+
LOG: "Role tracking completo: {N} roles, {X} critical, {Y} important"
|
|
1064
|
+
```
|
|
1065
|
+
|
|
1066
|
+
### Step 8.6.2 - Agent Creation Check (SUA-EMPRESA Automation v7.0.0)
|
|
1067
|
+
|
|
1068
|
+
> **Script:** `scripts/agent_creator.py`
|
|
1069
|
+
> **Trigger:** Roles com CRITICAL priority (>= 10 menções) sem agente
|
|
1070
|
+
> **Output:** Novos arquivos em `agents/cargo/{AREA}/`
|
|
1071
|
+
|
|
1072
|
+
```
|
|
1073
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1074
|
+
🤖 AGENT CREATION CHECK - Criação Automática quando Threshold Atingido
|
|
1075
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1076
|
+
|
|
1077
|
+
LOG: "Verificando thresholds de criação de agentes..."
|
|
1078
|
+
|
|
1079
|
+
# Opção 1: Via Python script (recomendado)
|
|
1080
|
+
EXECUTE: python scripts/agent_creator.py --check
|
|
1081
|
+
|
|
1082
|
+
# Opção 2: Manual (se script não disponível)
|
|
1083
|
+
READ /agents/DISCOVERY/role-tracking-state.json
|
|
1084
|
+
|
|
1085
|
+
FOR each role WHERE priority == "CRITICAL" AND agent_exists == false:
|
|
1086
|
+
|
|
1087
|
+
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
1088
|
+
│ 🆕 THRESHOLD ATINGIDO - CRIAÇÃO DE AGENTE DISPARADA │
|
|
1089
|
+
├─────────────────────────────────────────────────────────────────────────────┤
|
|
1090
|
+
│ │
|
|
1091
|
+
│ Cargo: {ROLE_NAME} │
|
|
1092
|
+
│ Menções: {count} (threshold: 10) │
|
|
1093
|
+
│ Fontes: {SOURCE_IDs} │
|
|
1094
|
+
│ │
|
|
1095
|
+
│ AÇÃO: Criar estrutura completa do agente │
|
|
1096
|
+
│ │
|
|
1097
|
+
└─────────────────────────────────────────────────────────────────────────────┘
|
|
1098
|
+
|
|
1099
|
+
DETERMINE AREA based on role:
|
|
1100
|
+
- CLOSER, SDR, BDR, LNS → SALES
|
|
1101
|
+
- CMO → C-LEVEL
|
|
1102
|
+
- Product Manager → PRODUCT
|
|
1103
|
+
- Operations → OPERATIONS
|
|
1104
|
+
- etc.
|
|
1105
|
+
|
|
1106
|
+
CREATE FILES (based on CARGO templates):
|
|
1107
|
+
/agents/cargo/{AREA}/{ROLE}/
|
|
1108
|
+
├── AGENT.md # Compilado do SOUL + MEMORY
|
|
1109
|
+
├── SOUL.md # DNA + Persona
|
|
1110
|
+
└── MEMORY.md # Aprendizados + Decisões
|
|
1111
|
+
|
|
1112
|
+
POPULATE from:
|
|
1113
|
+
- INSIGHTS-STATE.json (insights where actionable_by contains ROLE)
|
|
1114
|
+
- NARRATIVES-STATE.json (frameworks mentioning ROLE)
|
|
1115
|
+
- Existing DNA if available
|
|
1116
|
+
- SOUL template from agents/_TEMPLATES/
|
|
1117
|
+
|
|
1118
|
+
LOG: "✅ Agente {ROLE} criado em /agents/cargo/{AREA}/{ROLE}/"
|
|
1119
|
+
|
|
1120
|
+
IF no agents need creation:
|
|
1121
|
+
LOG: "✅ Todos os roles CRITICAL já possuem agentes"
|
|
1122
|
+
|
|
1123
|
+
OUTPUT:
|
|
1124
|
+
┌─ 🤖 AGENT CREATION RESULTS ──────────────────────────────────────────────────┐
|
|
1125
|
+
│ │
|
|
1126
|
+
│ AGENTES CRIADOS: {N} │
|
|
1127
|
+
│ ├── {ROLE_1}: /agents/cargo/{AREA}/{ROLE_1}/ │
|
|
1128
|
+
│ └── {ROLE_2}: /agents/cargo/{AREA}/{ROLE_2}/ │
|
|
1129
|
+
│ │
|
|
1130
|
+
│ AGENTES JÁ EXISTENTES: {M} │
|
|
1131
|
+
│ └── Nenhuma ação necessária │
|
|
1132
|
+
│ │
|
|
1133
|
+
│ PRÓXIMO THRESHOLD: │
|
|
1134
|
+
│ └── {ROLE_X}: {count}/10 menções (faltam {10-count}) │
|
|
1135
|
+
│ │
|
|
1136
|
+
└──────────────────────────────────────────────────────────────────────────────┘
|
|
1137
|
+
```
|
|
1138
|
+
|
|
1139
|
+
### Step 8.6.3 - SUA-EMPRESA Sync (SUA-EMPRESA Automation v7.0.0)
|
|
1140
|
+
|
|
1141
|
+
> **Script:** `scripts/sua_empresa_sync.py`
|
|
1142
|
+
> **Source:** `agents/cargo/*/MEMORY.md`
|
|
1143
|
+
> **Target:** `agents/sua-empresa/memory/MEMORY-*.md`
|
|
1144
|
+
> **Protocolo:** `/agents/sua-empresa/org/ORG-PROTOCOL.md`
|
|
1145
|
+
|
|
1146
|
+
```
|
|
1147
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1148
|
+
🔄 SUA-EMPRESA SYNC - Sincronização CARGO → SUA-EMPRESA
|
|
1149
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1150
|
+
|
|
1151
|
+
LOG: "Sincronizando CARGO MEMORYs → SUA-EMPRESA MEMORYs..."
|
|
1152
|
+
|
|
1153
|
+
# Opção 1: Via Python script (recomendado)
|
|
1154
|
+
EXECUTE: python scripts/sua_empresa_sync.py --sync
|
|
1155
|
+
|
|
1156
|
+
# Opção 2: Manual (se script não disponível)
|
|
1157
|
+
|
|
1158
|
+
ARCHITECTURE:
|
|
1159
|
+
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
1160
|
+
│ CARGO MEMORY (~500 linhas) SUA-EMPRESA MEMORY (~220 linhas) │
|
|
1161
|
+
│ ├── Detalhes técnicos ──────► ├── Resumo executivo │
|
|
1162
|
+
│ ├── Frameworks completos ├── KPIs principais │
|
|
1163
|
+
│ ├── Aprendizados raw ├── Decisões-chave │
|
|
1164
|
+
│ └── Histórico de decisões └── Fontes (lista) │
|
|
1165
|
+
└─────────────────────────────────────────────────────────────────────────────┘
|
|
1166
|
+
|
|
1167
|
+
FOR each CARGO at /agents/cargo/{AREA}/{ROLE}/MEMORY.md:
|
|
1168
|
+
|
|
1169
|
+
READ CARGO_MEMORY = /agents/cargo/{AREA}/{ROLE}/MEMORY.md
|
|
1170
|
+
|
|
1171
|
+
TARGET_PATH = /agents/sua-empresa/memory/MEMORY-{ROLE}.md
|
|
1172
|
+
|
|
1173
|
+
IF TARGET_PATH exists:
|
|
1174
|
+
# Verificar se precisa atualização
|
|
1175
|
+
CARGO_UPDATED = last_modified(CARGO_MEMORY)
|
|
1176
|
+
SUA_EMPRESA_SYNCED = extract_last_sync_date(TARGET_PATH)
|
|
1177
|
+
|
|
1178
|
+
IF CARGO_UPDATED > SUA_EMPRESA_SYNCED:
|
|
1179
|
+
LOG: "↻ Atualizando MEMORY-{ROLE}.md (CARGO mais recente)"
|
|
1180
|
+
SYNC_ACTION = "UPDATE"
|
|
1181
|
+
ELSE:
|
|
1182
|
+
LOG: "✓ MEMORY-{ROLE}.md já sincronizado"
|
|
1183
|
+
CONTINUE to next role
|
|
1184
|
+
ELSE:
|
|
1185
|
+
LOG: "🆕 Criando MEMORY-{ROLE}.md (novo cargo)"
|
|
1186
|
+
SYNC_ACTION = "CREATE"
|
|
1187
|
+
|
|
1188
|
+
# Extrair seções do CARGO MEMORY
|
|
1189
|
+
EXTRACT from CARGO_MEMORY:
|
|
1190
|
+
- RESUMO DO CARGO (header)
|
|
1191
|
+
- FONTES QUE ALIMENTAM (tabela)
|
|
1192
|
+
- APRENDIZADOS ACUMULADOS (resumido)
|
|
1193
|
+
- MÉTRICAS MONITORADAS (tabela)
|
|
1194
|
+
- DECISÕES E PRECEDENTES (resumido)
|
|
1195
|
+
- TENSÕES DOCUMENTADAS (lista)
|
|
1196
|
+
|
|
1197
|
+
# Gerar SUA-EMPRESA MEMORY (formato compacto)
|
|
1198
|
+
GENERATE SUA-EMPRESA MEMORY following template:
|
|
1199
|
+
/agents/sua-empresa/_templates/MEMORY-TEMPLATE.md
|
|
1200
|
+
|
|
1201
|
+
WRITE to TARGET_PATH
|
|
1202
|
+
|
|
1203
|
+
LOG: "✅ {SYNC_ACTION}: MEMORY-{ROLE}.md sincronizado"
|
|
1204
|
+
|
|
1205
|
+
UPDATE /agents/sua-empresa/SYNC-STATE.json:
|
|
1206
|
+
{
|
|
1207
|
+
"last_sync": "{ISO_DATE}",
|
|
1208
|
+
"synced_roles": ["{ROLE_1}", "{ROLE_2}"],
|
|
1209
|
+
"status": "SUCCESS|PARTIAL|FAILED",
|
|
1210
|
+
"stats": {
|
|
1211
|
+
"created": {N},
|
|
1212
|
+
"updated": {M},
|
|
1213
|
+
"unchanged": {O}
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
OUTPUT:
|
|
1218
|
+
┌─ 🔄 SUA-EMPRESA SYNC RESULTS ───────────────────────────────────────────────────┐
|
|
1219
|
+
│ │
|
|
1220
|
+
│ SINCRONIZAÇÃO: CARGO → SUA-EMPRESA │
|
|
1221
|
+
│ │
|
|
1222
|
+
│ 📁 CRIADOS: {N} │
|
|
1223
|
+
│ ├── MEMORY-{ROLE_1}.md │
|
|
1224
|
+
│ └── MEMORY-{ROLE_2}.md │
|
|
1225
|
+
│ │
|
|
1226
|
+
│ ↻ ATUALIZADOS: {M} │
|
|
1227
|
+
│ └── MEMORY-{ROLE_3}.md (delta: +{X} insights) │
|
|
1228
|
+
│ │
|
|
1229
|
+
│ ✓ SEM MUDANÇA: {O} │
|
|
1230
|
+
│ │
|
|
1231
|
+
│ STATUS: ✅ SYNC COMPLETO │
|
|
1232
|
+
│ │
|
|
1233
|
+
└──────────────────────────────────────────────────────────────────────────────┘
|
|
1234
|
+
|
|
1235
|
+
LOG: "SUA-EMPRESA sync completo: {created} criados, {updated} atualizados"
|
|
1236
|
+
```
|
|
1237
|
+
|
|
1238
|
+
### Step 8.6.4 - Health Check SUA-EMPRESA (SUA-EMPRESA Automation v7.0.0)
|
|
1239
|
+
|
|
1240
|
+
> **Script:** `scripts/health_check_sua_empresa.py`
|
|
1241
|
+
> **Validação:** Estrutura, citações, sincronização, automação
|
|
1242
|
+
> **Output:** Relatório de integridade do sistema SUA-EMPRESA
|
|
1243
|
+
|
|
1244
|
+
```
|
|
1245
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1246
|
+
🏥 HEALTH CHECK SUA-EMPRESA - Validação de Integridade do Sistema
|
|
1247
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1248
|
+
|
|
1249
|
+
LOG: "Executando health check SUA-EMPRESA..."
|
|
1250
|
+
|
|
1251
|
+
# Via Python script
|
|
1252
|
+
EXECUTE: python scripts/health_check_sua_empresa.py
|
|
1253
|
+
|
|
1254
|
+
# O script verifica:
|
|
1255
|
+
|
|
1256
|
+
[1] STRUCTURE CHECK - Estrutura v7.0.0 completa
|
|
1257
|
+
□ 00-README.md existe
|
|
1258
|
+
□ ORG/ (ORG-CHART.md, ORG-PROTOCOL.md, SCALING-TRIGGERS.md)
|
|
1259
|
+
□ ROLES/ (14 arquivos ROLE-*.md)
|
|
1260
|
+
□ MEMORY/ (14 arquivos MEMORY-*.md)
|
|
1261
|
+
□ JDS/ (10 arquivos JD-*.md)
|
|
1262
|
+
□ OPERATIONS/, METRICS/, TRANSITIONS/, TRIGGERS/, YOUR-ORG/
|
|
1263
|
+
|
|
1264
|
+
[2] CITATIONS CHECK - Rastreabilidade de fontes
|
|
1265
|
+
□ Toda afirmação em ROLE-*.md tem [FONTE:arquivo:linha]
|
|
1266
|
+
□ Nenhuma citação órfã (arquivo não existe)
|
|
1267
|
+
□ Formatos válidos: [FONTE:X], ^[FONTE:X], (FONTE: X)
|
|
1268
|
+
|
|
1269
|
+
[3] MEMORY SYNC CHECK - Sincronização entre camadas
|
|
1270
|
+
□ CARGO MEMORY → SUA-EMPRESA MEMORY sincronizado
|
|
1271
|
+
□ Timestamps consistentes
|
|
1272
|
+
□ Nenhum MEMORY órfão (sem ROLE correspondente)
|
|
1273
|
+
|
|
1274
|
+
[4] AUTOMATION STATE CHECK - Scripts funcionando
|
|
1275
|
+
□ role-tracking-state.json existe e válido
|
|
1276
|
+
□ agent_creator_state.json existe e válido
|
|
1277
|
+
□ sua_empresa_sync_state.json existe e válido
|
|
1278
|
+
□ Thresholds respeitados (roles CRITICAL têm agentes)
|
|
1279
|
+
|
|
1280
|
+
[5] FILE REFERENCES CHECK - Links não quebrados
|
|
1281
|
+
□ Links internos [texto](path) resolvem
|
|
1282
|
+
□ Links para CARGO/ existem
|
|
1283
|
+
□ Links para DNA/ existem (se mencionados)
|
|
1284
|
+
|
|
1285
|
+
OUTPUT:
|
|
1286
|
+
┌─ 🏥 HEALTH CHECK RESULTS ────────────────────────────────────────────────────┐
|
|
1287
|
+
│ │
|
|
1288
|
+
│ SUA-EMPRESA SYSTEM HEALTH │
|
|
1289
|
+
│ │
|
|
1290
|
+
│ [1] STRUCTURE: ✅ OK (69/69 arquivos) │
|
|
1291
|
+
│ [2] CITATIONS: ✅ OK (156 válidas, 0 órfãs) │
|
|
1292
|
+
│ [3] MEMORY SYNC: ✅ OK (14/14 sincronizados) │
|
|
1293
|
+
│ [4] AUTOMATION: ✅ OK (3/3 scripts ativos) │
|
|
1294
|
+
│ [5] REFERENCES: ✅ OK (89 links válidos) │
|
|
1295
|
+
│ │
|
|
1296
|
+
│ ═══════════════════════════════════════════════════════════════════════════ │
|
|
1297
|
+
│ OVERALL STATUS: 🟢 HEALTHY │
|
|
1298
|
+
│ ═══════════════════════════════════════════════════════════════════════════ │
|
|
1299
|
+
│ │
|
|
1300
|
+
│ ALERTS: │
|
|
1301
|
+
│ └── Nenhum alerta │
|
|
1302
|
+
│ │
|
|
1303
|
+
│ OU: │
|
|
1304
|
+
│ ├── ⚠️ ROLE-X approaching threshold (8/10 menções) │
|
|
1305
|
+
│ └── ⚠️ MEMORY-Y desatualizado (CARGO alterado há 3 dias) │
|
|
1306
|
+
│ │
|
|
1307
|
+
└──────────────────────────────────────────────────────────────────────────────┘
|
|
1308
|
+
|
|
1309
|
+
IF any check fails:
|
|
1310
|
+
LOG WARNING: "⚠️ Health check falhou: {check_name}"
|
|
1311
|
+
LOG: "Detalhes em output do health_check_sua_empresa.py"
|
|
1312
|
+
# NÃO bloqueia pipeline, apenas alerta
|
|
1313
|
+
|
|
1314
|
+
IF all checks pass:
|
|
1315
|
+
LOG: "✅ SUA-EMPRESA health check: HEALTHY"
|
|
1316
|
+
```
|
|
1317
|
+
|
|
1318
|
+
---
|
|
1319
|
+
|
|
1320
|
+
### Step 8.7 - Cross-Batch Analysis (NOVO v2.2.2)
|
|
1321
|
+
|
|
1322
|
+
> **Protocolo:** `/system/INTELLIGENT-LOGS-SYSTEM.md` (Parte 1)
|
|
1323
|
+
|
|
1324
|
+
```
|
|
1325
|
+
LENDO: /system/REGISTRY/BATCH-HISTORY.json
|
|
1326
|
+
CALCULANDO: Médias dos últimos 5 batches
|
|
1327
|
+
COMPARANDO: Batch atual vs histórico
|
|
1328
|
+
|
|
1329
|
+
┌─ 📊 CROSS-BATCH ANALYSIS ────────────────────────────────────────────────────┐
|
|
1330
|
+
│ │
|
|
1331
|
+
│ MÉTRICAS COMPARATIVAS │
|
|
1332
|
+
│ ├── Chunks: {atual} (média: {avg}, delta: {+/-X%}) │
|
|
1333
|
+
│ ├── Insights HIGH: {atual} (média: {avg}, delta: {+/-X%}) │
|
|
1334
|
+
│ ├── Ratio: {atual}% (média: {avg}%, tendência: ↑↓→) │
|
|
1335
|
+
│ └── Tempo: {atual}min (média: {avg}min) │
|
|
1336
|
+
│ │
|
|
1337
|
+
│ ANOMALIAS DETECTADAS │
|
|
1338
|
+
│ ├── [ ] Nenhuma anomalia (batch dentro do esperado) │
|
|
1339
|
+
│ └── OU: ⚠️ {descrição} (desvio > 25%) │
|
|
1340
|
+
│ │
|
|
1341
|
+
│ INTERPRETAÇÃO │
|
|
1342
|
+
│ └── [Parágrafo explicando o que as métricas significam] │
|
|
1343
|
+
│ │
|
|
1344
|
+
└──────────────────────────────────────────────────────────────────────────────┘
|
|
1345
|
+
```
|
|
1346
|
+
|
|
1347
|
+
IF é primeiro batch (histórico vazio):
|
|
1348
|
+
-> LOG: "📊 Baseline batch - sem histórico para comparação"
|
|
1349
|
+
-> CRIAR entrada inicial em BATCH-HISTORY.json
|
|
1350
|
+
|
|
1351
|
+
IF anomalia detectada (desvio > 25%):
|
|
1352
|
+
-> LOG: "⚠️ ANOMALIA: {métrica} está {X}% {acima/abaixo} da média"
|
|
1353
|
+
-> INCLUIR hipótese de causa
|
|
1354
|
+
|
|
1355
|
+
---
|
|
1356
|
+
|
|
1357
|
+
### Step 8.8 - Executive Briefing (NOVO v2.2.2)
|
|
1358
|
+
|
|
1359
|
+
> **Protocolo:** `/system/INTELLIGENT-LOGS-SYSTEM.md` (Parte 3)
|
|
1360
|
+
|
|
1361
|
+
```
|
|
1362
|
+
GERANDO: Briefing executivo em linguagem humana
|
|
1363
|
+
|
|
1364
|
+
┌─ 📋 BRIEFING EXECUTIVO ──────────────────────────────────────────────────────┐
|
|
1365
|
+
│ │
|
|
1366
|
+
│ EM UMA FRASE: │
|
|
1367
|
+
│ "{Resumo do batch em linguagem simples para qualquer pessoa}" │
|
|
1368
|
+
│ │
|
|
1369
|
+
│ O QUE APRENDEMOS: │
|
|
1370
|
+
│ ├── 💡 {Insight 1 mais importante} │
|
|
1371
|
+
│ │ └── Isso significa: {implicação prática} │
|
|
1372
|
+
│ ├── 💡 {Insight 2} │
|
|
1373
|
+
│ │ └── Isso significa: {implicação prática} │
|
|
1374
|
+
│ └── 💡 {Insight 3} │
|
|
1375
|
+
│ └── Isso significa: {implicação prática} │
|
|
1376
|
+
│ │
|
|
1377
|
+
│ DECISÕES AUTOMÁTICAS: │
|
|
1378
|
+
│ ├── {O que o sistema decidiu fazer e por quê} │
|
|
1379
|
+
│ ├── {Agentes atualizados e razão} │
|
|
1380
|
+
│ └── {O que NÃO foi feito e por quê} │
|
|
1381
|
+
│ │
|
|
1382
|
+
│ PRÓXIMOS PASSOS SUGERIDOS: │
|
|
1383
|
+
│ ├── #1 {Ação concreta baseada em dados} │
|
|
1384
|
+
│ ├── #2 {Ação concreta} │
|
|
1385
|
+
│ └── #3 {Ação concreta} │
|
|
1386
|
+
│ │
|
|
1387
|
+
│ STATUS DE SAÚDE: {🟢 EXCELENTE | 🟡 BOM | 🔴 ATENÇÃO} │
|
|
1388
|
+
│ └── {Justificativa do status} │
|
|
1389
|
+
│ │
|
|
1390
|
+
└──────────────────────────────────────────────────────────────────────────────┘
|
|
1391
|
+
```
|
|
1392
|
+
|
|
1393
|
+
SEMPRE incluir:
|
|
1394
|
+
- Linguagem simples (sem jargão técnico)
|
|
1395
|
+
- Implicações práticas de cada insight
|
|
1396
|
+
- Por que cada decisão foi tomada
|
|
1397
|
+
- Status visual de saúde do sistema
|
|
1398
|
+
|
|
1399
|
+
---
|
|
1400
|
+
|
|
1401
|
+
### Step 8.9 - Batch History Update (NOVO v2.2.2)
|
|
1402
|
+
|
|
1403
|
+
> **Protocolo:** `/system/REGISTRY/BATCH-HISTORY.json`
|
|
1404
|
+
|
|
1405
|
+
```
|
|
1406
|
+
ATUALIZANDO: /system/REGISTRY/BATCH-HISTORY.json
|
|
1407
|
+
|
|
1408
|
+
NOVO REGISTRO:
|
|
1409
|
+
{
|
|
1410
|
+
"batch_id": "BATCH-{YYYYMMDD}-{NNN}",
|
|
1411
|
+
"timestamp": "{ISO8601}",
|
|
1412
|
+
"source_id": "$SOURCE_ID",
|
|
1413
|
+
"source_person": "$SOURCE_PERSON",
|
|
1414
|
+
"metrics": {
|
|
1415
|
+
"chunks": {N},
|
|
1416
|
+
"insights_total": {N},
|
|
1417
|
+
"insights_high": {N},
|
|
1418
|
+
"insights_medium": {N},
|
|
1419
|
+
"new_entities": {N},
|
|
1420
|
+
"processing_time_minutes": {N},
|
|
1421
|
+
"errors_recovered": {N}
|
|
1422
|
+
},
|
|
1423
|
+
"themes_touched": ["01-ESTRUTURA-TIME", ...],
|
|
1424
|
+
"agents_updated": ["AGENT-CLOSER", ...],
|
|
1425
|
+
"anomalies": [] ou [{descrição}],
|
|
1426
|
+
"health_status": "EXCELLENT|GOOD|ATTENTION"
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
ATUALIZANDO TOTAIS:
|
|
1430
|
+
total_batches: +1
|
|
1431
|
+
total_insights: +{N}
|
|
1432
|
+
total_chunks: +{N}
|
|
1433
|
+
|
|
1434
|
+
ATUALIZANDO MÉDIAS:
|
|
1435
|
+
avg_insights_per_batch: recalcular
|
|
1436
|
+
avg_chunks_per_batch: recalcular
|
|
1437
|
+
avg_processing_time: recalcular
|
|
1438
|
+
|
|
1439
|
+
VERIFICANDO RECORDS:
|
|
1440
|
+
IF insights > max_insights_batch → ATUALIZAR record
|
|
1441
|
+
IF processing_time < min_time_batch → ATUALIZAR record
|
|
1442
|
+
```
|
|
1443
|
+
|
|
1444
|
+
SALVANDO LOG COMPLETO em:
|
|
1445
|
+
`/logs/batches/BATCH-{YYYYMMDD}-{NNN}.md`
|
|
1446
|
+
|
|
1447
|
+
---
|
|
1448
|
+
|
|
1449
|
+
### Step 8.10 - Final Status
|
|
1450
|
+
```
|
|
1451
|
+
===============================================================================
|
|
1452
|
+
PHASE 8: FINALIZATION COMPLETE
|
|
1453
|
+
===============================================================================
|
|
1454
|
+
|
|
1455
|
+
[RAG] Index updated: {files_indexed} files
|
|
1456
|
+
[REGISTRY] File registered: $ARGUMENTS
|
|
1457
|
+
[SESSION] STATE updated: $SOURCE_ID added
|
|
1458
|
+
[AGENTS] Updated: {list_of_agents}
|
|
1459
|
+
[CROSS-BATCH] Analysis: {status}
|
|
1460
|
+
[BRIEFING] Executive summary: generated
|
|
1461
|
+
[HISTORY] Batch logged: BATCH-{YYYYMMDD}-{NNN}
|
|
1462
|
+
[VERIFY] All checks: PASSED
|
|
1463
|
+
|
|
1464
|
+
===============================================================================
|
|
1465
|
+
✅ PIPELINE JARVIS 100% COMPLETE
|
|
1466
|
+
Source: $SOURCE_PERSON ($SOURCE_ID)
|
|
1467
|
+
Ready for: /rag-search queries, agent consultations
|
|
1468
|
+
===============================================================================
|
|
1469
|
+
```
|
|
1470
|
+
|
|
1471
|
+
---
|
|
1472
|
+
|
|
1473
|
+
## ERROR RECOVERY PROTOCOLS
|
|
1474
|
+
|
|
1475
|
+
| Error | Recovery Action |
|
|
1476
|
+
|-------|-----------------|
|
|
1477
|
+
| File not found | Log error, EXIT with FILE_NOT_FOUND |
|
|
1478
|
+
| Invalid file format | Log warning, attempt parse, continue if possible |
|
|
1479
|
+
| State file corrupted | Backup corrupted file, recreate from template |
|
|
1480
|
+
| Chunking failed | Log error, EXIT with CHUNKING_FAILED |
|
|
1481
|
+
| Entity resolution timeout | Save partial results, flag for manual review |
|
|
1482
|
+
| Insight extraction failed | Continue with previous insights, log warning |
|
|
1483
|
+
| Narrative synthesis failed | Continue with previous narratives, log warning |
|
|
1484
|
+
| Write permission denied | Log error, EXIT with PERMISSION_DENIED |
|
|
1485
|
+
| RAG index failed | Log warning, continue - index manually later |
|
|
1486
|
+
| File registry failed | Log warning, continue - register manually later |
|
|
1487
|
+
| MEMORY update failed | Log warning, list agents that need manual update |
|
|
1488
|
+
| Verification failed | Log error, list failed checks, EXIT with VERIFICATION_FAILED |
|
|
1489
|
+
|
|
1490
|
+
---
|
|
1491
|
+
|
|
1492
|
+
## EXECUTION START
|
|
1493
|
+
|
|
1494
|
+
```
|
|
1495
|
+
Ready to process: $ARGUMENTS
|
|
1496
|
+
Beginning PHASE 1: INITIALIZATION...
|
|
1497
|
+
```
|
|
1498
|
+
|
|
1499
|
+
---
|
|
1500
|
+
|
|
1501
|
+
## 📋 LOGGING OBRIGATÓRIO (Pipeline v2.1)
|
|
1502
|
+
|
|
1503
|
+
Ao final de CADA execução completa do pipeline:
|
|
1504
|
+
|
|
1505
|
+
### 1. Audit Log (automático)
|
|
1506
|
+
```bash
|
|
1507
|
+
# Append to /logs/AUDIT/audit.jsonl
|
|
1508
|
+
{
|
|
1509
|
+
"timestamp": "ISO",
|
|
1510
|
+
"operation": "PIPELINE_COMPLETE",
|
|
1511
|
+
"source_id": "$SOURCE_ID",
|
|
1512
|
+
"phases_completed": 8,
|
|
1513
|
+
"checksum": "MD5 do SOURCE"
|
|
1514
|
+
}
|
|
1515
|
+
```
|
|
1516
|
+
|
|
1517
|
+
### 2. Execution Report
|
|
1518
|
+
```
|
|
1519
|
+
Salvar em: /logs/EXECUTION/EXEC-{SOURCE_ID}-{DATE}.md
|
|
1520
|
+
Template: Ver LOG-TEMPLATES.md → LOG 1
|
|
1521
|
+
```
|
|
1522
|
+
|
|
1523
|
+
### 3. System Digest (quando solicitado)
|
|
1524
|
+
```
|
|
1525
|
+
Executar: /system-digest
|
|
1526
|
+
Salva em: /logs/DIGEST/DIGEST-{DATE}.md
|
|
1527
|
+
```
|
|
1528
|
+
|
|
1529
|
+
---
|
|
1530
|
+
|
|
1531
|
+
## PHASE 7: AGENT ENRICHMENT (consolidado)
|
|
1532
|
+
|
|
1533
|
+
> ⚠️ **Esta fase é MANDATÓRIA. Mostra relatório, pergunta, depois executa finalizações.**
|
|
1534
|
+
|
|
1535
|
+
### ESTRUTURA DA PHASE 7:
|
|
1536
|
+
```
|
|
1537
|
+
7.1 → Compilar Knowledge Payload (ler fontes ricas)
|
|
1538
|
+
7.2 → Verificar Threshold de Novos Agentes
|
|
1539
|
+
7.3 → MOSTRAR RELATÓRIO + PERGUNTAR ao usuário
|
|
1540
|
+
7.4 → SE APROVADO: Alimentar Agentes (AGENT-*.md + MEMORY-*.md)
|
|
1541
|
+
```
|
|
1542
|
+
|
|
1543
|
+
### PHASE 8: FINALIZATION (automático após Phase 7)
|
|
1544
|
+
```
|
|
1545
|
+
8.1 → AUTOMÁTICO: RAG Index, File Registry, Session-State, Evolution-Log, Role-Tracking
|
|
1546
|
+
8.2 → Executar CHECKPOINT 7 (9 verificações finais)
|
|
1547
|
+
8.3 → Gerar Execution Report
|
|
1548
|
+
8.4 → Append Audit Log
|
|
1549
|
+
8.5 → MOSTRAR LOG FINAL de tudo atualizado
|
|
1550
|
+
8.6 → Perguntar sobre próxima sessão
|
|
1551
|
+
```
|
|
1552
|
+
|
|
1553
|
+
### Step 7.1 - Compile Knowledge Summary for Agents
|
|
1554
|
+
```
|
|
1555
|
+
LOG: "Compilando conhecimento para alimentação de agentes..."
|
|
1556
|
+
|
|
1557
|
+
FROM INSIGHTS_STATE and NARRATIVES_STATE, extract:
|
|
1558
|
+
|
|
1559
|
+
KNOWLEDGE_PAYLOAD = {
|
|
1560
|
+
"source_id": $SOURCE_ID,
|
|
1561
|
+
"source_person": $SOURCE_PERSON,
|
|
1562
|
+
"date_processed": TODAY,
|
|
1563
|
+
|
|
1564
|
+
"frameworks_discovered": [
|
|
1565
|
+
// Listar frameworks HIGH priority encontrados
|
|
1566
|
+
// Ex: "7 Beliefs Framework", "4 Pillars Pitch", "Call Flow 6 Fases"
|
|
1567
|
+
],
|
|
1568
|
+
|
|
1569
|
+
"techniques_discovered": [
|
|
1570
|
+
// Listar técnicas específicas
|
|
1571
|
+
// Ex: "Double Tie Down", "Buying Pocket", "Tonality 3 Levels"
|
|
1572
|
+
],
|
|
1573
|
+
|
|
1574
|
+
"metrics_discovered": [
|
|
1575
|
+
// Listar métricas/benchmarks com valores
|
|
1576
|
+
// Ex: "Check-in interval: 45 segundos", "Neutral tonality: 80-90%"
|
|
1577
|
+
],
|
|
1578
|
+
|
|
1579
|
+
"insights_high_priority": [
|
|
1580
|
+
// Lista dos insights HIGH com chunk_ref
|
|
1581
|
+
],
|
|
1582
|
+
|
|
1583
|
+
"quotes_key": [
|
|
1584
|
+
// Citações importantes para incluir nos agentes
|
|
1585
|
+
],
|
|
1586
|
+
|
|
1587
|
+
"agents_impacted": [
|
|
1588
|
+
// Lista de agentes que devem receber este conhecimento
|
|
1589
|
+
// Baseado no mapeamento THEME_TO_AGENTS
|
|
1590
|
+
]
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1593
|
+
LOG: "Knowledge payload compilado:"
|
|
1594
|
+
LOG: " Frameworks: {count}"
|
|
1595
|
+
LOG: " Técnicas: {count}"
|
|
1596
|
+
LOG: " Métricas: {count}"
|
|
1597
|
+
LOG: " Insights HIGH: {count}"
|
|
1598
|
+
LOG: " Agentes impactados: {list}"
|
|
1599
|
+
```
|
|
1600
|
+
|
|
1601
|
+
### Step 7.2 - Check Role Threshold for New Agents
|
|
1602
|
+
```
|
|
1603
|
+
LOG: "Verificando threshold para criação de novos agentes..."
|
|
1604
|
+
|
|
1605
|
+
READ /agents/DISCOVERY/role-tracking.md
|
|
1606
|
+
|
|
1607
|
+
SCAN INSIGHTS_STATE for new roles/functions mentioned:
|
|
1608
|
+
COUNT mentions per role
|
|
1609
|
+
|
|
1610
|
+
FOR each ROLE found:
|
|
1611
|
+
IF mentions >= 10 AND NOT already has agent:
|
|
1612
|
+
-> FLAG as "🔴 CRÍTICO - CRIAR AGENTE"
|
|
1613
|
+
-> ADD to NEW_AGENTS_QUEUE
|
|
1614
|
+
|
|
1615
|
+
IF mentions >= 5 AND mentions < 10:
|
|
1616
|
+
-> FLAG as "🟡 IMPORTANTE - MONITORAR"
|
|
1617
|
+
|
|
1618
|
+
IF mentions < 5:
|
|
1619
|
+
-> FLAG as "RASTREAR"
|
|
1620
|
+
|
|
1621
|
+
UPDATE /agents/DISCOVERY/role-tracking.md with new counts
|
|
1622
|
+
|
|
1623
|
+
NEW_AGENTS_REPORT = {
|
|
1624
|
+
"critical": [roles with 10+],
|
|
1625
|
+
"important": [roles with 5-9],
|
|
1626
|
+
"tracking": [roles with <5]
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1629
|
+
LOG: "Threshold check completo:"
|
|
1630
|
+
LOG: " 🔴 CRÍTICO (criar agente): {list or 'nenhum'}"
|
|
1631
|
+
LOG: " 🟡 IMPORTANTE (monitorar): {list or 'nenhum'}"
|
|
1632
|
+
```
|
|
1633
|
+
|
|
1634
|
+
### Step 7.3 - Agent Enrichment (MEMORY auto + AGENT prompt)
|
|
1635
|
+
```
|
|
1636
|
+
# CORREÇÃO ARQUITETURAL: Separação clara de responsabilidades
|
|
1637
|
+
# MEMORY-*.md → AUTOMÁTICO (dados históricos, não muda comportamento)
|
|
1638
|
+
# AGENT-*.md → VIA PROMPT (altera expertise/comportamento, requer aprovação)
|
|
1639
|
+
|
|
1640
|
+
===============================================================================
|
|
1641
|
+
🧠 ALIMENTAÇÃO DE AGENTES
|
|
1642
|
+
===============================================================================
|
|
1643
|
+
|
|
1644
|
+
O conhecimento extraído de $SOURCE_PERSON ($SOURCE_ID) será processado:
|
|
1645
|
+
|
|
1646
|
+
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
1647
|
+
│ ATUALIZAÇÃO AUTOMÁTICA (sem prompt) │
|
|
1648
|
+
├─────────────────────────────────────────────────────────────────────────────┤
|
|
1649
|
+
│ │
|
|
1650
|
+
│ MEMORY-*.md (Memória/Experiência) │
|
|
1651
|
+
│ └─ ✅ AUTOMÁTICO: Registrar insights, decisões, precedentes │
|
|
1652
|
+
│ Não altera comportamento do agente, apenas adiciona referências │
|
|
1653
|
+
│ │
|
|
1654
|
+
│ Motivo: MEMORYs são dados históricos - seguros para auto-update │
|
|
1655
|
+
│ │
|
|
1656
|
+
└─────────────────────────────────────────────────────────────────────────────┘
|
|
1657
|
+
|
|
1658
|
+
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
1659
|
+
│ ATUALIZAÇÃO VIA PROMPT (requer aprovação) │
|
|
1660
|
+
├─────────────────────────────────────────────────────────────────────────────┤
|
|
1661
|
+
│ │
|
|
1662
|
+
│ AGENT-*.md (Instruções Principais) │
|
|
1663
|
+
│ └─ ⚠️ PROMPT: Adicionar frameworks e técnicas à expertise │
|
|
1664
|
+
│ ALTERA comportamento do agente - requer revisão humana │
|
|
1665
|
+
│ │
|
|
1666
|
+
│ Motivo: AGENTs definem comportamento - mudanças devem ser intencionais │
|
|
1667
|
+
│ │
|
|
1668
|
+
└─────────────────────────────────────────────────────────────────────────────┘
|
|
1669
|
+
|
|
1670
|
+
📦 PAYLOAD DISPONÍVEL:
|
|
1671
|
+
• {count} Frameworks (ex: {example})
|
|
1672
|
+
• {count} Técnicas (ex: {example})
|
|
1673
|
+
• {count} Métricas com valores
|
|
1674
|
+
• {count} Insights HIGH priority
|
|
1675
|
+
• {count} Citações-chave
|
|
1676
|
+
|
|
1677
|
+
🔴 NOVOS AGENTES (threshold 10+ atingido):
|
|
1678
|
+
{list or "Nenhum novo agente necessário"}
|
|
1679
|
+
|
|
1680
|
+
🟡 MONITORAR (5-9 menções):
|
|
1681
|
+
{list or "Nenhum"}
|
|
1682
|
+
|
|
1683
|
+
===============================================================================
|
|
1684
|
+
|
|
1685
|
+
MEMORYs serão atualizados AUTOMATICAMENTE.
|
|
1686
|
+
|
|
1687
|
+
Deseja também atualizar AGENT-*.md (expertise/comportamento)?
|
|
1688
|
+
|
|
1689
|
+
1. ✅ SIM - Atualizar AGENT-*.md com novos frameworks e técnicas
|
|
1690
|
+
2. ⏭️ NÃO - Manter AGENTs como estão (MEMORYs já foram atualizados)
|
|
1691
|
+
|
|
1692
|
+
===============================================================================
|
|
1693
|
+
```
|
|
1694
|
+
|
|
1695
|
+
### Step 7.4 - Execute Agent Enrichment (MEMORY auto, AGENT condicional)
|
|
1696
|
+
```
|
|
1697
|
+
# CORREÇÃO ARQUITETURAL: MEMORY sempre atualiza, AGENT depende de aprovação
|
|
1698
|
+
# NAVEGAÇÃO RICA 5 NÍVEIS: Mesmo padrão usado em Role Discovery (8.1.7)
|
|
1699
|
+
|
|
1700
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1701
|
+
STEP 7.4.0 - CARREGAR TODOS OS 5 NÍVEIS PARA ENRIQUECIMENTO RICO
|
|
1702
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1703
|
+
# PRINCÍPIO: EXTRAÇÃO RICA > ECONOMIA DE TOKENS
|
|
1704
|
+
# Agentes devem ser alimentados com a MÁXIMA profundidade disponível
|
|
1705
|
+
|
|
1706
|
+
# NÍVEL 5 - DOSSIERS (mais consolidado)
|
|
1707
|
+
READ /knowledge/dossiers/persons/DOSSIER-{SOURCE_PERSON}.md as DOSSIER_DATA
|
|
1708
|
+
READ /knowledge/dossiers/THEMES/DOSSIER-{RELEVANT_THEMES}.md as THEME_DOSSIERS
|
|
1709
|
+
|
|
1710
|
+
# NÍVEL 4 - NARRATIVES
|
|
1711
|
+
READ /processing/narratives/NARRATIVES-STATE.json as NARRATIVES_DATA
|
|
1712
|
+
|
|
1713
|
+
# NÍVEL 3 - INSIGHTS
|
|
1714
|
+
READ /processing/insights/INSIGHTS-STATE.json as INSIGHTS_DATA
|
|
1715
|
+
|
|
1716
|
+
# NÍVEL 2 - CANONICAL (entidades)
|
|
1717
|
+
READ /processing/canonical/CANONICAL-MAP.json as CANONICAL_DATA
|
|
1718
|
+
|
|
1719
|
+
# NÍVEL 1 - CHUNKS (texto bruto)
|
|
1720
|
+
READ /processing/chunks/CHUNKS-STATE.json as CHUNKS_DATA
|
|
1721
|
+
|
|
1722
|
+
# Para cada agente, compilar RICH_AGENT_PAYLOAD navegando todos os níveis
|
|
1723
|
+
FOR each AGENT in agents_impacted:
|
|
1724
|
+
RICH_AGENT_PAYLOAD = compile_rich_payload(
|
|
1725
|
+
agent: AGENT,
|
|
1726
|
+
dossier: DOSSIER_DATA,
|
|
1727
|
+
narratives: NARRATIVES_DATA,
|
|
1728
|
+
insights: INSIGHTS_DATA,
|
|
1729
|
+
canonical: CANONICAL_DATA,
|
|
1730
|
+
chunks: CHUNKS_DATA
|
|
1731
|
+
)
|
|
1732
|
+
# RICH_AGENT_PAYLOAD contém:
|
|
1733
|
+
# - Contexto consolidado (do DOSSIER)
|
|
1734
|
+
# - Padrões e tensões (do NARRATIVES)
|
|
1735
|
+
# - Insights priorizados com confiança (do INSIGHTS)
|
|
1736
|
+
# - Entidades normalizadas (do CANONICAL)
|
|
1737
|
+
# - Citações exatas com timestamp (dos CHUNKS)
|
|
1738
|
+
|
|
1739
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1740
|
+
STEP 7.4.1 - ATUALIZAR MEMORY-*.md (AUTOMÁTICO)
|
|
1741
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1742
|
+
|
|
1743
|
+
FOR each AGENT in agents_impacted:
|
|
1744
|
+
|
|
1745
|
+
MEMORY_PATH = /agents/{category}/MEMORY-{agent}.md
|
|
1746
|
+
AGENT_PATH = /agents/{category}/AGENT-{agent}.md
|
|
1747
|
+
|
|
1748
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1749
|
+
ATUALIZAR MEMORY-{agent}.md (SEMPRE) - USANDO RICH_AGENT_PAYLOAD
|
|
1750
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1751
|
+
|
|
1752
|
+
READ MEMORY_PATH
|
|
1753
|
+
|
|
1754
|
+
# MEMORY deve conter TEAM AGREEMENT style - como se descrevesse o cargo
|
|
1755
|
+
# Incluir: habilidades, relacionamentos, quando usar, fontes de referência
|
|
1756
|
+
|
|
1757
|
+
LOCATE or CREATE section "## KNOWLEDGE BASE ACUMULADA"
|
|
1758
|
+
APPEND:
|
|
1759
|
+
|
|
1760
|
+
---
|
|
1761
|
+
|
|
1762
|
+
### 📚 {SOURCE_PERSON} ({SOURCE_ID}) - {TODAY}
|
|
1763
|
+
|
|
1764
|
+
#### Frameworks Incorporados
|
|
1765
|
+
Para cada framework, descrever COMO e QUANDO usar:
|
|
1766
|
+
|
|
1767
|
+
**{FRAMEWORK_NAME}**
|
|
1768
|
+
- O que é: {descrição rica}
|
|
1769
|
+
- Quando usar: {contexto específico}
|
|
1770
|
+
- Como aplicar: {passos ou estrutura}
|
|
1771
|
+
- Fonte: → Ver DOSSIER-{PERSON}.md ou chunk {chunk_ref}
|
|
1772
|
+
|
|
1773
|
+
#### Técnicas Adquiridas
|
|
1774
|
+
{Lista de técnicas com descrição prática}
|
|
1775
|
+
|
|
1776
|
+
#### Métricas de Referência
|
|
1777
|
+
| Métrica | Valor | Contexto | Fonte |
|
|
1778
|
+
|---------|-------|----------|-------|
|
|
1779
|
+
| {metric} | {value} | {when to use} | {chunk_ref} |
|
|
1780
|
+
|
|
1781
|
+
#### Citações de Referência
|
|
1782
|
+
> "{quote}" - {SOURCE_PERSON}
|
|
1783
|
+
> Usar quando: {contexto de aplicação}
|
|
1784
|
+
|
|
1785
|
+
#### Relacionamentos (Team Agreement)
|
|
1786
|
+
- **Escala para:** {agents acima na hierarquia}
|
|
1787
|
+
- **Recebe de:** {agents que alimentam este}
|
|
1788
|
+
- **Colabora com:** {agents do mesmo nível}
|
|
1789
|
+
|
|
1790
|
+
#### Fontes para Consulta Profunda
|
|
1791
|
+
- DOSSIER: `/knowledge/dossiers/persons/DOSSIER-{PERSON}.md`
|
|
1792
|
+
- THEME: `/knowledge/dossiers/THEMES/DOSSIER-{THEME}.md`
|
|
1793
|
+
- Chunks: {list of relevant chunk_ids}
|
|
1794
|
+
|
|
1795
|
+
WRITE MEMORY_PATH
|
|
1796
|
+
LOG: "✅ MEMORY atualizada (automático): {agent}"
|
|
1797
|
+
|
|
1798
|
+
MEMORIES_UPDATED = [list of agents with updated memories]
|
|
1799
|
+
LOG: "MEMORYs atualizados automaticamente: {count} agentes"
|
|
1800
|
+
|
|
1801
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1802
|
+
STEP 7.4.2 - ATUALIZAR AGENT-*.md (SE APROVADO)
|
|
1803
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1804
|
+
|
|
1805
|
+
IF user selected "SIM" in Step 7.3:
|
|
1806
|
+
|
|
1807
|
+
FOR each AGENT in agents_impacted:
|
|
1808
|
+
READ AGENT_PATH
|
|
1809
|
+
|
|
1810
|
+
# AGENT deve conter JOB DESCRIPTION completo
|
|
1811
|
+
# O agente deve "saber" fazer tudo que aprendeu como se tivesse a experiência
|
|
1812
|
+
|
|
1813
|
+
LOCATE section "## EXPERTISE" or "## CAPABILITIES" or "## O QUE ESTE AGENTE SABE FAZER"
|
|
1814
|
+
|
|
1815
|
+
# Adicionar como HABILIDADE NATIVA do agente (não como referência externa)
|
|
1816
|
+
APPEND or ENRICH:
|
|
1817
|
+
|
|
1818
|
+
### {FRAMEWORK_NAME}
|
|
1819
|
+
Este agente DOMINA o {FRAMEWORK_NAME} e aplica naturalmente em:
|
|
1820
|
+
- {situação 1}
|
|
1821
|
+
- {situação 2}
|
|
1822
|
+
|
|
1823
|
+
**Estrutura:**
|
|
1824
|
+
{estrutura do framework como conhecimento próprio}
|
|
1825
|
+
|
|
1826
|
+
**Aplicação prática:**
|
|
1827
|
+
{como o agente usa isso em seu trabalho}
|
|
1828
|
+
|
|
1829
|
+
# Atualizar seção de NAVEGAÇÃO (quando acionado, onde ir)
|
|
1830
|
+
LOCATE or CREATE section "## NAVEGAÇÃO / QUANDO SOU ACIONADO"
|
|
1831
|
+
ENSURE contains:
|
|
1832
|
+
|
|
1833
|
+
### Quando me acionar:
|
|
1834
|
+
- {lista de situações onde este agente é o especialista}
|
|
1835
|
+
|
|
1836
|
+
### Eu consulto:
|
|
1837
|
+
- {lista de DOSSIERs e MEMORYs que informam minhas respostas}
|
|
1838
|
+
|
|
1839
|
+
### Eu escalo para:
|
|
1840
|
+
- {agentes superiores quando necessário}
|
|
1841
|
+
|
|
1842
|
+
WRITE AGENT_PATH
|
|
1843
|
+
LOG: "✅ AGENT atualizado (aprovado): {agent}"
|
|
1844
|
+
|
|
1845
|
+
AGENTS_UPDATED = [list of agents with updated definitions]
|
|
1846
|
+
LOG: "AGENTs atualizados via aprovação: {count} agentes"
|
|
1847
|
+
|
|
1848
|
+
ELSE:
|
|
1849
|
+
LOG: "AGENTs mantidos sem alteração (apenas MEMORYs atualizados)"
|
|
1850
|
+
|
|
1851
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1852
|
+
STEP 7.4.3 - CRIAR NOVOS AGENTES (SE THRESHOLD ATINGIDO)
|
|
1853
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
1854
|
+
|
|
1855
|
+
IF NEW_AGENTS_QUEUE not empty AND user approves:
|
|
1856
|
+
FOR each NEW_AGENT in NEW_AGENTS_QUEUE:
|
|
1857
|
+
|
|
1858
|
+
# Criar AGENT com JOB DESCRIPTION completo
|
|
1859
|
+
# Incluir TODAS as menções acumuladas anteriores (não apenas desta sessão)
|
|
1860
|
+
|
|
1861
|
+
CREATE /agents/{category}/AGENT-{NEW_AGENT}.md:
|
|
1862
|
+
- Job Description baseado em todas as menções acumuladas
|
|
1863
|
+
- Expertise derivada de todos os insights relacionados
|
|
1864
|
+
- Navegação clara (quando acionar, para onde escalar)
|
|
1865
|
+
|
|
1866
|
+
CREATE /agents/{category}/MEMORY-{NEW_AGENT}.md:
|
|
1867
|
+
- Team Agreement style
|
|
1868
|
+
- Todas as fontes que mencionaram este role
|
|
1869
|
+
- Insights acumulados de todas as sessões anteriores
|
|
1870
|
+
|
|
1871
|
+
UPDATE /agents/DISCOVERY/role-tracking.md:
|
|
1872
|
+
- Mark as "✅ CRIADO"
|
|
1873
|
+
- Preserve all accumulated mentions and sources
|
|
1874
|
+
|
|
1875
|
+
LOG: "Novo agente criado: {NEW_AGENT}"
|
|
1876
|
+
|
|
1877
|
+
# RESUMO DO STEP 7.4
|
|
1878
|
+
ENRICHMENT_SUMMARY = {
|
|
1879
|
+
memories_auto_updated: len(MEMORIES_UPDATED),
|
|
1880
|
+
agents_updated_via_approval: len(AGENTS_UPDATED) if user_approved else 0,
|
|
1881
|
+
new_agents_created: len(NEW_AGENTS_CREATED) if any else 0
|
|
1882
|
+
}
|
|
1883
|
+
|
|
1884
|
+
LOG: "Agent Enrichment completo: {ENRICHMENT_SUMMARY}"
|
|
1885
|
+
```
|
|
1886
|
+
|
|
1887
|
+
---
|
|
1888
|
+
|
|
1889
|
+
## PHASE 8: FINALIZATION
|
|
1890
|
+
|
|
1891
|
+
### Step 8.1 - AÇÕES AUTOMÁTICAS
|
|
1892
|
+
```
|
|
1893
|
+
LOG: "Executando finalizações automáticas..."
|
|
1894
|
+
|
|
1895
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1896
|
+
8.1.1 - RAG INDEX (Único Ponto de Execução)
|
|
1897
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1898
|
+
# CORREÇÃO ARQUITETURAL: RAG Index agora executa UMA VEZ no final
|
|
1899
|
+
# Inclui: Knowledge base + Dossiês (persons e themes)
|
|
1900
|
+
|
|
1901
|
+
LOG: "Executando indexação RAG consolidada..."
|
|
1902
|
+
|
|
1903
|
+
# INDEXAR KNOWLEDGE BASE COMPLETA
|
|
1904
|
+
EXECUTE: python scripts/rag_index.py --knowledge --force
|
|
1905
|
+
CAPTURE output
|
|
1906
|
+
LOG: "RAG Knowledge: {files_indexed} arquivos indexados"
|
|
1907
|
+
|
|
1908
|
+
# INDEXAR DOSSIÊS (consolidado de Phase 6.5.4)
|
|
1909
|
+
FOR each dossier in DOSSIERS_TO_INDEX.persons:
|
|
1910
|
+
EXECUTE: python scripts/rag_index.py --file {dossier} --collection dossiers_persons
|
|
1911
|
+
|
|
1912
|
+
FOR each dossier in DOSSIERS_TO_INDEX.themes:
|
|
1913
|
+
EXECUTE: python scripts/rag_index.py --file {dossier} --collection dossiers_themes
|
|
1914
|
+
|
|
1915
|
+
LOG: "RAG Dossiês: {persons_count} pessoas, {themes_count} temas"
|
|
1916
|
+
LOG: "RAG Index TOTAL: {total_files} arquivos indexados"
|
|
1917
|
+
|
|
1918
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1919
|
+
9.5.2 - FILE REGISTRY
|
|
1920
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1921
|
+
EXECUTE: python scripts/file_registry.py --scan
|
|
1922
|
+
CAPTURE output
|
|
1923
|
+
LOG: "File Registry: {SOURCE_ID} registrado com MD5"
|
|
1924
|
+
|
|
1925
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1926
|
+
9.5.3 - SESSION-STATE
|
|
1927
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1928
|
+
READ /system/SESSION-STATE.md
|
|
1929
|
+
|
|
1930
|
+
UPDATE "Arquivos Processados" table:
|
|
1931
|
+
ADD: | {SOURCE_ID} | {filename} | {summary} |
|
|
1932
|
+
|
|
1933
|
+
UPDATE "Knowledge Bases Populadas":
|
|
1934
|
+
ADD sources to relevant agents
|
|
1935
|
+
|
|
1936
|
+
UPDATE "Versão do Sistema":
|
|
1937
|
+
INCREMENT if structural change
|
|
1938
|
+
|
|
1939
|
+
WRITE /system/SESSION-STATE.md
|
|
1940
|
+
LOG: "SESSION-STATE atualizado"
|
|
1941
|
+
|
|
1942
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1943
|
+
9.5.4 - EVOLUTION-LOG (SE MUDANÇA ESTRUTURAL)
|
|
1944
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1945
|
+
IF structural_change_occurred (new agent, new protocol, new pattern):
|
|
1946
|
+
READ /system/EVOLUTION-LOG.md
|
|
1947
|
+
|
|
1948
|
+
APPEND to CHANGELOG:
|
|
1949
|
+
### v{NEW_VERSION} ({TODAY})
|
|
1950
|
+
- [ADD/UPDATE] {description}
|
|
1951
|
+
|
|
1952
|
+
WRITE /system/EVOLUTION-LOG.md
|
|
1953
|
+
LOG: "EVOLUTION-LOG atualizado para v{NEW_VERSION}"
|
|
1954
|
+
|
|
1955
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1956
|
+
8.1.7 - ROLE DISCOVERY (Navegação Hierárquica Rica - 5 NÍVEIS)
|
|
1957
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
1958
|
+
# PRINCÍPIO FUNDAMENTAL: EXTRAÇÃO RICA > ECONOMIA DE TOKENS
|
|
1959
|
+
#
|
|
1960
|
+
# ARQUITETURA DE NAVEGAÇÃO COMPLETA (5 NÍVEIS):
|
|
1961
|
+
# ┌─────────────────────────────────────────────────────────────────────┐
|
|
1962
|
+
# │ NÍVEL 5: DOSSIERS/*.md ← Mais consolidado (markdown) │
|
|
1963
|
+
# │ │ Contém: narrativas finais + referências [chunk_X] │
|
|
1964
|
+
# │ ▼ │
|
|
1965
|
+
# │ NÍVEL 4: NARRATIVES-STATE.json ← Síntese por pessoa/tema │
|
|
1966
|
+
# │ │ Contém: insights_included[] → links para navegar │
|
|
1967
|
+
# │ ▼ │
|
|
1968
|
+
# │ NÍVEL 3: INSIGHTS-STATE.json ← Insights com confiança/prioridade │
|
|
1969
|
+
# │ │ Contém: chunks[] → links para texto original │
|
|
1970
|
+
# │ ▼ │
|
|
1971
|
+
# │ NÍVEL 2: CANONICAL-MAP.json ← Resolução de entidades │
|
|
1972
|
+
# │ │ Contém: mentions[] → entity_id normalizado │
|
|
1973
|
+
# │ ▼ │
|
|
1974
|
+
# │ NÍVEL 1: CHUNKS-STATE.json ← Texto bruto original │
|
|
1975
|
+
# │ Contém: citações exatas, timestamps, speakers │
|
|
1976
|
+
# └─────────────────────────────────────────────────────────────────────┘
|
|
1977
|
+
#
|
|
1978
|
+
# REGRA: Sistema ENTRA pelo nível mais consolidado e DESCE quando precisa
|
|
1979
|
+
# de profundidade. NUNCA limitar a um único nível.
|
|
1980
|
+
|
|
1981
|
+
# ═══════════════════════════════════════════════════════════════════════
|
|
1982
|
+
# CARREGAR TODOS OS 5 NÍVEIS (disponíveis para navegação completa)
|
|
1983
|
+
# ═══════════════════════════════════════════════════════════════════════
|
|
1984
|
+
READ /agents/DISCOVERY/role-tracking.md
|
|
1985
|
+
|
|
1986
|
+
# NÍVEL 5 - DOSSIERS (mais consolidado)
|
|
1987
|
+
DOSSIERS_PERSONS = LIST /knowledge/dossiers/persons/DOSSIER-*.md
|
|
1988
|
+
DOSSIERS_THEMES = LIST /knowledge/dossiers/THEMES/DOSSIER-*.md
|
|
1989
|
+
|
|
1990
|
+
# NÍVEL 4 - NARRATIVES
|
|
1991
|
+
READ /processing/narratives/NARRATIVES-STATE.json as NARRATIVES_DATA
|
|
1992
|
+
|
|
1993
|
+
# NÍVEL 3 - INSIGHTS
|
|
1994
|
+
READ /processing/insights/INSIGHTS-STATE.json as INSIGHTS_DATA
|
|
1995
|
+
|
|
1996
|
+
# NÍVEL 2 - CANONICAL (entidades)
|
|
1997
|
+
READ /processing/canonical/CANONICAL-MAP.json as CANONICAL_DATA
|
|
1998
|
+
|
|
1999
|
+
# NÍVEL 1 - CHUNKS (texto bruto)
|
|
2000
|
+
READ /processing/chunks/CHUNKS-STATE.json as CHUNKS_DATA
|
|
2001
|
+
|
|
2002
|
+
# ═══════════════════════════════════════════════════════════════════════
|
|
2003
|
+
# FASE 1: DOSSIERS como ponto de entrada (visão mais consolidada)
|
|
2004
|
+
# ═══════════════════════════════════════════════════════════════════════
|
|
2005
|
+
FOR each DOSSIER_FILE in DOSSIERS_PERSONS:
|
|
2006
|
+
DOSSIER_CONTENT = READ DOSSIER_FILE
|
|
2007
|
+
PERSON_NAME = extract_person_from_filename(DOSSIER_FILE)
|
|
2008
|
+
|
|
2009
|
+
# Extrair roles mencionados no dossiê consolidado
|
|
2010
|
+
ROLES_FROM_DOSSIER = extract_roles_from_dossier(DOSSIER_CONTENT)
|
|
2011
|
+
|
|
2012
|
+
# Extrair referências de chunks já presentes no dossiê [chunk_X]
|
|
2013
|
+
CHUNK_REFS_IN_DOSSIER = extract_chunk_references(DOSSIER_CONTENT)
|
|
2014
|
+
|
|
2015
|
+
FOR each ROLE in ROLES_FROM_DOSSIER:
|
|
2016
|
+
|
|
2017
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2018
|
+
# FASE 2: DESCER para NARRATIVES (síntese estruturada)
|
|
2019
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2020
|
+
PERSON_NARRATIVE = NARRATIVES_DATA.persons[PERSON_NAME]
|
|
2021
|
+
IF PERSON_NARRATIVE exists:
|
|
2022
|
+
NARRATIVE_TEXT = PERSON_NARRATIVE.narrative
|
|
2023
|
+
INSIGHTS_INCLUDED = PERSON_NARRATIVE.insights_included
|
|
2024
|
+
NARRATIVE_PATTERNS = PERSON_NARRATIVE.patterns
|
|
2025
|
+
NARRATIVE_TENSIONS = PERSON_NARRATIVE.tensions
|
|
2026
|
+
NARRATIVE_LOOPS = PERSON_NARRATIVE.open_loops
|
|
2027
|
+
|
|
2028
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2029
|
+
# FASE 3: DESCER para INSIGHTS (detalhes específicos)
|
|
2030
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2031
|
+
RELEVANT_INSIGHTS = []
|
|
2032
|
+
FOR each INSIGHT_REF in INSIGHTS_INCLUDED:
|
|
2033
|
+
INSIGHT = INSIGHTS_DATA.find(INSIGHT_REF)
|
|
2034
|
+
IF INSIGHT AND (INSIGHT.text contains ROLE OR INSIGHT.tags contains ROLE):
|
|
2035
|
+
RELEVANT_INSIGHTS.append({
|
|
2036
|
+
id: INSIGHT.id,
|
|
2037
|
+
text: INSIGHT.insight,
|
|
2038
|
+
confidence: INSIGHT.confidence,
|
|
2039
|
+
priority: INSIGHT.priority,
|
|
2040
|
+
tags: INSIGHT.tags,
|
|
2041
|
+
chunks: INSIGHT.chunks # Links para navegar mais fundo
|
|
2042
|
+
})
|
|
2043
|
+
|
|
2044
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2045
|
+
# FASE 4: DESCER para CANONICAL (resolução de entidades)
|
|
2046
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2047
|
+
# Verificar se o ROLE tem entidade canônica
|
|
2048
|
+
CANONICAL_ENTITY = CANONICAL_DATA.entities.find(ROLE)
|
|
2049
|
+
IF CANONICAL_ENTITY:
|
|
2050
|
+
ENTITY_VARIATIONS = CANONICAL_ENTITY.aliases # Sinônimos
|
|
2051
|
+
ENTITY_MENTIONS = CANONICAL_ENTITY.mentions # Todas as menções
|
|
2052
|
+
ENTITY_TYPE = CANONICAL_ENTITY.type # role, person, concept
|
|
2053
|
+
ELSE:
|
|
2054
|
+
# Role novo, não canonicalizado ainda
|
|
2055
|
+
FLAG_NEW_ENTITY = true
|
|
2056
|
+
|
|
2057
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2058
|
+
# FASE 5: DESCER para CHUNKS (citações exatas originais)
|
|
2059
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2060
|
+
EXACT_QUOTES = []
|
|
2061
|
+
|
|
2062
|
+
# Via insights (links diretos)
|
|
2063
|
+
FOR each INSIGHT in RELEVANT_INSIGHTS:
|
|
2064
|
+
FOR each CHUNK_REF in INSIGHT.chunks:
|
|
2065
|
+
CHUNK = CHUNKS_DATA.find(CHUNK_REF)
|
|
2066
|
+
IF CHUNK exists:
|
|
2067
|
+
EXACT_QUOTES.append({
|
|
2068
|
+
chunk_id: CHUNK_REF,
|
|
2069
|
+
text: CHUNK.conteudo,
|
|
2070
|
+
timestamp: CHUNK.timestamp,
|
|
2071
|
+
speaker: CHUNK.speaker,
|
|
2072
|
+
source_id: CHUNK.source_id,
|
|
2073
|
+
via: "insight_link"
|
|
2074
|
+
})
|
|
2075
|
+
|
|
2076
|
+
# Via referências do dossiê (se existirem)
|
|
2077
|
+
FOR each CHUNK_REF in CHUNK_REFS_IN_DOSSIER:
|
|
2078
|
+
IF CHUNK_REF relates_to ROLE:
|
|
2079
|
+
CHUNK = CHUNKS_DATA.find(CHUNK_REF)
|
|
2080
|
+
IF CHUNK exists AND CHUNK not in EXACT_QUOTES:
|
|
2081
|
+
EXACT_QUOTES.append({
|
|
2082
|
+
chunk_id: CHUNK_REF,
|
|
2083
|
+
text: CHUNK.conteudo,
|
|
2084
|
+
timestamp: CHUNK.timestamp,
|
|
2085
|
+
speaker: CHUNK.speaker,
|
|
2086
|
+
source_id: CHUNK.source_id,
|
|
2087
|
+
via: "dossier_reference"
|
|
2088
|
+
})
|
|
2089
|
+
|
|
2090
|
+
# Via menções canônicas (busca por variações)
|
|
2091
|
+
IF ENTITY_VARIATIONS:
|
|
2092
|
+
FOR each VARIATION in ENTITY_VARIATIONS:
|
|
2093
|
+
FOR each CHUNK in CHUNKS_DATA.chunks:
|
|
2094
|
+
IF CHUNK.conteudo contains VARIATION AND CHUNK not in EXACT_QUOTES:
|
|
2095
|
+
EXACT_QUOTES.append({
|
|
2096
|
+
chunk_id: CHUNK.id,
|
|
2097
|
+
text: CHUNK.conteudo,
|
|
2098
|
+
timestamp: CHUNK.timestamp,
|
|
2099
|
+
speaker: CHUNK.speaker,
|
|
2100
|
+
source_id: CHUNK.source_id,
|
|
2101
|
+
via: "canonical_variation",
|
|
2102
|
+
matched_variation: VARIATION
|
|
2103
|
+
})
|
|
2104
|
+
|
|
2105
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2106
|
+
# FASE 6: COMPILAR EXTRAÇÃO RICA COMPLETA (TODOS OS 5 NÍVEIS)
|
|
2107
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2108
|
+
RICH_EXTRACTION = {
|
|
2109
|
+
role: ROLE,
|
|
2110
|
+
source_person: PERSON_NAME,
|
|
2111
|
+
extraction_levels: ["DOSSIER", "NARRATIVE", "INSIGHT", "CANONICAL", "CHUNK"],
|
|
2112
|
+
|
|
2113
|
+
# NÍVEL 5 - Do DOSSIER (mais consolidado)
|
|
2114
|
+
dossier_context: extract_excerpt(DOSSIER_CONTENT, ROLE),
|
|
2115
|
+
dossier_file: DOSSIER_FILE,
|
|
2116
|
+
dossier_chunk_refs: CHUNK_REFS_IN_DOSSIER,
|
|
2117
|
+
|
|
2118
|
+
# NÍVEL 4 - Do NARRATIVES (síntese)
|
|
2119
|
+
narrative_context: extract_excerpt(NARRATIVE_TEXT, ROLE),
|
|
2120
|
+
patterns_identified: filter_by_role(NARRATIVE_PATTERNS, ROLE),
|
|
2121
|
+
open_loops: filter_by_role(NARRATIVE_LOOPS, ROLE),
|
|
2122
|
+
tensions: filter_by_role(NARRATIVE_TENSIONS, ROLE),
|
|
2123
|
+
|
|
2124
|
+
# NÍVEL 3 - Dos INSIGHTS (detalhes)
|
|
2125
|
+
insights: RELEVANT_INSIGHTS,
|
|
2126
|
+
confidence_levels: [i.confidence for i in RELEVANT_INSIGHTS],
|
|
2127
|
+
priorities: [i.priority for i in RELEVANT_INSIGHTS],
|
|
2128
|
+
total_insights: len(RELEVANT_INSIGHTS),
|
|
2129
|
+
|
|
2130
|
+
# NÍVEL 2 - Do CANONICAL (entidades)
|
|
2131
|
+
canonical_entity: CANONICAL_ENTITY,
|
|
2132
|
+
entity_variations: ENTITY_VARIATIONS,
|
|
2133
|
+
is_new_entity: FLAG_NEW_ENTITY,
|
|
2134
|
+
|
|
2135
|
+
# NÍVEL 1 - Dos CHUNKS (citações exatas)
|
|
2136
|
+
exact_quotes: EXACT_QUOTES,
|
|
2137
|
+
total_mentions: len(EXACT_QUOTES),
|
|
2138
|
+
sources_involved: unique([q.source_id for q in EXACT_QUOTES])
|
|
2139
|
+
}
|
|
2140
|
+
|
|
2141
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2142
|
+
# Atualizar role-tracking com EXTRAÇÃO RICA COMPLETA
|
|
2143
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2144
|
+
FIND existing entry in role-tracking.md OR create new
|
|
2145
|
+
INCREMENT mention count by RICH_EXTRACTION.total_mentions
|
|
2146
|
+
APPEND rich_extraction to role entry
|
|
2147
|
+
PRESERVE all accumulated information
|
|
2148
|
+
|
|
2149
|
+
# ═══════════════════════════════════════════════════════════════════════
|
|
2150
|
+
# VERIFICAR THRESHOLD E SINALIZAR
|
|
2151
|
+
# ═══════════════════════════════════════════════════════════════════════
|
|
2152
|
+
FOR each ROLE in role-tracking.md:
|
|
2153
|
+
IF mentions >= 10 AND NOT has_agent:
|
|
2154
|
+
FLAG as "🔴 CRÍTICO - CRIAR AGENTE"
|
|
2155
|
+
LOG: "ROLE {ROLE}: threshold atingido ({mentions}/10) - EXTRAÇÃO RICA 5 NÍVEIS disponível"
|
|
2156
|
+
ELIF mentions >= 7:
|
|
2157
|
+
FLAG as "🟡 IMPORTANTE - MONITORAR"
|
|
2158
|
+
|
|
2159
|
+
UPDATE "LOG DE ATUALIZAÇÕES" table:
|
|
2160
|
+
ADD: | {TODAY} | {SOURCE_ID} | {roles updated} | NAVEGAÇÃO RICA 5 NÍVEIS: DOSSIER→NARRATIVE→INSIGHT→CANONICAL→CHUNK |
|
|
2161
|
+
|
|
2162
|
+
WRITE /agents/DISCOVERY/role-tracking.md
|
|
2163
|
+
LOG: "Role Discovery: {roles_count} roles via navegação hierárquica rica"
|
|
2164
|
+
|
|
2165
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
2166
|
+
8.1.6 - SUA-EMPRESA ENRICHMENT (Navegação Hierárquica Rica)
|
|
2167
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
2168
|
+
|
|
2169
|
+
> **Protocolo:** `/agents/protocols/SUA-EMPRESA-ENRICHMENT-PROTOCOL.md`
|
|
2170
|
+
> **Ecossistema:** [SUA EMPRESA] (ISOLATED)
|
|
2171
|
+
> **Método:** Navegação NARRATIVES → INSIGHTS → CHUNKS (extração rica)
|
|
2172
|
+
|
|
2173
|
+
LOG: "Executando SUA-EMPRESA Enrichment via navegação hierárquica..."
|
|
2174
|
+
|
|
2175
|
+
# PRINCÍPIO: EXTRAÇÃO RICA > ECONOMIA DE TOKENS
|
|
2176
|
+
# NARRATIVES = ponto de ENTRADA, INSIGHTS e CHUNKS para profundidade
|
|
2177
|
+
|
|
2178
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2179
|
+
# CARREGAR TODAS AS FONTES (disponíveis para navegação)
|
|
2180
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2181
|
+
READ /processing/narratives/NARRATIVES-STATE.json as NARRATIVES_DATA
|
|
2182
|
+
READ /processing/insights/INSIGHTS-STATE.json as INSIGHTS_DATA
|
|
2183
|
+
READ /processing/chunks/CHUNKS-STATE.json as CHUNKS_DATA
|
|
2184
|
+
|
|
2185
|
+
# Mapeamento de temas para CARGOS (nao agentes)
|
|
2186
|
+
THEME_TO_ROLES_[SUA EMPRESA] = {
|
|
2187
|
+
"01-ESTRUTURA-TIME": ["CLOSER-CHEFE", "SALES-MANAGER"],
|
|
2188
|
+
"02-PROCESSO-VENDAS": ["closer", "CLOSER-CHEFE", "SDR"],
|
|
2189
|
+
"03-CONTRATACAO": ["CLOSER-CHEFE", "SALES-MANAGER", "CMO"],
|
|
2190
|
+
"04-COMISSIONAMENTO": ["closer", "CLOSER-CHEFE", "SALES-MANAGER"],
|
|
2191
|
+
"05-METRICAS": ["CLOSER-CHEFE", "SALES-MANAGER", "CMO"],
|
|
2192
|
+
"06-FUNIL-APLICACAO": ["SDR", "CMO"],
|
|
2193
|
+
"07-PRICING": ["CMO"],
|
|
2194
|
+
"08-FERRAMENTAS": ["CLOSER-CHEFE", "SALES-MANAGER"],
|
|
2195
|
+
"09-GESTAO": ["CLOSER-CHEFE", "SALES-MANAGER"],
|
|
2196
|
+
"10-CULTURA-GAMIFICACAO": ["CLOSER-CHEFE", "SALES-MANAGER"]
|
|
2197
|
+
}
|
|
2198
|
+
|
|
2199
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2200
|
+
# FASE 1: NARRATIVES como ponto de entrada
|
|
2201
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2202
|
+
FOR each PERSON in NARRATIVES_DATA.persons:
|
|
2203
|
+
NARRATIVE = PERSON.narrative
|
|
2204
|
+
INSIGHTS_INCLUDED = PERSON.insights_included
|
|
2205
|
+
|
|
2206
|
+
FOR each THEME in THEME_TO_ROLES_[SUA EMPRESA].keys():
|
|
2207
|
+
IF NARRATIVE contains content about THEME:
|
|
2208
|
+
ROLES = THEME_TO_ROLES_[SUA EMPRESA][THEME]
|
|
2209
|
+
|
|
2210
|
+
FOR each ROLE in ROLES:
|
|
2211
|
+
ROLE_PATH = /agents/sua-empresa/roles/ROLE-{ROLE}.md
|
|
2212
|
+
|
|
2213
|
+
IF ROLE_PATH exists:
|
|
2214
|
+
|
|
2215
|
+
# ─────────────────────────────────────────────────────────────
|
|
2216
|
+
# FASE 2: NAVEGAR para INSIGHTS (detalhes do tema)
|
|
2217
|
+
# ─────────────────────────────────────────────────────────────
|
|
2218
|
+
THEME_INSIGHTS = []
|
|
2219
|
+
FOR each INSIGHT_REF in INSIGHTS_INCLUDED:
|
|
2220
|
+
INSIGHT = INSIGHTS_DATA.find(INSIGHT_REF)
|
|
2221
|
+
IF INSIGHT relates to THEME:
|
|
2222
|
+
THEME_INSIGHTS.append({
|
|
2223
|
+
id: INSIGHT.id,
|
|
2224
|
+
text: INSIGHT.insight,
|
|
2225
|
+
confidence: INSIGHT.confidence,
|
|
2226
|
+
priority: INSIGHT.priority,
|
|
2227
|
+
chunks: INSIGHT.chunks
|
|
2228
|
+
})
|
|
2229
|
+
|
|
2230
|
+
# ─────────────────────────────────────────────────────────────
|
|
2231
|
+
# FASE 3: NAVEGAR para CHUNKS (citações exatas)
|
|
2232
|
+
# ─────────────────────────────────────────────────────────────
|
|
2233
|
+
EXACT_QUOTES = []
|
|
2234
|
+
FOR each INSIGHT in THEME_INSIGHTS:
|
|
2235
|
+
FOR each CHUNK_REF in INSIGHT.chunks:
|
|
2236
|
+
CHUNK = CHUNKS_DATA.find(CHUNK_REF)
|
|
2237
|
+
IF CHUNK exists:
|
|
2238
|
+
EXACT_QUOTES.append({
|
|
2239
|
+
chunk_id: CHUNK_REF,
|
|
2240
|
+
quote: CHUNK.conteudo,
|
|
2241
|
+
timestamp: CHUNK.timestamp,
|
|
2242
|
+
speaker: CHUNK.speaker
|
|
2243
|
+
})
|
|
2244
|
+
|
|
2245
|
+
# ─────────────────────────────────────────────────────────────
|
|
2246
|
+
# FASE 4: COMPILAR ENRIQUECIMENTO RICO
|
|
2247
|
+
# ─────────────────────────────────────────────────────────────
|
|
2248
|
+
RICH_ENRICHMENT = {
|
|
2249
|
+
theme: THEME,
|
|
2250
|
+
source_person: PERSON.name,
|
|
2251
|
+
corpus: PERSON.corpus,
|
|
2252
|
+
|
|
2253
|
+
# Do NARRATIVES (visão consolidada)
|
|
2254
|
+
narrative_excerpt: extract_theme_excerpt(NARRATIVE, THEME),
|
|
2255
|
+
patterns: PERSON.patterns if related to THEME,
|
|
2256
|
+
open_loops: PERSON.open_loops if related to THEME,
|
|
2257
|
+
|
|
2258
|
+
# Dos INSIGHTS (detalhes)
|
|
2259
|
+
insights: THEME_INSIGHTS,
|
|
2260
|
+
high_priority_count: count(i for i in THEME_INSIGHTS if i.priority == "HIGH"),
|
|
2261
|
+
|
|
2262
|
+
# Dos CHUNKS (citações)
|
|
2263
|
+
exact_quotes: EXACT_QUOTES
|
|
2264
|
+
}
|
|
2265
|
+
|
|
2266
|
+
# ─────────────────────────────────────────────────────────────
|
|
2267
|
+
# APLICAR ENRIQUECIMENTO AO ROLE
|
|
2268
|
+
# ─────────────────────────────────────────────────────────────
|
|
2269
|
+
IF NOT already_exists(ROLE_PATH, SOURCE_ID):
|
|
2270
|
+
|
|
2271
|
+
# Adicionar excerpt narrativo com [FONTE]
|
|
2272
|
+
APPEND "[FONTE: {PERSON.corpus}] {RICH_ENRICHMENT.narrative_excerpt}"
|
|
2273
|
+
|
|
2274
|
+
# Adicionar insights HIGH priority com citações exatas
|
|
2275
|
+
FOR each INSIGHT in THEME_INSIGHTS where priority == "HIGH":
|
|
2276
|
+
QUOTE = find_quote_for_insight(INSIGHT, EXACT_QUOTES)
|
|
2277
|
+
APPEND:
|
|
2278
|
+
"""
|
|
2279
|
+
**{INSIGHT.text}**
|
|
2280
|
+
[Confidence: {INSIGHT.confidence}]
|
|
2281
|
+
> "{QUOTE.quote}" — {PERSON.name}
|
|
2282
|
+
[FONTE: {QUOTE.chunk_id}]
|
|
2283
|
+
"""
|
|
2284
|
+
|
|
2285
|
+
# Adicionar open_loops relacionados
|
|
2286
|
+
FOR each LOOP in RICH_ENRICHMENT.open_loops:
|
|
2287
|
+
APPEND "❓ {LOOP.question} — {LOOP.why_it_matters}"
|
|
2288
|
+
|
|
2289
|
+
UPDATE MEMORY-{ROLE}.md with full RICH_ENRICHMENT
|
|
2290
|
+
LOG: "ROLE-{ROLE}: +enriquecimento rico de {PERSON.name} ({len(EXACT_QUOTES)} citações)"
|
|
2291
|
+
|
|
2292
|
+
SUA_EMPRESA_STATS = {
|
|
2293
|
+
roles_updated: count,
|
|
2294
|
+
memories_updated: count,
|
|
2295
|
+
insights_applied: count,
|
|
2296
|
+
exact_quotes_added: count,
|
|
2297
|
+
open_loops_added: count
|
|
2298
|
+
}
|
|
2299
|
+
|
|
2300
|
+
LOG: "SUA-EMPRESA Enrichment: {roles_updated} ROLEs via navegação hierárquica rica"
|
|
2301
|
+
|
|
2302
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
2303
|
+
8.1.8 - DNA COGNITIVO AUTO-CREATE/UPDATE
|
|
2304
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
2305
|
+
|
|
2306
|
+
> **Protocolo Base:** `/system/protocols/dna/DNA-EXTRACTION-PROTOCOL.md`
|
|
2307
|
+
> **Trigger CREATE:** DOSSIER existe + densidade >= 3/5 + DNA não existe
|
|
2308
|
+
> **Trigger UPDATE:** DNA existe + novo material processado
|
|
2309
|
+
> **Output:** DNA/*.yaml criados automaticamente OU atualizados com novos insights
|
|
2310
|
+
>
|
|
2311
|
+
> **MUDANÇA v2.1.3:** Extração de DNA agora é AUTOMÁTICA quando densidade >= 3/5
|
|
2312
|
+
> Removido: Trigger antigo de "2+ fontes" (arbitrário)
|
|
2313
|
+
> Adicionado: Trigger semântico baseado em densidade do DOSSIER
|
|
2314
|
+
|
|
2315
|
+
LOG: "Verificando necessidade de atualização de DNA Cognitivo..."
|
|
2316
|
+
|
|
2317
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2318
|
+
# FASE 1: VERIFICAR SE PESSOA TEM DNA EXISTENTE
|
|
2319
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2320
|
+
DNA_BASE_PATH = /knowledge/dna/persons/{SOURCE_PERSON_NORMALIZED}
|
|
2321
|
+
|
|
2322
|
+
IF DNA_BASE_PATH exists:
|
|
2323
|
+
MODE = "UPDATE"
|
|
2324
|
+
LOG: "DNA existente encontrado para {SOURCE_PERSON} - modo UPDATE"
|
|
2325
|
+
|
|
2326
|
+
# Ler DNA atual
|
|
2327
|
+
CURRENT_DNA = {
|
|
2328
|
+
config: READ DNA_BASE_PATH/CONFIG.yaml,
|
|
2329
|
+
filosofias: READ DNA_BASE_PATH/FILOSOFIAS.yaml,
|
|
2330
|
+
modelos_mentais: READ DNA_BASE_PATH/MODELOS-MENTAIS.yaml,
|
|
2331
|
+
heuristicas: READ DNA_BASE_PATH/HEURISTICAS.yaml,
|
|
2332
|
+
frameworks: READ DNA_BASE_PATH/FRAMEWORKS.yaml,
|
|
2333
|
+
metodologias: READ DNA_BASE_PATH/METODOLOGIAS.yaml
|
|
2334
|
+
}
|
|
2335
|
+
|
|
2336
|
+
ELSE:
|
|
2337
|
+
# Verificar se há material suficiente para CRIAÇÃO AUTOMÁTICA de DNA
|
|
2338
|
+
PERSON_DOSSIER = /knowledge/dossiers/persons/DOSSIER-{SOURCE_PERSON}.md
|
|
2339
|
+
|
|
2340
|
+
IF PERSON_DOSSIER exists:
|
|
2341
|
+
DOSSIER_CONTENT = READ PERSON_DOSSIER
|
|
2342
|
+
DOSSIER_DENSITY = extract_density(DOSSIER_CONTENT) # ◐◐◐◐◐ = 5
|
|
2343
|
+
|
|
2344
|
+
IF DOSSIER_DENSITY >= 3:
|
|
2345
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2346
|
+
# EXTRAÇÃO AUTOMÁTICA DE DNA (trigger: densidade >= 3/5)
|
|
2347
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
2348
|
+
MODE = "CREATE"
|
|
2349
|
+
LOG: "🧬 DNA EXTRACTION AUTOMÁTICA: {SOURCE_PERSON} (densidade {DOSSIER_DENSITY}/5)"
|
|
2350
|
+
|
|
2351
|
+
# Criar diretório do DNA
|
|
2352
|
+
DNA_BASE_PATH = /knowledge/dna/persons/{SOURCE_PERSON_NORMALIZED}
|
|
2353
|
+
CREATE DIRECTORY DNA_BASE_PATH
|
|
2354
|
+
|
|
2355
|
+
# Carregar fontes para extração rica (5 níveis)
|
|
2356
|
+
READ /processing/insights/INSIGHTS-STATE.json as INSIGHTS_DATA
|
|
2357
|
+
READ /processing/narratives/NARRATIVES-STATE.json as NARRATIVES_DATA
|
|
2358
|
+
READ /processing/chunks/CHUNKS-STATE.json as CHUNKS_DATA
|
|
2359
|
+
|
|
2360
|
+
# Filtrar dados desta pessoa
|
|
2361
|
+
PERSON_INSIGHTS = filter(INSIGHTS_DATA where pessoa == SOURCE_PERSON)
|
|
2362
|
+
PERSON_NARRATIVE = NARRATIVES_DATA.persons[SOURCE_PERSON]
|
|
2363
|
+
|
|
2364
|
+
# Extrair elementos por camada usando tags DNA dos insights
|
|
2365
|
+
FILOSOFIAS = filter(PERSON_INSIGHTS where tag == "[FILOSOFIA]")
|
|
2366
|
+
MODELOS_MENTAIS = filter(PERSON_INSIGHTS where tag == "[MODELO-MENTAL]")
|
|
2367
|
+
HEURISTICAS = filter(PERSON_INSIGHTS where tag == "[HEURISTICA]")
|
|
2368
|
+
FRAMEWORKS = filter(PERSON_INSIGHTS where tag == "[FRAMEWORK]")
|
|
2369
|
+
METODOLOGIAS = filter(PERSON_INSIGHTS where tag == "[METODOLOGIA]")
|
|
2370
|
+
|
|
2371
|
+
# ─────────────────────────────────────────────────────────────────
|
|
2372
|
+
# GERAR 6 ARQUIVOS YAML (seguindo DNA-EXTRACTION-PROTOCOL)
|
|
2373
|
+
# ─────────────────────────────────────────────────────────────────
|
|
2374
|
+
|
|
2375
|
+
# 1. FILOSOFIAS.yaml
|
|
2376
|
+
GENERATE DNA_BASE_PATH/FILOSOFIAS.yaml:
|
|
2377
|
+
versao: "1.0.0"
|
|
2378
|
+
pessoa: SOURCE_PERSON
|
|
2379
|
+
camada: "FILOSOFIAS"
|
|
2380
|
+
total_itens: count(FILOSOFIAS)
|
|
2381
|
+
itens: [
|
|
2382
|
+
FOR each insight in FILOSOFIAS:
|
|
2383
|
+
- id: generate_id("FIL", SOURCE_PERSON, index)
|
|
2384
|
+
titulo: insight.titulo
|
|
2385
|
+
descricao: insight.insight
|
|
2386
|
+
peso: calculate_weight(insight)
|
|
2387
|
+
chunks: insight.chunks
|
|
2388
|
+
fontes: insight.sources
|
|
2389
|
+
]
|
|
2390
|
+
metadados:
|
|
2391
|
+
criado_em: NOW()
|
|
2392
|
+
protocolo: "DNA-EXTRACTION-PROTOCOL v1.0"
|
|
2393
|
+
pipeline: "Jarvis v2.1 (automático)"
|
|
2394
|
+
|
|
2395
|
+
# 2. MODELOS-MENTAIS.yaml
|
|
2396
|
+
GENERATE DNA_BASE_PATH/MODELOS-MENTAIS.yaml:
|
|
2397
|
+
versao: "1.0.0"
|
|
2398
|
+
pessoa: SOURCE_PERSON
|
|
2399
|
+
camada: "MODELOS-MENTAIS"
|
|
2400
|
+
total_itens: count(MODELOS_MENTAIS)
|
|
2401
|
+
itens: [
|
|
2402
|
+
FOR each insight in MODELOS_MENTAIS:
|
|
2403
|
+
- id: generate_id("MM", SOURCE_PERSON, index)
|
|
2404
|
+
titulo: insight.titulo
|
|
2405
|
+
descricao: insight.insight
|
|
2406
|
+
peso: calculate_weight(insight)
|
|
2407
|
+
pergunta_gerada: extract_question(insight)
|
|
2408
|
+
chunks: insight.chunks
|
|
2409
|
+
fontes: insight.sources
|
|
2410
|
+
]
|
|
2411
|
+
metadados: {same structure}
|
|
2412
|
+
|
|
2413
|
+
# 3. HEURISTICAS.yaml (PRIORIDADE MÁXIMA - contém thresholds numéricos)
|
|
2414
|
+
GENERATE DNA_BASE_PATH/HEURISTICAS.yaml:
|
|
2415
|
+
versao: "1.0.0"
|
|
2416
|
+
pessoa: SOURCE_PERSON
|
|
2417
|
+
camada: "HEURISTICAS"
|
|
2418
|
+
total_itens: count(HEURISTICAS)
|
|
2419
|
+
itens: [
|
|
2420
|
+
FOR each insight in HEURISTICAS:
|
|
2421
|
+
- id: generate_id("HEU", SOURCE_PERSON, index)
|
|
2422
|
+
titulo: insight.titulo
|
|
2423
|
+
descricao: insight.insight
|
|
2424
|
+
threshold: extract_threshold(insight) # Ex: "30-40% net profit"
|
|
2425
|
+
peso: calculate_weight(insight) + 0.10 # Bonus por threshold
|
|
2426
|
+
chunks: insight.chunks
|
|
2427
|
+
fontes: insight.sources
|
|
2428
|
+
]
|
|
2429
|
+
metadados: {same structure}
|
|
2430
|
+
|
|
2431
|
+
# 4. FRAMEWORKS.yaml
|
|
2432
|
+
GENERATE DNA_BASE_PATH/FRAMEWORKS.yaml:
|
|
2433
|
+
versao: "1.0.0"
|
|
2434
|
+
pessoa: SOURCE_PERSON
|
|
2435
|
+
camada: "FRAMEWORKS"
|
|
2436
|
+
total_itens: count(FRAMEWORKS)
|
|
2437
|
+
itens: [
|
|
2438
|
+
FOR each insight in FRAMEWORKS:
|
|
2439
|
+
- id: generate_id("FW", SOURCE_PERSON, index)
|
|
2440
|
+
titulo: insight.titulo
|
|
2441
|
+
descricao: insight.insight
|
|
2442
|
+
componentes: extract_components(insight)
|
|
2443
|
+
peso: calculate_weight(insight)
|
|
2444
|
+
chunks: insight.chunks
|
|
2445
|
+
fontes: insight.sources
|
|
2446
|
+
]
|
|
2447
|
+
metadados: {same structure}
|
|
2448
|
+
|
|
2449
|
+
# 5. METODOLOGIAS.yaml
|
|
2450
|
+
GENERATE DNA_BASE_PATH/METODOLOGIAS.yaml:
|
|
2451
|
+
versao: "1.0.0"
|
|
2452
|
+
pessoa: SOURCE_PERSON
|
|
2453
|
+
camada: "METODOLOGIAS"
|
|
2454
|
+
total_itens: count(METODOLOGIAS)
|
|
2455
|
+
itens: [
|
|
2456
|
+
FOR each insight in METODOLOGIAS:
|
|
2457
|
+
- id: generate_id("MET", SOURCE_PERSON, index)
|
|
2458
|
+
titulo: insight.titulo
|
|
2459
|
+
descricao: insight.insight
|
|
2460
|
+
etapas: extract_steps(insight)
|
|
2461
|
+
peso: calculate_weight(insight)
|
|
2462
|
+
chunks: insight.chunks
|
|
2463
|
+
fontes: insight.sources
|
|
2464
|
+
]
|
|
2465
|
+
metadados: {same structure}
|
|
2466
|
+
|
|
2467
|
+
# 6. CONFIG.yaml (metadados e síntese)
|
|
2468
|
+
GENERATE DNA_BASE_PATH/CONFIG.yaml:
|
|
2469
|
+
versao: "1.0.0"
|
|
2470
|
+
pessoa: SOURCE_PERSON
|
|
2471
|
+
nome_canonico: SOURCE_PERSON
|
|
2472
|
+
empresa: extract_company(PERSON_NARRATIVE)
|
|
2473
|
+
|
|
2474
|
+
padroes_comportamentais: extract_patterns(PERSON_NARRATIVE)
|
|
2475
|
+
sintese_narrativa: PERSON_NARRATIVE.narrative
|
|
2476
|
+
|
|
2477
|
+
estatisticas:
|
|
2478
|
+
filosofias: count(FILOSOFIAS)
|
|
2479
|
+
modelos_mentais: count(MODELOS_MENTAIS)
|
|
2480
|
+
heuristicas: count(HEURISTICAS)
|
|
2481
|
+
frameworks: count(FRAMEWORKS)
|
|
2482
|
+
metodologias: count(METODOLOGIAS)
|
|
2483
|
+
total_itens: sum_all
|
|
2484
|
+
peso_medio_geral: calculate_average_weight()
|
|
2485
|
+
|
|
2486
|
+
fontes:
|
|
2487
|
+
processadas: list_sources(PERSON_INSIGHTS)
|
|
2488
|
+
dossier: DOSSIER_PATH
|
|
2489
|
+
chunks_totais: count(unique_chunks)
|
|
2490
|
+
|
|
2491
|
+
metadados:
|
|
2492
|
+
criado_em: NOW()
|
|
2493
|
+
protocolo: "DNA-EXTRACTION-PROTOCOL v1.0"
|
|
2494
|
+
pipeline: "Jarvis v2.1 (automático)"
|
|
2495
|
+
trigger: "densidade >= 3/5"
|
|
2496
|
+
|
|
2497
|
+
changelog:
|
|
2498
|
+
- data: NOW()
|
|
2499
|
+
acao: "Criação automática do DNA"
|
|
2500
|
+
fonte: DOSSIER_PATH
|
|
2501
|
+
itens_adicionados: total_itens
|
|
2502
|
+
versao: "1.0.0"
|
|
2503
|
+
|
|
2504
|
+
# ─────────────────────────────────────────────────────────────────
|
|
2505
|
+
# ESTATÍSTICAS DA EXTRAÇÃO
|
|
2506
|
+
# ─────────────────────────────────────────────────────────────────
|
|
2507
|
+
DNA_CREATE_STATS = {
|
|
2508
|
+
filosofias: count(FILOSOFIAS),
|
|
2509
|
+
modelos_mentais: count(MODELOS_MENTAIS),
|
|
2510
|
+
heuristicas: count(HEURISTICAS),
|
|
2511
|
+
frameworks: count(FRAMEWORKS),
|
|
2512
|
+
metodologias: count(METODOLOGIAS),
|
|
2513
|
+
total: sum_all
|
|
2514
|
+
}
|
|
2515
|
+
|
|
2516
|
+
LOG: "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
2517
|
+
LOG: "🧬 DNA COGNITIVO CRIADO: {SOURCE_PERSON}"
|
|
2518
|
+
LOG: "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
2519
|
+
LOG: ""
|
|
2520
|
+
LOG: "📁 Diretório: {DNA_BASE_PATH}"
|
|
2521
|
+
LOG: ""
|
|
2522
|
+
LOG: "📊 Arquivos gerados:"
|
|
2523
|
+
LOG: " ├─ FILOSOFIAS.yaml ({DNA_CREATE_STATS.filosofias} itens)"
|
|
2524
|
+
LOG: " ├─ MODELOS-MENTAIS.yaml ({DNA_CREATE_STATS.modelos_mentais} itens)"
|
|
2525
|
+
LOG: " ├─ HEURISTICAS.yaml ({DNA_CREATE_STATS.heuristicas} itens)"
|
|
2526
|
+
LOG: " ├─ FRAMEWORKS.yaml ({DNA_CREATE_STATS.frameworks} itens)"
|
|
2527
|
+
LOG: " ├─ METODOLOGIAS.yaml ({DNA_CREATE_STATS.metodologias} itens)"
|
|
2528
|
+
LOG: " └─ CONFIG.yaml (metadados + síntese)"
|
|
2529
|
+
LOG: ""
|
|
2530
|
+
LOG: "📈 Total: {DNA_CREATE_STATS.total} itens extraídos"
|
|
2531
|
+
LOG: "🎯 Trigger: densidade {DOSSIER_DENSITY}/5 >= 3/5"
|
|
2532
|
+
LOG: ""
|
|
2533
|
+
LOG: "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
2534
|
+
|
|
2535
|
+
ELSE:
|
|
2536
|
+
MODE = "SKIP"
|
|
2537
|
+
LOG: "⚠️ Densidade insuficiente para DNA: {SOURCE_PERSON} ({DOSSIER_DENSITY}/5)"
|
|
2538
|
+
LOG: " Mínimo necessário: 3/5"
|
|
2539
|
+
LOG: " Ação: Processar mais materiais desta pessoa"
|
|
2540
|
+
|
|
2541
|
+
ELSE:
|
|
2542
|
+
MODE = "SKIP"
|
|
2543
|
+
LOG: "⚠️ DOSSIER não existe para {SOURCE_PERSON} - DNA não pode ser criado"
|
|
2544
|
+
|
|
2545
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2546
|
+
# FASE 2: SE MODE = UPDATE, EXTRAIR NOVOS ELEMENTOS DO DOSSIER
|
|
2547
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2548
|
+
IF MODE == "UPDATE":
|
|
2549
|
+
|
|
2550
|
+
# Navegar DOSSIER → NARRATIVES → INSIGHTS → CHUNKS para extração rica
|
|
2551
|
+
DOSSIER_PATH = /knowledge/dossiers/persons/DOSSIER-{SOURCE_PERSON}.md
|
|
2552
|
+
DOSSIER_CONTENT = READ DOSSIER_PATH
|
|
2553
|
+
|
|
2554
|
+
# Extrair elementos por camada (seguindo DNA-EXTRACTION-PROTOCOL)
|
|
2555
|
+
NEW_FILOSOFIAS = extract_filosofias_from_dossier(DOSSIER_CONTENT, SOURCE_ID)
|
|
2556
|
+
NEW_MODELOS = extract_modelos_from_dossier(DOSSIER_CONTENT, SOURCE_ID)
|
|
2557
|
+
NEW_HEURISTICAS = extract_heuristicas_from_dossier(DOSSIER_CONTENT, SOURCE_ID)
|
|
2558
|
+
NEW_FRAMEWORKS = extract_frameworks_from_dossier(DOSSIER_CONTENT, SOURCE_ID)
|
|
2559
|
+
NEW_METODOLOGIAS = extract_metodologias_from_dossier(DOSSIER_CONTENT, SOURCE_ID)
|
|
2560
|
+
|
|
2561
|
+
# Verificar se há novos elementos (não duplicatas)
|
|
2562
|
+
IF any_new_elements_found(NEW_*, CURRENT_DNA):
|
|
2563
|
+
|
|
2564
|
+
# ─────────────────────────────────────────────────────────────────
|
|
2565
|
+
# FASE 3: MERGE COM DNA EXISTENTE
|
|
2566
|
+
# ─────────────────────────────────────────────────────────────────
|
|
2567
|
+
FOR each LAYER in [filosofias, modelos_mentais, heuristicas, frameworks, metodologias]:
|
|
2568
|
+
|
|
2569
|
+
NEW_ITEMS = get_new_items(LAYER)
|
|
2570
|
+
EXISTING_ITEMS = CURRENT_DNA[LAYER]
|
|
2571
|
+
|
|
2572
|
+
FOR each NEW_ITEM in NEW_ITEMS:
|
|
2573
|
+
IF NOT already_exists(NEW_ITEM, EXISTING_ITEMS):
|
|
2574
|
+
APPEND NEW_ITEM to EXISTING_ITEMS
|
|
2575
|
+
LOG: " + Novo item em {LAYER}: {NEW_ITEM.id}"
|
|
2576
|
+
|
|
2577
|
+
# ─────────────────────────────────────────────────────────────────
|
|
2578
|
+
# FASE 4: ATUALIZAR CHANGELOG EM CADA YAML
|
|
2579
|
+
# ─────────────────────────────────────────────────────────────────
|
|
2580
|
+
FOR each LAYER_FILE in [CONFIG, FILOSOFIAS, MODELOS-MENTAIS, HEURISTICAS, FRAMEWORKS, METODOLOGIAS]:
|
|
2581
|
+
|
|
2582
|
+
READ DNA_BASE_PATH/{LAYER_FILE}.yaml
|
|
2583
|
+
|
|
2584
|
+
# Atualizar versão
|
|
2585
|
+
INCREMENT versao minor (e.g., 1.0.0 → 1.1.0)
|
|
2586
|
+
|
|
2587
|
+
# Append changelog
|
|
2588
|
+
APPEND to changelog:
|
|
2589
|
+
- data: "{TODAY}T{NOW}Z"
|
|
2590
|
+
acao: "Atualização via Pipeline JARVIS"
|
|
2591
|
+
source_id: "{SOURCE_ID}"
|
|
2592
|
+
itens_adicionados: {count}
|
|
2593
|
+
versao: "{NEW_VERSION}"
|
|
2594
|
+
|
|
2595
|
+
# Atualizar metadados
|
|
2596
|
+
UPDATE metadados.total_insights_processados += {new_count}
|
|
2597
|
+
APPEND SOURCE_ID to metadados.fontes_utilizadas
|
|
2598
|
+
|
|
2599
|
+
WRITE DNA_BASE_PATH/{LAYER_FILE}.yaml
|
|
2600
|
+
|
|
2601
|
+
DNA_UPDATE_STATS = {
|
|
2602
|
+
filosofias_added: count(NEW_FILOSOFIAS),
|
|
2603
|
+
modelos_added: count(NEW_MODELOS),
|
|
2604
|
+
heuristicas_added: count(NEW_HEURISTICAS),
|
|
2605
|
+
frameworks_added: count(NEW_FRAMEWORKS),
|
|
2606
|
+
metodologias_added: count(NEW_METODOLOGIAS),
|
|
2607
|
+
total_added: sum_all
|
|
2608
|
+
}
|
|
2609
|
+
|
|
2610
|
+
LOG: "✅ DNA Cognitivo atualizado: {SOURCE_PERSON}"
|
|
2611
|
+
LOG: " Filosofias: +{DNA_UPDATE_STATS.filosofias_added}"
|
|
2612
|
+
LOG: " Modelos Mentais: +{DNA_UPDATE_STATS.modelos_added}"
|
|
2613
|
+
LOG: " Heurísticas: +{DNA_UPDATE_STATS.heuristicas_added}"
|
|
2614
|
+
LOG: " Frameworks: +{DNA_UPDATE_STATS.frameworks_added}"
|
|
2615
|
+
LOG: " Metodologias: +{DNA_UPDATE_STATS.metodologias_added}"
|
|
2616
|
+
|
|
2617
|
+
ELSE:
|
|
2618
|
+
LOG: "DNA já contém todos os elementos do {SOURCE_ID} - nenhuma atualização necessária"
|
|
2619
|
+
DNA_UPDATE_STATS = { total_added: 0 }
|
|
2620
|
+
|
|
2621
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2622
|
+
# FASE 5: PROPAGAR PARA AGENTES QUE USAM ESTE DNA
|
|
2623
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2624
|
+
IF DNA_UPDATE_STATS.total_added > 0:
|
|
2625
|
+
|
|
2626
|
+
# Encontrar agentes que referenciam este DNA
|
|
2627
|
+
AGENTS_USING_DNA = []
|
|
2628
|
+
SCAN /agents/cargo/**/DNA-CONFIG.yaml for references to SOURCE_PERSON
|
|
2629
|
+
|
|
2630
|
+
FOR each AGENT_CONFIG in matching configs:
|
|
2631
|
+
AGENT_NAME = extract_agent_name(AGENT_CONFIG)
|
|
2632
|
+
AGENTS_USING_DNA.append(AGENT_NAME)
|
|
2633
|
+
|
|
2634
|
+
IF AGENTS_USING_DNA not empty:
|
|
2635
|
+
LOG: "Agentes que usam DNA de {SOURCE_PERSON}: {AGENTS_USING_DNA}"
|
|
2636
|
+
LOG: "💡 Considere atualizar seções DNA HÍBRIDO nos AGENT.md correspondentes"
|
|
2637
|
+
|
|
2638
|
+
# Nota: DNA_CREATE_STATS é populado quando MODE = "CREATE" (extração automática)
|
|
2639
|
+
# Se MODE = "CREATE", também propagar para agentes
|
|
2640
|
+
ELSE IF MODE == "CREATE" AND DNA_CREATE_STATS.total > 0:
|
|
2641
|
+
# Encontrar agentes que podem usar este novo DNA
|
|
2642
|
+
LOG: "🔍 Verificando agentes que podem usar DNA de {SOURCE_PERSON}..."
|
|
2643
|
+
|
|
2644
|
+
# Listar agentes em /agents/cargo que têm DNA-CONFIG.yaml
|
|
2645
|
+
POTENTIAL_AGENTS = SCAN /agents/cargo/**/DNA-CONFIG.yaml
|
|
2646
|
+
|
|
2647
|
+
IF POTENTIAL_AGENTS not empty:
|
|
2648
|
+
LOG: "💡 Agentes potenciais para integrar DNA de {SOURCE_PERSON}:"
|
|
2649
|
+
FOR each AGENT in POTENTIAL_AGENTS:
|
|
2650
|
+
LOG: " → {AGENT}"
|
|
2651
|
+
|
|
2652
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
2653
|
+
8.1.9 - SOUL.md AUTO-UPDATE (Identidade Viva)
|
|
2654
|
+
═══════════════════════════════════════════════════════════════════════════
|
|
2655
|
+
|
|
2656
|
+
> **Template:** `/agents/protocols/SOUL-TEMPLATE.md`
|
|
2657
|
+
> **Trigger:** Novo material processado de pessoa com SOUL existente OU agente impactado
|
|
2658
|
+
> **Output:** SOUL.md atualizado com evolucao documentada
|
|
2659
|
+
|
|
2660
|
+
LOG: "Verificando necessidade de atualizacao de SOUL.md..."
|
|
2661
|
+
|
|
2662
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2663
|
+
# FASE 1: VERIFICAR SOULs EXISTENTES QUE PRECISAM ATUALIZACAO
|
|
2664
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2665
|
+
|
|
2666
|
+
# Para PESSOA (agente isolado)
|
|
2667
|
+
PERSON_SOUL_PATH = /agents/persons/{SOURCE_PERSON}/SOUL.md
|
|
2668
|
+
|
|
2669
|
+
IF PERSON_SOUL_PATH exists:
|
|
2670
|
+
LOG: "SOUL de pessoa encontrado: {SOURCE_PERSON}"
|
|
2671
|
+
|
|
2672
|
+
READ PERSON_SOUL_PATH as PERSON_SOUL
|
|
2673
|
+
|
|
2674
|
+
# Extrair insights HIGH priority para integrar
|
|
2675
|
+
HIGH_INSIGHTS = filter(INSIGHTS_STATE where source_id == SOURCE_ID AND priority == "HIGH")
|
|
2676
|
+
|
|
2677
|
+
IF HIGH_INSIGHTS not empty:
|
|
2678
|
+
# Atualizar seção "COMO EVOLUI" com novo marco
|
|
2679
|
+
LOCATE section "## ◆ COMO EVOLUI"
|
|
2680
|
+
FIND last version number (e.g., v2.4)
|
|
2681
|
+
NEW_VERSION = increment_minor(last_version) # v2.5
|
|
2682
|
+
|
|
2683
|
+
# Adicionar novo marco na timeline
|
|
2684
|
+
APPEND to timeline:
|
|
2685
|
+
```
|
|
2686
|
+
{TODAY} │ {EVOLUTION_TITLE} (v{NEW_VERSION})
|
|
2687
|
+
│ Via: {SOURCE_ID}
|
|
2688
|
+
│ {summary_of_new_insights}
|
|
2689
|
+
```
|
|
2690
|
+
|
|
2691
|
+
# Integrar novos insights na narrativa "QUEM SOU EU"
|
|
2692
|
+
# NAO adicionar como lista - INTEGRAR na voz do agente
|
|
2693
|
+
FOR each INSIGHT in HIGH_INSIGHTS:
|
|
2694
|
+
IF INSIGHT adds new perspective:
|
|
2695
|
+
APPEND paragraph to "QUEM SOU EU" with [v{NEW_VERSION}] marker
|
|
2696
|
+
|
|
2697
|
+
# Atualizar header
|
|
2698
|
+
UPDATE "Ultima evolucao:" to {TODAY}
|
|
2699
|
+
UPDATE "Versao:" to {NEW_VERSION}
|
|
2700
|
+
|
|
2701
|
+
WRITE PERSON_SOUL_PATH
|
|
2702
|
+
LOG: "✅ SOUL atualizado: {SOURCE_PERSON} → v{NEW_VERSION}"
|
|
2703
|
+
|
|
2704
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2705
|
+
# FASE 2: CRITERIOS DE RELEVANCIA POR AGENTE HIBRIDO
|
|
2706
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2707
|
+
|
|
2708
|
+
# DEFINICAO: relevant_to(AGENT) - Quando um insight impacta um agente hibrido
|
|
2709
|
+
#
|
|
2710
|
+
# O insight deve conter keywords/temas que pertencem ao DOMINIO FUNCIONAL do agente.
|
|
2711
|
+
# Se insight e sobre filosofia pessoal/lifestyle, NAO impacta hibridos.
|
|
2712
|
+
|
|
2713
|
+
RELEVANCE_CRITERIA = {
|
|
2714
|
+
"closer": {
|
|
2715
|
+
"temas": ["02-PROCESSO-VENDAS", "07-PRICING"],
|
|
2716
|
+
"keywords": ["closing", "fechamento", "objecao", "pitch", "tonality",
|
|
2717
|
+
"commitment", "tie-down", "discovery", "call", "venda",
|
|
2718
|
+
"price", "preco", "negociacao", "frame", "conviction"]
|
|
2719
|
+
},
|
|
2720
|
+
"BDR": {
|
|
2721
|
+
"temas": ["01-ESTRUTURA-TIME", "06-FUNIL-APLICACAO"],
|
|
2722
|
+
"keywords": ["prospeccao", "outbound", "cold call", "lista", "ICP",
|
|
2723
|
+
"qualificacao", "lead", "script", "cadencia", "SDR"]
|
|
2724
|
+
},
|
|
2725
|
+
"SDS": {
|
|
2726
|
+
"temas": ["02-PROCESSO-VENDAS", "06-FUNIL-APLICACAO"],
|
|
2727
|
+
"keywords": ["discovery", "qualificacao", "pain", "need", "SPIN",
|
|
2728
|
+
"setter", "agendamento", "triagem", "filtro"]
|
|
2729
|
+
},
|
|
2730
|
+
"LNS": {
|
|
2731
|
+
"temas": ["06-FUNIL-APLICACAO", "10-CULTURA"],
|
|
2732
|
+
"keywords": ["nurture", "follow-up", "show rate", "confirmacao",
|
|
2733
|
+
"reengajamento", "sales farming", "warming"]
|
|
2734
|
+
},
|
|
2735
|
+
"SALES-MANAGER": {
|
|
2736
|
+
"temas": ["01-ESTRUTURA-TIME", "09-GESTAO", "03-CONTRATACAO"],
|
|
2737
|
+
"keywords": ["gestao", "time", "contratacao", "coaching", "1:1",
|
|
2738
|
+
"QC", "pipeline review", "forecast", "scaling", "hiring"]
|
|
2739
|
+
},
|
|
2740
|
+
"CRO": {
|
|
2741
|
+
"temas": ["01-ESTRUTURA-TIME", "07-PRICING", "05-METRICAS"],
|
|
2742
|
+
"keywords": ["revenue", "estrategia", "oferta", "pricing", "escala",
|
|
2743
|
+
"unit economics", "CAC", "LTV", "ROAS"]
|
|
2744
|
+
},
|
|
2745
|
+
"CFO": {
|
|
2746
|
+
"temas": ["04-COMISSIONAMENTO", "05-METRICAS", "07-PRICING"],
|
|
2747
|
+
"keywords": ["financeiro", "margem", "comissao", "OTE", "custo",
|
|
2748
|
+
"budget", "P&L", "cash", "compensation"]
|
|
2749
|
+
},
|
|
2750
|
+
"CMO": {
|
|
2751
|
+
"temas": ["06-FUNIL-APLICACAO", "10-CULTURA"],
|
|
2752
|
+
"keywords": ["marketing", "posicionamento", "ICP", "messaging",
|
|
2753
|
+
"copy", "ad", "funil", "trafego", "lead gen"]
|
|
2754
|
+
},
|
|
2755
|
+
"COO": {
|
|
2756
|
+
"temas": ["01-ESTRUTURA-TIME", "10-CULTURA"],
|
|
2757
|
+
"keywords": ["operacoes", "processo", "delivery", "fulfillment",
|
|
2758
|
+
"employee", "cultura", "onboarding", "DIY", "DWY", "DFY"]
|
|
2759
|
+
},
|
|
2760
|
+
"CUSTOMER-SUCCESS": {
|
|
2761
|
+
"temas": ["10-CULTURA", "05-METRICAS"],
|
|
2762
|
+
"keywords": ["CS", "churn", "NPS", "retencao", "upsell", "health score",
|
|
2763
|
+
"onboarding cliente", "success", "LTV"]
|
|
2764
|
+
}
|
|
2765
|
+
}
|
|
2766
|
+
|
|
2767
|
+
# Funcao: relevant_to(AGENT)
|
|
2768
|
+
# Retorna TRUE se insight.temas intersecta com AGENT.temas
|
|
2769
|
+
# OU se insight.text contem keywords do AGENT
|
|
2770
|
+
FUNCTION relevant_to(AGENT, INSIGHT):
|
|
2771
|
+
agent_criteria = RELEVANCE_CRITERIA[AGENT]
|
|
2772
|
+
|
|
2773
|
+
# Verificar por tema
|
|
2774
|
+
IF any(tema in agent_criteria.temas for tema in INSIGHT.temas):
|
|
2775
|
+
RETURN TRUE
|
|
2776
|
+
|
|
2777
|
+
# Verificar por keyword
|
|
2778
|
+
insight_text = INSIGHT.insight.lower()
|
|
2779
|
+
IF any(keyword in insight_text for keyword in agent_criteria.keywords):
|
|
2780
|
+
RETURN TRUE
|
|
2781
|
+
|
|
2782
|
+
RETURN FALSE
|
|
2783
|
+
|
|
2784
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2785
|
+
# FASE 3: ATUALIZAR SOULs DE AGENTES HIBRIDOS (SE RELEVANTE)
|
|
2786
|
+
# ─────────────────────────────────────────────────────────────────────────
|
|
2787
|
+
|
|
2788
|
+
# Para AGENTES HIBRIDOS impactados
|
|
2789
|
+
FOR each AGENT in agents_impacted:
|
|
2790
|
+
|
|
2791
|
+
AGENT_SOUL_PATH = /agents/cargo/{category}/{AGENT}/SOUL.md
|
|
2792
|
+
|
|
2793
|
+
IF AGENT_SOUL_PATH exists:
|
|
2794
|
+
LOG: "SOUL de agente encontrado: {AGENT}"
|
|
2795
|
+
|
|
2796
|
+
READ AGENT_SOUL_PATH as AGENT_SOUL
|
|
2797
|
+
|
|
2798
|
+
# Extrair insights relevantes para este agente (usando criterios explicitos)
|
|
2799
|
+
RELEVANT_INSIGHTS = filter(INSIGHTS_STATE where relevant_to(AGENT, insight))
|
|
2800
|
+
|
|
2801
|
+
IF RELEVANT_INSIGHTS not empty:
|
|
2802
|
+
# Atualizar evolucao
|
|
2803
|
+
LOCATE section "## ◆ COMO EVOLUI"
|
|
2804
|
+
NEW_VERSION = increment_minor(current_version)
|
|
2805
|
+
|
|
2806
|
+
# Adicionar marco
|
|
2807
|
+
APPEND to timeline:
|
|
2808
|
+
```
|
|
2809
|
+
{TODAY} │ Integracao {SOURCE_PERSON} (v{NEW_VERSION})
|
|
2810
|
+
│ Via: {SOURCE_ID}
|
|
2811
|
+
│ + {count} insights de {SOURCE_PERSON}
|
|
2812
|
+
```
|
|
2813
|
+
|
|
2814
|
+
# Se houver conflitos/tensoes novas, documentar
|
|
2815
|
+
IF new_tensions_detected:
|
|
2816
|
+
LOCATE section "## ◆ MINHAS TENSOES INTERNAS"
|
|
2817
|
+
APPEND new tension with synthesis
|
|
2818
|
+
|
|
2819
|
+
# Integrar na narrativa (sem listar)
|
|
2820
|
+
APPEND [v{NEW_VERSION}] paragraphs where relevant
|
|
2821
|
+
|
|
2822
|
+
WRITE AGENT_SOUL_PATH
|
|
2823
|
+
LOG: "✅ SOUL atualizado: {AGENT} → v{NEW_VERSION}"
|
|
2824
|
+
|
|
2825
|
+
SOUL_UPDATE_STATS = {
|
|
2826
|
+
person_souls_updated: count,
|
|
2827
|
+
agent_souls_updated: count,
|
|
2828
|
+
new_versions_created: count
|
|
2829
|
+
}
|
|
2830
|
+
|
|
2831
|
+
LOG: "SOUL Auto-Update: {SOUL_UPDATE_STATS}"
|
|
2832
|
+
```
|
|
2833
|
+
|
|
2834
|
+
### Step 8.2 - RELATÓRIO PÓS-PIPELINE (OBRIGATÓRIO)
|
|
2835
|
+
|
|
2836
|
+
> ⚠️ **Este relatório DEVE ser exibido ao final de TODA execução do pipeline.**
|
|
2837
|
+
> **Propósito:** Dar visibilidade total sobre o que foi feito, pulado, e pode ser incrementado.
|
|
2838
|
+
|
|
2839
|
+
```
|
|
2840
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2841
|
+
RELATÓRIO PÓS-PIPELINE: {SOURCE_ID}
|
|
2842
|
+
{DATA} | Pipeline Jarvis v2.1
|
|
2843
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2844
|
+
|
|
2845
|
+
📦 FONTE PROCESSADA
|
|
2846
|
+
└─ Arquivo: {filename}
|
|
2847
|
+
└─ Pessoa: {SOURCE_PERSON} | Empresa: {SOURCE_COMPANY}
|
|
2848
|
+
└─ Palavras: {WORD_COUNT} | Chunks: {CHUNK_COUNT}
|
|
2849
|
+
|
|
2850
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2851
|
+
✅ O QUE FOI EXECUTADO
|
|
2852
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2853
|
+
|
|
2854
|
+
┌──────────────────────────────────┬────────┬─────────────────────────────────┐
|
|
2855
|
+
│ FASE │ STATUS │ RESULTADO │
|
|
2856
|
+
├──────────────────────────────────┼────────┼─────────────────────────────────┤
|
|
2857
|
+
│ Phase 1: Initialization │ ✅ │ SOURCE_ID={SOURCE_ID} │
|
|
2858
|
+
│ Phase 2: Chunking │ ✅ │ +{N} chunks │
|
|
2859
|
+
│ Phase 3: Entity Resolution │ ✅ │ +{N} entidades, +{N} aliases │
|
|
2860
|
+
│ Phase 4: Insight Extraction │ ✅ │ +{N} insights ({H} HIGH) │
|
|
2861
|
+
│ Phase 5: Narrative Synthesis │ ✅ │ {N} pessoas, {N} temas │
|
|
2862
|
+
│ Phase 6: Dossier Compilation │ ✅ │ DOSSIER-{PESSOA}.md │
|
|
2863
|
+
│ Phase 7.1: MEMORY Auto-Update │ {?} │ {resultado ou "N/A"} │
|
|
2864
|
+
│ Phase 7.2: AGENT Update │ {?} │ {resultado ou "Pulado"} │
|
|
2865
|
+
│ Phase 8.1.1: RAG Index │ {?} │ {resultado ou "N/A"} │
|
|
2866
|
+
│ Phase 8.1.6: SUA-EMPRESA │ {?} │ {resultado ou "N/A"} │
|
|
2867
|
+
│ Phase 8.1.7: Role Discovery │ {?} │ {resultado ou "N/A"} │
|
|
2868
|
+
│ Phase 8.1.8: DNA Auto-Update │ {?} │ {resultado ou "N/A"} │
|
|
2869
|
+
└──────────────────────────────────┴────────┴─────────────────────────────────┘
|
|
2870
|
+
|
|
2871
|
+
Legenda: ✅ = Executado | ⏭️ = Pulado | ❌ = Falhou | ⚠️ = Parcial
|
|
2872
|
+
|
|
2873
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2874
|
+
⏭️ O QUE FOI PULADO (E POR QUÊ)
|
|
2875
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2876
|
+
|
|
2877
|
+
# Para cada fase pulada, listar:
|
|
2878
|
+
|
|
2879
|
+
┌──────────────────────────────────┬──────────────────────────────────────────┐
|
|
2880
|
+
│ FASE PULADA │ MOTIVO │
|
|
2881
|
+
├──────────────────────────────────┼──────────────────────────────────────────┤
|
|
2882
|
+
│ {fase} │ {motivo} │
|
|
2883
|
+
│ Ex: Phase 7.2 AGENT Update │ Usuário não aprovou atualização │
|
|
2884
|
+
│ Ex: Phase 8.1.8 DNA Auto-Update │ Pessoa não tem DNA extraído ainda │
|
|
2885
|
+
│ Ex: Phase 8.1.6 SUA-EMPRESA │ Nenhum insight relevante para ROLEs │
|
|
2886
|
+
└──────────────────────────────────┴──────────────────────────────────────────┘
|
|
2887
|
+
|
|
2888
|
+
SE NENHUMA FASE FOI PULADA:
|
|
2889
|
+
└─ ✅ Todas as fases foram executadas com sucesso.
|
|
2890
|
+
|
|
2891
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2892
|
+
🔧 O QUE PODE SER INCREMENTADO MANUALMENTE
|
|
2893
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2894
|
+
|
|
2895
|
+
# Lista de ações que o usuário pode fazer para completar o que foi pulado:
|
|
2896
|
+
|
|
2897
|
+
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
2898
|
+
│ AÇÃO │ COMANDO/ARQUIVO │
|
|
2899
|
+
├──────────────────────────────────┼──────────────────────────────────────────┤
|
|
2900
|
+
│ Atualizar AGENT-*.md │ Editar /agents/cargo/.../AGENT.md │
|
|
2901
|
+
│ com novos frameworks │ Adicionar seções de {SOURCE_ID} │
|
|
2902
|
+
├──────────────────────────────────┼──────────────────────────────────────────┤
|
|
2903
|
+
│ Extrair DNA Cognitivo │ /extract-dna "{SOURCE_PERSON}" │
|
|
2904
|
+
│ (se pessoa não tem DNA) │ │
|
|
2905
|
+
├──────────────────────────────────┼──────────────────────────────────────────┤
|
|
2906
|
+
│ Criar novo agente │ /create-agent "{ROLE_NAME}" │
|
|
2907
|
+
│ (se threshold atingido) │ Threshold atual: {N}/10 │
|
|
2908
|
+
├──────────────────────────────────┼──────────────────────────────────────────┤
|
|
2909
|
+
│ Atualizar SUA-EMPRESA ROLEs │ Editar /agents/sua-empresa/roles/... │
|
|
2910
|
+
│ manualmente │ Adicionar técnicas de {SOURCE_ID} │
|
|
2911
|
+
└─────────────────────────────────────────────────────────────────────────────┘
|
|
2912
|
+
|
|
2913
|
+
SE NADA PRECISA SER FEITO:
|
|
2914
|
+
└─ ✅ Pipeline 100% completo. Nenhuma ação manual necessária.
|
|
2915
|
+
|
|
2916
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2917
|
+
📁 ARQUIVOS MODIFICADOS
|
|
2918
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2919
|
+
|
|
2920
|
+
processing/
|
|
2921
|
+
├─ chunks/CHUNKS-STATE.json (+{N} linhas)
|
|
2922
|
+
├─ insights/INSIGHTS-STATE.json (+{N} linhas)
|
|
2923
|
+
└─ narratives/NARRATIVES-STATE.json (+{N} linhas)
|
|
2924
|
+
|
|
2925
|
+
knowledge/
|
|
2926
|
+
├─ DOSSIERS/persons/DOSSIER-{PESSOA}.md ({CRIADO|ATUALIZADO})
|
|
2927
|
+
└─ DNA/{PESSOA}/CONFIG.yaml ({ATUALIZADO|N/A})
|
|
2928
|
+
|
|
2929
|
+
agents/
|
|
2930
|
+
├─ CARGO/.../MEMORY.md (+{N} insights)
|
|
2931
|
+
├─ sua-empresa/roles/ROLE-*.md ({N} ROLEs atualizados)
|
|
2932
|
+
└─ DISCOVERY/role-tracking.md (+1 entrada)
|
|
2933
|
+
|
|
2934
|
+
system/
|
|
2935
|
+
└─ SESSION-STATE.md (ATUALIZADO)
|
|
2936
|
+
|
|
2937
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2938
|
+
🔴 ALERTAS E THRESHOLDS
|
|
2939
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2940
|
+
|
|
2941
|
+
NOVOS AGENTES CRIADOS:
|
|
2942
|
+
└─ {list or "Nenhum"}
|
|
2943
|
+
|
|
2944
|
+
ROLES PRÓXIMOS DO THRESHOLD (7-9 menções):
|
|
2945
|
+
└─ {list com contagem atual, ex: "Setter: 8/10" or "Nenhum"}
|
|
2946
|
+
|
|
2947
|
+
DNA PENDENTE DE EXTRAÇÃO:
|
|
2948
|
+
└─ {list de pessoas com material suficiente mas sem DNA or "Nenhum"}
|
|
2949
|
+
|
|
2950
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
2951
|
+
```
|
|
2952
|
+
|
|
2953
|
+
### Step 8.3 - Prompt for Next Session
|
|
2954
|
+
```
|
|
2955
|
+
===============================================================================
|
|
2956
|
+
📥 PRÓXIMA SESSÃO
|
|
2957
|
+
===============================================================================
|
|
2958
|
+
|
|
2959
|
+
Pipeline 100% completo para: $SOURCE_PERSON ($SOURCE_ID)
|
|
2960
|
+
|
|
2961
|
+
✅ Chunks: {count}
|
|
2962
|
+
✅ Insights: {count} ({high} HIGH)
|
|
2963
|
+
✅ Dossiers: {persons} pessoas, {themes} temas
|
|
2964
|
+
✅ Agentes: {agents_updated} atualizados
|
|
2965
|
+
✅ RAG: Indexado
|
|
2966
|
+
✅ Registry: Registrado
|
|
2967
|
+
|
|
2968
|
+
Deseja processar outro arquivo agora?
|
|
2969
|
+
|
|
2970
|
+
Se sim, forneça:
|
|
2971
|
+
- Caminho local: /process-jarvis inbox/PASTA/arquivo.txt
|
|
2972
|
+
- YouTube URL: Cole a URL e processarei o transcript
|
|
2973
|
+
|
|
2974
|
+
Se não, o sistema está pronto para:
|
|
2975
|
+
- /rag-search "query" - Busca semântica
|
|
2976
|
+
- Consulta a agentes específicos (já enriquecidos com CG004)
|
|
2977
|
+
|
|
2978
|
+
===============================================================================
|
|
2979
|
+
```
|
|
2980
|
+
|
|
2981
|
+
### Step 8.4 - Handle Response
|
|
2982
|
+
```
|
|
2983
|
+
IF user provides path or URL:
|
|
2984
|
+
-> IF YouTube URL:
|
|
2985
|
+
-> Fetch transcript via youtube-transcript-api
|
|
2986
|
+
-> Save to appropriate inbox/ folder
|
|
2987
|
+
-> RESTART pipeline from PHASE 1 with new file
|
|
2988
|
+
-> IF local path:
|
|
2989
|
+
-> RESTART pipeline from PHASE 1 with provided path
|
|
2990
|
+
|
|
2991
|
+
IF user declines or asks something else:
|
|
2992
|
+
-> Respond normally to their request
|
|
2993
|
+
-> System remains ready for future /process-jarvis calls
|
|
2994
|
+
```
|
|
2995
|
+
|
|
2996
|
+
---
|
|
2997
|
+
|
|
2998
|
+
## 📚 REFERÊNCIAS
|
|
2999
|
+
|
|
3000
|
+
| Documento | Propósito |
|
|
3001
|
+
|-----------|-----------|
|
|
3002
|
+
| `PIPELINE-JARVIS-v2.1.md` | Especificação master do pipeline |
|
|
3003
|
+
| `ENFORCEMENT.md` | Regras de bloqueio e validação |
|
|
3004
|
+
| `CHECKPOINT-ENFORCEMENT.md` | Mapa de dependências entre etapas |
|
|
3005
|
+
| `LOG-TEMPLATES.md` | Templates para logs de execução |
|
|
3006
|
+
| `DOSSIER-COMPILATION-PROTOCOL.md` | Protocolo de compilação de dossiês |
|
|
3007
|
+
| `SOURCES-COMPILATION-PROTOCOL.md` | Protocolo de compilação de sources |
|
|
3008
|
+
| **`NARRATIVE-METABOLISM-PROTOCOL.md`** | **Estrutura narrativa obrigatória para DOSSIERS e SOURCES** |
|
|
3009
|
+
| **`CORTEX-PROTOCOL.md`** | **Governança sistêmica - garante integração de novos protocolos** |
|
|
3010
|
+
| **`WAR-ROOM-DEBATE-PROTOCOL.md`** | **Debate explícito entre agentes em decisões complexas (NIVEL 3+)** |
|
|
3011
|
+
|
|
3012
|
+
---
|
|
3013
|
+
|
|
3014
|
+
## CHANGELOG
|
|
3015
|
+
|
|
3016
|
+
| Versão | Data | Mudanças |
|
|
3017
|
+
|--------|------|----------|
|
|
3018
|
+
| 2.2.2 | 2025-12-28 | **INTELLIGENT LOGS SYSTEM** - Steps 8.7 (Cross-Batch Analysis), 8.8 (Executive Briefing), 8.9 (Batch History Update) adicionados. Step 8.7 anterior renomeado para 8.10 (Final Status). Sistema de logs inteligentes com comparação histórica, briefings didáticos e tracking persistente |
|
|
3019
|
+
| 2.2.1 | 2025-12-28 | **DNA COGNITIVO AUTO-CREATE** - Phase 8.1.8 agora CRIA DNA automaticamente quando densidade >= 3/5 (removido trigger arbitrário de "2+ fontes") |
|
|
3020
|
+
| 2.2.0 | 2025-12-27 | **RELATÓRIO PÓS-PIPELINE OBRIGATÓRIO** - Step 8.2 reformulado com 4 seções: O que foi executado, O que foi pulado (e por quê), O que pode ser incrementado manualmente, Alertas e thresholds |
|
|
3021
|
+
| 2.1.2 | 2025-12-22 | Integração WAR-ROOM-DEBATE-PROTOCOL para decisões multi-agente |
|
|
3022
|
+
| 2.1.0 | 2025-12-18 | Consolidação 9→8 fases, enforcement integrado, logs obrigatórios |
|
|
3023
|
+
| 2.0.0 | 2025-12-16 | Pipeline BATCH, checkpoints PRE |
|
|
3024
|
+
| 1.0.0 | 2025-12-15 | Versão inicial |
|
|
3025
|
+
|
|
3026
|
+
---
|
|
3027
|
+
|
|
3028
|
+
## EXECUTION START
|
|
3029
|
+
|
|
3030
|
+
```
|
|
3031
|
+
Ready to process: $ARGUMENTS
|
|
3032
|
+
Beginning PHASE 1: INITIALIZATION...
|
|
3033
|
+
|
|
3034
|
+
⛔ ENFORCEMENT: Ver /agents/protocols/ENFORCEMENT.md
|
|
3035
|
+
📋 LOGGING: Ver /agents/protocols/LOG-TEMPLATES.md
|
|
3036
|
+
```
|