@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,298 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Brain = void 0;
40
+ const child_process = __importStar(require("child_process"));
41
+ const util_1 = require("util");
42
+ const openai_1 = __importDefault(require("openai"));
43
+ const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
44
+ const generative_ai_1 = require("@google/generative-ai");
45
+ const ModelManager_1 = require("./ModelManager");
46
+ const ToolsetGuard_1 = require("./toolset/ToolsetGuard");
47
+ const execFile = (0, util_1.promisify)(child_process.execFile);
48
+ const DEFAULT_MODEL_TIMEOUT_MS = Number(process.env.OPENLIFE_MODEL_TIMEOUT_MS || 120000);
49
+ const REASONING_MODE = String(process.env.OPENLIFE_REASONING_MODE || 'errors').toLowerCase(); // off | errors | always
50
+ class Brain {
51
+ openai = null;
52
+ anthropic = null;
53
+ geminiApi = null;
54
+ modelManager;
55
+ constructor() {
56
+ this.modelManager = new ModelManager_1.ModelManager();
57
+ const openAIKey = process.env.OPENAI_API_KEY;
58
+ if (openAIKey && openAIKey.trim() !== '') {
59
+ const opts = { apiKey: openAIKey };
60
+ const openAIBaseUrl = (process.env.OPENAI_BASE_URL || '').trim();
61
+ if (openAIBaseUrl)
62
+ opts.baseURL = openAIBaseUrl;
63
+ this.openai = new openai_1.default(opts);
64
+ }
65
+ const anthropicKey = process.env.ANTHROPIC_API_KEY;
66
+ if (anthropicKey && anthropicKey.trim() !== '')
67
+ this.anthropic = new sdk_1.default({ apiKey: anthropicKey });
68
+ const geminiKey = process.env.GEMINI_API_KEY;
69
+ if (geminiKey && geminiKey.trim() !== '')
70
+ this.geminiApi = new generative_ai_1.GoogleGenerativeAI(geminiKey);
71
+ }
72
+ /**
73
+ * Story 8.1 — public probe for v1.4 creators.
74
+ *
75
+ * Returns true iff at least one API-key-backed provider is configured
76
+ * (OpenAI, Anthropic, Gemini, OpenRouter, or Ollama URL). Used by
77
+ * SquadCreator.design() / SkillCreator.design() to decide between
78
+ * LLM-driven proposal and heuristic fallback without forcing the
79
+ * caller to know about the provider table.
80
+ */
81
+ isAnyProviderAvailable() {
82
+ if (this.openai || this.anthropic || this.geminiApi)
83
+ return true;
84
+ if ((process.env.OPENROUTER_API_KEY || '').trim() !== '')
85
+ return true;
86
+ if ((process.env.OLLAMA_URL || '').trim() !== '')
87
+ return true;
88
+ return false;
89
+ }
90
+ async think(systemPrompt, userMessage) {
91
+ const config = this.modelManager.getModelConfig();
92
+ const modelsToTry = [config.primary, ...config.fallbacks].filter((model, index, arr) => arr.findIndex(m => m.raw === model.raw) === index);
93
+ const failures = [];
94
+ for (let i = 0; i < modelsToTry.length; i++) {
95
+ const modelIdent = modelsToTry[i];
96
+ try {
97
+ console.log(`[BRAIN] Tentando modelo ${i === 0 ? 'PRIMÁRIO' : 'FALLBACK ' + i}: ${modelIdent.raw}...`);
98
+ let out = '';
99
+ switch (modelIdent.provider) {
100
+ case 'openai-api':
101
+ out = await this.thinkWithOpenAIAPI(systemPrompt, userMessage, modelIdent.name);
102
+ break;
103
+ case 'openai-cli':
104
+ out = await this.thinkWithOpenAICLI(systemPrompt, userMessage, modelIdent.name);
105
+ break;
106
+ case 'anthropic':
107
+ out = await this.thinkWithAnthropic(systemPrompt, userMessage, modelIdent.name);
108
+ break;
109
+ case 'gemini-api':
110
+ out = await this.thinkWithGeminiAPI(systemPrompt, userMessage, modelIdent.name);
111
+ break;
112
+ case 'gemini-cli':
113
+ out = await this.thinkWithGeminiCLI(systemPrompt, userMessage, modelIdent.name);
114
+ break;
115
+ case 'ollama':
116
+ out = await this.thinkWithOllama(systemPrompt, userMessage, modelIdent.name);
117
+ break;
118
+ case 'openrouter':
119
+ out = await this.thinkWithOpenRouter(systemPrompt, userMessage, modelIdent.name);
120
+ break;
121
+ default: throw new Error(`Provedor desconhecido: ${modelIdent.provider}`);
122
+ }
123
+ if (REASONING_MODE === 'always') {
124
+ const trace = [
125
+ `🔎 model_try: "${modelIdent.raw}"`,
126
+ `🧭 fallback_chain: "${modelsToTry.length} candidatos"`,
127
+ `✅ model_selected: "${modelIdent.raw}"`
128
+ ].join('\n');
129
+ return `${trace}\n\n${out}`;
130
+ }
131
+ return out;
132
+ }
133
+ catch (error) {
134
+ const reason = error instanceof Error ? error.message : String(error);
135
+ failures.push({ model: modelIdent.raw, reason });
136
+ console.error(`[BRAIN ERROR - ${modelIdent.raw}]`, reason);
137
+ if (i !== modelsToTry.length - 1)
138
+ console.log(`[BRAIN] Rotacionando para o próximo fallback da cadeia...`);
139
+ }
140
+ }
141
+ const concise = failures.slice(-3).map(f => `- ${f.model}: ${f.reason}`).join('\n');
142
+ const guidance = [
143
+ '1) Configure ao menos um provedor API no Railway (ex.: GEMINI_API_KEY ou OPENAI_API_KEY).',
144
+ '2) Não dependa de CLI providers (codex/gemini) no container sem binário/auth.',
145
+ '3) Rode: openlife doctor e valide a cadeia de modelos.'
146
+ ].join('\n');
147
+ const summary = REASONING_MODE !== 'off'
148
+ ? `\n\nResumo operacional:\n- Objetivo: responder com robustez por fallback.\n- Estratégia: rotação sequencial de provedores.\n- Resultado: todos os provedores tentados falharam.`
149
+ : '';
150
+ return `CRITICAL ERROR: cadeia de modelos indisponível no momento.\n\nFalhas recentes:\n${concise}\n\nAção recomendada:\n${guidance}${summary}`;
151
+ }
152
+ formatProviderError(provider, model, error, opts) {
153
+ const e = (error && typeof error === 'object' ? error : {});
154
+ const response = (e.response && typeof e.response === 'object' ? e.response : {});
155
+ const responseData = (response.data && typeof response.data === 'object' ? response.data : {});
156
+ const responseDataError = (responseData.error && typeof responseData.error === 'object' ? responseData.error : {});
157
+ const errorObj = (e.error && typeof e.error === 'object' ? e.error : {});
158
+ const parts = [];
159
+ const status = e.status ?? response.status ?? e.code;
160
+ if (status !== undefined && status !== null)
161
+ parts.push(`HTTP ${String(status)}`);
162
+ const apiMessage = (typeof errorObj.message === 'string' ? errorObj.message : undefined) ||
163
+ (typeof responseDataError.message === 'string' ? responseDataError.message : undefined) ||
164
+ (typeof e.message === 'string' ? e.message : undefined) ||
165
+ String(error);
166
+ parts.push(String(apiMessage || 'erro_desconhecido').slice(0, 240));
167
+ const stderr = typeof e.stderr === 'string' ? e.stderr.trim().slice(-200) : '';
168
+ if (stderr)
169
+ parts.push(`stderr: ${stderr}`);
170
+ if (opts?.keyEnvVar && opts?.expectedKeyPrefix) {
171
+ const rawKey = process.env[opts.keyEnvVar] || '';
172
+ if (rawKey && !rawKey.startsWith(opts.expectedKeyPrefix)) {
173
+ parts.push(`key prefix: ${rawKey.slice(0, 8)} (esperado começar com "${opts.expectedKeyPrefix}")`);
174
+ }
175
+ }
176
+ const wrapped = new Error(`[${provider}/${model}] ${parts.join(' | ')}`);
177
+ wrapped.cause = error;
178
+ wrapped.providerStatus = status;
179
+ return wrapped;
180
+ }
181
+ async thinkWithOpenAIAPI(systemPrompt, userMessage, model) {
182
+ if (!this.openai)
183
+ throw new Error('OPENAI_API_KEY não configurada no .env.');
184
+ try {
185
+ const response = await this.openai.chat.completions.create({
186
+ model,
187
+ messages: [{ role: 'system', content: systemPrompt }, { role: 'user', content: userMessage }],
188
+ temperature: 0.7,
189
+ });
190
+ return response.choices[0].message.content || 'Sem resposta.';
191
+ }
192
+ catch (err) {
193
+ throw this.formatProviderError('openai-api', model, err, { keyEnvVar: 'OPENAI_API_KEY', expectedKeyPrefix: 'sk-' });
194
+ }
195
+ }
196
+ async thinkWithOpenAICLI(systemPrompt, userMessage, model) {
197
+ (0, ToolsetGuard_1.assertToolsetAllowed)('delegation', 'Brain.thinkWithOpenAICLI');
198
+ const args = ['exec', '--dangerously-bypass-approvals-and-sandbox', '--skip-git-repo-check'];
199
+ if (model && model !== 'default')
200
+ args.push('--model', model);
201
+ args.push(`${systemPrompt}\n\nMensagem: ${userMessage}`);
202
+ try {
203
+ const { stdout } = await execFile('codex', args, { maxBuffer: 1024 * 1024 * 10, timeout: DEFAULT_MODEL_TIMEOUT_MS });
204
+ return stdout.trim() || 'Sem resposta do Codex CLI.';
205
+ }
206
+ catch (err) {
207
+ throw this.formatProviderError('openai-cli', model, err);
208
+ }
209
+ }
210
+ async thinkWithAnthropic(systemPrompt, userMessage, model) {
211
+ if (!this.anthropic)
212
+ throw new Error('ANTHROPIC_API_KEY não configurada no .env.');
213
+ try {
214
+ const response = await this.anthropic.messages.create({ model, max_tokens: 4096, system: systemPrompt, messages: [{ role: 'user', content: userMessage }] });
215
+ const first = response.content[0];
216
+ if (first && first.type === 'text')
217
+ return first.text || 'Sem resposta.';
218
+ return 'Sem resposta.';
219
+ }
220
+ catch (err) {
221
+ throw this.formatProviderError('anthropic', model, err, { keyEnvVar: 'ANTHROPIC_API_KEY', expectedKeyPrefix: 'sk-ant-' });
222
+ }
223
+ }
224
+ async thinkWithGeminiAPI(systemPrompt, userMessage, model) {
225
+ if (!this.geminiApi)
226
+ throw new Error('GEMINI_API_KEY não configurada no .env.');
227
+ try {
228
+ const generativeModel = this.geminiApi.getGenerativeModel({ model, systemInstruction: systemPrompt });
229
+ const result = await generativeModel.generateContent(userMessage);
230
+ const response = await result.response;
231
+ return response.text();
232
+ }
233
+ catch (err) {
234
+ throw this.formatProviderError('gemini-api', model, err);
235
+ }
236
+ }
237
+ async thinkWithOpenRouter(systemPrompt, userMessage, model) {
238
+ const apiKey = process.env.OPENROUTER_API_KEY;
239
+ if (!apiKey)
240
+ throw new Error('OPENROUTER_API_KEY não configurada no .env.');
241
+ const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
242
+ method: 'POST',
243
+ headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` },
244
+ body: JSON.stringify({ model, messages: [{ role: 'system', content: systemPrompt }, { role: 'user', content: userMessage }] })
245
+ });
246
+ if (!response.ok) {
247
+ const bodyText = await response.text().catch(() => '');
248
+ throw this.formatProviderError('openrouter', model, { status: response.status, message: response.statusText, error: { message: bodyText.slice(0, 200) } });
249
+ }
250
+ try {
251
+ const data = (await response.json());
252
+ return data.choices?.[0]?.message?.content || 'Sem resposta.';
253
+ }
254
+ catch (err) {
255
+ throw this.formatProviderError('openrouter', model, err);
256
+ }
257
+ }
258
+ async thinkWithOllama(systemPrompt, userMessage, model) {
259
+ const url = process.env.OLLAMA_URL || 'http://localhost:11434/api/chat';
260
+ let response;
261
+ try {
262
+ response = await fetch(url, {
263
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
264
+ body: JSON.stringify({ model, messages: [{ role: 'system', content: systemPrompt }, { role: 'user', content: userMessage }], stream: false })
265
+ });
266
+ }
267
+ catch (err) {
268
+ throw this.formatProviderError('ollama', model, err);
269
+ }
270
+ if (!response.ok) {
271
+ const bodyText = await response.text().catch(() => '');
272
+ throw this.formatProviderError('ollama', model, { status: response.status, message: response.statusText, error: { message: bodyText.slice(0, 200) } });
273
+ }
274
+ try {
275
+ const data = (await response.json());
276
+ return data.message?.content || 'Sem resposta do Ollama.';
277
+ }
278
+ catch (err) {
279
+ throw this.formatProviderError('ollama', model, err);
280
+ }
281
+ }
282
+ async thinkWithGeminiCLI(systemPrompt, userMessage, model) {
283
+ (0, ToolsetGuard_1.assertToolsetAllowed)('delegation', 'Brain.thinkWithGeminiCLI');
284
+ const args = ['-o', 'json', '-m', model && model !== 'default' ? model : 'gemini-3.1-pro-preview', '-p', `${systemPrompt}\n\nMensagem: ${userMessage}`, '-y'];
285
+ try {
286
+ const { stdout } = await execFile('gemini', args, { maxBuffer: 1024 * 1024 * 10, timeout: DEFAULT_MODEL_TIMEOUT_MS });
287
+ const idx = stdout.indexOf('{');
288
+ if (idx < 0)
289
+ throw new Error('Resposta Gemini inválida.');
290
+ const parsed = JSON.parse(stdout.substring(idx));
291
+ return parsed.response || parsed.text || 'Sem resposta no JSON.';
292
+ }
293
+ catch (err) {
294
+ throw this.formatProviderError('gemini-cli', model, err);
295
+ }
296
+ }
297
+ }
298
+ exports.Brain = Brain;
@@ -0,0 +1,76 @@
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.CadenceEngine = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ class CadenceEngine {
40
+ filePath;
41
+ constructor() {
42
+ this.filePath = path.join(process.cwd(), '.artifacts', 'cadence-events.json');
43
+ fs.mkdirSync(path.dirname(this.filePath), { recursive: true });
44
+ }
45
+ schedule(kind, title, ownerRole, linkedMissionId) {
46
+ const event = {
47
+ id: `${kind}_${Date.now()}`,
48
+ kind,
49
+ title,
50
+ status: 'scheduled',
51
+ ownerRole,
52
+ linkedMissionId,
53
+ createdAt: new Date().toISOString(),
54
+ updatedAt: new Date().toISOString()
55
+ };
56
+ const all = this.getAll();
57
+ all.push(event);
58
+ fs.writeFileSync(this.filePath, JSON.stringify(all, null, 2), 'utf-8');
59
+ return event;
60
+ }
61
+ updateStatus(id, status) {
62
+ const all = this.getAll().map((item) => item.id === id ? { ...item, status, updatedAt: new Date().toISOString() } : item);
63
+ fs.writeFileSync(this.filePath, JSON.stringify(all, null, 2), 'utf-8');
64
+ }
65
+ getAll() {
66
+ if (!fs.existsSync(this.filePath))
67
+ return [];
68
+ try {
69
+ return JSON.parse(fs.readFileSync(this.filePath, 'utf-8'));
70
+ }
71
+ catch {
72
+ return [];
73
+ }
74
+ }
75
+ }
76
+ exports.CadenceEngine = CadenceEngine;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CapabilityRouter = void 0;
4
+ const IntentClassifier_1 = require("./IntentClassifier");
5
+ class CapabilityRouter {
6
+ registry;
7
+ constructor(registry) {
8
+ this.registry = registry;
9
+ }
10
+ route(task, input) {
11
+ const normalized = input.toLowerCase();
12
+ if (task.intent === IntentClassifier_1.TaskIntent.RESEARCH_ANALYSIS) {
13
+ return this.buildRoute(['analysis', 'review', 'synthesis'], 'parallel', 'Research tende a se beneficiar de múltiplos olhares e síntese.');
14
+ }
15
+ if (task.intent === IntentClassifier_1.TaskIntent.ENGINEERING_BUILD) {
16
+ return this.buildRoute(['orchestration', 'build', 'review', 'qa'], 'review_loop', 'Build complexo pede execução com validação crítica.');
17
+ }
18
+ if (normalized.includes('release')) {
19
+ return this.buildRoute(['release', 'review', 'qa'], 'review_loop', 'Release exige quality gate e validação final.');
20
+ }
21
+ return this.buildRoute(['orchestration', 'analysis'], 'single', 'Tarefa simples o suficiente para rota enxuta.');
22
+ }
23
+ buildRoute(capabilities, mode, rationale) {
24
+ let selected = this.registry.findMiniSquad(capabilities);
25
+ if (selected.length === 0) {
26
+ selected = this.registry.findPrioritySet().slice(0, 4);
27
+ }
28
+ return {
29
+ mode,
30
+ capabilities,
31
+ agents: selected,
32
+ rationale
33
+ };
34
+ }
35
+ }
36
+ exports.CapabilityRouter = CapabilityRouter;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CommandLanguage = void 0;
4
+ class CommandLanguage {
5
+ parse(input) {
6
+ const trimmed = input.trim();
7
+ if (trimmed.startsWith('/')) {
8
+ const parts = trimmed.slice(1).split(/\s+/).filter(Boolean);
9
+ return {
10
+ kind: 'slash',
11
+ command: parts[0],
12
+ subcommand: parts[1],
13
+ args: parts.slice(2)
14
+ };
15
+ }
16
+ const mentionMatch = trimmed.match(/^@([a-zA-Z0-9._-]+)(?:\s+(.*))?$/);
17
+ if (mentionMatch) {
18
+ return {
19
+ kind: 'mention',
20
+ target: mentionMatch[1],
21
+ args: mentionMatch[2] ? [mentionMatch[2]] : []
22
+ };
23
+ }
24
+ return { kind: 'none' };
25
+ }
26
+ }
27
+ exports.CommandLanguage = CommandLanguage;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CommandRouter = void 0;
4
+ const AgentRegistry_1 = require("./AgentRegistry");
5
+ const SquadRegistry_1 = require("./SquadRegistry");
6
+ const SkillRegistryV2_1 = require("./SkillRegistryV2");
7
+ const OrgStructure_1 = require("./OrgStructure");
8
+ const ExecutionBoard_1 = require("./ExecutionBoard");
9
+ const RoleHandoff_1 = require("./RoleHandoff");
10
+ const CadenceEngine_1 = require("./CadenceEngine");
11
+ class CommandRouter {
12
+ agents = new AgentRegistry_1.AgentRegistry();
13
+ squads = new SquadRegistry_1.SquadRegistry();
14
+ skills = new SkillRegistryV2_1.SkillRegistryV2();
15
+ org = new OrgStructure_1.OrgStructure();
16
+ board = new ExecutionBoard_1.ExecutionBoard();
17
+ handoffs = new RoleHandoff_1.RoleHandoff();
18
+ cadence = new CadenceEngine_1.CadenceEngine();
19
+ route(parsed) {
20
+ if (parsed.kind === 'slash') {
21
+ switch (parsed.command) {
22
+ case 'status':
23
+ return 'Use `openlife system status` ou `openlife system doctor-world` para diagnóstico do sistema.';
24
+ case 'doctor':
25
+ return 'Use `openlife system doctor` ou `openlife system doctor-world`.\n';
26
+ case 'bootstrap':
27
+ return 'Use `openlife system bootstrap-world` para bootstrap world-class.';
28
+ case 'skills':
29
+ return this.skills.all().slice(0, 20).map(s => `- ${s.id}`).join('\n');
30
+ case 'squads':
31
+ return this.squads.all().slice(0, 20).map(s => `- ${s.id}`).join('\n');
32
+ case 'agents':
33
+ return this.agents.all().slice(0, 20).map(a => `- ${a.id}`).join('\n');
34
+ case 'memory':
35
+ return 'Use `openlife memory status`, `provider-list`, `provider-use` ou `test`.';
36
+ case 'benchmark':
37
+ return 'Use `openlife benchmark run`, `compare` ou `report`.';
38
+ case 'swarm':
39
+ return 'Use `openlife swarm run` ou `openlife swarm consensus-test`.';
40
+ case 'org':
41
+ return this.org.all().map(r => `- ${r.id}: ${r.title}`).join('\n');
42
+ case 'board':
43
+ return this.board.getAll().slice(0, 20).map(item => `- [${item.status}] ${item.id} (${item.ownerRole})`).join('\n') || 'Execution board vazio.';
44
+ case 'handoff':
45
+ return this.handoffs.getAll().slice(0, 20).map(item => `- ${item.fromRole} -> ${item.toRole} [${item.status}] ${item.missionId}`).join('\n') || 'Sem handoffs.';
46
+ case 'cadence':
47
+ return this.cadence.getAll().slice(0, 20).map(item => `- ${item.kind} [${item.status}] ${item.title}`).join('\n') || 'Sem eventos de cadence.';
48
+ case 'consent':
49
+ return 'Use `openlife governance consent destructive <userId>` para liberar ações destrutivas por janela curta.';
50
+ default:
51
+ return `Comando /${parsed.command} ainda não reconhecido.`;
52
+ }
53
+ }
54
+ if (parsed.kind === 'mention' && parsed.target) {
55
+ const target = parsed.target;
56
+ const agent = this.agents.all().find(a => a.id === target || a.name.toLowerCase() === target.toLowerCase());
57
+ if (agent)
58
+ return `Agente resolvido: ${agent.id} (${agent.role})`;
59
+ const squad = this.squads.all().find(s => s.id === target);
60
+ if (squad)
61
+ return `Squad resolvida: ${squad.id} (${squad.domain})`;
62
+ const skill = this.skills.all().find(s => s.id === target);
63
+ if (skill)
64
+ return `Skill resolvida: ${skill.id}`;
65
+ return `@${target} não foi resolvido em agente, squad ou skill.`;
66
+ }
67
+ return null;
68
+ }
69
+ }
70
+ exports.CommandRouter = CommandRouter;