mega-brain-ai 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.antigravity/README.md +46 -0
- package/.antigravity/rules/.gitkeep +0 -0
- package/.antigravity/rules/mega-brain.md +39 -0
- package/.claude/CLAUDE.md +172 -0
- package/.claude/agents.yaml +44 -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 +196 -0
- package/.claude/commands/config.md +133 -0
- package/.claude/commands/create-agent.md +467 -0
- package/.claude/commands/debate.md +159 -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 +172 -0
- package/.claude/commands/extract-knowledge.md +507 -0
- package/.claude/commands/gsd/add-phase.md +43 -0
- package/.claude/commands/gsd/add-tests.md +41 -0
- package/.claude/commands/gsd/add-todo.md +47 -0
- package/.claude/commands/gsd/audit-milestone.md +36 -0
- package/.claude/commands/gsd/check-todos.md +45 -0
- package/.claude/commands/gsd/cleanup.md +18 -0
- package/.claude/commands/gsd/complete-milestone.md +136 -0
- package/.claude/commands/gsd/debug.md +167 -0
- package/.claude/commands/gsd/discuss-phase.md +83 -0
- package/.claude/commands/gsd/execute-phase.md +41 -0
- package/.claude/commands/gsd/health.md +22 -0
- package/.claude/commands/gsd/help.md +22 -0
- package/.claude/commands/gsd/insert-phase.md +32 -0
- package/.claude/commands/gsd/join-discord.md +18 -0
- package/.claude/commands/gsd/list-phase-assumptions.md +46 -0
- package/.claude/commands/gsd/map-codebase.md +71 -0
- package/.claude/commands/gsd/new-milestone.md +44 -0
- package/.claude/commands/gsd/new-project.md +42 -0
- package/.claude/commands/gsd/pause-work.md +38 -0
- package/.claude/commands/gsd/plan-milestone-gaps.md +34 -0
- package/.claude/commands/gsd/plan-phase.md +45 -0
- package/.claude/commands/gsd/progress.md +24 -0
- package/.claude/commands/gsd/quick.md +41 -0
- package/.claude/commands/gsd/reapply-patches.md +110 -0
- package/.claude/commands/gsd/remove-phase.md +31 -0
- package/.claude/commands/gsd/research-phase.md +189 -0
- package/.claude/commands/gsd/resume-work.md +40 -0
- package/.claude/commands/gsd/set-profile.md +34 -0
- package/.claude/commands/gsd/settings.md +36 -0
- package/.claude/commands/gsd/update.md +37 -0
- package/.claude/commands/gsd/verify-work.md +38 -0
- package/.claude/commands/inbox.md +296 -0
- package/.claude/commands/ingest-empresa.md +191 -0
- package/.claude/commands/ingest.md +183 -0
- package/.claude/commands/jarvis-briefing.md +67 -0
- package/.claude/commands/jarvis-control.md +169 -0
- package/.claude/commands/jarvis-full.md +182 -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/get-shit-done/VERSION +1 -0
- package/.claude/get-shit-done/bin/gsd-tools.cjs +588 -0
- package/.claude/get-shit-done/bin/lib/commands.cjs +553 -0
- package/.claude/get-shit-done/bin/lib/config.cjs +162 -0
- package/.claude/get-shit-done/bin/lib/core.cjs +411 -0
- package/.claude/get-shit-done/bin/lib/frontmatter.cjs +299 -0
- package/.claude/get-shit-done/bin/lib/init.cjs +710 -0
- package/.claude/get-shit-done/bin/lib/milestone.cjs +216 -0
- package/.claude/get-shit-done/bin/lib/phase.cjs +871 -0
- package/.claude/get-shit-done/bin/lib/roadmap.cjs +298 -0
- package/.claude/get-shit-done/bin/lib/state.cjs +679 -0
- package/.claude/get-shit-done/bin/lib/template.cjs +222 -0
- package/.claude/get-shit-done/bin/lib/verify.cjs +773 -0
- package/.claude/get-shit-done/references/checkpoints.md +776 -0
- package/.claude/get-shit-done/references/continuation-format.md +249 -0
- package/.claude/get-shit-done/references/decimal-phase-calculation.md +65 -0
- package/.claude/get-shit-done/references/git-integration.md +248 -0
- package/.claude/get-shit-done/references/git-planning-commit.md +38 -0
- package/.claude/get-shit-done/references/model-profile-resolution.md +34 -0
- package/.claude/get-shit-done/references/model-profiles.md +92 -0
- package/.claude/get-shit-done/references/phase-argument-parsing.md +61 -0
- package/.claude/get-shit-done/references/planning-config.md +196 -0
- package/.claude/get-shit-done/references/questioning.md +145 -0
- package/.claude/get-shit-done/references/tdd.md +263 -0
- package/.claude/get-shit-done/references/ui-brand.md +160 -0
- package/.claude/get-shit-done/references/verification-patterns.md +612 -0
- package/.claude/get-shit-done/templates/DEBUG.md +164 -0
- package/.claude/get-shit-done/templates/UAT.md +247 -0
- package/.claude/get-shit-done/templates/VALIDATION.md +76 -0
- package/.claude/get-shit-done/templates/codebase/architecture.md +255 -0
- package/.claude/get-shit-done/templates/codebase/concerns.md +310 -0
- package/.claude/get-shit-done/templates/codebase/conventions.md +307 -0
- package/.claude/get-shit-done/templates/codebase/integrations.md +280 -0
- package/.claude/get-shit-done/templates/codebase/stack.md +186 -0
- package/.claude/get-shit-done/templates/codebase/structure.md +285 -0
- package/.claude/get-shit-done/templates/codebase/testing.md +480 -0
- package/.claude/get-shit-done/templates/config.json +37 -0
- package/.claude/get-shit-done/templates/context.md +283 -0
- package/.claude/get-shit-done/templates/continue-here.md +78 -0
- package/.claude/get-shit-done/templates/debug-subagent-prompt.md +91 -0
- package/.claude/get-shit-done/templates/discovery.md +146 -0
- package/.claude/get-shit-done/templates/milestone-archive.md +123 -0
- package/.claude/get-shit-done/templates/milestone.md +115 -0
- package/.claude/get-shit-done/templates/phase-prompt.md +569 -0
- package/.claude/get-shit-done/templates/planner-subagent-prompt.md +117 -0
- package/.claude/get-shit-done/templates/project.md +184 -0
- package/.claude/get-shit-done/templates/requirements.md +231 -0
- package/.claude/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
- package/.claude/get-shit-done/templates/research-project/FEATURES.md +147 -0
- package/.claude/get-shit-done/templates/research-project/PITFALLS.md +200 -0
- package/.claude/get-shit-done/templates/research-project/STACK.md +120 -0
- package/.claude/get-shit-done/templates/research-project/SUMMARY.md +170 -0
- package/.claude/get-shit-done/templates/research.md +552 -0
- package/.claude/get-shit-done/templates/retrospective.md +54 -0
- package/.claude/get-shit-done/templates/roadmap.md +202 -0
- package/.claude/get-shit-done/templates/state.md +176 -0
- package/.claude/get-shit-done/templates/summary-complex.md +59 -0
- package/.claude/get-shit-done/templates/summary-minimal.md +41 -0
- package/.claude/get-shit-done/templates/summary-standard.md +48 -0
- package/.claude/get-shit-done/templates/summary.md +248 -0
- package/.claude/get-shit-done/templates/user-setup.md +311 -0
- package/.claude/get-shit-done/templates/verification-report.md +322 -0
- package/.claude/get-shit-done/workflows/add-phase.md +111 -0
- package/.claude/get-shit-done/workflows/add-tests.md +350 -0
- package/.claude/get-shit-done/workflows/add-todo.md +157 -0
- package/.claude/get-shit-done/workflows/audit-milestone.md +297 -0
- package/.claude/get-shit-done/workflows/check-todos.md +176 -0
- package/.claude/get-shit-done/workflows/cleanup.md +152 -0
- package/.claude/get-shit-done/workflows/complete-milestone.md +763 -0
- package/.claude/get-shit-done/workflows/diagnose-issues.md +219 -0
- package/.claude/get-shit-done/workflows/discovery-phase.md +289 -0
- package/.claude/get-shit-done/workflows/discuss-phase.md +542 -0
- package/.claude/get-shit-done/workflows/execute-phase.md +449 -0
- package/.claude/get-shit-done/workflows/execute-plan.md +448 -0
- package/.claude/get-shit-done/workflows/health.md +156 -0
- package/.claude/get-shit-done/workflows/help.md +489 -0
- package/.claude/get-shit-done/workflows/insert-phase.md +129 -0
- package/.claude/get-shit-done/workflows/list-phase-assumptions.md +178 -0
- package/.claude/get-shit-done/workflows/map-codebase.md +315 -0
- package/.claude/get-shit-done/workflows/new-milestone.md +382 -0
- package/.claude/get-shit-done/workflows/new-project.md +1116 -0
- package/.claude/get-shit-done/workflows/pause-work.md +122 -0
- package/.claude/get-shit-done/workflows/plan-milestone-gaps.md +274 -0
- package/.claude/get-shit-done/workflows/plan-phase.md +569 -0
- package/.claude/get-shit-done/workflows/progress.md +381 -0
- package/.claude/get-shit-done/workflows/quick.md +453 -0
- package/.claude/get-shit-done/workflows/remove-phase.md +154 -0
- package/.claude/get-shit-done/workflows/research-phase.md +73 -0
- package/.claude/get-shit-done/workflows/resume-project.md +306 -0
- package/.claude/get-shit-done/workflows/set-profile.md +80 -0
- package/.claude/get-shit-done/workflows/settings.md +213 -0
- package/.claude/get-shit-done/workflows/transition.md +544 -0
- package/.claude/get-shit-done/workflows/update.md +219 -0
- package/.claude/get-shit-done/workflows/verify-phase.md +242 -0
- package/.claude/get-shit-done/workflows/verify-work.md +569 -0
- package/.claude/gsd-file-manifest.json +144 -0
- package/.claude/hooks/agent_creation_trigger.py +168 -0
- package/.claude/hooks/agent_index_updater.py +255 -0
- package/.claude/hooks/agent_memory_persister.py +203 -0
- package/.claude/hooks/claude_md_agent_sync.py +162 -0
- package/.claude/hooks/claude_md_guard.py +154 -0
- package/.claude/hooks/continuous_save.py +414 -0
- package/.claude/hooks/creation_validator.py +360 -0
- package/.claude/hooks/enforce_dual_location.py +501 -0
- package/.claude/hooks/enforce_plan_mode.py +220 -0
- package/.claude/hooks/gsd-check-update.js +62 -0
- package/.claude/hooks/gsd-context-monitor.js +122 -0
- package/.claude/hooks/gsd-statusline.js +108 -0
- package/.claude/hooks/inbox_age_alert.py +367 -0
- package/.claude/hooks/ledger_updater.py +303 -0
- package/.claude/hooks/memory_hints_injector.py +251 -0
- package/.claude/hooks/memory_updater.py +202 -0
- package/.claude/hooks/notification_system.py +115 -0
- package/.claude/hooks/pending_tracker.py +188 -0
- package/.claude/hooks/pipeline_checkpoint.py +583 -0
- package/.claude/hooks/post_batch_cascading.py +1740 -0
- package/.claude/hooks/post_tool_use.py +120 -0
- package/.claude/hooks/quality_watchdog.py +394 -0
- package/.claude/hooks/ralph_wiggum.py +286 -0
- package/.claude/hooks/session-source-sync.py +223 -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 +187 -0
- package/.claude/hooks/user_prompt_submit.py +125 -0
- package/.claude/package.json +1 -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/RULE-GSD-MANDATORY.md +106 -0
- package/.claude/rules/agent-cognition.md +779 -0
- package/.claude/rules/agent-integrity.md +692 -0
- package/.claude/rules/epistemic-standards.md +333 -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/jarvis_orchestrator.py +5 -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/scripts/validate_cascading_integrity.py +409 -0
- package/.claude/settings.json +215 -0
- package/.claude/skills/DETECTION-PROTOCOL.md +217 -0
- package/.claude/skills/README.md +240 -0
- package/.claude/skills/SKILL-REGISTRY.md +283 -0
- package/.claude/skills/SKILL-SUGGESTIONS.md +114 -0
- package/.claude/skills/_TEMPLATES/SKILL-WRITER-GUIDE.md +385 -0
- package/.claude/skills/agent-creation/SKILL.md +374 -0
- package/.claude/skills/ask-company/SKILL.md +198 -0
- package/.claude/skills/brainstorming/SKILL.md +72 -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/convert-to-company-docs/SKILL.md +68 -0
- package/.claude/skills/convert-to-company-docs/convert.py +532 -0
- package/.claude/skills/dispatching-parallel-agents/SKILL.md +193 -0
- package/.claude/skills/docs-megabrain/SKILL.md +251 -0
- package/.claude/skills/executing-plans/SKILL.md +114 -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/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/knowledge-extraction/SKILL.md +318 -0
- package/.claude/skills/ler-planilha/SKILL.md +281 -0
- package/.claude/skills/pipeline-jarvis/SKILL.md +430 -0
- package/.claude/skills/plugin-dev/SKILL.md +176 -0
- package/.claude/skills/pr-review-toolkit/SKILL.md +178 -0
- package/.claude/skills/process-company-inbox/SKILL.md +183 -0
- package/.claude/skills/python-megabrain/SKILL.md +323 -0
- package/.claude/skills/resume/SKILL.md +61 -0
- package/.claude/skills/save/SKILL.md +87 -0
- package/.claude/skills/skill-creator-internal/SKILL.md +186 -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/using-superpowers/SKILL.md +105 -0
- package/.claude/skills/verification-before-completion/SKILL.md +130 -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/skills/writing-plans/SKILL.md +184 -0
- package/.claude/templates/BATCH-LOG-TEMPLATE.md +221 -0
- package/.claudeignore +9 -0
- package/.cursor/agents.yaml +44 -0
- package/.cursor/rules/mega-brain.md +39 -0
- package/.gitattributes +19 -0
- package/.github/CODEOWNERS +8 -0
- package/.github/ISSUE_TEMPLATE/agent.md +96 -0
- package/.github/ISSUE_TEMPLATE/bug.md +67 -0
- package/.github/ISSUE_TEMPLATE/feature.md +56 -0
- package/.github/ISSUE_TEMPLATE/pipeline.md +70 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +30 -0
- package/.github/assets/banner.svg +152 -0
- package/.github/assets/logo-dark.svg +79 -0
- package/.github/assets/social-preview.png +0 -0
- package/.github/layer1-allowlist.txt +196 -0
- package/.github/layer2-manifest.txt +42 -0
- package/.github/layer3-manifest.txt +94 -0
- package/.github/workflows/claude-code-pr.yml +198 -0
- package/.github/workflows/claude-code-review.yml +57 -0
- package/.github/workflows/claude.yml +76 -0
- package/.github/workflows/publish-pro.yml +72 -0
- package/.github/workflows/publish.yml +86 -0
- package/.github/workflows/verification.yml +251 -0
- package/.gitignore +244 -0
- package/.gitleaks.toml +118 -0
- package/.windsurf/agents.yaml +44 -0
- package/.windsurf/rules/mega-brain.md +39 -0
- package/CONTRIBUTING.md +62 -0
- package/QUICK-START.md +231 -0
- package/README.md +168 -0
- package/agents/AGENT-INDEX.yaml +107 -0
- package/agents/MASTER-AGENT.md +612 -0
- package/agents/README.md +48 -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/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/conclave/CRITIC.md +197 -0
- package/agents/conclave/DEVILS-ADVOCATE.md +274 -0
- package/agents/conclave/README.md +35 -0
- package/agents/conclave/SYNTHESIZER.md +293 -0
- package/agents/conclave/advogado-do-diabo/AGENT.md +502 -0
- package/agents/conclave/advogado-do-diabo/SOUL.md +100 -0
- package/agents/conclave/critico-metodologico/AGENT.md +683 -0
- package/agents/conclave/critico-metodologico/SOUL.md +107 -0
- package/agents/conclave/sintetizador/AGENT.md +571 -0
- package/agents/conclave/sintetizador/SOUL.md +94 -0
- package/agents/constitution/BASE-CONSTITUTION.md +254 -0
- package/agents/persona-registry.yaml +300 -0
- package/agents/sua-empresa/.gitkeep +0 -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/artifacts/README.md +11 -0
- package/artifacts/canonical/.gitkeep +0 -0
- package/artifacts/chunks/.gitkeep +0 -0
- package/artifacts/insights/.gitkeep +0 -0
- package/artifacts/narratives/.gitkeep +0 -0
- package/bin/cli.js +2 -0
- package/bin/lib/ascii-art.js +202 -0
- package/bin/lib/feature-gate.js +46 -0
- package/bin/lib/installer.js +593 -0
- package/bin/lib/license.js +59 -0
- package/bin/lib/pro-commands.js +75 -0
- package/bin/lib/setup-wizard.js +547 -0
- package/bin/lib/validate-email.js +113 -0
- package/bin/mega-brain.js +136 -0
- package/bin/pre-publish-gate.js +229 -0
- package/bin/push.js +1056 -0
- package/bin/templates/env.example +27 -0
- package/bin/utils/pro-detector.js +50 -0
- package/bin/validate-package.js +190 -0
- package/core/__init__.py +2 -0
- package/core/glossary/INDEX.md +63 -0
- package/core/glossary/digital.md +243 -0
- package/core/glossary/finance.md +49 -0
- package/core/glossary/marketing.md +69 -0
- package/core/glossary/operations.md +50 -0
- package/core/glossary/sales.md +690 -0
- package/core/intelligence/__init__.py +41 -0
- package/core/intelligence/agent_trigger.py +468 -0
- package/core/intelligence/audit_layers.py +491 -0
- package/core/intelligence/autonomous_processor.py +796 -0
- package/core/intelligence/bootstrap_registry.py +550 -0
- package/core/intelligence/business_model_detector.py +476 -0
- package/core/intelligence/dossier_trigger.py +336 -0
- package/core/intelligence/entity_normalizer.py +565 -0
- package/core/intelligence/org_chain_detector.py +411 -0
- package/core/intelligence/review_dashboard.py +338 -0
- package/core/intelligence/role_detector.py +855 -0
- package/core/intelligence/session_autosave.py +46 -0
- package/core/intelligence/skill_generator.py +601 -0
- package/core/intelligence/sow_generator.py +711 -0
- package/core/intelligence/sync_package_files.py +504 -0
- package/core/intelligence/task_orchestrator.py +780 -0
- package/core/intelligence/theme_analyzer.py +562 -0
- package/core/intelligence/tool_discovery.py +432 -0
- package/core/intelligence/validate_json_integrity.py +106 -0
- package/core/intelligence/validate_layers.py +310 -0
- package/core/intelligence/verify_classifications.py +94 -0
- package/core/intelligence/viability_scorer.py +592 -0
- package/core/jarvis/02-JARVIS-SOUL.md +390 -0
- package/core/jarvis/03-JARVIS-DNA.yaml +312 -0
- package/core/jarvis/AGENT.md +191 -0
- package/core/jarvis/agent-creator/AGENT.md +199 -0
- package/core/jarvis/agent-creator/SOUL.md +82 -0
- package/core/jarvis/agent-creator/tasks/create-agent.md +133 -0
- package/core/jarvis/agent-creator/tasks/sync-agents.md +100 -0
- package/core/jarvis/agent-creator/workflows/wf-create-agent.yaml +110 -0
- package/core/jarvis/agent-creator/workflows/wf-pipeline-trigger.yaml +111 -0
- package/core/jarvis/autonomous/benchmark/AGENT.md +347 -0
- package/core/jarvis/autonomous/benchmark/SOUL.md +78 -0
- package/core/jarvis/autonomous/critic/AGENT.md +324 -0
- package/core/jarvis/autonomous/critic/SOUL.md +78 -0
- package/core/jarvis/autonomous/evolver/AGENT.md +294 -0
- package/core/jarvis/autonomous/evolver/SOUL.md +85 -0
- package/core/jarvis/autonomous/playbook-generator/AGENT.md +399 -0
- package/core/jarvis/autonomous/playbook-generator/SOUL.md +80 -0
- package/core/patterns/_ROLE_PATTERNS.yaml +547 -0
- package/core/patterns/quality_gates.yaml +259 -0
- package/core/patterns/trigger_config.yaml +193 -0
- package/core/schemas/SCHEMA-INDEX.md +94 -0
- package/core/schemas/canonical-map.schema.json +98 -0
- package/core/schemas/chunks-state.schema.json +131 -0
- package/core/schemas/decisions-registry.schema.json +120 -0
- package/core/schemas/file-registry.schema.json +69 -0
- package/core/schemas/insights-state.schema.json +111 -0
- package/core/schemas/narratives-state.schema.json +150 -0
- package/core/tasks/CHANGELOG.md +55 -0
- package/core/tasks/TASK-REGISTRY.md +113 -0
- package/core/tasks/_templates/task-tmpl.md +105 -0
- package/core/tasks/analyze-themes.md +84 -0
- package/core/tasks/detect-role.md +82 -0
- package/core/tasks/extract-dna.md +114 -0
- package/core/tasks/normalize-entities.md +82 -0
- package/core/tasks/process-batch.md +111 -0
- package/core/tasks/validate-cascade.md +105 -0
- package/core/templates/README.md +27 -0
- package/core/templates/agents/dna-config-template.yaml +181 -0
- package/core/templates/agents/enrichment-protocol.md +408 -0
- package/core/templates/agents/memory-template.md +567 -0
- package/core/templates/agents/reasoning-model.md +331 -0
- package/core/templates/agents/soul-template.md +416 -0
- package/core/templates/agents/template-evolution.md +544 -0
- package/core/templates/debates/CONCLAVE-LOG-TEMPLATE-v2.md +309 -0
- package/core/templates/debates/conclave-log-template.md +309 -0
- package/core/templates/debates/conclave-protocol.md +518 -0
- package/core/templates/debates/debate-dynamics-config.yaml +322 -0
- package/core/templates/debates/debate-dynamics.md +613 -0
- package/core/templates/debates/debate-protocol.md +323 -0
- package/core/templates/logs/LOG-TEMPLATES.md +1068 -0
- package/core/templates/logs/batch-visual-template.md +841 -0
- package/core/templates/logs/log-structure.md +65 -0
- package/core/templates/logs/visual-diff.md +159 -0
- package/core/templates/phases/dossier-compilation.md +790 -0
- package/core/templates/phases/narrative-metabolism.md +292 -0
- package/core/templates/phases/narrative-synthesis.md +278 -0
- package/core/templates/phases/phase4-checkpoint.md +146 -0
- package/core/templates/phases/prompt-1.1-chunking.md +154 -0
- package/core/templates/phases/prompt-1.2-entity-resolution.md +186 -0
- package/core/templates/phases/prompt-2.1-dna-tags.md +208 -0
- package/core/templates/phases/prompt-2.1-insight-extraction.md +191 -0
- package/core/templates/phases/prompt-3.1-narrative.md +331 -0
- package/core/templates/phases/sources-compilation.md +340 -0
- package/core/workflows/PIPELINE-JARVIS-DOCS.md +606 -0
- package/core/workflows/wf-conclave.yaml +139 -0
- package/core/workflows/wf-extract-dna.yaml +158 -0
- package/core/workflows/wf-ingest.yaml +88 -0
- package/core/workflows/wf-pipeline-full.yaml +138 -0
- package/docs/API-KEYS-GUIDE.md +372 -0
- package/docs/INTEGRATION-POINTS.md +501 -0
- package/docs/LAYERS.md +403 -0
- package/docs/PLAN-MODE-PROTOCOL.md +388 -0
- package/docs/RESTORE-AND-INDEX.md +203 -0
- package/docs/TAG-RESOLVER-IMPLEMENTATION.md +597 -0
- package/docs/conselho.md +337 -0
- package/docs/context7-readme.md +28 -0
- package/docs/jarvis-logging-protocol.md +380 -0
- package/docs/pipeline-completa-v4.md +1315 -0
- package/docs/prompts/meta_agente_mapeamento_processos.md +297 -0
- package/docs/quick-start.md +197 -0
- package/docs/readme-ralph-cascateamento.md +207 -0
- package/docs/template-master.md +727 -0
- package/docs/templates/phase5/IMPLEMENTATION-GUIDE.md +355 -0
- package/docs/templates/phase5/MOGA-BRAIN-PHASE5-TEMPLATES.md +1284 -0
- package/docs/templates/phase5/README.md +165 -0
- package/docs/workflow-continuous-claude.md +2232 -0
- package/inbox/.gitkeep +0 -0
- package/inbox/README.md +15 -0
- package/knowledge/NAVIGATION-MAP.json +292 -0
- package/knowledge/README.md +11 -0
- package/knowledge/dna/.gitkeep +0 -0
- package/knowledge/dossiers/persons/.gitkeep +0 -0
- package/knowledge/dossiers/system/.gitkeep +0 -0
- package/knowledge/dossiers/themes/.gitkeep +0 -0
- package/knowledge/playbooks/.gitkeep +0 -0
- package/knowledge/sources/.gitkeep +0 -0
- package/logs/.gitkeep +0 -0
- package/logs/README.md +11 -0
- package/package.json +180 -0
- package/requirements.txt +4 -0
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Sync package.json files field with L1 audit classifications.
|
|
4
|
+
|
|
5
|
+
Reads audit_layers.py classifications, computes optimal files array,
|
|
6
|
+
and can apply it to package.json.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
python3 core/intelligence/sync_package_files.py --print # JSON to stdout
|
|
10
|
+
python3 core/intelligence/sync_package_files.py --apply # Update package.json
|
|
11
|
+
python3 core/intelligence/sync_package_files.py --diff # Show changes
|
|
12
|
+
python3 core/intelligence/sync_package_files.py --npmignore # Print .npmignore
|
|
13
|
+
python3 core/intelligence/sync_package_files.py --npmignore --apply # Write .npmignore
|
|
14
|
+
python3 core/intelligence/sync_package_files.py --allowlist # Print allowlist
|
|
15
|
+
python3 core/intelligence/sync_package_files.py --allowlist --apply # Write allowlist
|
|
16
|
+
"""
|
|
17
|
+
import sys
|
|
18
|
+
import json
|
|
19
|
+
import argparse
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
from collections import defaultdict
|
|
22
|
+
from datetime import datetime, timezone
|
|
23
|
+
|
|
24
|
+
sys.path.insert(0, str(Path(__file__).parent))
|
|
25
|
+
from audit_layers import scan_repository, classify_path, L2_PATTERNS, L3_PATTERNS, NEVER_PATTERNS
|
|
26
|
+
|
|
27
|
+
# Files auto-included by npm (do NOT add to files array)
|
|
28
|
+
NPM_AUTO_INCLUDED = {
|
|
29
|
+
'package.json',
|
|
30
|
+
'README.md',
|
|
31
|
+
'README',
|
|
32
|
+
'CHANGELOG.md',
|
|
33
|
+
'CHANGELOG',
|
|
34
|
+
'LICENSE',
|
|
35
|
+
'LICENSE.md',
|
|
36
|
+
'LICENCE',
|
|
37
|
+
'LICENCE.md',
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
# L1 paths to EXCLUDE from npm package
|
|
41
|
+
# (development-only content that shouldn't ship to consumers)
|
|
42
|
+
EXCLUDE_FROM_PACKAGE = {
|
|
43
|
+
'.planning', # GSD planning system (dev-only)
|
|
44
|
+
'docs/audit', # Generated audit reports (dev-only)
|
|
45
|
+
'.npmignore', # npm uses it but doesn't pack it
|
|
46
|
+
'package-lock.json', # npm excludes this from pack
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _is_excluded(rel_path: str) -> bool:
|
|
51
|
+
"""Check if a path should be excluded from the package."""
|
|
52
|
+
# Check exact match for root files
|
|
53
|
+
if rel_path in EXCLUDE_FROM_PACKAGE:
|
|
54
|
+
return True
|
|
55
|
+
# Check directory prefix match
|
|
56
|
+
for excl in EXCLUDE_FROM_PACKAGE:
|
|
57
|
+
if rel_path.startswith(excl + '/'):
|
|
58
|
+
return True
|
|
59
|
+
return False
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def compute_files_array(repo_root: Path) -> list:
|
|
63
|
+
"""
|
|
64
|
+
Compute the optimal package.json files array from L1 audit.
|
|
65
|
+
|
|
66
|
+
Algorithm:
|
|
67
|
+
1. Get all L1-classified files from audit
|
|
68
|
+
2. Remove npm auto-included files and excluded paths
|
|
69
|
+
3. Group files by directory
|
|
70
|
+
4. For each directory, check if ALL files in that dir (across ALL layers) are L1
|
|
71
|
+
5. If pure L1 dir: use directory glob
|
|
72
|
+
6. If mixed: recurse into subdirectories or list individual files
|
|
73
|
+
7. Deduplicate and sort
|
|
74
|
+
"""
|
|
75
|
+
data = scan_repository(repo_root)
|
|
76
|
+
|
|
77
|
+
# Build map of ALL file classifications by directory
|
|
78
|
+
all_files_by_dir = defaultdict(list) # dir -> [(rel_path, layer)]
|
|
79
|
+
l1_files = set()
|
|
80
|
+
|
|
81
|
+
for item in data['classifications']:
|
|
82
|
+
if item['type'] != 'file':
|
|
83
|
+
continue
|
|
84
|
+
rel = item['path']
|
|
85
|
+
layer = item['layer']
|
|
86
|
+
|
|
87
|
+
# Skip npm auto-included root files
|
|
88
|
+
if rel in NPM_AUTO_INCLUDED:
|
|
89
|
+
continue
|
|
90
|
+
# Skip excluded paths
|
|
91
|
+
if _is_excluded(rel):
|
|
92
|
+
continue
|
|
93
|
+
|
|
94
|
+
parts = rel.split('/')
|
|
95
|
+
if len(parts) == 1:
|
|
96
|
+
dir_key = '.'
|
|
97
|
+
else:
|
|
98
|
+
dir_key = '/'.join(parts[:-1])
|
|
99
|
+
|
|
100
|
+
all_files_by_dir[dir_key].append((rel, layer))
|
|
101
|
+
|
|
102
|
+
if layer == 'L1':
|
|
103
|
+
l1_files.add(rel)
|
|
104
|
+
|
|
105
|
+
if not l1_files:
|
|
106
|
+
return []
|
|
107
|
+
|
|
108
|
+
# Build set of all directories and their purity status
|
|
109
|
+
# A directory is "pure L1" if ALL files within it (recursively) are L1
|
|
110
|
+
dir_purity = {} # dir_path -> bool (True = all files are L1)
|
|
111
|
+
|
|
112
|
+
# First, compute purity for leaf directories
|
|
113
|
+
for dir_key, items in all_files_by_dir.items():
|
|
114
|
+
is_pure = all(layer == 'L1' for _, layer in items)
|
|
115
|
+
dir_purity[dir_key] = is_pure
|
|
116
|
+
|
|
117
|
+
# Now compute purity for parent directories (a parent is pure only if all
|
|
118
|
+
# its children directories are also pure AND its own files are all L1)
|
|
119
|
+
all_dirs = sorted(dir_purity.keys(), key=lambda d: d.count('/'), reverse=True)
|
|
120
|
+
|
|
121
|
+
# Build parent -> children map
|
|
122
|
+
children_map = defaultdict(set)
|
|
123
|
+
for d in all_dirs:
|
|
124
|
+
parts = d.split('/')
|
|
125
|
+
if len(parts) > 1:
|
|
126
|
+
parent = '/'.join(parts[:-1])
|
|
127
|
+
children_map[parent].add(d)
|
|
128
|
+
|
|
129
|
+
# Propagate purity upward
|
|
130
|
+
for d in all_dirs:
|
|
131
|
+
if d in children_map:
|
|
132
|
+
# This dir has subdirectories - it's pure only if itself AND all children are pure
|
|
133
|
+
if dir_purity.get(d, True): # own files pure?
|
|
134
|
+
dir_purity[d] = all(dir_purity.get(child, False) for child in children_map[d])
|
|
135
|
+
# else already False
|
|
136
|
+
|
|
137
|
+
# Now find the optimal set of entries
|
|
138
|
+
entries = set()
|
|
139
|
+
covered_files = set()
|
|
140
|
+
|
|
141
|
+
def _find_deepest_pure_ancestor(file_path: str) -> str:
|
|
142
|
+
"""Find the deepest directory that is pure L1 and covers this file."""
|
|
143
|
+
parts = file_path.split('/')
|
|
144
|
+
if len(parts) == 1:
|
|
145
|
+
return None # Root file, no directory to use
|
|
146
|
+
|
|
147
|
+
# Check from shallowest to deepest to find the SHALLOWEST pure ancestor
|
|
148
|
+
# (this gives maximum coverage with minimum entries)
|
|
149
|
+
best = None
|
|
150
|
+
for i in range(1, len(parts)):
|
|
151
|
+
dir_path = '/'.join(parts[:i])
|
|
152
|
+
if dir_purity.get(dir_path, False):
|
|
153
|
+
best = dir_path
|
|
154
|
+
break # Use shallowest pure ancestor for maximum rollup
|
|
155
|
+
|
|
156
|
+
return best
|
|
157
|
+
|
|
158
|
+
# Process all L1 files
|
|
159
|
+
for f in sorted(l1_files):
|
|
160
|
+
if f in covered_files:
|
|
161
|
+
continue
|
|
162
|
+
|
|
163
|
+
ancestor = _find_deepest_pure_ancestor(f)
|
|
164
|
+
if ancestor and ancestor != '.':
|
|
165
|
+
# Use directory glob
|
|
166
|
+
entry = ancestor + '/'
|
|
167
|
+
if entry not in entries:
|
|
168
|
+
entries.add(entry)
|
|
169
|
+
# Mark all L1 files under this directory as covered
|
|
170
|
+
for other_f in l1_files:
|
|
171
|
+
if other_f.startswith(ancestor + '/'):
|
|
172
|
+
covered_files.add(other_f)
|
|
173
|
+
else:
|
|
174
|
+
# Individual file (root-level or in mixed directory)
|
|
175
|
+
entries.add(f)
|
|
176
|
+
covered_files.add(f)
|
|
177
|
+
|
|
178
|
+
# Deduplicate: remove subdirectory entries if parent directory covers them
|
|
179
|
+
final_entries = set()
|
|
180
|
+
sorted_entries = sorted(entries)
|
|
181
|
+
for entry in sorted_entries:
|
|
182
|
+
# Check if any existing entry already covers this one
|
|
183
|
+
is_covered = False
|
|
184
|
+
for existing in final_entries:
|
|
185
|
+
if existing.endswith('/') and entry.startswith(existing):
|
|
186
|
+
is_covered = True
|
|
187
|
+
break
|
|
188
|
+
if not is_covered:
|
|
189
|
+
final_entries.add(entry)
|
|
190
|
+
|
|
191
|
+
return sorted(final_entries)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def generate_npmignore(repo_root: Path) -> str:
|
|
195
|
+
"""Generate .npmignore content from audit layer classifications."""
|
|
196
|
+
lines = []
|
|
197
|
+
lines.append("# ===========================================")
|
|
198
|
+
lines.append("# .npmignore - Mega Brain npm package")
|
|
199
|
+
lines.append("# ===========================================")
|
|
200
|
+
lines.append("# AUTO-GENERATED from audit layer classifications.")
|
|
201
|
+
lines.append("# Source of truth: core/intelligence/audit_layers.py")
|
|
202
|
+
lines.append("# Regenerate: python3 core/intelligence/sync_package_files.py --npmignore --apply")
|
|
203
|
+
lines.append("#")
|
|
204
|
+
lines.append("# Defense-in-depth: package.json \"files\" is the")
|
|
205
|
+
lines.append("# primary whitelist. This file is the SECOND layer.")
|
|
206
|
+
lines.append("# ===========================================")
|
|
207
|
+
lines.append("")
|
|
208
|
+
|
|
209
|
+
# Python build artifacts
|
|
210
|
+
lines.append("# === PYTHON BUILD ARTIFACTS (NEVER ship) ===")
|
|
211
|
+
lines.append("__pycache__/")
|
|
212
|
+
lines.append("**/__pycache__/")
|
|
213
|
+
lines.append("**/*.pyc")
|
|
214
|
+
lines.append("**/*.pyo")
|
|
215
|
+
lines.append("**/*.pyd")
|
|
216
|
+
lines.append("*.egg-info/")
|
|
217
|
+
lines.append("")
|
|
218
|
+
|
|
219
|
+
# L2 content
|
|
220
|
+
lines.append("# === L2 CONTENT (Premium -- not in public package) ===")
|
|
221
|
+
lines.append("# Source: L2_PATTERNS in audit_layers.py")
|
|
222
|
+
for pattern in sorted(L2_PATTERNS):
|
|
223
|
+
lines.append(pattern.rstrip('/') + '/')
|
|
224
|
+
lines.append("")
|
|
225
|
+
|
|
226
|
+
# L3 content
|
|
227
|
+
lines.append("# === L3 CONTENT (Personal -- never distributed) ===")
|
|
228
|
+
lines.append("# Source: L3_PATTERNS in audit_layers.py")
|
|
229
|
+
for pattern in sorted(L3_PATTERNS):
|
|
230
|
+
lines.append(pattern.rstrip('/') + '/')
|
|
231
|
+
lines.append("")
|
|
232
|
+
|
|
233
|
+
# NEVER content
|
|
234
|
+
lines.append("# === NEVER CONTENT (Secrets/sensitive) ===")
|
|
235
|
+
lines.append("# Source: NEVER_PATTERNS in audit_layers.py")
|
|
236
|
+
for pattern in sorted(NEVER_PATTERNS):
|
|
237
|
+
if pattern.endswith('/'):
|
|
238
|
+
lines.append(pattern)
|
|
239
|
+
elif '.' in pattern and not pattern.startswith('.'):
|
|
240
|
+
# File pattern
|
|
241
|
+
lines.append(pattern)
|
|
242
|
+
else:
|
|
243
|
+
# Could be extension or exact match
|
|
244
|
+
lines.append(pattern)
|
|
245
|
+
lines.append(".env.*")
|
|
246
|
+
lines.append("")
|
|
247
|
+
|
|
248
|
+
# Development-only
|
|
249
|
+
lines.append("# === DEVELOPMENT-ONLY (not for consumers) ===")
|
|
250
|
+
lines.append(".planning/")
|
|
251
|
+
lines.append("docs/audit/")
|
|
252
|
+
lines.append("docs/plans/")
|
|
253
|
+
lines.append("docs/validation/")
|
|
254
|
+
lines.append("")
|
|
255
|
+
|
|
256
|
+
# Runtime state
|
|
257
|
+
lines.append("# === RUNTIME STATE (per-user, not template) ===")
|
|
258
|
+
lines.append(".claude/agent-memory/")
|
|
259
|
+
lines.append(".claude/monitoring/")
|
|
260
|
+
lines.append(".claude/learning-system/")
|
|
261
|
+
lines.append(".claude/aios/")
|
|
262
|
+
lines.append(".claude/jarvis/STATE.json")
|
|
263
|
+
lines.append(".claude/jarvis/DECISIONS-LOG.md")
|
|
264
|
+
lines.append(".claude/jarvis/CONTEXT-STACK.json")
|
|
265
|
+
lines.append(".claude/jarvis/PENDING.md")
|
|
266
|
+
lines.append(".claude/jarvis/CURRENT-TASK.md")
|
|
267
|
+
lines.append(".claude/settings.local.json")
|
|
268
|
+
lines.append(".claude/audit-*.json")
|
|
269
|
+
lines.append("")
|
|
270
|
+
|
|
271
|
+
# Company-specific
|
|
272
|
+
lines.append("# === COMPANY-SPECIFIC CONTENT ===")
|
|
273
|
+
lines.append(".claude/skills/ask-company/")
|
|
274
|
+
lines.append(".claude/skills/process-company-inbox/")
|
|
275
|
+
lines.append(".claude/skills/*-company-*")
|
|
276
|
+
lines.append("")
|
|
277
|
+
|
|
278
|
+
# L2-only skills
|
|
279
|
+
lines.append("# === L2-ONLY SKILLS (premium layer) ===")
|
|
280
|
+
l2_skills = [
|
|
281
|
+
"council", "executor", "fase-2-5-tagging", "finance-agent",
|
|
282
|
+
"gdrive-transcription-downloader", "hybrid-source-reading",
|
|
283
|
+
"ler-planilha", "smart-download-tagger", "source-sync",
|
|
284
|
+
"sync-docs", "talent-agent", "chronicler", "gemini-fallback",
|
|
285
|
+
"jarvis", "jarvis-briefing", "resume", "save", "verify",
|
|
286
|
+
]
|
|
287
|
+
for skill in sorted(l2_skills):
|
|
288
|
+
lines.append(f".claude/skills/{skill}/")
|
|
289
|
+
lines.append("")
|
|
290
|
+
|
|
291
|
+
# Media files
|
|
292
|
+
lines.append("# === MEDIA FILES ===")
|
|
293
|
+
for ext in ["*.mp4", "*.mp3", "*.wav", "*.m4a", "*.mov", "*.avi", "*.mkv"]:
|
|
294
|
+
lines.append(ext)
|
|
295
|
+
lines.append("")
|
|
296
|
+
|
|
297
|
+
# Large/binary files
|
|
298
|
+
lines.append("# === LARGE/BINARY FILES ===")
|
|
299
|
+
for ext in ["*.b64", "*.db", "*.sqlite", "*.pdf", "*.zip", "*.tar", "*.gz", "*.bz2"]:
|
|
300
|
+
lines.append(ext)
|
|
301
|
+
lines.append("")
|
|
302
|
+
|
|
303
|
+
# OS & IDE
|
|
304
|
+
lines.append("# === OS & IDE ===")
|
|
305
|
+
lines.append(".DS_Store")
|
|
306
|
+
lines.append("Thumbs.db")
|
|
307
|
+
lines.append(".vscode/")
|
|
308
|
+
lines.append(".idea/")
|
|
309
|
+
lines.append(".obsidian/")
|
|
310
|
+
lines.append("")
|
|
311
|
+
|
|
312
|
+
# Build artifacts
|
|
313
|
+
lines.append("# === BUILD ARTIFACTS ===")
|
|
314
|
+
lines.append("dist/")
|
|
315
|
+
lines.append("build/")
|
|
316
|
+
lines.append(".venv*/")
|
|
317
|
+
lines.append("venv/")
|
|
318
|
+
lines.append("vendor/")
|
|
319
|
+
lines.append("chroma_db/")
|
|
320
|
+
lines.append(".chroma/")
|
|
321
|
+
lines.append("")
|
|
322
|
+
|
|
323
|
+
# Backups & temp
|
|
324
|
+
lines.append("# === BACKUPS & TEMP ===")
|
|
325
|
+
lines.append("*_BACKUP_*.py")
|
|
326
|
+
lines.append("*.bak")
|
|
327
|
+
lines.append("*.tmp")
|
|
328
|
+
lines.append("")
|
|
329
|
+
|
|
330
|
+
# Git
|
|
331
|
+
lines.append("# === GIT (npm handles this, but explicit) ===")
|
|
332
|
+
lines.append(".git/")
|
|
333
|
+
|
|
334
|
+
return '\n'.join(lines) + '\n'
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
def generate_allowlist(files_array: list, repo_root: Path) -> str:
|
|
338
|
+
"""Generate layer1-allowlist.txt from package.json files array."""
|
|
339
|
+
now = datetime.now(timezone.utc).strftime('%Y-%m-%d')
|
|
340
|
+
lines = []
|
|
341
|
+
lines.append("# Layer 1 Allowlist - PUBLIC content (free/community)")
|
|
342
|
+
lines.append("# ==============================================================")
|
|
343
|
+
lines.append("# AUTO-GENERATED from package.json files field.")
|
|
344
|
+
lines.append("# Regenerate: python3 core/intelligence/sync_package_files.py --allowlist --apply")
|
|
345
|
+
lines.append("#")
|
|
346
|
+
lines.append("# ONLY paths listed here are included in Layer 1 (public repo).")
|
|
347
|
+
lines.append("# Everything else is PREMIUM by default (Layer 2+).")
|
|
348
|
+
lines.append("#")
|
|
349
|
+
lines.append("# SYNCED WITH: package.json \"files\" field")
|
|
350
|
+
lines.append(f"# AUDITED: {now}")
|
|
351
|
+
lines.append("# ==============================================================")
|
|
352
|
+
lines.append("")
|
|
353
|
+
|
|
354
|
+
# Group entries by top-level directory
|
|
355
|
+
groups = defaultdict(list)
|
|
356
|
+
for entry in files_array:
|
|
357
|
+
parts = entry.split('/')
|
|
358
|
+
top = parts[0]
|
|
359
|
+
groups[top].append(entry)
|
|
360
|
+
|
|
361
|
+
# Category labels
|
|
362
|
+
labels = {
|
|
363
|
+
'.': 'Root files',
|
|
364
|
+
'.antigravity': 'IDE integration (Antigravity)',
|
|
365
|
+
'.claude': 'Claude Code integration',
|
|
366
|
+
'.cursor': 'IDE integration (Cursor)',
|
|
367
|
+
'.github': 'GitHub integration',
|
|
368
|
+
'.windsurf': 'IDE integration (Windsurf)',
|
|
369
|
+
'agents': 'Agent system',
|
|
370
|
+
'artifacts': 'Artifact scaffolding',
|
|
371
|
+
'bin': 'CLI tools',
|
|
372
|
+
'core': 'Core engine',
|
|
373
|
+
'docs': 'Documentation',
|
|
374
|
+
'inbox': 'Inbox scaffolding',
|
|
375
|
+
'knowledge': 'Knowledge scaffolding',
|
|
376
|
+
'logs': 'Logs scaffolding',
|
|
377
|
+
'reference': 'Reference materials',
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
for top in sorted(groups.keys()):
|
|
381
|
+
label = labels.get(top, top)
|
|
382
|
+
lines.append(f"# --- {label} ---")
|
|
383
|
+
for entry in sorted(groups[top]):
|
|
384
|
+
lines.append(entry)
|
|
385
|
+
lines.append("")
|
|
386
|
+
|
|
387
|
+
return '\n'.join(lines)
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
def main():
|
|
391
|
+
parser = argparse.ArgumentParser(
|
|
392
|
+
description='Sync package.json files field with L1 audit classifications.',
|
|
393
|
+
)
|
|
394
|
+
parser.add_argument(
|
|
395
|
+
'--print', dest='print_mode', action='store_true',
|
|
396
|
+
help='Print computed files array as JSON to stdout',
|
|
397
|
+
)
|
|
398
|
+
parser.add_argument(
|
|
399
|
+
'--apply', action='store_true',
|
|
400
|
+
help='Apply changes to the target file (package.json, .npmignore, or allowlist)',
|
|
401
|
+
)
|
|
402
|
+
parser.add_argument(
|
|
403
|
+
'--diff', action='store_true',
|
|
404
|
+
help='Show diff between current and computed files array',
|
|
405
|
+
)
|
|
406
|
+
parser.add_argument(
|
|
407
|
+
'--npmignore', action='store_true',
|
|
408
|
+
help='Generate .npmignore content',
|
|
409
|
+
)
|
|
410
|
+
parser.add_argument(
|
|
411
|
+
'--allowlist', action='store_true',
|
|
412
|
+
help='Generate layer1-allowlist.txt content',
|
|
413
|
+
)
|
|
414
|
+
args = parser.parse_args()
|
|
415
|
+
|
|
416
|
+
if not any([args.print_mode, args.apply, args.diff, args.npmignore, args.allowlist]):
|
|
417
|
+
parser.print_help()
|
|
418
|
+
sys.exit(1)
|
|
419
|
+
|
|
420
|
+
# Determine repo root
|
|
421
|
+
script_path = Path(__file__).resolve()
|
|
422
|
+
repo_root = script_path.parent.parent.parent # mega-brain/
|
|
423
|
+
|
|
424
|
+
if not (repo_root / 'core').exists():
|
|
425
|
+
print(f"ERROR: Could not find repo root. Expected core/ in {repo_root}", file=sys.stderr)
|
|
426
|
+
sys.exit(1)
|
|
427
|
+
|
|
428
|
+
# Handle --npmignore
|
|
429
|
+
if args.npmignore:
|
|
430
|
+
content = generate_npmignore(repo_root)
|
|
431
|
+
if args.apply:
|
|
432
|
+
npmignore_path = repo_root / '.npmignore'
|
|
433
|
+
npmignore_path.write_text(content)
|
|
434
|
+
line_count = len(content.strip().split('\n'))
|
|
435
|
+
print(f"Wrote .npmignore ({line_count} lines)", file=sys.stderr)
|
|
436
|
+
else:
|
|
437
|
+
print(content)
|
|
438
|
+
return 0
|
|
439
|
+
|
|
440
|
+
# Handle --allowlist
|
|
441
|
+
if args.allowlist:
|
|
442
|
+
files_array = compute_files_array(repo_root)
|
|
443
|
+
content = generate_allowlist(files_array, repo_root)
|
|
444
|
+
if args.apply:
|
|
445
|
+
allowlist_path = repo_root / '.github' / 'layer1-allowlist.txt'
|
|
446
|
+
allowlist_path.parent.mkdir(parents=True, exist_ok=True)
|
|
447
|
+
allowlist_path.write_text(content)
|
|
448
|
+
entry_count = len(files_array)
|
|
449
|
+
print(f"Wrote .github/layer1-allowlist.txt ({entry_count} entries)", file=sys.stderr)
|
|
450
|
+
else:
|
|
451
|
+
print(content)
|
|
452
|
+
return 0
|
|
453
|
+
|
|
454
|
+
# Compute files array
|
|
455
|
+
files_array = compute_files_array(repo_root)
|
|
456
|
+
|
|
457
|
+
if args.print_mode:
|
|
458
|
+
print(json.dumps(files_array, indent=2))
|
|
459
|
+
return 0
|
|
460
|
+
|
|
461
|
+
if args.diff:
|
|
462
|
+
pkg_path = repo_root / 'package.json'
|
|
463
|
+
with open(pkg_path) as f:
|
|
464
|
+
pkg = json.load(f)
|
|
465
|
+
current = set(pkg.get('files', []))
|
|
466
|
+
computed = set(files_array)
|
|
467
|
+
|
|
468
|
+
added = sorted(computed - current)
|
|
469
|
+
removed = sorted(current - computed)
|
|
470
|
+
|
|
471
|
+
if not added and not removed:
|
|
472
|
+
print("No changes - package.json files field is already in sync.")
|
|
473
|
+
else:
|
|
474
|
+
if added:
|
|
475
|
+
print(f"+ Added ({len(added)}):")
|
|
476
|
+
for e in added:
|
|
477
|
+
print(f" + {e}")
|
|
478
|
+
if removed:
|
|
479
|
+
print(f"- Removed ({len(removed)}):")
|
|
480
|
+
for e in removed:
|
|
481
|
+
print(f" - {e}")
|
|
482
|
+
print(f"\nCurrent: {len(current)} entries -> Computed: {len(computed)} entries")
|
|
483
|
+
return 0
|
|
484
|
+
|
|
485
|
+
if args.apply:
|
|
486
|
+
pkg_path = repo_root / 'package.json'
|
|
487
|
+
with open(pkg_path) as f:
|
|
488
|
+
pkg = json.load(f)
|
|
489
|
+
|
|
490
|
+
old_count = len(pkg.get('files', []))
|
|
491
|
+
pkg['files'] = files_array
|
|
492
|
+
|
|
493
|
+
with open(pkg_path, 'w') as f:
|
|
494
|
+
json.dump(pkg, f, indent=2)
|
|
495
|
+
f.write('\n')
|
|
496
|
+
|
|
497
|
+
print(f"Updated package.json: {old_count} entries -> {len(files_array)} entries", file=sys.stderr)
|
|
498
|
+
return 0
|
|
499
|
+
|
|
500
|
+
return 0
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
if __name__ == '__main__':
|
|
504
|
+
sys.exit(main())
|