@openlife/cli 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/INSTALL.md +266 -0
  2. package/LICENSE +21 -0
  3. package/README.md +142 -0
  4. package/bin/openlife.js +3 -0
  5. package/dist/admin_panel_server.js +66 -0
  6. package/dist/cli/AgentManager.js +109 -0
  7. package/dist/cli/AutonomousInstaller.js +134 -0
  8. package/dist/cli/DreamOrganizer.js +88 -0
  9. package/dist/cli/HostInstaller.js +426 -0
  10. package/dist/cli/InstallBanner.js +16 -0
  11. package/dist/cli/InstallFlow.js +256 -0
  12. package/dist/cli/InstallHeadless.js +47 -0
  13. package/dist/cli/InstallModules.js +148 -0
  14. package/dist/cli/InstallStateStore.js +75 -0
  15. package/dist/cli/InstallWizard.js +364 -0
  16. package/dist/cli/ProfileManager.js +163 -0
  17. package/dist/cli/SystemInstaller.js +89 -0
  18. package/dist/cli/WorldClassCommands.js +208 -0
  19. package/dist/design/DesignMdImporter.js +82 -0
  20. package/dist/design/DesignMdMode.js +93 -0
  21. package/dist/design/DesignMdRegistry.js +67 -0
  22. package/dist/index.js +2575 -0
  23. package/dist/memory/ConversationMemory.js +33 -0
  24. package/dist/memory/LocalMemoryProvider.js +86 -0
  25. package/dist/memory/Mem0Provider.js +16 -0
  26. package/dist/memory/MemoryNamespacePolicy.js +27 -0
  27. package/dist/memory/MemoryOrchestrator.js +65 -0
  28. package/dist/memory/MemoryPromotionFlow.js +32 -0
  29. package/dist/memory/MemoryProvider.js +2 -0
  30. package/dist/memory/MemoryProviderRegistry.js +27 -0
  31. package/dist/memory/MemoryRetentionPolicy.js +60 -0
  32. package/dist/memory/MempalaceProvider.js +72 -0
  33. package/dist/memory/OmniMemory.js +106 -0
  34. package/dist/memory/RedisAgentMemoryProvider.js +16 -0
  35. package/dist/memory/SessionManager.js +86 -0
  36. package/dist/memory/ZepGraphitiProvider.js +16 -0
  37. package/dist/orchestrator/AgentRegistry.js +56 -0
  38. package/dist/orchestrator/AgentScoring.js +82 -0
  39. package/dist/orchestrator/AgentTeam.js +22 -0
  40. package/dist/orchestrator/ArbitrationAgent.js +43 -0
  41. package/dist/orchestrator/ArbitrationScorecard.js +17 -0
  42. package/dist/orchestrator/AssetPromotionEngine.js +65 -0
  43. package/dist/orchestrator/AssetReuseRouter.js +63 -0
  44. package/dist/orchestrator/BenchmarkEngine.js +75 -0
  45. package/dist/orchestrator/Brain.js +298 -0
  46. package/dist/orchestrator/CadenceEngine.js +76 -0
  47. package/dist/orchestrator/CapabilityRouter.js +36 -0
  48. package/dist/orchestrator/CommandLanguage.js +27 -0
  49. package/dist/orchestrator/CommandRouter.js +70 -0
  50. package/dist/orchestrator/ConsequenceForecaster.js +286 -0
  51. package/dist/orchestrator/CronManager.js +286 -0
  52. package/dist/orchestrator/DynamicAgentBuilder.js +48 -0
  53. package/dist/orchestrator/DynamicAgentExecutor.js +15 -0
  54. package/dist/orchestrator/EnterpriseAgenticCore.js +276 -0
  55. package/dist/orchestrator/ExecutionBoard.js +86 -0
  56. package/dist/orchestrator/ExecutionIntent.js +13 -0
  57. package/dist/orchestrator/ExecutionModePolicy.js +48 -0
  58. package/dist/orchestrator/ExecutionRouter.js +9 -0
  59. package/dist/orchestrator/ExecutionState.js +20 -0
  60. package/dist/orchestrator/ExecutorHealth.js +86 -0
  61. package/dist/orchestrator/ExternalCatalogRegistry.js +83 -0
  62. package/dist/orchestrator/Gatekeeper.js +414 -0
  63. package/dist/orchestrator/Gateway.js +508 -0
  64. package/dist/orchestrator/GovernanceConsentStore.js +66 -0
  65. package/dist/orchestrator/GovernanceLayer.js +179 -0
  66. package/dist/orchestrator/GovernancePolicyStore.js +53 -0
  67. package/dist/orchestrator/GovernanceScopeLedger.js +134 -0
  68. package/dist/orchestrator/GovernanceScopePolicy.js +67 -0
  69. package/dist/orchestrator/IntentClassifier.js +45 -0
  70. package/dist/orchestrator/JobLifecycle.js +91 -0
  71. package/dist/orchestrator/LearningRouter.js +24 -0
  72. package/dist/orchestrator/MediaManager.js +92 -0
  73. package/dist/orchestrator/MemoryCuratorAgent.js +41 -0
  74. package/dist/orchestrator/MissionState.js +155 -0
  75. package/dist/orchestrator/ModelManager.js +84 -0
  76. package/dist/orchestrator/OperatingSystem.js +71 -0
  77. package/dist/orchestrator/OperationalMemoryStore.js +94 -0
  78. package/dist/orchestrator/OptimizationLoop.js +72 -0
  79. package/dist/orchestrator/OrchestrationLoop.js +905 -0
  80. package/dist/orchestrator/OrgStructure.js +88 -0
  81. package/dist/orchestrator/OutcomeSimulator.js +46 -0
  82. package/dist/orchestrator/ParallelOrchestrationLoop.js +36 -0
  83. package/dist/orchestrator/PerformanceScorecard.js +105 -0
  84. package/dist/orchestrator/PlannerAgent.js +46 -0
  85. package/dist/orchestrator/ProcessSandbox.js +129 -0
  86. package/dist/orchestrator/PromotionPipeline.js +74 -0
  87. package/dist/orchestrator/PromotionReviewGate.js +11 -0
  88. package/dist/orchestrator/QueueScheduler.js +260 -0
  89. package/dist/orchestrator/ReleaseGate.js +36 -0
  90. package/dist/orchestrator/ReleaseWorkflow.js +68 -0
  91. package/dist/orchestrator/RemotePublisher.js +139 -0
  92. package/dist/orchestrator/ReuseEngine.js +89 -0
  93. package/dist/orchestrator/ReviewerAgent.js +49 -0
  94. package/dist/orchestrator/RoleHandoff.js +65 -0
  95. package/dist/orchestrator/RuntimeHealthMonitor.js +143 -0
  96. package/dist/orchestrator/RuntimePolicy.js +105 -0
  97. package/dist/orchestrator/RuntimeProbe.js +97 -0
  98. package/dist/orchestrator/RuntimeRegistry.js +73 -0
  99. package/dist/orchestrator/SandboxPolicy.js +22 -0
  100. package/dist/orchestrator/SecurityDownloadGuard.js +169 -0
  101. package/dist/orchestrator/SecurityEventStore.js +58 -0
  102. package/dist/orchestrator/ServiceCompletionPolicy.js +36 -0
  103. package/dist/orchestrator/ServiceState.js +195 -0
  104. package/dist/orchestrator/SkillCreator.js +404 -0
  105. package/dist/orchestrator/SkillLearningLoop.js +57 -0
  106. package/dist/orchestrator/SkillManager.js +75 -0
  107. package/dist/orchestrator/SkillNetwork.js +29 -0
  108. package/dist/orchestrator/SkillRegistryV2.js +28 -0
  109. package/dist/orchestrator/SkillScoring.js +70 -0
  110. package/dist/orchestrator/SquadAutoCreator.js +64 -0
  111. package/dist/orchestrator/SquadCreator.js +727 -0
  112. package/dist/orchestrator/SquadRegistry.js +28 -0
  113. package/dist/orchestrator/SquadRouter.js +33 -0
  114. package/dist/orchestrator/SquadScoring.js +70 -0
  115. package/dist/orchestrator/SubagentLifecycle.js +90 -0
  116. package/dist/orchestrator/SynthesizerAgent.js +48 -0
  117. package/dist/orchestrator/SystemDoctor.js +224 -0
  118. package/dist/orchestrator/TaskExecutor.js +422 -0
  119. package/dist/orchestrator/TeammateBoard.js +61 -0
  120. package/dist/orchestrator/TestHarness.js +184 -0
  121. package/dist/orchestrator/VoiceManager.js +203 -0
  122. package/dist/orchestrator/VoiceRouter.js +89 -0
  123. package/dist/orchestrator/capability/CapabilityGenesisEngine.js +278 -0
  124. package/dist/orchestrator/capability/CapabilityPackParser.js +223 -0
  125. package/dist/orchestrator/capability/CapabilityPackSchema.js +62 -0
  126. package/dist/orchestrator/capability/CapabilityPackState.js +163 -0
  127. package/dist/orchestrator/providers/AgentProvider.js +2 -0
  128. package/dist/orchestrator/providers/CapabilityProvider.js +12 -0
  129. package/dist/orchestrator/providers/CloudAgentProvider.js +55 -0
  130. package/dist/orchestrator/providers/CloudSkillProvider.js +55 -0
  131. package/dist/orchestrator/providers/CloudSquadProvider.js +55 -0
  132. package/dist/orchestrator/providers/CompositeAgentProvider.js +16 -0
  133. package/dist/orchestrator/providers/CompositeCapabilityProvider.js +25 -0
  134. package/dist/orchestrator/providers/CompositeSkillProvider.js +16 -0
  135. package/dist/orchestrator/providers/CompositeSquadProvider.js +16 -0
  136. package/dist/orchestrator/providers/CompositeWorkflowProvider.js +46 -0
  137. package/dist/orchestrator/providers/FileAgentProvider.js +105 -0
  138. package/dist/orchestrator/providers/FileCapabilityProvider.js +106 -0
  139. package/dist/orchestrator/providers/FileSkillProvider.js +65 -0
  140. package/dist/orchestrator/providers/FileSquadProvider.js +69 -0
  141. package/dist/orchestrator/providers/FileWorkflowProvider.js +103 -0
  142. package/dist/orchestrator/providers/SkillProvider.js +2 -0
  143. package/dist/orchestrator/providers/SquadProvider.js +2 -0
  144. package/dist/orchestrator/toolset/ToolsetGuard.js +69 -0
  145. package/dist/orchestrator/toolset/ToolsetRegistry.js +65 -0
  146. package/dist/orchestrator/toolset/ToolsetSchema.js +21 -0
  147. package/dist/orchestrator/util/AtomicWriter.js +204 -0
  148. package/dist/orchestrator/util/DistributedLock.js +232 -0
  149. package/dist/orchestrator/util/TemplateRenderer.js +87 -0
  150. package/dist/orchestrator/util/WatchdogHeartbeat.js +116 -0
  151. package/dist/orchestrator/workflow/ConditionParser.js +232 -0
  152. package/dist/orchestrator/workflow/WorkflowEngine.js +379 -0
  153. package/dist/orchestrator/workflow/WorkflowParser.js +368 -0
  154. package/dist/orchestrator/workflow/WorkflowSchema.js +65 -0
  155. package/dist/orchestrator/workflow/WorkflowState.js +11 -0
  156. package/dist/reversa/ReversaAgent.js +134 -0
  157. package/dist/reversa/ReversaContracts.js +62 -0
  158. package/dist/reversa/ReversaExecutors.js +65 -0
  159. package/dist/skills/SkillRegistry.js +71 -0
  160. package/dist/squads/SquadManager.js +87 -0
  161. package/dist/test_admin_teams_networks.js +54 -0
  162. package/dist/test_agent_team_skill_network.js +15 -0
  163. package/dist/test_aiobuilder_cli_parity.js +169 -0
  164. package/dist/test_ask_exit.js +73 -0
  165. package/dist/test_atomic_writer.js +209 -0
  166. package/dist/test_autonomous_soak.js +141 -0
  167. package/dist/test_benchmark_engine.js +41 -0
  168. package/dist/test_brain_error_diagnostics.js +51 -0
  169. package/dist/test_brain_fallback_chain.js +93 -0
  170. package/dist/test_capability_genesis_engine.js +225 -0
  171. package/dist/test_capability_pack_schema.js +214 -0
  172. package/dist/test_catalog_quality.js +150 -0
  173. package/dist/test_cli_crud_roundtrip.js +154 -0
  174. package/dist/test_cli_diagnostics.js +131 -0
  175. package/dist/test_cli_doc_parity.js +126 -0
  176. package/dist/test_cli_help_surface.js +106 -0
  177. package/dist/test_cli_service_commands.js +83 -0
  178. package/dist/test_consequence_forecast_brain.js +165 -0
  179. package/dist/test_consequence_forecaster.js +24 -0
  180. package/dist/test_conversation_memory.js +36 -0
  181. package/dist/test_create_entities.js +54 -0
  182. package/dist/test_creator_placeholders_completed.js +177 -0
  183. package/dist/test_cron_manager.js +123 -0
  184. package/dist/test_daemon_sigterm.js +72 -0
  185. package/dist/test_deep_research_capability.js +87 -0
  186. package/dist/test_designmd_import_registry.js +16 -0
  187. package/dist/test_designmd_mode.js +50 -0
  188. package/dist/test_designmd_mode_workspace.js +13 -0
  189. package/dist/test_dist_templates_layout.js +135 -0
  190. package/dist/test_distributed_lock.js +201 -0
  191. package/dist/test_distribution_installability.js +67 -0
  192. package/dist/test_doctor_sandbox_check.js +44 -0
  193. package/dist/test_dream_organizer.js +25 -0
  194. package/dist/test_dual_mode.js +15 -0
  195. package/dist/test_enterprise_agentic_core.js +128 -0
  196. package/dist/test_forecast_brain_wiring.js +87 -0
  197. package/dist/test_gateway_telegram_guardrails.js +52 -0
  198. package/dist/test_governance.js +34 -0
  199. package/dist/test_governance_advanced.js +75 -0
  200. package/dist/test_governance_scope_ledger.js +147 -0
  201. package/dist/test_governance_v13_policies.js +44 -0
  202. package/dist/test_guided_creator_cli.js +100 -0
  203. package/dist/test_host_install_e2e.js +324 -0
  204. package/dist/test_host_installer.js +259 -0
  205. package/dist/test_host_installers_gemini_codex.js +95 -0
  206. package/dist/test_host_uninstaller.js +295 -0
  207. package/dist/test_install_flow.js +70 -0
  208. package/dist/test_install_flow_host_validation.js +143 -0
  209. package/dist/test_install_wizard.js +272 -0
  210. package/dist/test_integration_gemini_live.js +95 -0
  211. package/dist/test_integration_http_trigger_live.js +154 -0
  212. package/dist/test_integration_telegram_live.js +102 -0
  213. package/dist/test_job_lifecycle.js +16 -0
  214. package/dist/test_memory_orchestrator.js +33 -0
  215. package/dist/test_memory_promotion.js +36 -0
  216. package/dist/test_memory_retention.js +37 -0
  217. package/dist/test_mission_checkpoint.js +204 -0
  218. package/dist/test_multi_host_docs_parity.js +125 -0
  219. package/dist/test_openlife_auto_creator_routing.js +69 -0
  220. package/dist/test_openlife_evolution_surface.js +77 -0
  221. package/dist/test_openlife_gatekeeper_routing.js +15 -0
  222. package/dist/test_openlife_routing_surface.js +27 -0
  223. package/dist/test_openlife_runtime_source_truth.js +25 -0
  224. package/dist/test_operating_system.js +45 -0
  225. package/dist/test_optimization_loop.js +38 -0
  226. package/dist/test_orchestration_assets_lifecycle.js +78 -0
  227. package/dist/test_outcome_simulator.js +38 -0
  228. package/dist/test_performance_latency.js +215 -0
  229. package/dist/test_performance_scorecard.js +38 -0
  230. package/dist/test_phase1_check_exit.js +103 -0
  231. package/dist/test_phase6_board.js +31 -0
  232. package/dist/test_phase6_cadence.js +29 -0
  233. package/dist/test_phase6_ops.js +37 -0
  234. package/dist/test_post_mission_evaluation.js +190 -0
  235. package/dist/test_process_sandbox.js +88 -0
  236. package/dist/test_profile_toolset_mcp.js +125 -0
  237. package/dist/test_queue_scheduler.js +239 -0
  238. package/dist/test_release_gate.js +23 -0
  239. package/dist/test_remote_publish.js +193 -0
  240. package/dist/test_reversa_contracts_e2e.js +48 -0
  241. package/dist/test_reversa_export_and_strict.js +51 -0
  242. package/dist/test_reversa_full_execution.js +12 -0
  243. package/dist/test_reversa_lite.js +9 -0
  244. package/dist/test_royal_stack_golden.js +179 -0
  245. package/dist/test_runtime_health_backoff.js +154 -0
  246. package/dist/test_runtime_policy.js +26 -0
  247. package/dist/test_runtime_probe.js +19 -0
  248. package/dist/test_runtime_profile_oauth_only.js +262 -0
  249. package/dist/test_runtime_registry.js +11 -0
  250. package/dist/test_security_download_and_scan.js +103 -0
  251. package/dist/test_security_download_guard.js +14 -0
  252. package/dist/test_service_command_surface.js +12 -0
  253. package/dist/test_service_completion_policy.js +32 -0
  254. package/dist/test_service_guardrails_delete.js +12 -0
  255. package/dist/test_service_mode_explicit_only.js +174 -0
  256. package/dist/test_sources_import_ref.js +46 -0
  257. package/dist/test_sources_scaffold.js +43 -0
  258. package/dist/test_squad_skill_creator.js +305 -0
  259. package/dist/test_squad_skill_design_llm.js +176 -0
  260. package/dist/test_subsystems_org_state.js +271 -0
  261. package/dist/test_subsystems_promotion_memory_assets.js +343 -0
  262. package/dist/test_subsystems_routing_governance.js +234 -0
  263. package/dist/test_task_executor_sandbox_optin.js +127 -0
  264. package/dist/test_teammate_learning.js +15 -0
  265. package/dist/test_telegram_delete_guardrail.js +21 -0
  266. package/dist/test_toolset_enforcement.js +188 -0
  267. package/dist/test_trigger_basic_auth.js +112 -0
  268. package/dist/test_util/doc_parity.js +120 -0
  269. package/dist/test_v15_e2e_integration.js +207 -0
  270. package/dist/test_watchdog_heartbeat.js +152 -0
  271. package/dist/test_workflow_condition_parser.js +63 -0
  272. package/dist/test_workflow_e2e.js +240 -0
  273. package/dist/test_workflow_engine.js +330 -0
  274. package/dist/test_workflow_parser.js +245 -0
  275. package/dist/test_workflow_schema_backward_compat.js +197 -0
  276. package/dist-templates/README.md +91 -0
  277. package/dist-templates/claude-code/agents/openlife-atlas.md +52 -0
  278. package/dist-templates/claude-code/agents/openlife-forge.md +42 -0
  279. package/dist-templates/claude-code/agents/openlife-genesis.md +59 -0
  280. package/dist-templates/claude-code/agents/openlife-lyra.md +40 -0
  281. package/dist-templates/claude-code/agents/openlife-maestro.md +45 -0
  282. package/dist-templates/claude-code/commands/openlife/ask.md +14 -0
  283. package/dist-templates/claude-code/commands/openlife/doctor.md +19 -0
  284. package/dist-templates/claude-code/commands/openlife/dream.md +20 -0
  285. package/dist-templates/claude-code/commands/openlife/status.md +14 -0
  286. package/dist-templates/claude-code/mcp/openlife-orchestrator.json +46 -0
  287. package/dist-templates/codex/README.md +7 -0
  288. package/dist-templates/codex/agents/openlife-atlas.md +52 -0
  289. package/dist-templates/codex/agents/openlife-forge.md +42 -0
  290. package/dist-templates/codex/agents/openlife-genesis.md +59 -0
  291. package/dist-templates/codex/agents/openlife-lyra.md +40 -0
  292. package/dist-templates/codex/agents/openlife-maestro.md +45 -0
  293. package/dist-templates/codex/commands/openlife/ask.md +14 -0
  294. package/dist-templates/codex/commands/openlife/doctor.md +19 -0
  295. package/dist-templates/codex/commands/openlife/dream.md +20 -0
  296. package/dist-templates/codex/commands/openlife/status.md +14 -0
  297. package/dist-templates/codex/mcp/openlife-orchestrator.json +46 -0
  298. package/dist-templates/gemini-cli/README.md +8 -0
  299. package/dist-templates/gemini-cli/agents/openlife-atlas.md +52 -0
  300. package/dist-templates/gemini-cli/agents/openlife-forge.md +42 -0
  301. package/dist-templates/gemini-cli/agents/openlife-genesis.md +59 -0
  302. package/dist-templates/gemini-cli/agents/openlife-lyra.md +40 -0
  303. package/dist-templates/gemini-cli/agents/openlife-maestro.md +45 -0
  304. package/dist-templates/gemini-cli/commands/openlife/ask.md +14 -0
  305. package/dist-templates/gemini-cli/commands/openlife/doctor.md +19 -0
  306. package/dist-templates/gemini-cli/commands/openlife/dream.md +20 -0
  307. package/dist-templates/gemini-cli/commands/openlife/status.md +14 -0
  308. package/dist-templates/gemini-cli/mcp/openlife-orchestrator.json +46 -0
  309. package/dist-templates/skill-template/README.md +34 -0
  310. package/dist-templates/skill-template/SKILL.md.template +59 -0
  311. package/dist-templates/squad-template/README.md +82 -0
  312. package/dist-templates/squad-template/SQUAD.md.template +51 -0
  313. package/dist-templates/squad-template/agent-template.md +51 -0
  314. package/dist-templates/squad-template/checklist-template.md +25 -0
  315. package/dist-templates/squad-template/task-template.md +36 -0
  316. package/dist-templates/workflows/PORTED_WORKFLOWS.md +60 -0
  317. package/dist-templates/workflows/brownfield-discovery.yaml +137 -0
  318. package/dist-templates/workflows/greenfield-fullstack.yaml +132 -0
  319. package/dist-templates/workflows/qa-loop.yaml +125 -0
  320. package/dist-templates/workflows/story-development-cycle.yaml +80 -0
  321. package/docs/CHANGELOG_FEATURE_ROLLOUT_DESIGNMD.md +43 -0
  322. package/docs/EXTERNAL_SOURCES_AND_SECURITY_GUARD.md +33 -0
  323. package/docs/OPENLIFE_AUDIT_2026-05-06.md +170 -0
  324. package/docs/OPENLIFE_CONSOLIDATED_PLAN_2026-05-06.md +299 -0
  325. package/docs/OPENLIFE_DUAL_MODE_IMPLEMENTATION_PLAN.md +205 -0
  326. package/docs/OPENLIFE_EVOLUTION_SURFACE_2026-05-07.md +53 -0
  327. package/docs/OPENLIFE_SKILLS_IMPORT_2026-05-07.json +223 -0
  328. package/docs/OPENLIFE_SQUADS_IMPORT_2026-05-07.json +184 -0
  329. package/docs/PAPERCLIP_OPENLIFE_INVESTIGATION.md +85 -0
  330. package/docs/README.md +28 -0
  331. package/docs/RELEASE_ORGANIZATION_PLAN.md +164 -0
  332. package/docs/audit/CLI-EXECUTION-RESULTS.md +113 -0
  333. package/docs/audit/CLI-MATRIX.md +556 -0
  334. package/docs/audit/DOC-PARITY-GAPS.md +351 -0
  335. package/docs/audit/ORCHESTRATOR-MATRIX.md +136 -0
  336. package/docs/audit/TEST-COVERAGE-GAPS.md +334 -0
  337. package/docs/audit/integrations/SKIPPED.md +101 -0
  338. package/docs/autonomous-install.md +79 -0
  339. package/docs/capability-genesis.md +137 -0
  340. package/docs/capability-pack-schema.md +157 -0
  341. package/docs/commands.md +82 -0
  342. package/docs/deep-research-capability.md +114 -0
  343. package/docs/development/typescript-conventions.md +95 -0
  344. package/docs/host-installers.md +68 -0
  345. package/docs/install/aiobuilder.md +70 -0
  346. package/docs/install/claude-code.md +83 -0
  347. package/docs/install/codex.md +64 -0
  348. package/docs/install/gemini-cli.md +64 -0
  349. package/docs/install/runtime-profiles.md +83 -0
  350. package/docs/openlife-agent-os-blueprint.md +114 -0
  351. package/docs/openlife-install-backlog.md +115 -0
  352. package/docs/openlife-install-spec.md +306 -0
  353. package/docs/operations/CLOUD_CUTOVER_AUDIT.md +37 -0
  354. package/docs/operations/PHASE_PROGRESS_CONTINUATION.md +24 -0
  355. package/docs/performance-benchmarks.md +83 -0
  356. package/docs/planning/v1.3-capability-genesis.md +157 -0
  357. package/docs/plans/2026-05-05-admin-interface-professional-dark-premium-plan.md +84 -0
  358. package/docs/plans/2026-05-05-openlife-autonomous-domain-marketplace-masterplan.md +122 -0
  359. package/docs/quickstart.md +60 -0
  360. package/docs/release-process.md +236 -0
  361. package/docs/roadmap/OPENLIFE_MASTER_PLAN_CLOUD_V3.md +97 -0
  362. package/docs/sandboxing-research.md +117 -0
  363. package/docs/stories/epic-feature-audit/1.1.story.md +84 -0
  364. package/docs/stories/epic-feature-audit/1.2.story.md +102 -0
  365. package/docs/stories/epic-feature-audit/1.3.story.md +93 -0
  366. package/docs/stories/epic-feature-audit/1.5.story.md +121 -0
  367. package/docs/stories/epic-feature-audit/1.6.story.md +80 -0
  368. package/docs/stories/epic-feature-completeness/2.1.story.md +70 -0
  369. package/docs/stories/epic-feature-completeness/2.2.story.md +49 -0
  370. package/docs/stories/epic-feature-completeness/2.3.story.md +74 -0
  371. package/docs/stories/epic-feature-completeness/2.4.story.md +71 -0
  372. package/docs/stories/epic-feature-completeness/3.1.story.md +56 -0
  373. package/docs/stories/epic-feature-completeness/3.2.story.md +80 -0
  374. package/docs/stories/epic-feature-completeness/3.3.story.md +68 -0
  375. package/docs/stories/epic-feature-completeness/3.4.story.md +71 -0
  376. package/docs/stories/epic-feature-completeness/3.5.story.md +72 -0
  377. package/docs/stories/epic-feature-completeness/3.6.story.md +69 -0
  378. package/docs/stories/epic-feature-completeness/3.7.story.md +68 -0
  379. package/docs/stories/epic-feature-completeness/3.8.story.md +57 -0
  380. package/docs/toolset-enforcement.md +122 -0
  381. package/docs/v1.4-changelog.md +159 -0
  382. package/docs/v1.5-changelog.md +106 -0
  383. package/docs/v1.5-roadmap.md +121 -0
  384. package/docs/v1.6-changelog.md +67 -0
  385. package/docs/v1.6-roadmap.md +89 -0
  386. package/docs/v1.7-changelog.md +98 -0
  387. package/docs/workflow-schema.md +177 -0
  388. package/package.json +177 -0
  389. package/scripts/clean-test-pollution.js +61 -0
  390. package/scripts/openlife-agent-start.sh +6 -0
  391. package/scripts/openlife-agent.service.example +13 -0
  392. package/scripts/openlife-agent.supervisord.conf.example +8 -0
  393. package/scripts/openlife-autonomous-install.sh +29 -0
  394. package/scripts/postinstall-check.sh +37 -0
@@ -0,0 +1,414 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Gatekeeper = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const IntentClassifier_1 = require("./IntentClassifier");
40
+ const OmniMemory_1 = require("../memory/OmniMemory");
41
+ const SquadManager_1 = require("../squads/SquadManager");
42
+ const SkillRegistry_1 = require("../skills/SkillRegistry");
43
+ const Brain_1 = require("./Brain");
44
+ const SessionManager_1 = require("../memory/SessionManager");
45
+ const TaskExecutor_1 = require("./TaskExecutor");
46
+ const ExecutorHealth_1 = require("./ExecutorHealth");
47
+ const OrchestrationLoop_1 = require("./OrchestrationLoop");
48
+ const CommandLanguage_1 = require("./CommandLanguage");
49
+ const CommandRouter_1 = require("./CommandRouter");
50
+ const RuntimePolicy_1 = require("./RuntimePolicy");
51
+ const ConversationMemory_1 = require("../memory/ConversationMemory");
52
+ const ModelManager_1 = require("./ModelManager");
53
+ const WorldClassCommands_1 = require("../cli/WorldClassCommands");
54
+ const GovernanceLayer_1 = require("./GovernanceLayer");
55
+ const child_process_1 = require("child_process");
56
+ class Gatekeeper {
57
+ memory;
58
+ squadManager;
59
+ skillRegistry;
60
+ brain;
61
+ sessionManager;
62
+ taskExecutor;
63
+ executorHealth;
64
+ orchestrationLoop = null;
65
+ commandLanguage;
66
+ commandRouter;
67
+ runtimePolicy;
68
+ conversationMemory;
69
+ modelManager;
70
+ worldCommands;
71
+ governance;
72
+ systemSoul = "";
73
+ systemIdentity = "";
74
+ executorPolicy = null;
75
+ constructor() {
76
+ this.memory = new OmniMemory_1.OmniMemory();
77
+ this.squadManager = new SquadManager_1.SquadManager();
78
+ this.skillRegistry = new SkillRegistry_1.SkillRegistry();
79
+ this.brain = new Brain_1.Brain();
80
+ this.sessionManager = new SessionManager_1.SessionManager();
81
+ this.taskExecutor = new TaskExecutor_1.TaskExecutor();
82
+ this.executorHealth = new ExecutorHealth_1.ExecutorHealth();
83
+ this.commandLanguage = new CommandLanguage_1.CommandLanguage();
84
+ this.commandRouter = new CommandRouter_1.CommandRouter();
85
+ this.runtimePolicy = new RuntimePolicy_1.RuntimePolicy();
86
+ this.conversationMemory = new ConversationMemory_1.ConversationMemory(this.memory, this.sessionManager);
87
+ this.modelManager = new ModelManager_1.ModelManager();
88
+ this.worldCommands = new WorldClassCommands_1.WorldClassCommands();
89
+ this.governance = new GovernanceLayer_1.GovernanceLayer();
90
+ this.loadSystemPersona();
91
+ this.loadExecutorPolicy();
92
+ }
93
+ loadSystemPersona() {
94
+ try {
95
+ const soulPath = path.join(process.cwd(), 'system', 'SOUL.md');
96
+ const identityPath = path.join(process.cwd(), 'system', 'IDENTITY.md');
97
+ if (fs.existsSync(soulPath))
98
+ this.systemSoul = fs.readFileSync(soulPath, 'utf-8');
99
+ if (fs.existsSync(identityPath))
100
+ this.systemIdentity = fs.readFileSync(identityPath, 'utf-8');
101
+ }
102
+ catch (e) {
103
+ console.error("[GATEKEEPER] Erro ao carregar persona do sistema:", e);
104
+ }
105
+ }
106
+ loadExecutorPolicy() {
107
+ try {
108
+ const policyPath = path.join(process.cwd(), 'executor-policy.json');
109
+ if (fs.existsSync(policyPath)) {
110
+ this.executorPolicy = JSON.parse(fs.readFileSync(policyPath, 'utf-8'));
111
+ }
112
+ }
113
+ catch (e) {
114
+ console.error('[GATEKEEPER] Erro ao carregar executor-policy.json:', e);
115
+ this.executorPolicy = null;
116
+ }
117
+ }
118
+ async routeTask(task, userInput, userId = "default", options) {
119
+ console.log(`\n[GATEKEEPER] Intenção: ${task.intent} | Budget: $${task.budgetLimit} | User: ${userId}`);
120
+ const parsedCommand = this.commandLanguage.parse(userInput);
121
+ const commandResult = this.commandRouter.route(parsedCommand);
122
+ if (commandResult) {
123
+ this.sessionManager.addMessage(userId, 'user', userInput);
124
+ this.sessionManager.addMessage(userId, 'agent', commandResult);
125
+ return commandResult;
126
+ }
127
+ this.sessionManager.addMessage(userId, 'user', userInput);
128
+ const normalizedInput = userInput.toLowerCase().trim();
129
+ if (/\b(delete|remove|erase|deletar|apagar|remover)\b/i.test(normalizedInput)) {
130
+ const guardDecision = this.governance.evaluate(userInput);
131
+ if (!guardDecision.allowed && guardDecision.requiresConsent) {
132
+ const blocked = '🚫 Operação destrutiva bloqueada. Regra #1: nunca deletar sem aprovação explícita do Rafa. Confirme de forma explícita para prosseguir.';
133
+ this.sessionManager.addMessage(userId, 'agent', blocked);
134
+ return blocked;
135
+ }
136
+ }
137
+ // v1.3 (Story 4.1) — best-effort OutcomeSimulator call before routing.
138
+ // Persists prediction rationale to .artifacts/missions/<taskId>.thought-trace.json
139
+ // (the existing ConsequenceThoughtTrace path). Failure is non-fatal:
140
+ // the simulator is advisory, not a gate. Disable with OPENLIFE_OUTCOME_SIMULATION=off.
141
+ if (process.env.OPENLIFE_OUTCOME_SIMULATION !== 'off') {
142
+ try {
143
+ const { OutcomeSimulator } = require('./OutcomeSimulator');
144
+ const sim = new OutcomeSimulator();
145
+ const prediction = sim.simulate({
146
+ intent: task.intent,
147
+ riskLevel: 'low',
148
+ fallbackAvailable: true,
149
+ governanceBlocking: false,
150
+ });
151
+ // Persist alongside any ConsequenceThoughtTrace (best-effort).
152
+ const path = require('path');
153
+ const fs = require('fs');
154
+ const traceDir = path.join(process.cwd(), '.artifacts', 'missions');
155
+ try {
156
+ fs.mkdirSync(traceDir, { recursive: true });
157
+ const traceId = `gatekeeper-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
158
+ fs.writeFileSync(path.join(traceDir, `${traceId}.thought-trace.json`), JSON.stringify({
159
+ schemaVersion: '1.0.0',
160
+ stage: 'gatekeeper.pre-dispatch',
161
+ createdAt: new Date().toISOString(),
162
+ userId,
163
+ intent: task.intent,
164
+ prediction,
165
+ }, null, 2));
166
+ }
167
+ catch { /* ignore filesystem hiccups — simulator is advisory */ }
168
+ }
169
+ catch { /* OutcomeSimulator unavailable in some test contexts — proceed */ }
170
+ }
171
+ if (/(agentes\s+ativos|lista\s+de\s+agentes|quais\s+agentes|agents\s+active)/i.test(normalizedInput)) {
172
+ const real = this.worldCommands.agentsListReal();
173
+ const preview = real.items.slice(0, 20).map((a) => `- ${a.id} (${a.role})`).join('\n');
174
+ const direct = `Agentes ativos reais (${real.total}) [fonte: AgentRegistry]:\n${preview}`;
175
+ this.sessionManager.addMessage(userId, 'agent', direct);
176
+ return direct;
177
+ }
178
+ if (/(squads\s+ativas|lista\s+de\s+squads|quais\s+squads)/i.test(normalizedInput)) {
179
+ const real = this.worldCommands.squadsListReal();
180
+ const preview = real.items.slice(0, 20).map((a) => `- ${a.id} (${a.domain})`).join('\n');
181
+ const direct = `Squads reais (${real.total}) [fonte: SquadRegistry]:\n${preview}`;
182
+ this.sessionManager.addMessage(userId, 'agent', direct);
183
+ return direct;
184
+ }
185
+ if (/(skills\s+ativas|lista\s+de\s+skills|quais\s+skills)/i.test(normalizedInput)) {
186
+ const real = this.worldCommands.skillsListReal();
187
+ const preview = real.items.slice(0, 20).map((a) => `- ${a.id}`).join('\n');
188
+ const direct = `Skills reais (${real.total}) [fonte: SkillRegistry]:\n${preview}`;
189
+ this.sessionManager.addMessage(userId, 'agent', direct);
190
+ return direct;
191
+ }
192
+ if (/(route|rotear|roteie|roteamento|auto.?cria|criar capacidades|crie capacidades|criar skill|criar agente|criar squad)/i.test(normalizedInput)) {
193
+ const wantsAutoCreate = /(auto.?cria|criar capacidades|crie capacidades|criar skill|criar agente|criar squad|se nao tiver|se não tiver|lacuna)/i.test(normalizedInput);
194
+ const args = ['bin/openlife.js', 'route', 'intent', userInput, '--limit', '5'];
195
+ if (wantsAutoCreate)
196
+ args.push('--auto-create');
197
+ const routed = (0, child_process_1.spawnSync)('node', args, { cwd: process.cwd(), encoding: 'utf-8' });
198
+ if (routed.status === 0) {
199
+ const payload = JSON.parse(routed.stdout);
200
+ const created = payload.autoCreate?.created || [];
201
+ const direct = [
202
+ `Roteamento OpenLife: ${payload.intent}`,
203
+ `Squad: ${payload.squads?.[0]?.id || 'n/a'} (${payload.squads?.[0]?.score || 0})`,
204
+ `Agente: ${payload.agents?.[0]?.id || 'n/a'} (${payload.agents?.[0]?.score || 0})`,
205
+ `Skill: ${payload.skills?.[0]?.id || 'n/a'} (${payload.skills?.[0]?.score || 0})`,
206
+ wantsAutoCreate ? `Auto-criação: ${created.length ? created.map((x) => `${x.type}:${x.id}`).join(', ') : 'nenhuma lacuna detectada'}` : 'Auto-criação: desativada'
207
+ ].join('\n');
208
+ this.sessionManager.addMessage(userId, 'agent', direct);
209
+ return direct;
210
+ }
211
+ const direct = `Falha no roteamento determinístico: ${routed.stderr || routed.stdout}`;
212
+ this.sessionManager.addMessage(userId, 'agent', direct);
213
+ return direct;
214
+ }
215
+ if (/(mcp\s+status|status\s+do\s+mcp|mcps\s+ativos)/i.test(normalizedInput)) {
216
+ const real = this.worldCommands.mcpStatusReal();
217
+ const checks = Object.entries(real.checks).map(([k, v]) => `- ${k}: ${v.available ? 'OK' : 'FALHA'}${v.path ? ` (${v.path})` : ''}`).join('\n');
218
+ const direct = `MCP status real:\n${checks}`;
219
+ this.sessionManager.addMessage(userId, 'agent', direct);
220
+ return direct;
221
+ }
222
+ if (/(qual\s+modelo|que\s+modelo|which\s+model|modelo\s+ativo|modelo\s+atual)/i.test(normalizedInput)) {
223
+ const cfg = this.modelManager.getModelConfig();
224
+ const fallbackTxt = cfg.fallbacks.length
225
+ ? cfg.fallbacks.map((f, i) => `${i + 1}) ${f.raw}`).join(' | ')
226
+ : 'nenhum fallback configurado';
227
+ const direct = `Estou usando ${cfg.primary.raw} como modelo principal. Fallbacks: ${fallbackTxt}.`;
228
+ this.sessionManager.addMessage(userId, 'agent', direct);
229
+ return direct;
230
+ }
231
+ let finalResponse = "";
232
+ const recoveredContext = await this.conversationMemory.recoverContext(userId, userInput);
233
+ switch (task.intent) {
234
+ case IntentClassifier_1.TaskIntent.KNOWLEDGE_RETRIEVAL:
235
+ finalResponse = await this.handleFastPath(userInput, recoveredContext.recentHistory, recoveredContext.memorySnippet);
236
+ break;
237
+ case IntentClassifier_1.TaskIntent.ENGINEERING_BUILD:
238
+ case IntentClassifier_1.TaskIntent.RESEARCH_ANALYSIS:
239
+ finalResponse = await this.handleComplexPath(userInput, task, recoveredContext.recentHistory, userId, options?.mode);
240
+ break;
241
+ default:
242
+ finalResponse = "Intenção desconhecida. Proteção Mythos ativada.";
243
+ }
244
+ this.sessionManager.addMessage(userId, 'agent', finalResponse);
245
+ return finalResponse;
246
+ }
247
+ async handleFastPath(input, recentHistory, recoveredMemory) {
248
+ console.log("[FAST PATH] Acionando Omni-Memory e recuperação automática de contexto...");
249
+ const searchResult = recoveredMemory || await this.memory.search(input);
250
+ const systemPrompt = `
251
+ Sua Alma (SOUL):
252
+ ${this.systemSoul}
253
+
254
+ Sua Identidade (IDENTITY):
255
+ ${this.systemIdentity}
256
+
257
+ Contexto da OmniMemory (Arquivos):
258
+ ${searchResult.substring(0, 1500)}
259
+
260
+ [Histórico Recente da Sessão (Save State)]:
261
+ ${recentHistory.slice(-3000)}
262
+
263
+ Instruções Adicionais:
264
+ - IMPORTANTE: NÃO comece sua resposta com saudações ("Olá", "Oi") se o usuário já estiver conversando com você no Histórico Recente. Continue a conversa naturalmente.
265
+ - Você tem memória fluida. Baseie-se fortemente no [Histórico Recente da Sessão] para manter o contexto vivo. Responda DIRETAMENTE à última mensagem.
266
+ - Use a OmniMemory para informações profundas de projetos (como LARA, AIOBUILDER).
267
+ - Se for apenas um 'oi' inicial, saúde amigavelmente e pergunte como pode ajudar.
268
+ - NUNCA mencione tool calls, comandos internos, ou frases como "vou executar comando". Apenas responda naturalmente com o resultado final.
269
+ `;
270
+ const fastTimeoutMs = Number(process.env.OPENLIFE_FASTPATH_TIMEOUT_MS || 90000);
271
+ const degradedPrompt = `${this.systemIdentity}\n\nResponda de forma direta e curta, sem contexto extra.`;
272
+ try {
273
+ return await Promise.race([
274
+ this.brain.think(systemPrompt, input),
275
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`FAST_PATH_TIMEOUT_${fastTimeoutMs}`)), fastTimeoutMs))
276
+ ]);
277
+ }
278
+ catch (err) {
279
+ const code = (err instanceof Error ? err.message : String(err)) || 'FAST_PATH_FAILURE';
280
+ console.error(`[FAST PATH ERROR] ${code}`);
281
+ if (String(code).startsWith('FAST_PATH_TIMEOUT_')) {
282
+ try {
283
+ const retryTimeoutMs = Number(process.env.OPENLIFE_FASTPATH_RETRY_TIMEOUT_MS || 30000);
284
+ return await Promise.race([
285
+ this.brain.think(degradedPrompt, input),
286
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`FAST_PATH_RETRY_TIMEOUT_${retryTimeoutMs}`)), retryTimeoutMs))
287
+ ]);
288
+ }
289
+ catch (retryErr) {
290
+ const retryCode = (retryErr instanceof Error ? retryErr.message : String(retryErr)) || 'FAST_PATH_RETRY_FAILURE';
291
+ return [
292
+ 'OPENLIFE ONLINE ✅',
293
+ 'Modo resiliente: primeira rota estourou tempo, tentei fallback enxuto.',
294
+ `Motivo técnico: ${retryCode}`,
295
+ 'Ação: valide cadeia de modelos com `openlife models status` e aumente timeout com OPENLIFE_FASTPATH_TIMEOUT_MS.'
296
+ ].join('\n');
297
+ }
298
+ }
299
+ return [
300
+ 'OPENLIFE ONLINE ✅',
301
+ 'Modo seguro ativado: não vou inventar resposta quando o executor falhar.',
302
+ `Motivo técnico: ${code}`,
303
+ 'Ação: tente novamente em alguns segundos. Se persistir, rode `openlife governance audit` e `openlife models status`.'
304
+ ].join('\n');
305
+ }
306
+ }
307
+ getOrchestrationLoop() {
308
+ if (!this.orchestrationLoop) {
309
+ this.orchestrationLoop = new OrchestrationLoop_1.OrchestrationLoop(this.brain, this.taskExecutor);
310
+ }
311
+ return this.orchestrationLoop;
312
+ }
313
+ async handleComplexPath(input, task, recentHistory, userId, forcedMode) {
314
+ console.log("[COMPLEX PATH] Iniciando orquestração agêntica (Managed Mode / Local)...");
315
+ const normalized = input.toLowerCase();
316
+ const inferredMode = forcedMode || (normalized.includes('como serviço') || normalized.includes('como servico') || normalized.includes('--mode service')
317
+ ? 'service'
318
+ : 'task');
319
+ const orchestration = await this.getOrchestrationLoop().run(task, input, userId, recentHistory, { mode: inferredMode, origin: 'telegram' });
320
+ const state = orchestration.state;
321
+ const missionPath = orchestration.missionPath;
322
+ const executionAttempt = [...state.attempts].reverse().find(a => a.role === 'executor');
323
+ const lastArtifact = state.artifacts[state.artifacts.length - 1] || 'n/a';
324
+ const usedFallback = state.attempts.some(a => a.role === 'executor' && a.status === 'partial');
325
+ console.log("[SELF-EVALUATION LOOP] Analisando o resultado real do loop multiagente...");
326
+ const traceMode = String(process.env.OPENLIFE_REASONING_MODE || 'errors').toLowerCase();
327
+ const toolTrace = state.attempts.slice(-10).map((a) => {
328
+ const raw = String(a.summary || '').replace(/\n/g, ' ');
329
+ const m = raw.match(/^TOOL_TRACE\s+(search_files|read_file|write_file|terminal):\s*(.*)$/i);
330
+ if (m) {
331
+ const label = m[1].toLowerCase();
332
+ const icon = label === 'search_files' ? '🔎' : label === 'read_file' ? '📖' : label === 'write_file' ? '✍️' : '💻';
333
+ const body = String(m[2] || '').split(' | ')[0].slice(0, 120);
334
+ return `${icon} ${label}: "${body}${raw.length > 120 ? '...' : ''}"`;
335
+ }
336
+ const mAll = Array.from(raw.matchAll(/TOOL_TRACE\s+(search_files|read_file|write_file|terminal):\s*([^|]+)/ig));
337
+ if (mAll.length > 0) {
338
+ return mAll.map((mm) => {
339
+ const label = String(mm[1]).toLowerCase();
340
+ const icon = label === 'search_files' ? '🔎' : label === 'read_file' ? '📖' : label === 'write_file' ? '✍️' : '💻';
341
+ const body = String(mm[2] || '').trim().slice(0, 100);
342
+ return `${icon} ${label}: "${body}${body.length >= 100 ? '...' : ''}"`;
343
+ }).join('\n');
344
+ }
345
+ const s = raw.slice(0, 100);
346
+ const low = s.toLowerCase();
347
+ const icon = /(search|grep|find)/.test(low) ? '🔎'
348
+ : /(read|cat|open|load)/.test(low) ? '📖'
349
+ : /(write|patch|edit|create file)/.test(low) ? '✍️'
350
+ : '💻';
351
+ const label = /(search|grep|find)/.test(low) ? 'search_files'
352
+ : /(read|cat|open|load)/.test(low) ? 'read_file'
353
+ : /(write|patch|edit|create file)/.test(low) ? 'write_file'
354
+ : 'terminal';
355
+ return `${icon} ${label}: "${s}${raw.length > 100 ? '...' : ''}"`;
356
+ }).join('\n');
357
+ const evalPrompt = `
358
+ Você é o Córtex OPEN-LIFE. Um loop multiagente acabou de executar a seguinte tarefa:
359
+ "${input}"
360
+
361
+ Resultado da execução:
362
+ - status geral do estado: ${state.status}
363
+ - taskId: ${state.taskId}
364
+ - artifact principal: ${lastArtifact}
365
+ - passos do plano: ${state.plan.join(' | ')}
366
+ - quantidade de attempts: ${state.attempts.length}
367
+ - última tentativa de executor: ${executionAttempt?.summary || 'n/a'}
368
+ - review findings: ${state.reviewFindings.map(r => `${r.nextAction}:${r.score}`).join(' | ')}
369
+ - houve fallback operacional: ${usedFallback ? 'sim' : 'não'}
370
+ - mission state persistido em: ${missionPath}
371
+ - agentes escolhidos: ${state.chosenAgents.map(a => a.id).join(' | ')}
372
+ - memory candidates: ${state.memoryCandidates.join(' | ')}
373
+ - resposta sintetizada: ${orchestration.response.substring(0, 1500)}
374
+
375
+ Histórico da sessão:
376
+ ${recentHistory}
377
+
378
+ Escreva uma resposta curta e de alto nível para o usuário dizendo:
379
+ 1. se a execução real funcionou ou falhou
380
+ 2. onde o artifact principal foi salvo
381
+ 3. onde o mission state foi salvo
382
+ 4. se a orquestração multiagente já está ativa
383
+ 5. se houve iteração/review loop ou paralelismo
384
+ 6. um resumo do que o sistema realmente entregou
385
+ `;
386
+ const final = await this.brain.think(evalPrompt, "Gere a mensagem de conclusão de status com base na execução real do loop multiagente.");
387
+ return traceMode === 'always' && toolTrace ? `${toolTrace}\n\n${final}` : final;
388
+ }
389
+ selectExecutors(task, input) {
390
+ const normalized = input.toLowerCase();
391
+ if (normalized.includes('gemini'))
392
+ return this.filterAvailableExecutors(['gemini', 'codex']);
393
+ if (normalized.includes('claude'))
394
+ return this.filterAvailableExecutors(['claude', 'codex']);
395
+ if (normalized.includes('openclaude'))
396
+ return this.filterAvailableExecutors(['openclaude', 'codex']);
397
+ const route = this.executorPolicy?.routes?.[task.intent];
398
+ if (route?.preferred?.length) {
399
+ const policyExecutors = route.preferred.filter((name) => name === 'codex' || name === 'gemini' || name === 'claude' || name === 'openclaude');
400
+ return this.runtimePolicy.decide(task.intent, policyExecutors).preferred;
401
+ }
402
+ return this.runtimePolicy.decide(task.intent).preferred;
403
+ }
404
+ filterAvailableExecutors(executors) {
405
+ const filtered = executors.filter((executor) => {
406
+ const health = this.executorHealth.get(executor);
407
+ if (!health)
408
+ return true;
409
+ return health.available !== false;
410
+ });
411
+ return filtered.length ? filtered : ['codex'];
412
+ }
413
+ }
414
+ exports.Gatekeeper = Gatekeeper;