@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,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SquadRegistry = void 0;
4
+ const FileSquadProvider_1 = require("./providers/FileSquadProvider");
5
+ const CloudSquadProvider_1 = require("./providers/CloudSquadProvider");
6
+ const CompositeSquadProvider_1 = require("./providers/CompositeSquadProvider");
7
+ const defaultSquadRoot = () => process.env.OPENLIFE_SQUAD_ROOT || process.cwd() + '/.catalog/squads';
8
+ class SquadRegistry {
9
+ provider;
10
+ squads = [];
11
+ constructor(provider = new CompositeSquadProvider_1.CompositeSquadProvider(new CloudSquadProvider_1.CloudSquadProvider(process.env.OPENLIFE_CLOUD_SQUADS_FILE || ''), new FileSquadProvider_1.FileSquadProvider(defaultSquadRoot()))) {
12
+ this.provider = provider;
13
+ this.load();
14
+ }
15
+ load() {
16
+ this.squads = this.provider.load();
17
+ }
18
+ all() {
19
+ return this.squads;
20
+ }
21
+ findByCapability(capability) {
22
+ const normalized = capability.toLowerCase();
23
+ return this.squads.filter(squad => squad.capabilities.some(cap => cap.toLowerCase().includes(normalized)) ||
24
+ squad.domain.toLowerCase().includes(normalized) ||
25
+ squad.name.toLowerCase().includes(normalized));
26
+ }
27
+ }
28
+ exports.SquadRegistry = SquadRegistry;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SquadRouter = void 0;
4
+ const IntentClassifier_1 = require("./IntentClassifier");
5
+ class SquadRouter {
6
+ registry;
7
+ constructor(registry) {
8
+ this.registry = registry;
9
+ }
10
+ route(task, input) {
11
+ if (task.intent === IntentClassifier_1.TaskIntent.ENGINEERING_BUILD) {
12
+ return {
13
+ squads: this.pick(['ai-builder', 'automated-code-review-squad']),
14
+ rationale: 'Build complexo deve priorizar AI Builder + code review.'
15
+ };
16
+ }
17
+ if (task.intent === IntentClassifier_1.TaskIntent.RESEARCH_ANALYSIS) {
18
+ return {
19
+ squads: this.pick(['capital-ai', 'advisory-board', 'data-squad']),
20
+ rationale: 'Research estratégico pede análise, conselho e dados.'
21
+ };
22
+ }
23
+ return {
24
+ squads: this.registry.all().slice(0, 2),
25
+ rationale: 'Fallback genérico de squads.'
26
+ };
27
+ }
28
+ pick(ids) {
29
+ const all = this.registry.all();
30
+ return all.filter(s => ids.some(id => s.id.includes(id)));
31
+ }
32
+ }
33
+ exports.SquadRouter = SquadRouter;
@@ -0,0 +1,70 @@
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.SquadScoring = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ class SquadScoring {
40
+ filePath;
41
+ constructor() {
42
+ this.filePath = path.join(process.cwd(), '.artifacts', 'squad-scores.json');
43
+ }
44
+ record(squadId, status) {
45
+ const all = this.getAll();
46
+ const current = all[squadId] || { squadId, successes: 0, partials: 0, failures: 0, score: 0, updatedAt: new Date().toISOString() };
47
+ if (status === 'success')
48
+ current.successes += 1;
49
+ if (status === 'partial')
50
+ current.partials += 1;
51
+ if (status === 'failed')
52
+ current.failures += 1;
53
+ current.score = current.successes * 2 + current.partials * 0.5 - current.failures * 1.5;
54
+ current.updatedAt = new Date().toISOString();
55
+ all[squadId] = current;
56
+ fs.mkdirSync(path.dirname(this.filePath), { recursive: true });
57
+ fs.writeFileSync(this.filePath, JSON.stringify(all, null, 2), 'utf-8');
58
+ }
59
+ getAll() {
60
+ if (!fs.existsSync(this.filePath))
61
+ return {};
62
+ try {
63
+ return JSON.parse(fs.readFileSync(this.filePath, 'utf-8'));
64
+ }
65
+ catch {
66
+ return {};
67
+ }
68
+ }
69
+ }
70
+ exports.SquadScoring = SquadScoring;
@@ -0,0 +1,90 @@
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.SubagentLifecycle = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const AtomicWriter_1 = require("./util/AtomicWriter");
39
+ class SubagentLifecycle {
40
+ filePath;
41
+ transitions = {
42
+ proposed: ['trial', 'archived'],
43
+ trial: ['active', 'archived'],
44
+ active: ['archived'],
45
+ archived: []
46
+ };
47
+ constructor(filePath = process.env.OPENLIFE_CLOUD_SUBAGENTS_FILE || '.artifacts/cloud-subagents.json') {
48
+ this.filePath = filePath;
49
+ }
50
+ readAll() {
51
+ if (!fs.existsSync(this.filePath))
52
+ return [];
53
+ try {
54
+ const raw = JSON.parse(fs.readFileSync(this.filePath, 'utf-8'));
55
+ return Array.isArray(raw) ? raw : [];
56
+ }
57
+ catch {
58
+ return [];
59
+ }
60
+ }
61
+ writeAll(records) {
62
+ (0, AtomicWriter_1.writeJsonAtomic)(this.filePath, records);
63
+ }
64
+ list() { return this.readAll(); }
65
+ create(name, capabilities) {
66
+ const now = new Date().toISOString();
67
+ const item = { id: `subagent-${Date.now()}`, name, capabilities, state: 'proposed', createdAt: now, updatedAt: now };
68
+ const all = this.readAll();
69
+ all.push(item);
70
+ this.writeAll(all);
71
+ return item;
72
+ }
73
+ transition(id, state) {
74
+ let changed = false;
75
+ let updated = null;
76
+ const all = this.readAll().map(r => {
77
+ if (r.id !== id)
78
+ return r;
79
+ if (!this.transitions[r.state].includes(state))
80
+ return r;
81
+ updated = { ...r, state, updatedAt: new Date().toISOString() };
82
+ changed = true;
83
+ return updated;
84
+ });
85
+ if (changed)
86
+ this.writeAll(all);
87
+ return updated;
88
+ }
89
+ }
90
+ exports.SubagentLifecycle = SubagentLifecycle;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SynthesizerAgent = void 0;
4
+ class SynthesizerAgent {
5
+ brain;
6
+ constructor(brain) {
7
+ this.brain = brain;
8
+ }
9
+ async synthesize(state, lastOutput, review) {
10
+ const governanceRules = (state.governanceEvents || []).map((event) => `${event.type}: ${event.summary}`).join('\n- ');
11
+ const artifacts = (state.artifacts || []).join('\n- ');
12
+ const prompt = `
13
+ Você é o Synthesizer do OpenLife.
14
+
15
+ Objetivo do serviço:
16
+ ${state.goal}
17
+
18
+ Plano executado:
19
+ ${state.plan.join('\n- ')}
20
+
21
+ Definição de serviço completo (obrigatória):
22
+ - Provisionamento concluído
23
+ - Integração entre módulos validada
24
+ - Fluxo ponta-a-ponta testado
25
+ - Observabilidade mínima registrada
26
+ - Operação real documentada
27
+
28
+ Regras de segurança/governança aplicadas nesta missão:
29
+ - ${governanceRules || 'baseline-safe-scope: missão autorizada sem bloqueios críticos'}
30
+
31
+ Evidências coletadas:
32
+ - Critérios atendidos: ${state.successCriteria.join('; ')}
33
+ - Artefatos: ${artifacts || 'nenhum artefato explícito'}
34
+ - Último output útil: ${lastOutput}
35
+ - Review final: approved=${review.approved}, score=${review.score}, critique=${review.critique}
36
+
37
+ Responda em português EXATAMENTE neste formato:
38
+ Objetivo do serviço: ...
39
+ Execução ponta a ponta: ...
40
+ Regras de segurança aplicadas: ...
41
+ Evidências: ...
42
+ Operação recomendada: ...
43
+ Status final: ...
44
+ `;
45
+ return this.brain.think('Sintetize o resultado final como serviço completo com evidências e regras de segurança.', prompt);
46
+ }
47
+ }
48
+ exports.SynthesizerAgent = SynthesizerAgent;
@@ -0,0 +1,224 @@
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.SystemDoctor = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const RuntimeProbe_1 = require("./RuntimeProbe");
40
+ const ProcessSandbox_1 = require("./ProcessSandbox");
41
+ class SystemDoctor {
42
+ root;
43
+ runtimeProbe;
44
+ constructor(root = process.cwd()) {
45
+ this.root = root;
46
+ this.runtimeProbe = new RuntimeProbe_1.RuntimeProbe();
47
+ }
48
+ run() {
49
+ return [
50
+ this.checkFile('models.json'),
51
+ this.checkFile('executor-policy.json'),
52
+ this.checkFile('governance-policy.json'),
53
+ this.checkFile('voice.config.json'),
54
+ this.checkDir('.artifacts'),
55
+ this.checkDir('dist'),
56
+ this.checkFile('OPENLIFE_PROJECT.md'),
57
+ this.checkDir('.openlife'),
58
+ this.checkDir('.openlife/promoted-assets'),
59
+ this.checkFile('.artifacts/security-events.jsonl'),
60
+ this.checkFile('.openlife/install-manifest.json'),
61
+ this.checkFile('.openlife/runtime-health.json'),
62
+ this.checkCli('codex'),
63
+ this.checkCli('gemini'),
64
+ this.checkCli('claude'),
65
+ this.checkCli('openclaude'),
66
+ ...(this.shouldRequireOllama() ? [this.checkCli('ollama')] : []),
67
+ this.checkEnv('TELEGRAM_BOT_TOKEN'),
68
+ this.checkTelegramTokenFormat(),
69
+ this.checkEnv('OPENAI_API_KEY'),
70
+ this.checkEnv('GEMINI_API_KEY'),
71
+ this.checkEnv('ANTHROPIC_API_KEY')
72
+ ];
73
+ }
74
+ checkFile(rel) {
75
+ const full = path.join(this.root, rel);
76
+ return {
77
+ name: rel,
78
+ ok: fs.existsSync(full),
79
+ detail: fs.existsSync(full) ? 'OK' : 'Arquivo ausente'
80
+ };
81
+ }
82
+ checkDir(rel) {
83
+ const full = path.join(this.root, rel);
84
+ return {
85
+ name: rel,
86
+ ok: fs.existsSync(full),
87
+ detail: fs.existsSync(full) ? 'OK' : 'Diretório ausente'
88
+ };
89
+ }
90
+ shouldRequireOllama() {
91
+ return String(process.env.OPENLIFE_ENABLE_OLLAMA || '').toLowerCase() === 'true';
92
+ }
93
+ checkCli(bin) {
94
+ const pathDirs = (process.env.PATH || '').split(path.delimiter);
95
+ const found = pathDirs.some(dir => fs.existsSync(path.join(dir, bin)) || fs.existsSync(path.join(dir, `${bin}.cmd`)) || fs.existsSync(path.join(dir, `${bin}.exe`)));
96
+ return {
97
+ name: `cli:${bin}`,
98
+ ok: found,
99
+ detail: found ? 'CLI encontrada no PATH' : 'CLI não encontrada no PATH'
100
+ };
101
+ }
102
+ async runRuntimeChecks() {
103
+ const probes = await this.runtimeProbe.probeAll();
104
+ const runtimeChecks = probes.map((probe) => ({
105
+ name: `runtime:${probe.executor}`,
106
+ ok: probe.available,
107
+ detail: `${probe.category || 'unknown'} | ${(probe.reason || 'no detail').slice(0, 160)}`
108
+ }));
109
+ runtimeChecks.push(await this.checkTelegramGetMe());
110
+ // Story 18.1 (v1.6) — ProcessSandbox smoke test in production. Verifies
111
+ // the wrapper can spawn a child and reports the right enforcement state
112
+ // for the current Node version. Low-risk site for the v1.6 rollout
113
+ // before TaskExecutor.runShellCommand opt-in in Story 18.2.
114
+ runtimeChecks.push(await this.checkProcessSandbox());
115
+ return runtimeChecks;
116
+ }
117
+ async checkProcessSandbox() {
118
+ try {
119
+ const sandbox = new ProcessSandbox_1.ProcessSandbox({ allowFsRead: [process.cwd()] });
120
+ const supports = sandbox.supportsEnforcement();
121
+ const result = await sandbox.spawn('node', ['-e', "process.stdout.write('ok')"]);
122
+ const childOk = result.code === 0 && result.stdout.trim() === 'ok';
123
+ const nodeMajor = `Node ${process.versions.node.split('.')[0]}`;
124
+ if (!childOk) {
125
+ const stderr = result.stderr.slice(0, 200);
126
+ // Story 20.5 (v1.7.1) — some Node 20+ builds (notably some Linux
127
+ // distro packages) advertise major version 20 but ship without
128
+ // --permission support compiled in. supportsEnforcement() returns
129
+ // true on major-version alone; the binary then rejects the flag at
130
+ // spawn time with "bad option: --permission". Treat that as
131
+ // graceful-downgrade rather than a wrapper bug — the doctor's job
132
+ // is to report the state honestly so operators see whether
133
+ // enforcement is actually available on their installation.
134
+ if (/(bad option|unknown option).*--permission/i.test(stderr)) {
135
+ return {
136
+ name: 'runtime:process-sandbox',
137
+ ok: true,
138
+ detail: `${nodeMajor} | enforcement unavailable (build lacks --permission support)`,
139
+ };
140
+ }
141
+ return {
142
+ name: 'runtime:process-sandbox',
143
+ ok: false,
144
+ detail: `${nodeMajor} | spawn failed | code=${result.code} signal=${result.signal} stderr=${stderr.slice(0, 80)}`,
145
+ };
146
+ }
147
+ // Honest reporting: enforcement is OK to be false on Node 18; we just
148
+ // surface it so the operator knows whether v1.7's default-on flip will
149
+ // affect their installation.
150
+ const node = `Node ${process.versions.node.split('.')[0]}`;
151
+ if (supports && !result.enforced) {
152
+ return {
153
+ name: 'runtime:process-sandbox',
154
+ ok: false,
155
+ detail: `${node} supports --permission but child reported enforced=false (wrapper bug)`,
156
+ };
157
+ }
158
+ const flags = result.appliedFlags.length;
159
+ return {
160
+ name: 'runtime:process-sandbox',
161
+ ok: true,
162
+ detail: supports
163
+ ? `${node} | enforcement active (${flags} flags applied)`
164
+ : `${node} | enforcement unavailable (graceful downgrade — child still ran)`,
165
+ };
166
+ }
167
+ catch (err) {
168
+ const msg = err instanceof Error ? err.message : String(err);
169
+ return { name: 'runtime:process-sandbox', ok: false, detail: `exception: ${msg.slice(0, 160)}` };
170
+ }
171
+ }
172
+ checkEnv(name) {
173
+ const present = !!process.env[name];
174
+ return {
175
+ name: `env:${name}`,
176
+ ok: present,
177
+ detail: present ? 'Variável definida' : 'Variável ausente'
178
+ };
179
+ }
180
+ checkTelegramTokenFormat() {
181
+ const token = (process.env.TELEGRAM_BOT_TOKEN || '').trim();
182
+ const ok = /^\d{6,}:[A-Za-z0-9_-]{20,}$/.test(token);
183
+ return {
184
+ name: 'env:TELEGRAM_BOT_TOKEN:format',
185
+ ok,
186
+ detail: ok ? 'Formato válido' : 'Formato inválido (esperado: <digits>:<secret>)'
187
+ };
188
+ }
189
+ async checkTelegramGetMe() {
190
+ const token = (process.env.TELEGRAM_BOT_TOKEN || '').trim();
191
+ if (!token) {
192
+ return {
193
+ name: 'runtime:telegram:getMe',
194
+ ok: false,
195
+ detail: 'TELEGRAM_BOT_TOKEN ausente'
196
+ };
197
+ }
198
+ try {
199
+ const res = await fetch(`https://api.telegram.org/bot${token}/getMe`);
200
+ const data = await res.json();
201
+ if (data?.ok) {
202
+ return {
203
+ name: 'runtime:telegram:getMe',
204
+ ok: true,
205
+ detail: `OK | @${data.result?.username || 'unknown'}`
206
+ };
207
+ }
208
+ return {
209
+ name: 'runtime:telegram:getMe',
210
+ ok: false,
211
+ detail: `Falha Telegram API | ${String(data?.description || 'unknown error').slice(0, 160)}`
212
+ };
213
+ }
214
+ catch (e) {
215
+ const msg = e instanceof Error ? e.message : String(e);
216
+ return {
217
+ name: 'runtime:telegram:getMe',
218
+ ok: false,
219
+ detail: `Erro de rede | ${msg.slice(0, 160)}`
220
+ };
221
+ }
222
+ }
223
+ }
224
+ exports.SystemDoctor = SystemDoctor;