@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
|
@@ -0,0 +1,58 @@
|
|
|
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.SecurityEventStore = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const AtomicWriter_1 = require("./util/AtomicWriter");
|
|
40
|
+
class SecurityEventStore {
|
|
41
|
+
root;
|
|
42
|
+
filePath;
|
|
43
|
+
constructor(root = process.cwd()) {
|
|
44
|
+
this.root = root;
|
|
45
|
+
this.filePath = path.join(this.root, '.artifacts', 'security-events.jsonl');
|
|
46
|
+
fs.mkdirSync(path.dirname(this.filePath), { recursive: true });
|
|
47
|
+
}
|
|
48
|
+
append(event) {
|
|
49
|
+
(0, AtomicWriter_1.appendJsonlAtomic)(this.filePath, event);
|
|
50
|
+
}
|
|
51
|
+
exists() {
|
|
52
|
+
return fs.existsSync(this.filePath);
|
|
53
|
+
}
|
|
54
|
+
path() {
|
|
55
|
+
return this.filePath;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.SecurityEventStore = SecurityEventStore;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServiceCompletionPolicy = void 0;
|
|
4
|
+
class ServiceCompletionPolicy {
|
|
5
|
+
requiredCriteria = [
|
|
6
|
+
'Provisionamento concluído',
|
|
7
|
+
'Integração entre módulos validada',
|
|
8
|
+
'Fluxo ponta-a-ponta testado',
|
|
9
|
+
'Observabilidade mínima registrada',
|
|
10
|
+
'Operação real documentada'
|
|
11
|
+
];
|
|
12
|
+
enforceCriteria(criteria) {
|
|
13
|
+
const merged = [...criteria];
|
|
14
|
+
for (const required of this.requiredCriteria) {
|
|
15
|
+
if (!merged.some((item) => item.toLowerCase() === required.toLowerCase())) {
|
|
16
|
+
merged.push(required);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return merged;
|
|
20
|
+
}
|
|
21
|
+
evaluate(state) {
|
|
22
|
+
const missing = [];
|
|
23
|
+
const attempts = state.attempts || [];
|
|
24
|
+
const successAttempts = attempts.filter((a) => a.status === 'success' || a.status === 'partial').length;
|
|
25
|
+
if (!state.plan || state.plan.length < 3)
|
|
26
|
+
missing.push('plano com etapas suficientes');
|
|
27
|
+
if (!state.successCriteria || state.successCriteria.length < this.requiredCriteria.length)
|
|
28
|
+
missing.push('critérios de serviço completo');
|
|
29
|
+
if (successAttempts < 2)
|
|
30
|
+
missing.push('evidência de execução e validação');
|
|
31
|
+
if (!state.artifacts || state.artifacts.length === 0)
|
|
32
|
+
missing.push('artefatos operacionais');
|
|
33
|
+
return { complete: missing.length === 0, missing };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.ServiceCompletionPolicy = ServiceCompletionPolicy;
|
|
@@ -0,0 +1,195 @@
|
|
|
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.ServiceStateStore = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const AtomicWriter_1 = require("./util/AtomicWriter");
|
|
40
|
+
class ServiceStateStore {
|
|
41
|
+
workspaceId;
|
|
42
|
+
baseDir;
|
|
43
|
+
eventsDir;
|
|
44
|
+
missionsDir;
|
|
45
|
+
constructor(workspaceId = 'default') {
|
|
46
|
+
this.workspaceId = workspaceId;
|
|
47
|
+
this.baseDir = path.join(process.cwd(), '.artifacts', 'workspaces', workspaceId, 'services');
|
|
48
|
+
this.eventsDir = path.join(this.baseDir, 'events');
|
|
49
|
+
this.missionsDir = path.join(process.cwd(), '.artifacts', 'missions');
|
|
50
|
+
fs.mkdirSync(this.baseDir, { recursive: true });
|
|
51
|
+
fs.mkdirSync(this.eventsDir, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
list(limit = 100) {
|
|
54
|
+
return fs.readdirSync(this.baseDir)
|
|
55
|
+
.filter((f) => f.endsWith('.json'))
|
|
56
|
+
.slice(-limit)
|
|
57
|
+
.map((f) => JSON.parse(fs.readFileSync(path.join(this.baseDir, f), 'utf-8')));
|
|
58
|
+
}
|
|
59
|
+
upsertFromMission(state) {
|
|
60
|
+
const trace = state.consequenceThoughtTrace;
|
|
61
|
+
if (!trace)
|
|
62
|
+
return null;
|
|
63
|
+
const serviceId = trace.serviceContext.serviceId;
|
|
64
|
+
const now = new Date().toISOString();
|
|
65
|
+
const filePath = path.join(this.baseDir, `${serviceId}.json`);
|
|
66
|
+
const existing = this.load(filePath);
|
|
67
|
+
const missionIds = Array.from(new Set([...(existing?.missionIds || []), state.taskId]));
|
|
68
|
+
const total = missionIds.length;
|
|
69
|
+
const completed = this.estimateCompletedCount(missionIds);
|
|
70
|
+
const blocked = this.estimateBlockedCount(missionIds);
|
|
71
|
+
const completionRate = total > 0 ? Number((completed / total).toFixed(4)) : undefined;
|
|
72
|
+
const governanceBlockRate = total > 0 ? Number((blocked / total).toFixed(4)) : undefined;
|
|
73
|
+
const fallbackUsed = state.attempts.some((a) => a.role === 'executor' && a.status === 'partial');
|
|
74
|
+
const budget = existing?.budget || { hardStop: false };
|
|
75
|
+
const hardStopTriggered = Boolean(budget.hardStop && budget.monthlyLimitCents && budget.spentCents && budget.spentCents >= budget.monthlyLimitCents);
|
|
76
|
+
const next = {
|
|
77
|
+
workspaceId: this.workspaceId,
|
|
78
|
+
serviceId,
|
|
79
|
+
objective: trace.serviceContext.serviceObjective,
|
|
80
|
+
status: hardStopTriggered ? 'paused' : (state.status === 'failed' ? 'degraded' : 'active'),
|
|
81
|
+
riskProfile: trace.governanceRisk,
|
|
82
|
+
slo: existing?.slo || {},
|
|
83
|
+
kpis: { ...(existing?.kpis || {}), completionRate, governanceBlockRate, fallbackRate: fallbackUsed ? 1 : (existing?.kpis?.fallbackRate ?? 0) },
|
|
84
|
+
budget,
|
|
85
|
+
missionIds,
|
|
86
|
+
latestThoughtTracePath: path.join(process.cwd(), '.artifacts', 'missions', `${state.taskId}.thought-trace.json`),
|
|
87
|
+
createdAt: existing?.createdAt || now,
|
|
88
|
+
updatedAt: now
|
|
89
|
+
};
|
|
90
|
+
(0, AtomicWriter_1.writeJsonAtomic)(filePath, next);
|
|
91
|
+
this.appendEvent(this.buildEvent(existing, next, state));
|
|
92
|
+
if (hardStopTriggered)
|
|
93
|
+
this.appendEvent({ type: 'budget_hard_stop', workspaceId: this.workspaceId, serviceId, taskId: state.taskId, summary: `Budget hard-stop acionado para ${serviceId}.`, at: now });
|
|
94
|
+
return filePath;
|
|
95
|
+
}
|
|
96
|
+
buildEvent(previous, next, state) {
|
|
97
|
+
const base = { workspaceId: this.workspaceId, serviceId: next.serviceId, taskId: state.taskId, at: new Date().toISOString() };
|
|
98
|
+
if (!previous)
|
|
99
|
+
return { type: 'mission_attached', ...base, summary: `Serviço criado e missão anexada (${state.taskId}).` };
|
|
100
|
+
const blocked = state.governanceEvents.some((event) => event.type === 'destructive_action_blocked' || event.type === 'prompt_injection_detected');
|
|
101
|
+
if (blocked)
|
|
102
|
+
return { type: 'governance_blocked', ...base, summary: `Missão ${state.taskId} bloqueada por governança.` };
|
|
103
|
+
if (previous.status !== 'degraded' && next.status === 'degraded')
|
|
104
|
+
return { type: 'service_degraded', ...base, summary: `Serviço degradado após missão ${state.taskId}.` };
|
|
105
|
+
if (previous.status === 'degraded' && next.status === 'active')
|
|
106
|
+
return { type: 'service_recovered', ...base, summary: `Serviço recuperado com missão ${state.taskId}.` };
|
|
107
|
+
return { type: 'mission_attached', ...base, summary: `Missão anexada ao serviço (${state.taskId}).` };
|
|
108
|
+
}
|
|
109
|
+
getById(serviceId) { return this.load(path.join(this.baseDir, `${serviceId}.json`)); }
|
|
110
|
+
setStatus(serviceId, status, reason, taskId = `manual_${Date.now()}`) {
|
|
111
|
+
const current = this.getById(serviceId);
|
|
112
|
+
if (!current)
|
|
113
|
+
return null;
|
|
114
|
+
const next = { ...current, status, updatedAt: new Date().toISOString() };
|
|
115
|
+
(0, AtomicWriter_1.writeJsonAtomic)(path.join(this.baseDir, `${serviceId}.json`), next);
|
|
116
|
+
this.appendEvent({ type: status === 'paused' ? 'service_paused' : status === 'active' ? 'service_resumed' : 'mission_attached', workspaceId: this.workspaceId, serviceId, taskId, summary: reason, at: new Date().toISOString() });
|
|
117
|
+
return next;
|
|
118
|
+
}
|
|
119
|
+
listEvents(serviceId, limit = 50) {
|
|
120
|
+
const eventPath = path.join(this.eventsDir, `${serviceId}.jsonl`);
|
|
121
|
+
if (!fs.existsSync(eventPath))
|
|
122
|
+
return [];
|
|
123
|
+
return fs.readFileSync(eventPath, 'utf-8').trim().split('\n').filter(Boolean).slice(-limit).map((line) => JSON.parse(line));
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Promote a task into a service.
|
|
127
|
+
*
|
|
128
|
+
* v1.3 (Story 2.4) — explicit-only contract:
|
|
129
|
+
* - `actor` is REQUIRED and must not be 'system', 'auto', or ''.
|
|
130
|
+
* Refuses silent promotion by background processes.
|
|
131
|
+
* - `consentScope` is REQUIRED and must equal 'task_promotion'.
|
|
132
|
+
* This pairs with GovernanceConsentStore so promotions can be
|
|
133
|
+
* gated by a per-user consent record in the future (the consent
|
|
134
|
+
* itself is the caller's responsibility — this method only
|
|
135
|
+
* refuses obvious bypasses).
|
|
136
|
+
* - Emits `task_promoted` event with actor + consentScope context.
|
|
137
|
+
*
|
|
138
|
+
* Returns the new ServiceState on success; throws on policy violation.
|
|
139
|
+
*/
|
|
140
|
+
promoteTaskToService(state, serviceId, objective, opts = {}) {
|
|
141
|
+
const actor = (opts.actor || '').trim();
|
|
142
|
+
if (!actor || actor === 'system' || actor === 'auto') {
|
|
143
|
+
const err = new Error(`promoteTaskToService refused: actor must be a human/operator id (got '${actor || '<empty>'}'); silent promotion is forbidden by v1.3 contract`);
|
|
144
|
+
err.code = 'task_promotion_requires_human_actor';
|
|
145
|
+
throw err;
|
|
146
|
+
}
|
|
147
|
+
if (opts.consentScope !== 'task_promotion') {
|
|
148
|
+
const err = new Error(`promoteTaskToService refused: consentScope must equal 'task_promotion' (got '${opts.consentScope ?? '<missing>'}')`);
|
|
149
|
+
err.code = 'task_promotion_requires_consent_scope';
|
|
150
|
+
throw err;
|
|
151
|
+
}
|
|
152
|
+
const now = new Date().toISOString();
|
|
153
|
+
const existing = this.getById(serviceId);
|
|
154
|
+
const next = { workspaceId: this.workspaceId, serviceId, objective: objective ?? state.goal, status: existing?.status ?? 'active', riskProfile: existing?.riskProfile ?? 'medium', slo: existing?.slo ?? {}, kpis: existing?.kpis ?? {}, budget: existing?.budget ?? { hardStop: false }, missionIds: Array.from(new Set([...(existing?.missionIds ?? []), state.taskId])), latestThoughtTracePath: state.consequenceThoughtTrace ? path.join(process.cwd(), '.artifacts', 'missions', `${state.taskId}.thought-trace.json`) : existing?.latestThoughtTracePath, createdAt: existing?.createdAt ?? now, updatedAt: now };
|
|
155
|
+
(0, AtomicWriter_1.writeJsonAtomic)(path.join(this.baseDir, `${serviceId}.json`), next);
|
|
156
|
+
this.appendEvent({
|
|
157
|
+
type: 'task_promoted',
|
|
158
|
+
workspaceId: this.workspaceId,
|
|
159
|
+
serviceId,
|
|
160
|
+
taskId: state.taskId,
|
|
161
|
+
summary: `Task ${state.taskId} promoted to service by ${actor}${opts.reason ? ': ' + opts.reason : ''}.`,
|
|
162
|
+
at: now,
|
|
163
|
+
});
|
|
164
|
+
return next;
|
|
165
|
+
}
|
|
166
|
+
appendEvent(event) { (0, AtomicWriter_1.appendJsonlAtomic)(path.join(this.eventsDir, `${event.serviceId}.jsonl`), event); }
|
|
167
|
+
load(filePath) { if (!fs.existsSync(filePath))
|
|
168
|
+
return null; try {
|
|
169
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return null;
|
|
173
|
+
} }
|
|
174
|
+
estimateCompletedCount(missionIds) { let c = 0; for (const id of missionIds) {
|
|
175
|
+
const p = path.join(this.missionsDir, `${id}.json`);
|
|
176
|
+
if (!fs.existsSync(p))
|
|
177
|
+
continue;
|
|
178
|
+
try {
|
|
179
|
+
if (JSON.parse(fs.readFileSync(p, 'utf-8'))?.status === 'completed')
|
|
180
|
+
c += 1;
|
|
181
|
+
}
|
|
182
|
+
catch { }
|
|
183
|
+
} return c; }
|
|
184
|
+
estimateBlockedCount(missionIds) { let c = 0; for (const id of missionIds) {
|
|
185
|
+
const p = path.join(this.missionsDir, `${id}.json`);
|
|
186
|
+
if (!fs.existsSync(p))
|
|
187
|
+
continue;
|
|
188
|
+
try {
|
|
189
|
+
if (JSON.parse(fs.readFileSync(p, 'utf-8'))?.status === 'failed')
|
|
190
|
+
c += 1;
|
|
191
|
+
}
|
|
192
|
+
catch { }
|
|
193
|
+
} return c; }
|
|
194
|
+
}
|
|
195
|
+
exports.ServiceStateStore = ServiceStateStore;
|