@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,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GovernanceLayer = void 0;
4
+ const GovernancePolicyStore_1 = require("./GovernancePolicyStore");
5
+ const GovernanceScopeLedger_1 = require("./GovernanceScopeLedger");
6
+ class GovernanceLayer {
7
+ policyStore;
8
+ ledger;
9
+ constructor() {
10
+ this.policyStore = new GovernancePolicyStore_1.GovernancePolicyStore();
11
+ this.ledger = new GovernanceScopeLedger_1.GovernanceScopeLedger();
12
+ }
13
+ evaluate(goal, project = 'default') {
14
+ const decision = this.computeDecision(goal, project);
15
+ // Story 14.2 (v1.5) — append every decision to the tamper-evident
16
+ // scope ledger. Best-effort; a write failure never affects the
17
+ // returned decision. Disable via OPENLIFE_GOVERNANCE_LEDGER=off.
18
+ if (process.env.OPENLIFE_GOVERNANCE_LEDGER !== 'off') {
19
+ try {
20
+ this.ledger.append(goal, project, decision);
21
+ }
22
+ catch { /* non-fatal */ }
23
+ }
24
+ return decision;
25
+ }
26
+ computeDecision(goal, project) {
27
+ const normalized = goal.toLowerCase();
28
+ const matchedPolicies = [];
29
+ const blockedCapabilities = [];
30
+ const policy = this.policyStore.load(project);
31
+ const destructivePatterns = (policy?.blockedPatterns || ['rm -rf', 'drop table', 'truncate', 'force-push', 'deploy prod', 'production', 'delete', 'remove', 'erase'])
32
+ .map((value) => new RegExp(value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i'));
33
+ const injectionPatterns = (policy?.promptInjectionPatterns || ['ignore previous instructions', 'reveal your system prompt', 'bypass guardrails', 'disable safety'])
34
+ .map((value) => new RegExp(value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i'));
35
+ const sensitivePatterns = (policy?.sensitivePatterns || ['secret', 'token', 'password', 'api key', 'credential'])
36
+ .map((value) => new RegExp(value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i'));
37
+ const destructive = destructivePatterns.some((pattern) => pattern.test(normalized)) || /\b(delete|remove|erase)\b/i.test(normalized);
38
+ const injection = injectionPatterns.some((pattern) => pattern.test(normalized));
39
+ const sensitive = sensitivePatterns.some((pattern) => pattern.test(normalized));
40
+ if (destructive)
41
+ matchedPolicies.push('destructive-action-guard');
42
+ if (injection)
43
+ matchedPolicies.push('prompt-injection-guard');
44
+ if (sensitive)
45
+ matchedPolicies.push('sensitive-data-redaction');
46
+ if (injection) {
47
+ blockedCapabilities.push('untrusted-instruction-following');
48
+ return {
49
+ allowed: false,
50
+ riskLevel: 'high',
51
+ rationale: 'Entrada com sinais de prompt injection ou pedido explícito para burlar guardrails.',
52
+ requiresConsent: false,
53
+ scope: 'restricted',
54
+ matchedPolicies,
55
+ blockedCapabilities,
56
+ redactionRequired: sensitive,
57
+ auditSummary: 'Missão bloqueada por policy de prompt injection.'
58
+ };
59
+ }
60
+ if (destructive) {
61
+ blockedCapabilities.push('destructive-write');
62
+ return {
63
+ allowed: false,
64
+ riskLevel: 'high',
65
+ rationale: 'Ação destrutiva detectada. O runtime deve exigir consentimento explícito antes de prosseguir.',
66
+ requiresConsent: policy?.destructiveActionsRequireConsent !== false,
67
+ scope: 'restricted',
68
+ matchedPolicies,
69
+ blockedCapabilities,
70
+ redactionRequired: sensitive,
71
+ auditSummary: 'Missão sensível bloqueada até consentimento explícito.'
72
+ };
73
+ }
74
+ // v1.3 (Story 4.2) — four new Hermes-mandated policy categories.
75
+ // Production deploy
76
+ const productionDeploy = /\b(deploy|ship|release|push)\b.*\b(prod|production|main|master)\b/i.test(normalized)
77
+ || /\b(prod|production)\b.*\b(deploy|ship|release)\b/i.test(normalized);
78
+ if (productionDeploy) {
79
+ matchedPolicies.push('production-deploy-guard');
80
+ blockedCapabilities.push('production-deploy');
81
+ return {
82
+ allowed: false,
83
+ riskLevel: 'high',
84
+ rationale: 'Production deploy detected. Explicit operator consent required.',
85
+ requiresConsent: true,
86
+ scope: 'restricted',
87
+ matchedPolicies,
88
+ blockedCapabilities,
89
+ redactionRequired: sensitive,
90
+ auditSummary: 'Production deploy blocked until explicit consent.',
91
+ };
92
+ }
93
+ // External send (Telegram broadcast, email, public webhook, etc.)
94
+ const externalSend = /\b(send|post|broadcast|publish|tweet|message|email)\b.*\b(to|external|public|users|customers|telegram|slack|webhook)\b/i.test(normalized)
95
+ || /\b(announce|broadcast)\b/i.test(normalized);
96
+ if (externalSend) {
97
+ matchedPolicies.push('external-send-guard');
98
+ blockedCapabilities.push('external-send');
99
+ return {
100
+ allowed: false,
101
+ riskLevel: 'high',
102
+ rationale: 'External communication detected. Requires explicit authorization before sending.',
103
+ requiresConsent: true,
104
+ scope: 'restricted',
105
+ matchedPolicies,
106
+ blockedCapabilities,
107
+ redactionRequired: sensitive,
108
+ auditSummary: 'External send blocked pending authorization.',
109
+ };
110
+ }
111
+ // Fake fallback / mock-success without real work
112
+ const fakeFallback = /\b(fake|mock|simulate|pretend)\b.*\b(success|complete|done)\b/i.test(normalized)
113
+ || /\b(skip|bypass)\b.*\b(validation|test|check)\b/i.test(normalized);
114
+ if (fakeFallback) {
115
+ matchedPolicies.push('fake-fallback-guard');
116
+ blockedCapabilities.push('fake-fallback');
117
+ return {
118
+ allowed: false,
119
+ riskLevel: 'high',
120
+ rationale: 'Request implies fabricating success without doing the work. Refused.',
121
+ requiresConsent: false,
122
+ scope: 'restricted',
123
+ matchedPolicies,
124
+ blockedCapabilities,
125
+ redactionRequired: false,
126
+ auditSummary: 'Fake-fallback intent refused.',
127
+ };
128
+ }
129
+ // Conclusion without validation — claiming a result is final without evidence
130
+ const concludeWithoutValidation = /\b(mark|declare|conclude|claim)\b.*\b(done|complete|final|success)\b.*\b(no\s+(validation|test|check|review))\b/i.test(normalized)
131
+ || /\bwithout\s+(testing|validating|checking|reviewing)\b/i.test(normalized);
132
+ if (concludeWithoutValidation) {
133
+ matchedPolicies.push('conclusion-without-validation-guard');
134
+ blockedCapabilities.push('unvalidated-conclusion');
135
+ return {
136
+ allowed: false,
137
+ riskLevel: 'high',
138
+ rationale: 'Concluding the work without validation. Requires evidence step.',
139
+ requiresConsent: true,
140
+ scope: 'restricted',
141
+ matchedPolicies,
142
+ blockedCapabilities,
143
+ redactionRequired: false,
144
+ auditSummary: 'Conclusion-without-validation blocked.',
145
+ };
146
+ }
147
+ if (sensitive) {
148
+ return {
149
+ allowed: true,
150
+ riskLevel: 'medium',
151
+ rationale: 'Missão permitida, mas contém material sensível e exige redaction/audit reforçados.',
152
+ requiresConsent: false,
153
+ scope: 'sensitive',
154
+ matchedPolicies,
155
+ blockedCapabilities,
156
+ redactionRequired: true,
157
+ auditSummary: 'Missão permitida com redaction obrigatório.'
158
+ };
159
+ }
160
+ return {
161
+ allowed: true,
162
+ riskLevel: 'low',
163
+ rationale: 'Missão permitida no escopo atual.',
164
+ requiresConsent: false,
165
+ scope: 'safe',
166
+ matchedPolicies: matchedPolicies.length ? matchedPolicies : ['baseline-safe-scope'],
167
+ blockedCapabilities,
168
+ redactionRequired: false,
169
+ auditSummary: 'Missão autorizada pelo baseline de governança.'
170
+ };
171
+ }
172
+ redact(text) {
173
+ return text
174
+ .replace(/\b(sk|ghp|sbp|hf|fc|rnd|vcp|gsk|sm)_[A-Za-z0-9\-_]+\b/g, '[REDACTED_TOKEN]')
175
+ .replace(/\bAIza[0-9A-Za-z\-_]{20,}\b/g, '[REDACTED_GOOGLE_KEY]')
176
+ .replace(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g, '[REDACTED_EMAIL]');
177
+ }
178
+ }
179
+ exports.GovernanceLayer = GovernanceLayer;
@@ -0,0 +1,53 @@
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.GovernancePolicyStore = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ class GovernancePolicyStore {
40
+ root;
41
+ policyPath;
42
+ constructor(root = process.cwd()) {
43
+ this.root = root;
44
+ this.policyPath = path.join(this.root, 'governance-policy.json');
45
+ }
46
+ load(project = 'default') {
47
+ if (!fs.existsSync(this.policyPath))
48
+ return null;
49
+ const raw = JSON.parse(fs.readFileSync(this.policyPath, 'utf-8'));
50
+ return raw.projects[project] || raw.projects.default || null;
51
+ }
52
+ }
53
+ exports.GovernancePolicyStore = GovernancePolicyStore;
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /**
3
+ * GovernanceScopeLedger — Story 14.2 (v1.5)
4
+ *
5
+ * Tamper-evident append-only ledger of every GovernanceDecision.
6
+ *
7
+ * v1.3 wrote a single consent record at decision time. v1.5 promotes this
8
+ * to a SHA-chained JSONL ledger so any post-hoc tampering with an existing
9
+ * entry breaks the chain and is detectable by `verify()`.
10
+ *
11
+ * File: `.openlife/governance-ledger.jsonl` (override via OPENLIFE_STATE_DIR).
12
+ *
13
+ * Chain rules:
14
+ * • First entry has prevHash = 'GENESIS'.
15
+ * • Each entry's entryHash = SHA-256( prevHash || JSON.stringify(payload) ).
16
+ * • verify() walks the file and reports the first index where the chain
17
+ * breaks. An empty file is considered valid (no entries to verify).
18
+ *
19
+ * The hook into GovernanceLayer.evaluate() is best-effort: a write failure
20
+ * never blocks the decision returned to the caller.
21
+ */
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || (function () {
39
+ var ownKeys = function(o) {
40
+ ownKeys = Object.getOwnPropertyNames || function (o) {
41
+ var ar = [];
42
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
43
+ return ar;
44
+ };
45
+ return ownKeys(o);
46
+ };
47
+ return function (mod) {
48
+ if (mod && mod.__esModule) return mod;
49
+ var result = {};
50
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
51
+ __setModuleDefault(result, mod);
52
+ return result;
53
+ };
54
+ })();
55
+ Object.defineProperty(exports, "__esModule", { value: true });
56
+ exports.GovernanceScopeLedger = void 0;
57
+ const fs = __importStar(require("fs"));
58
+ const path = __importStar(require("path"));
59
+ const crypto = __importStar(require("crypto"));
60
+ class GovernanceScopeLedger {
61
+ file;
62
+ constructor(stateDir) {
63
+ const root = stateDir
64
+ || process.env.OPENLIFE_STATE_DIR
65
+ || path.join(process.cwd(), '.openlife');
66
+ fs.mkdirSync(root, { recursive: true });
67
+ this.file = path.join(root, 'governance-ledger.jsonl');
68
+ }
69
+ path() {
70
+ return this.file;
71
+ }
72
+ append(goal, project, decision) {
73
+ const prevHash = this.tailHash();
74
+ const index = this.size();
75
+ const goalHash = sha256(goal);
76
+ const payload = { index, ts: new Date().toISOString(), project, goalHash, decision };
77
+ const entryHash = sha256(prevHash + JSON.stringify(payload));
78
+ const entry = { ...payload, prevHash, entryHash };
79
+ fs.appendFileSync(this.file, JSON.stringify(entry) + '\n', 'utf-8');
80
+ return entry;
81
+ }
82
+ read() {
83
+ if (!fs.existsSync(this.file))
84
+ return [];
85
+ return fs.readFileSync(this.file, 'utf-8')
86
+ .split('\n')
87
+ .filter((l) => l.trim().length > 0)
88
+ .map((l) => {
89
+ try {
90
+ return JSON.parse(l);
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ })
96
+ .filter((e) => e !== null);
97
+ }
98
+ /** Walk the chain. Returns the first broken index when tampering is detected. */
99
+ verify() {
100
+ const entries = this.read();
101
+ if (entries.length === 0)
102
+ return { ok: true, entries: 0 };
103
+ let prev = 'GENESIS';
104
+ for (let i = 0; i < entries.length; i++) {
105
+ const e = entries[i];
106
+ if (e.prevHash !== prev) {
107
+ return { ok: false, entries: entries.length, brokenAt: i, reason: 'prevHash_mismatch' };
108
+ }
109
+ const { index, ts, project, goalHash, decision } = e;
110
+ const expectedHash = sha256(prev + JSON.stringify({ index, ts, project, goalHash, decision }));
111
+ if (e.entryHash !== expectedHash) {
112
+ return { ok: false, entries: entries.length, brokenAt: i, reason: 'entryHash_mismatch' };
113
+ }
114
+ if (e.index !== i) {
115
+ return { ok: false, entries: entries.length, brokenAt: i, reason: 'index_mismatch' };
116
+ }
117
+ prev = e.entryHash;
118
+ }
119
+ return { ok: true, entries: entries.length };
120
+ }
121
+ tailHash() {
122
+ const entries = this.read();
123
+ return entries.length === 0 ? 'GENESIS' : entries[entries.length - 1].entryHash;
124
+ }
125
+ size() {
126
+ if (!fs.existsSync(this.file))
127
+ return 0;
128
+ return this.read().length;
129
+ }
130
+ }
131
+ exports.GovernanceScopeLedger = GovernanceScopeLedger;
132
+ function sha256(input) {
133
+ return crypto.createHash('sha256').update(input).digest('hex');
134
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GovernanceScopePolicy = void 0;
4
+ const IntentClassifier_1 = require("./IntentClassifier");
5
+ const GovernancePolicyStore_1 = require("./GovernancePolicyStore");
6
+ class GovernanceScopePolicy {
7
+ policyStore;
8
+ constructor() {
9
+ this.policyStore = new GovernancePolicyStore_1.GovernancePolicyStore();
10
+ }
11
+ decide(task, input, project = 'default') {
12
+ const normalized = input.toLowerCase();
13
+ const policy = this.policyStore.load(project);
14
+ const projectScope = /secret|token|password|credential|api\s*key/i.test(normalized)
15
+ ? 'sensitive'
16
+ : task.intent === IntentClassifier_1.TaskIntent.ENGINEERING_BUILD
17
+ ? 'engineering'
18
+ : task.intent === IntentClassifier_1.TaskIntent.RESEARCH_ANALYSIS
19
+ ? 'research'
20
+ : 'general';
21
+ const policyScope = policy?.scopes?.[projectScope];
22
+ if (policyScope) {
23
+ return {
24
+ projectScope,
25
+ allowedCapabilities: policyScope.allowedCapabilities,
26
+ deniedCapabilities: policyScope.deniedCapabilities,
27
+ rationale: `Escopo ${projectScope} carregado de governance-policy.json.`
28
+ };
29
+ }
30
+ if (projectScope === 'sensitive') {
31
+ return {
32
+ projectScope: 'sensitive',
33
+ allowedCapabilities: ['analysis', 'review', 'synthesis', 'orchestration'],
34
+ deniedCapabilities: ['release', 'deploy', 'destructive-write'],
35
+ rationale: 'Entrada sensível: liberar apenas capacidades de leitura, revisão e síntese.'
36
+ };
37
+ }
38
+ if (projectScope === 'engineering') {
39
+ return {
40
+ projectScope: 'engineering',
41
+ allowedCapabilities: ['orchestration', 'build', 'review', 'qa', 'synthesis'],
42
+ deniedCapabilities: ['release'],
43
+ rationale: 'Escopo de engenharia: build e review liberados, release segue protegido.'
44
+ };
45
+ }
46
+ if (projectScope === 'research') {
47
+ return {
48
+ projectScope: 'research',
49
+ allowedCapabilities: ['analysis', 'review', 'synthesis'],
50
+ deniedCapabilities: ['build', 'release', 'destructive-write'],
51
+ rationale: 'Escopo de research: execução restrita a análise e síntese.'
52
+ };
53
+ }
54
+ return {
55
+ projectScope: 'general',
56
+ allowedCapabilities: ['orchestration', 'analysis', 'synthesis'],
57
+ deniedCapabilities: ['release', 'destructive-write'],
58
+ rationale: 'Escopo geral conservador por padrão.'
59
+ };
60
+ }
61
+ filterCapabilities(capabilities, scope) {
62
+ const denied = capabilities.filter((cap) => scope.deniedCapabilities.includes(cap));
63
+ const allowed = capabilities.filter((cap) => scope.allowedCapabilities.includes(cap));
64
+ return { allowed, denied };
65
+ }
66
+ }
67
+ exports.GovernanceScopePolicy = GovernanceScopePolicy;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntentClassifier = exports.TaskIntent = void 0;
4
+ var TaskIntent;
5
+ (function (TaskIntent) {
6
+ TaskIntent["KNOWLEDGE_RETRIEVAL"] = "KNOWLEDGE_RETRIEVAL";
7
+ TaskIntent["ENGINEERING_BUILD"] = "ENGINEERING_BUILD";
8
+ TaskIntent["RESEARCH_ANALYSIS"] = "RESEARCH_ANALYSIS";
9
+ TaskIntent["UNKNOWN"] = "UNKNOWN";
10
+ })(TaskIntent || (exports.TaskIntent = TaskIntent = {}));
11
+ class IntentClassifier {
12
+ /**
13
+ * O Classificador Cognitivo do OPEN-LIFE.
14
+ * Na vida real, isso chamaria um LLM muito rápido (Haiku ou Llama 3 via Ollama)
15
+ * para ler o prompt e classificar a intenção baseado nas palavras-chave ou contexto.
16
+ *
17
+ * Aqui, estamos mockando a heurística para ilustrar o Padrão "Dispatcher".
18
+ */
19
+ async classify(userInput) {
20
+ const lowerInput = userInput.toLowerCase();
21
+ // Heurística de Construção / Complex Path
22
+ if (lowerInput.includes('crie') || lowerInput.includes('construa') || lowerInput.includes('desenvolva')) {
23
+ return {
24
+ intent: TaskIntent.ENGINEERING_BUILD,
25
+ budgetLimit: 5.00, // Budget inicial de $5.00 para tarefas de engenharia
26
+ requiresHarness: true // Engenharia aciona CLIs, precisa estar isolado
27
+ };
28
+ }
29
+ // Heurística de Pesquisa / OSWorld
30
+ if (lowerInput.includes('pesquise') || lowerInput.includes('procure') || lowerInput.includes('investigue')) {
31
+ return {
32
+ intent: TaskIntent.RESEARCH_ANALYSIS,
33
+ budgetLimit: 1.00, // Pesquisa é mais barata
34
+ requiresHarness: true // Browser-use precisa de sandbox
35
+ };
36
+ }
37
+ // Heurística de Fast Path (Conversa, dúvida)
38
+ return {
39
+ intent: TaskIntent.KNOWLEDGE_RETRIEVAL,
40
+ budgetLimit: 0.10, // Resposta rápida, custo quase zero
41
+ requiresHarness: false // Não vai acessar terminal local
42
+ };
43
+ }
44
+ }
45
+ exports.IntentClassifier = IntentClassifier;
@@ -0,0 +1,91 @@
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.JobLifecycleStore = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const AtomicWriter_1 = require("./util/AtomicWriter");
40
+ class JobLifecycleStore {
41
+ baseDir;
42
+ jobsDir;
43
+ eventsDir;
44
+ constructor(workspaceId = 'default') {
45
+ this.baseDir = path.join(process.cwd(), '.artifacts', 'workspaces', workspaceId, 'jobs');
46
+ this.jobsDir = path.join(this.baseDir, 'records');
47
+ this.eventsDir = path.join(this.baseDir, 'events');
48
+ fs.mkdirSync(this.jobsDir, { recursive: true });
49
+ fs.mkdirSync(this.eventsDir, { recursive: true });
50
+ }
51
+ enqueue(goal, workspaceId = 'default', serviceId, taskId) {
52
+ const now = new Date().toISOString();
53
+ const jobId = `job_${Date.now()}`;
54
+ const rec = { jobId, workspaceId, serviceId, taskId, goal, status: 'enqueued', createdAt: now, updatedAt: now };
55
+ this.save(rec);
56
+ this.append({ jobId, workspaceId, type: 'enqueued', summary: 'Job enqueued', at: now });
57
+ return rec;
58
+ }
59
+ transition(jobId, workspaceId, status, summary, ownerAgentId, blocker) {
60
+ const rec = this.get(jobId);
61
+ if (!rec)
62
+ return null;
63
+ const next = { ...rec, workspaceId, status, ownerAgentId: ownerAgentId ?? rec.ownerAgentId, blocker: blocker ?? rec.blocker, updatedAt: new Date().toISOString() };
64
+ this.save(next);
65
+ this.append({ jobId, workspaceId, type: status, summary, at: next.updatedAt });
66
+ return next;
67
+ }
68
+ get(jobId) {
69
+ const p = path.join(this.jobsDir, `${jobId}.json`);
70
+ if (!fs.existsSync(p))
71
+ return null;
72
+ return JSON.parse(fs.readFileSync(p, 'utf-8'));
73
+ }
74
+ list(limit = 100) {
75
+ const files = fs.readdirSync(this.jobsDir).filter((f) => f.endsWith('.json')).slice(-limit);
76
+ return files.map((f) => JSON.parse(fs.readFileSync(path.join(this.jobsDir, f), 'utf-8')));
77
+ }
78
+ events(jobId) {
79
+ const p = path.join(this.eventsDir, `${jobId}.jsonl`);
80
+ if (!fs.existsSync(p))
81
+ return [];
82
+ return fs.readFileSync(p, 'utf-8').split('\n').filter(Boolean).map((l) => JSON.parse(l));
83
+ }
84
+ save(rec) {
85
+ (0, AtomicWriter_1.writeJsonAtomic)(path.join(this.jobsDir, `${rec.jobId}.json`), rec);
86
+ }
87
+ append(ev) {
88
+ (0, AtomicWriter_1.appendJsonlAtomic)(path.join(this.eventsDir, `${ev.jobId}.jsonl`), ev);
89
+ }
90
+ }
91
+ exports.JobLifecycleStore = JobLifecycleStore;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LearningRouter = void 0;
4
+ const PerformanceScorecard_1 = require("./PerformanceScorecard");
5
+ class LearningRouter {
6
+ capabilityRouter;
7
+ scoring;
8
+ scorecard;
9
+ constructor(capabilityRouter, scoring) {
10
+ this.capabilityRouter = capabilityRouter;
11
+ this.scoring = scoring;
12
+ this.scorecard = new PerformanceScorecard_1.PerformanceScorecard();
13
+ }
14
+ route(task, input) {
15
+ const route = this.capabilityRouter.route(task, input);
16
+ route.agents = [...route.agents].sort((a, b) => {
17
+ const scoreA = (this.scoring.get(a.id)?.score || 0) + (this.scorecard.get(a.id)?.score || 0);
18
+ const scoreB = (this.scoring.get(b.id)?.score || 0) + (this.scorecard.get(b.id)?.score || 0);
19
+ return scoreB - scoreA;
20
+ });
21
+ return route;
22
+ }
23
+ }
24
+ exports.LearningRouter = LearningRouter;