@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.
- package/INSTALL.md +266 -0
- package/LICENSE +21 -0
- package/README.md +142 -0
- package/bin/openlife.js +3 -0
- package/dist/admin_panel_server.js +66 -0
- package/dist/cli/AgentManager.js +109 -0
- package/dist/cli/AutonomousInstaller.js +134 -0
- package/dist/cli/DreamOrganizer.js +88 -0
- package/dist/cli/HostInstaller.js +426 -0
- package/dist/cli/InstallBanner.js +16 -0
- package/dist/cli/InstallFlow.js +256 -0
- package/dist/cli/InstallHeadless.js +47 -0
- package/dist/cli/InstallModules.js +148 -0
- package/dist/cli/InstallStateStore.js +75 -0
- package/dist/cli/InstallWizard.js +364 -0
- package/dist/cli/ProfileManager.js +163 -0
- package/dist/cli/SystemInstaller.js +89 -0
- package/dist/cli/WorldClassCommands.js +208 -0
- package/dist/design/DesignMdImporter.js +82 -0
- package/dist/design/DesignMdMode.js +93 -0
- package/dist/design/DesignMdRegistry.js +67 -0
- package/dist/index.js +2575 -0
- package/dist/memory/ConversationMemory.js +33 -0
- package/dist/memory/LocalMemoryProvider.js +86 -0
- package/dist/memory/Mem0Provider.js +16 -0
- package/dist/memory/MemoryNamespacePolicy.js +27 -0
- package/dist/memory/MemoryOrchestrator.js +65 -0
- package/dist/memory/MemoryPromotionFlow.js +32 -0
- package/dist/memory/MemoryProvider.js +2 -0
- package/dist/memory/MemoryProviderRegistry.js +27 -0
- package/dist/memory/MemoryRetentionPolicy.js +60 -0
- package/dist/memory/MempalaceProvider.js +72 -0
- package/dist/memory/OmniMemory.js +106 -0
- package/dist/memory/RedisAgentMemoryProvider.js +16 -0
- package/dist/memory/SessionManager.js +86 -0
- package/dist/memory/ZepGraphitiProvider.js +16 -0
- package/dist/orchestrator/AgentRegistry.js +56 -0
- package/dist/orchestrator/AgentScoring.js +82 -0
- package/dist/orchestrator/AgentTeam.js +22 -0
- package/dist/orchestrator/ArbitrationAgent.js +43 -0
- package/dist/orchestrator/ArbitrationScorecard.js +17 -0
- package/dist/orchestrator/AssetPromotionEngine.js +65 -0
- package/dist/orchestrator/AssetReuseRouter.js +63 -0
- package/dist/orchestrator/BenchmarkEngine.js +75 -0
- package/dist/orchestrator/Brain.js +298 -0
- package/dist/orchestrator/CadenceEngine.js +76 -0
- package/dist/orchestrator/CapabilityRouter.js +36 -0
- package/dist/orchestrator/CommandLanguage.js +27 -0
- package/dist/orchestrator/CommandRouter.js +70 -0
- package/dist/orchestrator/ConsequenceForecaster.js +286 -0
- package/dist/orchestrator/CronManager.js +286 -0
- package/dist/orchestrator/DynamicAgentBuilder.js +48 -0
- package/dist/orchestrator/DynamicAgentExecutor.js +15 -0
- package/dist/orchestrator/EnterpriseAgenticCore.js +276 -0
- package/dist/orchestrator/ExecutionBoard.js +86 -0
- package/dist/orchestrator/ExecutionIntent.js +13 -0
- package/dist/orchestrator/ExecutionModePolicy.js +48 -0
- package/dist/orchestrator/ExecutionRouter.js +9 -0
- package/dist/orchestrator/ExecutionState.js +20 -0
- package/dist/orchestrator/ExecutorHealth.js +86 -0
- package/dist/orchestrator/ExternalCatalogRegistry.js +83 -0
- package/dist/orchestrator/Gatekeeper.js +414 -0
- package/dist/orchestrator/Gateway.js +508 -0
- package/dist/orchestrator/GovernanceConsentStore.js +66 -0
- package/dist/orchestrator/GovernanceLayer.js +179 -0
- package/dist/orchestrator/GovernancePolicyStore.js +53 -0
- package/dist/orchestrator/GovernanceScopeLedger.js +134 -0
- package/dist/orchestrator/GovernanceScopePolicy.js +67 -0
- package/dist/orchestrator/IntentClassifier.js +45 -0
- package/dist/orchestrator/JobLifecycle.js +91 -0
- package/dist/orchestrator/LearningRouter.js +24 -0
- package/dist/orchestrator/MediaManager.js +92 -0
- package/dist/orchestrator/MemoryCuratorAgent.js +41 -0
- package/dist/orchestrator/MissionState.js +155 -0
- package/dist/orchestrator/ModelManager.js +84 -0
- package/dist/orchestrator/OperatingSystem.js +71 -0
- package/dist/orchestrator/OperationalMemoryStore.js +94 -0
- package/dist/orchestrator/OptimizationLoop.js +72 -0
- package/dist/orchestrator/OrchestrationLoop.js +905 -0
- package/dist/orchestrator/OrgStructure.js +88 -0
- package/dist/orchestrator/OutcomeSimulator.js +46 -0
- package/dist/orchestrator/ParallelOrchestrationLoop.js +36 -0
- package/dist/orchestrator/PerformanceScorecard.js +105 -0
- package/dist/orchestrator/PlannerAgent.js +46 -0
- package/dist/orchestrator/ProcessSandbox.js +129 -0
- package/dist/orchestrator/PromotionPipeline.js +74 -0
- package/dist/orchestrator/PromotionReviewGate.js +11 -0
- package/dist/orchestrator/QueueScheduler.js +260 -0
- package/dist/orchestrator/ReleaseGate.js +36 -0
- package/dist/orchestrator/ReleaseWorkflow.js +68 -0
- package/dist/orchestrator/RemotePublisher.js +139 -0
- package/dist/orchestrator/ReuseEngine.js +89 -0
- package/dist/orchestrator/ReviewerAgent.js +49 -0
- package/dist/orchestrator/RoleHandoff.js +65 -0
- package/dist/orchestrator/RuntimeHealthMonitor.js +143 -0
- package/dist/orchestrator/RuntimePolicy.js +105 -0
- package/dist/orchestrator/RuntimeProbe.js +97 -0
- package/dist/orchestrator/RuntimeRegistry.js +73 -0
- package/dist/orchestrator/SandboxPolicy.js +22 -0
- package/dist/orchestrator/SecurityDownloadGuard.js +169 -0
- package/dist/orchestrator/SecurityEventStore.js +58 -0
- package/dist/orchestrator/ServiceCompletionPolicy.js +36 -0
- package/dist/orchestrator/ServiceState.js +195 -0
- package/dist/orchestrator/SkillCreator.js +404 -0
- package/dist/orchestrator/SkillLearningLoop.js +57 -0
- package/dist/orchestrator/SkillManager.js +75 -0
- package/dist/orchestrator/SkillNetwork.js +29 -0
- package/dist/orchestrator/SkillRegistryV2.js +28 -0
- package/dist/orchestrator/SkillScoring.js +70 -0
- package/dist/orchestrator/SquadAutoCreator.js +64 -0
- package/dist/orchestrator/SquadCreator.js +727 -0
- package/dist/orchestrator/SquadRegistry.js +28 -0
- package/dist/orchestrator/SquadRouter.js +33 -0
- package/dist/orchestrator/SquadScoring.js +70 -0
- package/dist/orchestrator/SubagentLifecycle.js +90 -0
- package/dist/orchestrator/SynthesizerAgent.js +48 -0
- package/dist/orchestrator/SystemDoctor.js +224 -0
- package/dist/orchestrator/TaskExecutor.js +422 -0
- package/dist/orchestrator/TeammateBoard.js +61 -0
- package/dist/orchestrator/TestHarness.js +184 -0
- package/dist/orchestrator/VoiceManager.js +203 -0
- package/dist/orchestrator/VoiceRouter.js +89 -0
- package/dist/orchestrator/capability/CapabilityGenesisEngine.js +278 -0
- package/dist/orchestrator/capability/CapabilityPackParser.js +223 -0
- package/dist/orchestrator/capability/CapabilityPackSchema.js +62 -0
- package/dist/orchestrator/capability/CapabilityPackState.js +163 -0
- package/dist/orchestrator/providers/AgentProvider.js +2 -0
- package/dist/orchestrator/providers/CapabilityProvider.js +12 -0
- package/dist/orchestrator/providers/CloudAgentProvider.js +55 -0
- package/dist/orchestrator/providers/CloudSkillProvider.js +55 -0
- package/dist/orchestrator/providers/CloudSquadProvider.js +55 -0
- package/dist/orchestrator/providers/CompositeAgentProvider.js +16 -0
- package/dist/orchestrator/providers/CompositeCapabilityProvider.js +25 -0
- package/dist/orchestrator/providers/CompositeSkillProvider.js +16 -0
- package/dist/orchestrator/providers/CompositeSquadProvider.js +16 -0
- package/dist/orchestrator/providers/CompositeWorkflowProvider.js +46 -0
- package/dist/orchestrator/providers/FileAgentProvider.js +105 -0
- package/dist/orchestrator/providers/FileCapabilityProvider.js +106 -0
- package/dist/orchestrator/providers/FileSkillProvider.js +65 -0
- package/dist/orchestrator/providers/FileSquadProvider.js +69 -0
- package/dist/orchestrator/providers/FileWorkflowProvider.js +103 -0
- package/dist/orchestrator/providers/SkillProvider.js +2 -0
- package/dist/orchestrator/providers/SquadProvider.js +2 -0
- package/dist/orchestrator/toolset/ToolsetGuard.js +69 -0
- package/dist/orchestrator/toolset/ToolsetRegistry.js +65 -0
- package/dist/orchestrator/toolset/ToolsetSchema.js +21 -0
- package/dist/orchestrator/util/AtomicWriter.js +204 -0
- package/dist/orchestrator/util/DistributedLock.js +232 -0
- package/dist/orchestrator/util/TemplateRenderer.js +87 -0
- package/dist/orchestrator/util/WatchdogHeartbeat.js +116 -0
- package/dist/orchestrator/workflow/ConditionParser.js +232 -0
- package/dist/orchestrator/workflow/WorkflowEngine.js +379 -0
- package/dist/orchestrator/workflow/WorkflowParser.js +368 -0
- package/dist/orchestrator/workflow/WorkflowSchema.js +65 -0
- package/dist/orchestrator/workflow/WorkflowState.js +11 -0
- package/dist/reversa/ReversaAgent.js +134 -0
- package/dist/reversa/ReversaContracts.js +62 -0
- package/dist/reversa/ReversaExecutors.js +65 -0
- package/dist/skills/SkillRegistry.js +71 -0
- package/dist/squads/SquadManager.js +87 -0
- package/dist/test_admin_teams_networks.js +54 -0
- package/dist/test_agent_team_skill_network.js +15 -0
- package/dist/test_aiobuilder_cli_parity.js +169 -0
- package/dist/test_ask_exit.js +73 -0
- package/dist/test_atomic_writer.js +209 -0
- package/dist/test_autonomous_soak.js +141 -0
- package/dist/test_benchmark_engine.js +41 -0
- package/dist/test_brain_error_diagnostics.js +51 -0
- package/dist/test_brain_fallback_chain.js +93 -0
- package/dist/test_capability_genesis_engine.js +225 -0
- package/dist/test_capability_pack_schema.js +214 -0
- package/dist/test_catalog_quality.js +150 -0
- package/dist/test_cli_crud_roundtrip.js +154 -0
- package/dist/test_cli_diagnostics.js +131 -0
- package/dist/test_cli_doc_parity.js +126 -0
- package/dist/test_cli_help_surface.js +106 -0
- package/dist/test_cli_service_commands.js +83 -0
- package/dist/test_consequence_forecast_brain.js +165 -0
- package/dist/test_consequence_forecaster.js +24 -0
- package/dist/test_conversation_memory.js +36 -0
- package/dist/test_create_entities.js +54 -0
- package/dist/test_creator_placeholders_completed.js +177 -0
- package/dist/test_cron_manager.js +123 -0
- package/dist/test_daemon_sigterm.js +72 -0
- package/dist/test_deep_research_capability.js +87 -0
- package/dist/test_designmd_import_registry.js +16 -0
- package/dist/test_designmd_mode.js +50 -0
- package/dist/test_designmd_mode_workspace.js +13 -0
- package/dist/test_dist_templates_layout.js +135 -0
- package/dist/test_distributed_lock.js +201 -0
- package/dist/test_distribution_installability.js +67 -0
- package/dist/test_doctor_sandbox_check.js +44 -0
- package/dist/test_dream_organizer.js +25 -0
- package/dist/test_dual_mode.js +15 -0
- package/dist/test_enterprise_agentic_core.js +128 -0
- package/dist/test_forecast_brain_wiring.js +87 -0
- package/dist/test_gateway_telegram_guardrails.js +52 -0
- package/dist/test_governance.js +34 -0
- package/dist/test_governance_advanced.js +75 -0
- package/dist/test_governance_scope_ledger.js +147 -0
- package/dist/test_governance_v13_policies.js +44 -0
- package/dist/test_guided_creator_cli.js +100 -0
- package/dist/test_host_install_e2e.js +324 -0
- package/dist/test_host_installer.js +259 -0
- package/dist/test_host_installers_gemini_codex.js +95 -0
- package/dist/test_host_uninstaller.js +295 -0
- package/dist/test_install_flow.js +70 -0
- package/dist/test_install_flow_host_validation.js +143 -0
- package/dist/test_install_wizard.js +272 -0
- package/dist/test_integration_gemini_live.js +95 -0
- package/dist/test_integration_http_trigger_live.js +154 -0
- package/dist/test_integration_telegram_live.js +102 -0
- package/dist/test_job_lifecycle.js +16 -0
- package/dist/test_memory_orchestrator.js +33 -0
- package/dist/test_memory_promotion.js +36 -0
- package/dist/test_memory_retention.js +37 -0
- package/dist/test_mission_checkpoint.js +204 -0
- package/dist/test_multi_host_docs_parity.js +125 -0
- package/dist/test_openlife_auto_creator_routing.js +69 -0
- package/dist/test_openlife_evolution_surface.js +77 -0
- package/dist/test_openlife_gatekeeper_routing.js +15 -0
- package/dist/test_openlife_routing_surface.js +27 -0
- package/dist/test_openlife_runtime_source_truth.js +25 -0
- package/dist/test_operating_system.js +45 -0
- package/dist/test_optimization_loop.js +38 -0
- package/dist/test_orchestration_assets_lifecycle.js +78 -0
- package/dist/test_outcome_simulator.js +38 -0
- package/dist/test_performance_latency.js +215 -0
- package/dist/test_performance_scorecard.js +38 -0
- package/dist/test_phase1_check_exit.js +103 -0
- package/dist/test_phase6_board.js +31 -0
- package/dist/test_phase6_cadence.js +29 -0
- package/dist/test_phase6_ops.js +37 -0
- package/dist/test_post_mission_evaluation.js +190 -0
- package/dist/test_process_sandbox.js +88 -0
- package/dist/test_profile_toolset_mcp.js +125 -0
- package/dist/test_queue_scheduler.js +239 -0
- package/dist/test_release_gate.js +23 -0
- package/dist/test_remote_publish.js +193 -0
- package/dist/test_reversa_contracts_e2e.js +48 -0
- package/dist/test_reversa_export_and_strict.js +51 -0
- package/dist/test_reversa_full_execution.js +12 -0
- package/dist/test_reversa_lite.js +9 -0
- package/dist/test_royal_stack_golden.js +179 -0
- package/dist/test_runtime_health_backoff.js +154 -0
- package/dist/test_runtime_policy.js +26 -0
- package/dist/test_runtime_probe.js +19 -0
- package/dist/test_runtime_profile_oauth_only.js +262 -0
- package/dist/test_runtime_registry.js +11 -0
- package/dist/test_security_download_and_scan.js +103 -0
- package/dist/test_security_download_guard.js +14 -0
- package/dist/test_service_command_surface.js +12 -0
- package/dist/test_service_completion_policy.js +32 -0
- package/dist/test_service_guardrails_delete.js +12 -0
- package/dist/test_service_mode_explicit_only.js +174 -0
- package/dist/test_sources_import_ref.js +46 -0
- package/dist/test_sources_scaffold.js +43 -0
- package/dist/test_squad_skill_creator.js +305 -0
- package/dist/test_squad_skill_design_llm.js +176 -0
- package/dist/test_subsystems_org_state.js +271 -0
- package/dist/test_subsystems_promotion_memory_assets.js +343 -0
- package/dist/test_subsystems_routing_governance.js +234 -0
- package/dist/test_task_executor_sandbox_optin.js +127 -0
- package/dist/test_teammate_learning.js +15 -0
- package/dist/test_telegram_delete_guardrail.js +21 -0
- package/dist/test_toolset_enforcement.js +188 -0
- package/dist/test_trigger_basic_auth.js +112 -0
- package/dist/test_util/doc_parity.js +120 -0
- package/dist/test_v15_e2e_integration.js +207 -0
- package/dist/test_watchdog_heartbeat.js +152 -0
- package/dist/test_workflow_condition_parser.js +63 -0
- package/dist/test_workflow_e2e.js +240 -0
- package/dist/test_workflow_engine.js +330 -0
- package/dist/test_workflow_parser.js +245 -0
- package/dist/test_workflow_schema_backward_compat.js +197 -0
- package/dist-templates/README.md +91 -0
- package/dist-templates/claude-code/agents/openlife-atlas.md +52 -0
- package/dist-templates/claude-code/agents/openlife-forge.md +42 -0
- package/dist-templates/claude-code/agents/openlife-genesis.md +59 -0
- package/dist-templates/claude-code/agents/openlife-lyra.md +40 -0
- package/dist-templates/claude-code/agents/openlife-maestro.md +45 -0
- package/dist-templates/claude-code/commands/openlife/ask.md +14 -0
- package/dist-templates/claude-code/commands/openlife/doctor.md +19 -0
- package/dist-templates/claude-code/commands/openlife/dream.md +20 -0
- package/dist-templates/claude-code/commands/openlife/status.md +14 -0
- package/dist-templates/claude-code/mcp/openlife-orchestrator.json +46 -0
- package/dist-templates/codex/README.md +7 -0
- package/dist-templates/codex/agents/openlife-atlas.md +52 -0
- package/dist-templates/codex/agents/openlife-forge.md +42 -0
- package/dist-templates/codex/agents/openlife-genesis.md +59 -0
- package/dist-templates/codex/agents/openlife-lyra.md +40 -0
- package/dist-templates/codex/agents/openlife-maestro.md +45 -0
- package/dist-templates/codex/commands/openlife/ask.md +14 -0
- package/dist-templates/codex/commands/openlife/doctor.md +19 -0
- package/dist-templates/codex/commands/openlife/dream.md +20 -0
- package/dist-templates/codex/commands/openlife/status.md +14 -0
- package/dist-templates/codex/mcp/openlife-orchestrator.json +46 -0
- package/dist-templates/gemini-cli/README.md +8 -0
- package/dist-templates/gemini-cli/agents/openlife-atlas.md +52 -0
- package/dist-templates/gemini-cli/agents/openlife-forge.md +42 -0
- package/dist-templates/gemini-cli/agents/openlife-genesis.md +59 -0
- package/dist-templates/gemini-cli/agents/openlife-lyra.md +40 -0
- package/dist-templates/gemini-cli/agents/openlife-maestro.md +45 -0
- package/dist-templates/gemini-cli/commands/openlife/ask.md +14 -0
- package/dist-templates/gemini-cli/commands/openlife/doctor.md +19 -0
- package/dist-templates/gemini-cli/commands/openlife/dream.md +20 -0
- package/dist-templates/gemini-cli/commands/openlife/status.md +14 -0
- package/dist-templates/gemini-cli/mcp/openlife-orchestrator.json +46 -0
- package/dist-templates/skill-template/README.md +34 -0
- package/dist-templates/skill-template/SKILL.md.template +59 -0
- package/dist-templates/squad-template/README.md +82 -0
- package/dist-templates/squad-template/SQUAD.md.template +51 -0
- package/dist-templates/squad-template/agent-template.md +51 -0
- package/dist-templates/squad-template/checklist-template.md +25 -0
- package/dist-templates/squad-template/task-template.md +36 -0
- package/dist-templates/workflows/PORTED_WORKFLOWS.md +60 -0
- package/dist-templates/workflows/brownfield-discovery.yaml +137 -0
- package/dist-templates/workflows/greenfield-fullstack.yaml +132 -0
- package/dist-templates/workflows/qa-loop.yaml +125 -0
- package/dist-templates/workflows/story-development-cycle.yaml +80 -0
- package/docs/CHANGELOG_FEATURE_ROLLOUT_DESIGNMD.md +43 -0
- package/docs/EXTERNAL_SOURCES_AND_SECURITY_GUARD.md +33 -0
- package/docs/OPENLIFE_AUDIT_2026-05-06.md +170 -0
- package/docs/OPENLIFE_CONSOLIDATED_PLAN_2026-05-06.md +299 -0
- package/docs/OPENLIFE_DUAL_MODE_IMPLEMENTATION_PLAN.md +205 -0
- package/docs/OPENLIFE_EVOLUTION_SURFACE_2026-05-07.md +53 -0
- package/docs/OPENLIFE_SKILLS_IMPORT_2026-05-07.json +223 -0
- package/docs/OPENLIFE_SQUADS_IMPORT_2026-05-07.json +184 -0
- package/docs/PAPERCLIP_OPENLIFE_INVESTIGATION.md +85 -0
- package/docs/README.md +28 -0
- package/docs/RELEASE_ORGANIZATION_PLAN.md +164 -0
- package/docs/audit/CLI-EXECUTION-RESULTS.md +113 -0
- package/docs/audit/CLI-MATRIX.md +556 -0
- package/docs/audit/DOC-PARITY-GAPS.md +351 -0
- package/docs/audit/ORCHESTRATOR-MATRIX.md +136 -0
- package/docs/audit/TEST-COVERAGE-GAPS.md +334 -0
- package/docs/audit/integrations/SKIPPED.md +101 -0
- package/docs/autonomous-install.md +79 -0
- package/docs/capability-genesis.md +137 -0
- package/docs/capability-pack-schema.md +157 -0
- package/docs/commands.md +82 -0
- package/docs/deep-research-capability.md +114 -0
- package/docs/development/typescript-conventions.md +95 -0
- package/docs/host-installers.md +68 -0
- package/docs/install/aiobuilder.md +70 -0
- package/docs/install/claude-code.md +83 -0
- package/docs/install/codex.md +64 -0
- package/docs/install/gemini-cli.md +64 -0
- package/docs/install/runtime-profiles.md +83 -0
- package/docs/openlife-agent-os-blueprint.md +114 -0
- package/docs/openlife-install-backlog.md +115 -0
- package/docs/openlife-install-spec.md +306 -0
- package/docs/operations/CLOUD_CUTOVER_AUDIT.md +37 -0
- package/docs/operations/PHASE_PROGRESS_CONTINUATION.md +24 -0
- package/docs/performance-benchmarks.md +83 -0
- package/docs/planning/v1.3-capability-genesis.md +157 -0
- package/docs/plans/2026-05-05-admin-interface-professional-dark-premium-plan.md +84 -0
- package/docs/plans/2026-05-05-openlife-autonomous-domain-marketplace-masterplan.md +122 -0
- package/docs/quickstart.md +60 -0
- package/docs/release-process.md +236 -0
- package/docs/roadmap/OPENLIFE_MASTER_PLAN_CLOUD_V3.md +97 -0
- package/docs/sandboxing-research.md +117 -0
- package/docs/stories/epic-feature-audit/1.1.story.md +84 -0
- package/docs/stories/epic-feature-audit/1.2.story.md +102 -0
- package/docs/stories/epic-feature-audit/1.3.story.md +93 -0
- package/docs/stories/epic-feature-audit/1.5.story.md +121 -0
- package/docs/stories/epic-feature-audit/1.6.story.md +80 -0
- package/docs/stories/epic-feature-completeness/2.1.story.md +70 -0
- package/docs/stories/epic-feature-completeness/2.2.story.md +49 -0
- package/docs/stories/epic-feature-completeness/2.3.story.md +74 -0
- package/docs/stories/epic-feature-completeness/2.4.story.md +71 -0
- package/docs/stories/epic-feature-completeness/3.1.story.md +56 -0
- package/docs/stories/epic-feature-completeness/3.2.story.md +80 -0
- package/docs/stories/epic-feature-completeness/3.3.story.md +68 -0
- package/docs/stories/epic-feature-completeness/3.4.story.md +71 -0
- package/docs/stories/epic-feature-completeness/3.5.story.md +72 -0
- package/docs/stories/epic-feature-completeness/3.6.story.md +69 -0
- package/docs/stories/epic-feature-completeness/3.7.story.md +68 -0
- package/docs/stories/epic-feature-completeness/3.8.story.md +57 -0
- package/docs/toolset-enforcement.md +122 -0
- package/docs/v1.4-changelog.md +159 -0
- package/docs/v1.5-changelog.md +106 -0
- package/docs/v1.5-roadmap.md +121 -0
- package/docs/v1.6-changelog.md +67 -0
- package/docs/v1.6-roadmap.md +89 -0
- package/docs/v1.7-changelog.md +98 -0
- package/docs/workflow-schema.md +177 -0
- package/package.json +177 -0
- package/scripts/clean-test-pollution.js +61 -0
- package/scripts/openlife-agent-start.sh +6 -0
- package/scripts/openlife-agent.service.example +13 -0
- package/scripts/openlife-agent.supervisord.conf.example +8 -0
- package/scripts/openlife-autonomous-install.sh +29 -0
- package/scripts/postinstall-check.sh +37 -0
package/INSTALL.md
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# OpenLife Installation Manual
|
|
2
|
+
|
|
3
|
+
Este manual deixa qualquer usuário pronto para instalar e usar o OpenLife.
|
|
4
|
+
|
|
5
|
+
## Quick start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @openlife/cli
|
|
9
|
+
openlife init
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`openlife init` é o **wizard interativo** recomendado: pergunta profile, host, ordem de modelos LLM, Telegram (autonomous) e doctor, e roda o `InstallFlow` para você. Se já houver instalação prévia (`.openlife/install-manifest.json`), o wizard oferece `reinstall | repair | abort`.
|
|
13
|
+
|
|
14
|
+
Para automação/CI use o caminho não-interativo na seção 5.
|
|
15
|
+
|
|
16
|
+
### Disponibilidade no npm
|
|
17
|
+
|
|
18
|
+
A primeira versão pública (`@openlife/cli@1.6.0`) é publicada via GitHub
|
|
19
|
+
Actions (`.github/workflows/publish.yml`) quando o owner do repositório
|
|
20
|
+
dispara o workflow após registrar o secret `NPM_TOKEN`. Detalhes em
|
|
21
|
+
`docs/release-process.md` seção 8.
|
|
22
|
+
|
|
23
|
+
Se `npm install -g @openlife/cli` retornar **404 Not Found**, o publish
|
|
24
|
+
ainda não foi acionado. Caminhos alternativos enquanto isso:
|
|
25
|
+
|
|
26
|
+
- **Via código-fonte** (seção 8 deste manual) — funciona em qualquer
|
|
27
|
+
máquina com Node 20+ e Git.
|
|
28
|
+
- **Via `npm link` local** — se você está desenvolvendo no próprio
|
|
29
|
+
clone: `git clone … && cd openlife-core && npm install && npm run
|
|
30
|
+
build && npm link`. Depois `openlife --help` resolve para o checkout.
|
|
31
|
+
|
|
32
|
+
Conflito conhecido: se você já fez `npm link` local e depois roda
|
|
33
|
+
`npm install -g @openlife/cli`, o instalador global pode falhar.
|
|
34
|
+
Rode `npm unlink -g @openlife/cli` antes do `install -g`.
|
|
35
|
+
|
|
36
|
+
## 1) Requisitos
|
|
37
|
+
|
|
38
|
+
- Node.js **20+**
|
|
39
|
+
- npm **10+**
|
|
40
|
+
- Git (para instalação por fonte)
|
|
41
|
+
|
|
42
|
+
Verificação:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
node -v
|
|
46
|
+
npm -v
|
|
47
|
+
git --version
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## 2) Hosts suportados
|
|
51
|
+
|
|
52
|
+
OpenLife instala artefatos no host CLI escolhido. Cada host tem um documento dedicado em `docs/install/`.
|
|
53
|
+
|
|
54
|
+
| Host | Status | Detecção (env var) | Artefatos instalados |
|
|
55
|
+
|--------------|---------------------------------|------------------------------------------|-------------------------------------------------------------------------------------|
|
|
56
|
+
| `claude-code`| **Supported (v1.0)** | `CLAUDECODE` ou `CLAUDE_PROJECT_DIR` | `.claude/agents/openlife-*.md`, `.claude/commands/openlife/*.md`, MCP staged |
|
|
57
|
+
| `gemini-cli` | Reserved for v1.1 follow-up | `GEMINI_CONFIG_DIR` | Nenhum no host — `.openlife/` é criado; install retorna `HOST_NOT_YET_SUPPORTED` |
|
|
58
|
+
| `codex` | Reserved for v1.1 follow-up | `CODEX_HOME` | Nenhum no host — `.openlife/` é criado; install retorna `HOST_NOT_YET_SUPPORTED` |
|
|
59
|
+
|
|
60
|
+
**Degradação graciosa:** escolher `gemini-cli` ou `codex` não trava o setup. O `InstallFlow` captura `HostNotYetSupportedError` e segue: `.openlife/` (state dir) ainda é provisionado, e o resultado reporta `hostInstall: { ok: false, reason: 'host_not_yet_supported' }` em vez de abortar.
|
|
61
|
+
|
|
62
|
+
Documentação por host:
|
|
63
|
+
|
|
64
|
+
- `docs/install/claude-code.md`
|
|
65
|
+
- `docs/install/gemini-cli.md`
|
|
66
|
+
- `docs/install/codex.md`
|
|
67
|
+
|
|
68
|
+
## 3) Detecção automática de host
|
|
69
|
+
|
|
70
|
+
Se você não passar `--host`, o `InstallFlow.detectHostFromEnv()` infere a partir do ambiente (ordem de precedência):
|
|
71
|
+
|
|
72
|
+
1. `CLAUDECODE` ou `CLAUDE_PROJECT_DIR` → `claude-code`
|
|
73
|
+
2. `GEMINI_CONFIG_DIR` → `gemini-cli`
|
|
74
|
+
3. `CODEX_HOME` → `codex`
|
|
75
|
+
4. Sem match → default `claude-code`
|
|
76
|
+
|
|
77
|
+
Para forçar um host independentemente do ambiente, use `--host <name>`.
|
|
78
|
+
|
|
79
|
+
## 4) Profiles: `framework` vs `autonomous`
|
|
80
|
+
|
|
81
|
+
| Profile | Quando usar | O que muda |
|
|
82
|
+
|--------------|----------------------------------------------------------------------------------------------|------------------------------------------------------------------------------|
|
|
83
|
+
| `framework` | Uso interativo local — operador no terminal chamando comandos. | Não inicia daemon, não exige `TELEGRAM_BOT_TOKEN`. |
|
|
84
|
+
| `autonomous` | Runtime contínuo — daemon + Telegram gateway + governance always-on. | Exige `TELEGRAM_BOT_TOKEN`; o wizard checa e avisa se ausente. |
|
|
85
|
+
|
|
86
|
+
### Runtime profiles (advanced)
|
|
87
|
+
|
|
88
|
+
Além do profile de instalação (`framework` vs `autonomous`), existe um profile **runtime** opcional controlado por `OPENLIFE_RUNTIME_PROFILE`. Hoje só há um valor suportado:
|
|
89
|
+
|
|
90
|
+
| `OPENLIFE_RUNTIME_PROFILE` | Efeito |
|
|
91
|
+
|----------------------------|--------|
|
|
92
|
+
| `oauth-only` (case-insensitive) | `openlife doctor world` rebaixa quatro checks para **`info`** quando falham: `cli:ollama` (default: `blocker`) e `env:OPENAI_API_KEY` / `env:GEMINI_API_KEY` / `env:ANTHROPIC_API_KEY` (default: `warning`). |
|
|
93
|
+
|
|
94
|
+
Use quando o operador roda exclusivamente via CLIs autenticadas por OAuth (`claude`, `codex`, `gemini`) e não tem API keys nem Ollama local — essas ausências deixam de bloquear o doctor. **É apenas um classificador de severidade**: a fallback chain do `Brain.ts` continua igual; nenhum provider é ligado/desligado. Para detalhes (incluindo exemplo before/after) veja [`docs/install/runtime-profiles.md`](docs/install/runtime-profiles.md).
|
|
95
|
+
|
|
96
|
+
## 5) Instalação não-interativa
|
|
97
|
+
|
|
98
|
+
Para scripts, CI e automação, pule o wizard e use os flags diretos:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Framework + claude-code (caminho mais comum)
|
|
102
|
+
openlife system setup --profile framework --host claude-code
|
|
103
|
+
|
|
104
|
+
# Autonomous + claude-code
|
|
105
|
+
openlife system setup --profile autonomous --host claude-code
|
|
106
|
+
|
|
107
|
+
# Forçar host reservado (state dir é criado, host install é skipped)
|
|
108
|
+
openlife system setup --profile framework --host gemini-cli
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Explicação dos flags:
|
|
112
|
+
|
|
113
|
+
- `--profile <framework|autonomous>` — required. Veja seção 4.
|
|
114
|
+
- `--host <claude-code|gemini-cli|codex>` — opcional. Sem ele, usa `detectHostFromEnv()` → default `claude-code`.
|
|
115
|
+
- O comando imprime um JSON com o resultado por etapa (`stateDir`, `hostInstall`, `manifestPath`) para que CI processe.
|
|
116
|
+
|
|
117
|
+
## 6) Instalação recomendada (npm global)
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm install -g @openlife/cli
|
|
121
|
+
openlife --help
|
|
122
|
+
openlife init # ou: openlife system setup --profile framework --host claude-code
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 7) Instalação sem global (npx)
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
npx @openlife/cli --help
|
|
129
|
+
npx @openlife/cli init
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## 8) Instalação via código-fonte
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
git clone https://github.com/GOOODZ/openlife-core.git
|
|
136
|
+
cd openlife-core
|
|
137
|
+
npm install
|
|
138
|
+
npm run build
|
|
139
|
+
node bin/openlife.js init
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## 9) Modo autônomo (após install)
|
|
143
|
+
|
|
144
|
+
### Instalação de artefatos do daemon
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
openlife agent install
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Start manual
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
openlife agent start
|
|
154
|
+
openlife agent status
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Bundle automatizado (local/WSL/Linux)
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
./scripts/openlife-autonomous-install.sh
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## 10) Uninstall reversível
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
openlife system uninstall --host claude-code
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Removido** (apenas artefatos OpenLife):
|
|
170
|
+
- `.claude/agents/openlife-*.md` — somente arquivos com prefixo `openlife-`, agentes do usuário ficam intactos
|
|
171
|
+
- `.claude/commands/openlife/` — diretório inteiro (namespace nosso)
|
|
172
|
+
- MCP snippet staged
|
|
173
|
+
|
|
174
|
+
**Preservado** (intencionalmente, para evitar perda de dados):
|
|
175
|
+
- `.openlife/` — runtime state, missions, governance consents, learning, pilots
|
|
176
|
+
- `.catalog/` — catálogos runtime de agents/skills/squads
|
|
177
|
+
- `~/.claude.json` — config global do Claude Code (operator merges manualmente)
|
|
178
|
+
|
|
179
|
+
Para começar do zero: `rm -rf .openlife/` após o uninstall.
|
|
180
|
+
|
|
181
|
+
## 11) Linux server (systemd)
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
sudo cp scripts/openlife-agent.service.example /etc/systemd/system/openlife-agent.service
|
|
185
|
+
sudo systemctl daemon-reload
|
|
186
|
+
sudo systemctl enable --now openlife-agent
|
|
187
|
+
sudo systemctl status openlife-agent
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## 12) Fallback (Supervisor)
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
sudo supervisorctl reread
|
|
194
|
+
sudo supervisorctl update
|
|
195
|
+
sudo supervisorctl status
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Use o template: `scripts/openlife-agent.supervisord.conf.example`.
|
|
199
|
+
|
|
200
|
+
## 13) PATH e pós-instalação
|
|
201
|
+
|
|
202
|
+
O pacote executa checks automáticos no `postinstall`:
|
|
203
|
+
- valida Node/npm no PATH
|
|
204
|
+
- avisa sobre PATH global npm
|
|
205
|
+
- alerta sobre dependências opcionais (`claude`, `codex`, `gemini`)
|
|
206
|
+
|
|
207
|
+
Descobrir diretório de binários globais npm:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
npm bin -g
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## 14) Diagnóstico
|
|
214
|
+
|
|
215
|
+
Após o install, rode:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
openlife system doctor
|
|
219
|
+
openlife system status
|
|
220
|
+
openlife models status
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
No Claude Code (depois de instalar para `claude-code`), use os slash commands:
|
|
224
|
+
|
|
225
|
+
- `/openlife:status`
|
|
226
|
+
- `/openlife:doctor`
|
|
227
|
+
- `/openlife:ask`
|
|
228
|
+
- `/openlife:dream`
|
|
229
|
+
|
|
230
|
+
## 15) Troubleshooting
|
|
231
|
+
|
|
232
|
+
### Problema 1 — Missing API keys (`OPENAI_API_KEY` / `ANTHROPIC_API_KEY` / `GEMINI_API_KEY`)
|
|
233
|
+
|
|
234
|
+
`openlife system doctor` reporta keys ausentes. Crie `.env` na raiz do projeto:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
OPENAI_API_KEY=sk-...
|
|
238
|
+
ANTHROPIC_API_KEY=sk-ant-...
|
|
239
|
+
GEMINI_API_KEY=...
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
O wizard `openlife init` não bloqueia por falta de keys (`framework` profile roda com fallback), mas o autonomous profile precisa de pelo menos um provider funcional + Telegram.
|
|
243
|
+
|
|
244
|
+
### Problema 2 — Host não detectado / wizard escolhe o errado
|
|
245
|
+
|
|
246
|
+
Sintoma: `openlife init` propõe `claude-code` quando você queria `gemini-cli` (ou vice-versa).
|
|
247
|
+
|
|
248
|
+
Causa: env vars ausentes ou conflitantes. Verifique:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
echo $CLAUDECODE $CLAUDE_PROJECT_DIR $GEMINI_CONFIG_DIR $CODEX_HOME
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Solução: passe `--host` explicitamente no caminho não-interativo, ou aceite o default proposto pelo wizard e troque depois com um novo `openlife system setup`.
|
|
255
|
+
|
|
256
|
+
### Problema 3 — Install para `gemini-cli` ou `codex` retorna `skipped`
|
|
257
|
+
|
|
258
|
+
Esperado. Esses hosts estão **reservados para v1.1 follow-up** (ver seção 2). O `.openlife/` ainda é criado e o restante do sistema funciona — só não há agents/commands no host. Quando a Story 3.7 (gemini-cli/codex installers) for shipada, o mesmo comando passa a instalar sem alterações de flags.
|
|
259
|
+
|
|
260
|
+
## 16) Links úteis
|
|
261
|
+
|
|
262
|
+
- README: [README.md](README.md)
|
|
263
|
+
- Per-host docs: [docs/install/claude-code.md](docs/install/claude-code.md), [docs/install/gemini-cli.md](docs/install/gemini-cli.md), [docs/install/codex.md](docs/install/codex.md)
|
|
264
|
+
- Quickstart: [docs/quickstart.md](docs/quickstart.md)
|
|
265
|
+
- Comandos: [docs/commands.md](docs/commands.md)
|
|
266
|
+
- Autônomo: [docs/autonomous-install.md](docs/autonomous-install.md)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Rafa Leão
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# OpenLife CLI
|
|
2
|
+
|
|
3
|
+
OpenLife é um CLI/framework de orquestração com dois modos principais:
|
|
4
|
+
|
|
5
|
+
- **CLI framework**: uso local por terminal, automações e comandos de operador.
|
|
6
|
+
- **Agente autônomo**: runtime contínuo com daemon, Telegram e governança.
|
|
7
|
+
|
|
8
|
+
> OpenLife é separado do Hermes. Hermes pode ajudar a operar/desenvolver OpenLife, mas o runtime do OpenLife não deve depender de `~/.hermes` nem de pastas do Obsidian.
|
|
9
|
+
|
|
10
|
+
## Fonte executável canônica
|
|
11
|
+
|
|
12
|
+
- Código/dev: `D:\VSCODDE-DEV\openlife-core-main`
|
|
13
|
+
- WSL: `/mnt/d/VSCODDE-DEV/openlife-core-main`
|
|
14
|
+
- GitHub: `https://github.com/GOOODZ/openlife-core`
|
|
15
|
+
|
|
16
|
+
Obsidian (`OPENLIFE_PRODUCTION` e `LARA/OPEN-LIFE`) é camada estratégica/documental. Catálogos runtime devem viver no repo/cloud, por exemplo:
|
|
17
|
+
|
|
18
|
+
```txt
|
|
19
|
+
.catalog/agents/
|
|
20
|
+
.catalog/squads/
|
|
21
|
+
.catalog/skills/
|
|
22
|
+
.catalog/mcps/
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
### Caminho recomendado — wizard interativo
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install -g @openlife/cli
|
|
31
|
+
openlife init
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`openlife init` pergunta profile, host, ordem de modelos LLM, Telegram (autonomous) e doctor; depois chama o mesmo `InstallFlow` que o caminho não-interativo. Detalhes completos em [INSTALL.md](INSTALL.md).
|
|
35
|
+
|
|
36
|
+
### Fallback não-interativo (CI / scripts)
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
openlife system setup --profile framework --host claude-code
|
|
40
|
+
# ou
|
|
41
|
+
openlife system setup --profile autonomous --host claude-code
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Hosts suportados
|
|
45
|
+
|
|
46
|
+
| Host | Status | Detecção (env) |
|
|
47
|
+
|--------------|---------------------------------|--------------------------------------|
|
|
48
|
+
| `claude-code`| **Supported (v1.0)** | `CLAUDECODE` ou `CLAUDE_PROJECT_DIR` |
|
|
49
|
+
| `gemini-cli` | Reserved for v1.1 follow-up | `GEMINI_CONFIG_DIR` |
|
|
50
|
+
| `codex` | Reserved for v1.1 follow-up | `CODEX_HOME` |
|
|
51
|
+
|
|
52
|
+
`gemini-cli` e `codex` são aceitos pelo wizard e pelo CLI mas retornam `HOST_NOT_YET_SUPPORTED` no passo de instalação no host — `.openlife/` ainda é criado. Veja [INSTALL.md](INSTALL.md) para o quadro completo e os documentos por host em [docs/install/](docs/install/).
|
|
53
|
+
|
|
54
|
+
## Outros comandos
|
|
55
|
+
|
|
56
|
+
### Subir operação diária
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
openlife up
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Iniciar daemon manualmente
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
openlife start --daemon
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Chat local
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
openlife ask "sua mensagem aqui"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Rodar do código-fonte
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
git clone https://github.com/GOOODZ/openlife-core.git
|
|
78
|
+
cd openlife-core
|
|
79
|
+
npm install
|
|
80
|
+
npm run build
|
|
81
|
+
node bin/openlife.js --help
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Quickstart de validação
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
node bin/openlife.js --help
|
|
88
|
+
node bin/openlife.js status
|
|
89
|
+
node bin/openlife.js doctor
|
|
90
|
+
node bin/openlife.js system doctor
|
|
91
|
+
node bin/openlife.js phase1-check
|
|
92
|
+
node bin/openlife.js agents list
|
|
93
|
+
node bin/openlife.js squads list
|
|
94
|
+
node bin/openlife.js skills list
|
|
95
|
+
node bin/openlife.js mcp status --real
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Testes e qualidade
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npm run build
|
|
102
|
+
npm run test:all
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Testes essenciais individuais:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
npm run test:distribution
|
|
109
|
+
npm run test:orchestration
|
|
110
|
+
npm run test:runtime-source
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Pré-requisitos
|
|
114
|
+
|
|
115
|
+
- Node.js 20+
|
|
116
|
+
- npm 10+
|
|
117
|
+
- CLIs opcionais de execução: `claude`, `codex`, `gemini`
|
|
118
|
+
- Telegram configurado para modo autônomo
|
|
119
|
+
|
|
120
|
+
## Telegram
|
|
121
|
+
|
|
122
|
+
O bot/routing Telegram deve:
|
|
123
|
+
|
|
124
|
+
- validar `TELEGRAM_BOT_TOKEN` antes de iniciar;
|
|
125
|
+
- validar `OPENLIFE_TELEGRAM_ALLOWED_USER_ID` em produção;
|
|
126
|
+
- evitar múltiplos long-pollers com o mesmo token;
|
|
127
|
+
- responder de forma verdadeira, sem fallback mock enganoso.
|
|
128
|
+
|
|
129
|
+
## Troubleshooting rápido
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
openlife doctor
|
|
133
|
+
openlife system doctor
|
|
134
|
+
openlife status
|
|
135
|
+
openlife phase1-check
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Se o comando global não funcionar, rode via repo:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
node bin/openlife.js --help
|
|
142
|
+
```
|
package/bin/openlife.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const express_1 = __importDefault(require("express"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const app = (0, express_1.default)();
|
|
10
|
+
app.use(express_1.default.json());
|
|
11
|
+
function readJson(filePath) {
|
|
12
|
+
if (!fs_1.default.existsSync(filePath))
|
|
13
|
+
return [];
|
|
14
|
+
try {
|
|
15
|
+
return JSON.parse(fs_1.default.readFileSync(filePath, 'utf-8'));
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function writeJson(filePath, payload) {
|
|
22
|
+
fs_1.default.mkdirSync(path_1.default.dirname(filePath), { recursive: true });
|
|
23
|
+
fs_1.default.writeFileSync(filePath, JSON.stringify(payload, null, 2), 'utf-8');
|
|
24
|
+
}
|
|
25
|
+
const catalogDir = path_1.default.join(process.cwd(), '.catalog');
|
|
26
|
+
const teamsFile = path_1.default.join(catalogDir, 'teams.json');
|
|
27
|
+
const networksFile = path_1.default.join(catalogDir, 'skill-networks.json');
|
|
28
|
+
app.get('/api/v1/admin/teams', (_req, res) => {
|
|
29
|
+
res.json({ ok: true, teams: readJson(teamsFile) });
|
|
30
|
+
});
|
|
31
|
+
app.get('/api/v1/admin/networks', (_req, res) => {
|
|
32
|
+
res.json({ ok: true, networks: readJson(networksFile) });
|
|
33
|
+
});
|
|
34
|
+
app.post('/api/v1/admin/teams/upsert', (req, res) => {
|
|
35
|
+
const body = req.body || {};
|
|
36
|
+
if (!body.id)
|
|
37
|
+
return res.status(400).json({ ok: false, error: 'id obrigatório' });
|
|
38
|
+
const arr = readJson(teamsFile);
|
|
39
|
+
const next = { id: String(body.id), domain: String(body.domain || 'general'), description: String(body.description || ''), slaProfile: String(body.slaProfile || 'balanced'), members: Array.isArray(body.members) ? body.members : [] };
|
|
40
|
+
const idx = arr.findIndex((x) => x.id === next.id);
|
|
41
|
+
if (idx >= 0)
|
|
42
|
+
arr[idx] = { ...arr[idx], ...next };
|
|
43
|
+
else
|
|
44
|
+
arr.push(next);
|
|
45
|
+
writeJson(teamsFile, arr);
|
|
46
|
+
res.json({ ok: true, team: next });
|
|
47
|
+
});
|
|
48
|
+
app.post('/api/v1/admin/networks/upsert', (req, res) => {
|
|
49
|
+
const body = req.body || {};
|
|
50
|
+
if (!body.id)
|
|
51
|
+
return res.status(400).json({ ok: false, error: 'id obrigatório' });
|
|
52
|
+
const arr = readJson(networksFile);
|
|
53
|
+
const next = { id: String(body.id), domain: String(body.domain || 'general'), nodes: Array.isArray(body.nodes) ? body.nodes : [] };
|
|
54
|
+
const idx = arr.findIndex((x) => x.id === next.id);
|
|
55
|
+
if (idx >= 0)
|
|
56
|
+
arr[idx] = { ...arr[idx], ...next };
|
|
57
|
+
else
|
|
58
|
+
arr.push(next);
|
|
59
|
+
writeJson(networksFile, arr);
|
|
60
|
+
res.json({ ok: true, network: next });
|
|
61
|
+
});
|
|
62
|
+
app.get('/admin', (_req, res) => {
|
|
63
|
+
res.sendFile(path_1.default.join(process.cwd(), 'src', 'admin_panel.html'));
|
|
64
|
+
});
|
|
65
|
+
const port = Number(process.env.ADMIN_PANEL_PORT || 8091);
|
|
66
|
+
app.listen(port, () => console.log(`[ADMIN_PANEL] running at http://localhost:${port}/admin`));
|
|
@@ -0,0 +1,109 @@
|
|
|
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.AgentManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
class AgentManager {
|
|
40
|
+
root;
|
|
41
|
+
constructor(root = process.cwd()) {
|
|
42
|
+
this.root = root;
|
|
43
|
+
}
|
|
44
|
+
filePath() {
|
|
45
|
+
return path.join(this.root, '.openlife', 'agents.json');
|
|
46
|
+
}
|
|
47
|
+
list() {
|
|
48
|
+
const p = this.filePath();
|
|
49
|
+
if (!fs.existsSync(p))
|
|
50
|
+
return [{ id: 'default', name: 'Lara', isDefault: true }];
|
|
51
|
+
try {
|
|
52
|
+
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return [{ id: 'default', name: 'Lara', isDefault: true }];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
save(list) {
|
|
59
|
+
const p = this.filePath();
|
|
60
|
+
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
61
|
+
fs.writeFileSync(p, JSON.stringify(list, null, 2), 'utf-8');
|
|
62
|
+
}
|
|
63
|
+
ensureDefault(defaultName) {
|
|
64
|
+
const list = this.list();
|
|
65
|
+
const hasDefault = list.some(a => a.isDefault);
|
|
66
|
+
if (!hasDefault)
|
|
67
|
+
list.unshift({ id: 'default', name: defaultName || 'Lara', isDefault: true });
|
|
68
|
+
if (defaultName) {
|
|
69
|
+
const idx = list.findIndex(a => a.isDefault);
|
|
70
|
+
if (idx >= 0)
|
|
71
|
+
list[idx].name = defaultName;
|
|
72
|
+
}
|
|
73
|
+
// Dedup extras by normalized name and avoid collision with default name
|
|
74
|
+
const defaultAgent = list.find(a => a.isDefault);
|
|
75
|
+
const defaultNorm = (defaultAgent?.name || 'lara').trim().toLowerCase();
|
|
76
|
+
const seen = new Set();
|
|
77
|
+
const normalized = [];
|
|
78
|
+
for (const a of list) {
|
|
79
|
+
if (a.isDefault) {
|
|
80
|
+
normalized.push(a);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const key = a.name.trim().toLowerCase();
|
|
84
|
+
if (key === defaultNorm)
|
|
85
|
+
continue;
|
|
86
|
+
if (seen.has(key))
|
|
87
|
+
continue;
|
|
88
|
+
seen.add(key);
|
|
89
|
+
normalized.push(a);
|
|
90
|
+
}
|
|
91
|
+
this.save(normalized);
|
|
92
|
+
return normalized;
|
|
93
|
+
}
|
|
94
|
+
createAdditional(name) {
|
|
95
|
+
const list = this.ensureDefault();
|
|
96
|
+
const normalized = name.trim().toLowerCase();
|
|
97
|
+
const defaultNorm = (list.find(a => a.isDefault)?.name || 'lara').trim().toLowerCase();
|
|
98
|
+
const exists = list.some(a => !a.isDefault && a.name.trim().toLowerCase() === normalized);
|
|
99
|
+
if (exists || normalized === defaultNorm) {
|
|
100
|
+
this.save(list);
|
|
101
|
+
return list;
|
|
102
|
+
}
|
|
103
|
+
const id = `agent-${Date.now()}`;
|
|
104
|
+
list.push({ id, name, isDefault: false });
|
|
105
|
+
this.save(list);
|
|
106
|
+
return list;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.AgentManager = AgentManager;
|