@yun520-1/heartflow 0.15.2
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/AI-AGENT-README.md +154 -0
- package/CLAIMS.md +23 -0
- package/CORE_VALUES.md +50 -0
- package/INSTALL_FOR_AI.md +104 -0
- package/QUICK_START.md +77 -0
- package/READ/refresh_11.2.6.md +6 -0
- package/README.md +190 -0
- package/README.zh.md +49 -0
- package/REPO_STRUCTURE.md +47 -0
- package/SKILL.md.new +1 -0
- package/VERSION +1 -0
- package/_test_memory.mjs +52 -0
- package/assets/banner.png +0 -0
- package/bin/cli.js +167 -0
- package/bin/setup.js +382 -0
- package/co-evolution/index.ts +511 -0
- package/com.heartflow.auto-evolution.plist.disabled +26 -0
- package/com.heartflow.auto-upgrade.plist.disabled +26 -0
- package/com.heartflow.comfyui-monitor.plist.disabled +22 -0
- package/com.heartflow.enhanced-upgrade.plist.disabled +22 -0
- package/com.heartflow.full-audit.plist +28 -0
- package/com.heartflow.github-audit.plist +21 -0
- package/com.heartflow.paper-upgrade.plist.disabled +21 -0
- package/config/ai-config.json +12 -0
- package/config/ai-providers.json +14 -0
- package/dict-data/generate-graph.js +203 -0
- package/dist/agent/runtime/AgentRuntime.d.ts +212 -0
- package/dist/agent/runtime/AgentRuntime.d.ts.map +1 -0
- package/dist/agent/runtime/AgentRuntime.js +355 -0
- package/dist/agent/runtime/AgentRuntime.js.map +1 -0
- package/dist/agent/runtime/PlanExecutor.d.ts +132 -0
- package/dist/agent/runtime/PlanExecutor.d.ts.map +1 -0
- package/dist/agent/runtime/PlanExecutor.js +322 -0
- package/dist/agent/runtime/PlanExecutor.js.map +1 -0
- package/dist/agent/runtime/TaskGraph.d.ts +170 -0
- package/dist/agent/runtime/TaskGraph.d.ts.map +1 -0
- package/dist/agent/runtime/TaskGraph.js +390 -0
- package/dist/agent/runtime/TaskGraph.js.map +1 -0
- package/dist/agent/runtime/TaskScheduler.d.ts +120 -0
- package/dist/agent/runtime/TaskScheduler.d.ts.map +1 -0
- package/dist/agent/runtime/TaskScheduler.js +301 -0
- package/dist/agent/runtime/TaskScheduler.js.map +1 -0
- package/dist/agent/runtime/index.d.ts +17 -0
- package/dist/agent/runtime/index.d.ts.map +1 -0
- package/dist/agent/runtime/index.js +22 -0
- package/dist/agent/runtime/index.js.map +1 -0
- package/dist/agent/runtime/test-runtime.d.ts +2 -0
- package/dist/agent/runtime/test-runtime.d.ts.map +1 -0
- package/dist/agent/runtime/test-runtime.js +71 -0
- package/dist/agent/runtime/test-runtime.js.map +1 -0
- package/dist/agent/tools/BashTool.d.ts +44 -0
- package/dist/agent/tools/BashTool.d.ts.map +1 -0
- package/dist/agent/tools/BashTool.js +355 -0
- package/dist/agent/tools/BashTool.js.map +1 -0
- package/dist/agent/tools/FileReadTool.d.ts +29 -0
- package/dist/agent/tools/FileReadTool.d.ts.map +1 -0
- package/dist/agent/tools/FileReadTool.js +196 -0
- package/dist/agent/tools/FileReadTool.js.map +1 -0
- package/dist/agent/tools/FileWriteTool.d.ts +35 -0
- package/dist/agent/tools/FileWriteTool.d.ts.map +1 -0
- package/dist/agent/tools/FileWriteTool.js +204 -0
- package/dist/agent/tools/FileWriteTool.js.map +1 -0
- package/dist/agent/tools/Tool.d.ts +75 -0
- package/dist/agent/tools/Tool.d.ts.map +1 -0
- package/dist/agent/tools/Tool.js +54 -0
- package/dist/agent/tools/Tool.js.map +1 -0
- package/dist/agent/tools/WebSearchTool.d.ts +27 -0
- package/dist/agent/tools/WebSearchTool.d.ts.map +1 -0
- package/dist/agent/tools/WebSearchTool.js +136 -0
- package/dist/agent/tools/WebSearchTool.js.map +1 -0
- package/dist/cli/commands/engines.d.ts +39 -0
- package/dist/cli/commands/engines.d.ts.map +1 -0
- package/dist/cli/commands/engines.js +275 -0
- package/dist/cli/commands/engines.js.map +1 -0
- package/dist/cli/commands/health.d.ts +34 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +381 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/repl.d.ts +40 -0
- package/dist/cli/commands/repl.d.ts.map +1 -0
- package/dist/cli/commands/repl.js +286 -0
- package/dist/cli/commands/repl.js.map +1 -0
- package/dist/cli/commands/status.d.ts +22 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +266 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +13 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/consciousness/2308.08708_upgrade.d.ts +321 -0
- package/dist/core/consciousness/2308.08708_upgrade.d.ts.map +1 -0
- package/dist/core/consciousness/2308.08708_upgrade.js +917 -0
- package/dist/core/consciousness/2308.08708_upgrade.js.map +1 -0
- package/dist/core/dream/dream-consolidator.d.ts +11 -0
- package/dist/core/dream/dream-consolidator.d.ts.map +1 -0
- package/dist/core/dream/dream-consolidator.js +188 -0
- package/dist/core/dream/dream-consolidator.js.map +1 -0
- package/dist/core/dream/dream.d.ts +71 -0
- package/dist/core/dream/dream.d.ts.map +1 -0
- package/dist/core/dream/dream.js +318 -0
- package/dist/core/dream/dream.js.map +1 -0
- package/dist/core/dream/index.d.ts +38 -0
- package/dist/core/dream/index.d.ts.map +1 -0
- package/dist/core/dream/index.js +185 -0
- package/dist/core/dream/index.js.map +1 -0
- package/dist/core/emotion/deep-emotion.js +574 -0
- package/dist/core/emotion/emotion-engine.js +138 -0
- package/dist/core/emotion/index.d.ts +44 -0
- package/dist/core/emotion/index.d.ts.map +1 -0
- package/dist/core/emotion/index.js +41 -0
- package/dist/core/emotion/index.js.map +1 -0
- package/dist/core/heartcore/health-check.d.ts +43 -0
- package/dist/core/heartcore/health-check.d.ts.map +1 -0
- package/dist/core/heartcore/health-check.js +152 -0
- package/dist/core/heartcore/health-check.js.map +1 -0
- package/dist/core/heartcore/heartbeat.d.ts +45 -0
- package/dist/core/heartcore/heartbeat.d.ts.map +1 -0
- package/dist/core/heartcore/heartbeat.js +127 -0
- package/dist/core/heartcore/heartbeat.js.map +1 -0
- package/dist/core/heartcore/sleep-wake.d.ts +61 -0
- package/dist/core/heartcore/sleep-wake.d.ts.map +1 -0
- package/dist/core/heartcore/sleep-wake.js +173 -0
- package/dist/core/heartcore/sleep-wake.js.map +1 -0
- package/dist/core/heartcore/startup-check.d.ts +38 -0
- package/dist/core/heartcore/startup-check.d.ts.map +1 -0
- package/dist/core/heartcore/startup-check.js +148 -0
- package/dist/core/heartcore/startup-check.js.map +1 -0
- package/dist/core/index.js +267 -0
- package/dist/core/knowledge/index.d.ts +95 -0
- package/dist/core/knowledge/index.d.ts.map +1 -0
- package/dist/core/knowledge/index.js +14 -0
- package/dist/core/knowledge/index.js.map +1 -0
- package/dist/core/knowledge/knowledge-graph.js +359 -0
- package/dist/core/psychology/index.d.ts +59 -0
- package/dist/core/psychology/index.d.ts.map +1 -0
- package/dist/core/psychology/index.js +268 -0
- package/dist/core/psychology/index.js.map +1 -0
- package/dist/core/reasoning/bounded-rationality.d.ts +76 -0
- package/dist/core/reasoning/bounded-rationality.d.ts.map +1 -0
- package/dist/core/reasoning/bounded-rationality.js +257 -0
- package/dist/core/reasoning/bounded-rationality.js.map +1 -0
- package/dist/core/reasoning/causal-reasoning.d.ts +89 -0
- package/dist/core/reasoning/causal-reasoning.d.ts.map +1 -0
- package/dist/core/reasoning/causal-reasoning.js +282 -0
- package/dist/core/reasoning/causal-reasoning.js.map +1 -0
- package/dist/core/reasoning/index.d.ts +38 -0
- package/dist/core/reasoning/index.d.ts.map +1 -0
- package/dist/core/reasoning/index.js +93 -0
- package/dist/core/reasoning/index.js.map +1 -0
- package/dist/core/self-evolution/index.d.ts +75 -0
- package/dist/core/self-evolution/index.d.ts.map +1 -0
- package/dist/core/self-evolution/index.js +311 -0
- package/dist/core/self-evolution/index.js.map +1 -0
- package/dist/storage/checkpoint/CheckpointEngine.d.ts +110 -0
- package/dist/storage/checkpoint/CheckpointEngine.d.ts.map +1 -0
- package/dist/storage/checkpoint/CheckpointEngine.js +227 -0
- package/dist/storage/checkpoint/CheckpointEngine.js.map +1 -0
- package/dist/storage/checkpoint.d.ts +18 -0
- package/dist/storage/checkpoint.d.ts.map +1 -0
- package/dist/storage/checkpoint.js +61 -0
- package/dist/storage/checkpoint.js.map +1 -0
- package/dist/storage/index.d.ts +61 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +84 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/vector/VectorStoreEngine.d.ts +24 -0
- package/dist/storage/vector/VectorStoreEngine.d.ts.map +1 -0
- package/dist/storage/vector/VectorStoreEngine.js +197 -0
- package/dist/storage/vector/VectorStoreEngine.js.map +1 -0
- package/distributed/-v2026.5.7/META.json +9 -0
- package/distributed/-v2026.5.7/package.json +12 -0
- package/distributed/.personal_backup/deepseek-key-v2026.5.7/META.json +9 -0
- package/distributed/.personal_backup/deepseek-key-v2026.5.7/package.json +12 -0
- package/distributed/.personal_backup/git-push-v2026.5.7/META.json +9 -0
- package/distributed/.personal_backup/git-push-v2026.5.7/package.json +12 -0
- package/distributed/.personal_backup/heartflow-always-upgrade-v2026.5.7/META.json +9 -0
- package/distributed/.personal_backup/heartflow-always-upgrade-v2026.5.7/package.json +12 -0
- package/distributed/.personal_backup/key-a-v2026.5.7/META.json +9 -0
- package/distributed/.personal_backup/key-a-v2026.5.7/package.json +12 -0
- package/distributed/.personal_backup/merge-memory-systems-v2026.5.7/META.json +9 -0
- package/distributed/.personal_backup/merge-memory-systems-v2026.5.7/package.json +12 -0
- package/distributed/.personal_backup/search-papers-first-v2026.5.7/META.json +9 -0
- package/distributed/.personal_backup/search-papers-first-v2026.5.7/package.json +12 -0
- package/distributed/.personal_backup/v11-5-8-v2026.5.7/META.json +9 -0
- package/distributed/.personal_backup/v11-5-8-v2026.5.7/package.json +12 -0
- package/distributed/.personal_backup/v11-5-9-v2026.5.7/META.json +9 -0
- package/distributed/.personal_backup/v11-5-9-v2026.5.7/package.json +12 -0
- package/distributed/MANIFEST.json +5 -0
- package/distributed/bundles/install--v2026.5.7.sh +21 -0
- package/distributed/bundles/install-deepseek-key-v2026.5.7.sh +21 -0
- package/distributed/bundles/install-git-push-v2026.5.7.sh +21 -0
- package/distributed/bundles/install-heartflow-always-upgrade-v2026.5.7.sh +21 -0
- package/distributed/bundles/install-key-a-v2026.5.7.sh +21 -0
- package/distributed/bundles/install-merge-memory-systems-v2026.5.7.sh +21 -0
- package/distributed/bundles/install-search-papers-first-v2026.5.7.sh +21 -0
- package/distributed/bundles/install-v11-5-8-v2026.5.7.sh +21 -0
- package/distributed/bundles/install-v11-5-9-v2026.5.7.sh +21 -0
- package/distributed/heartflow-knowledge-base/INDEX.json +29 -0
- package/distributed/heartflow-knowledge-base/PATTERNS.json +74 -0
- package/distributed/heartflow-knowledge-base/package.json +28 -0
- package/distributed_upgrades/TASK_CONFIG.json +20 -0
- package/distributed_upgrades/UPGRADE_BATCH_STATUS.json +29 -0
- package/distributed_upgrades/distributed_upgrades/agent_0.pid +1 -0
- package/distributed_upgrades/distributed_upgrades/agent_1.pid +1 -0
- package/distributed_upgrades/distributed_upgrades/agent_2.pid +1 -0
- package/distributed_upgrades/distributed_upgrades/agent_3.pid +1 -0
- package/distributed_upgrades/distributed_upgrades/agent_4.pid +1 -0
- package/distributed_upgrades/distributed_upgrades/agent_5.pid +1 -0
- package/distributed_upgrades/distributed_upgrades/paper_batches.txt +200 -0
- package/distributed_upgrades/launch-distributed.sh +83 -0
- package/docs/ACTION_PLAN_2026-04-06_0941.md +117 -0
- package/docs/ANALYSIS_REPORT.md +766 -0
- package/docs/APPLICATION_GUIDE.md +444 -0
- package/docs/AUTO_UPGRADE_REPORT_v6.2.56.md +45 -0
- package/docs/AWAKENING_SYSTEM_GUIDE.md +285 -0
- package/docs/BILINGUAL_STANDARD.md +156 -0
- package/docs/BRAND_GUIDELINES.md +251 -0
- package/docs/CODE_OPTIMIZATION_PLAN.md +293 -0
- package/docs/COMPLETE_FIX_SUMMARY.md +250 -0
- package/docs/CONTINUOUS_REFLECTION_2026-04-06_1031.md +233 -0
- package/docs/CONTRIBUTING.md +87 -0
- package/docs/CRON_JOBS_REVIEW_v6.md +60 -0
- package/docs/DATA_FLOW_ARCHITECTURE.md +373 -0
- package/docs/DEEPEST_REFLECTION_2026-04-06_0941.md +167 -0
- package/docs/DEEP_REFLECTION_2026-04-05.md +204 -0
- package/docs/DEEP_VALIDATION_20260403.md +319 -0
- package/docs/DEEP_VALIDATION_20260404.md +295 -0
- package/docs/EMOTION_THEORY_INTEGRATION.md +483 -0
- package/docs/ERROR_FIX_REPORT_2026-04-07.md +316 -0
- package/docs/EVOLUTION_SYSTEM.md +96 -0
- package/docs/FEATURES_SIMPLE.md +53 -0
- package/docs/FEATURES_v5.3.md +291 -0
- package/docs/FEATURES_v7.1.md +172 -0
- package/docs/FINAL_RUN_REPORT_20260403.md +202 -0
- package/docs/GITHUB_COMPLETE_DOCUMENTATION_v6.0.2.md +579 -0
- package/docs/GITHUB_PUSH_LOG.md +16 -0
- package/docs/GITHUB_RELEASE.md +138 -0
- package/docs/GITHUB_RELEASE_v5.3.0.md +395 -0
- package/docs/GITHUB_RELEASE_v6.0.0.md +74 -0
- package/docs/HEARTFLOW_V6_GITHUB_PUSH.md +159 -0
- package/docs/HEARTFLOW_V6_MANIFESTO.md +287 -0
- package/docs/HEARTFLOW_V6_README.md +299 -0
- package/docs/HEARTFLOW_V6_TASK_REVIEW.md +215 -0
- package/docs/HEARTFLOW_VALUES_AND_MISSION.md +177 -0
- package/docs/HeartFlow_Monograph_Volume_II_Chapter_01.md +377 -0
- package/docs/HeartFlow_Monograph_Volume_II_Chapter_02.md +324 -0
- package/docs/HeartFlow_Monograph_Volume_II_Start.md +78 -0
- package/docs/HeartFlow_Monograph_Volume_I_Final.md +9464 -0
- package/docs/INSTALLATION_DIAGNOSIS.md +368 -0
- package/docs/INTEGRATION_CHECKLIST_v6.1.41.md +229 -0
- package/docs/INTEGRATION_SUMMARY.md +380 -0
- package/docs/INTELLIGENT_ROUTING_SYSTEM.md +329 -0
- package/docs/LEARNING_PHILOSOPHY.md +320 -0
- package/docs/LOGIC_AUDIT_REPORT_20260405.md +369 -0
- package/docs/MOTIVE_CHECK_2026-04-06_0945.md +90 -0
- package/docs/PERSONALITY_CALCULATION_RULES.md +104 -0
- package/docs/PERSONALITY_SYNC_FIX.md +166 -0
- package/docs/PROJECT_SUMMARY.md +347 -0
- package/docs/PUBLISH_GUIDE.md +149 -0
- package/docs/README_UPDATE_STANDARD.md +357 -0
- package/docs/README_v5.3.md +519 -0
- package/docs/RELEASE_v6.2.0.md +240 -0
- package/docs/SAGE_PATH_2026-04-06_0952.md +265 -0
- package/docs/SELF_REFLECTION_2026-04-06_1006.md +311 -0
- package/docs/SEVEN_SYSTEMS.md +642 -0
- package/docs/SMART_EVOLUTION_GUIDE.md +103 -0
- package/docs/SMART_EVOLUTION_v4.md +194 -0
- package/docs/SYNC_REPORT_1775363972464.json +23 -0
- package/docs/SYNC_REPORT_1775364446763.json +23 -0
- package/docs/SYNC_REPORT_1775364984353.json +23 -0
- package/docs/SYNC_REPORT_1775397556306.json +23 -0
- package/docs/SYNC_REPORT_1775399840010.json +23 -0
- package/docs/SYNC_REPORT_1775400929082.json +23 -0
- package/docs/SYNC_REPORT_1775455697235.json +23 -0
- package/docs/SYNC_REPORT_1775459792479.json +23 -0
- package/docs/SYNC_REPORT_1775483413473.json +23 -0
- package/docs/SYSTEM_FIX_AND_VERIFICATION_REPORT.md +390 -0
- package/docs/SYSTEM_REQUIREMENTS_v6.2.52.md +611 -0
- package/docs/TASK_BREAKDOWN_CHECKLIST.md +164 -0
- package/docs/THEORY_TO_CODE_v6.2.52.md +930 -0
- package/docs/UPGRADE_COMPLETE_v6.2.33.md +226 -0
- package/docs/UPGRADE_COMPLETE_v6.2.60.md +135 -0
- package/docs/UPGRADE_COMPLETE_v6.2.66.md +265 -0
- package/docs/UPGRADE_COMPLETE_v7.1.8.md +176 -0
- package/docs/UPGRADE_COMPLETE_v7.3.95.md +59 -0
- package/docs/UPGRADE_REPORT_1775313572473.json +50 -0
- package/docs/UPGRADE_REPORT_1775364977378.json +50 -0
- package/docs/UPGRADE_REPORT_1775364984469.json +55 -0
- package/docs/UPGRADE_REPORT_1775397556425.json +55 -0
- package/docs/UPGRADE_REPORT_1775399840144.json +55 -0
- package/docs/UPGRADE_REPORT_1775400929201.json +55 -0
- package/docs/UPGRADE_REPORT_1775455697348.json +55 -0
- package/docs/UPGRADE_REPORT_1775459792601.json +55 -0
- package/docs/UPGRADE_REPORT_1775459829.md +59 -0
- package/docs/UPGRADE_REPORT_1775483413653.json +55 -0
- package/docs/UPGRADE_REPORT_v6.2.25.md +172 -0
- package/docs/UPGRADE_REPORT_v6.2.26.md +166 -0
- package/docs/UPGRADE_REPORT_v6.2.28.md +214 -0
- package/docs/UPGRADE_REPORT_v6.2.29.md +186 -0
- package/docs/VERSION_FIX_REPORT.md +218 -0
- package/docs/VERSION_HISTORY.md +5 -0
- package/docs/VERSION_INDEX.md +180 -0
- package/docs/WAY_OF_BEING_2026-04-06_0955.md +241 -0
- package/docs/ai-self-awareness-awakening.md +551 -0
- package/docs/cronjob-backup.md +55 -0
- package/docs/emotion-prototype-theory-v5.0.12.md +430 -0
- package/docs/examples.md +439 -0
- package/docs/heartflow-ppt-design.md +237 -0
- package/docs/install-troubleshooting.md +21 -0
- package/docs/phase-upgrade-template-v0.0.1.md +33 -0
- package/docs/pricing.md +191 -0
- package/docs/psych-analysis-v0.0.1.md +38 -0
- package/docs/reasoning-checklist.md +60 -0
- package/docs/self-evolution-state-v6.0.19.md +391 -0
- package/docs/self-evolution-state-v6.0.23.md +293 -0
- package/docs/self-evolution-state-v6.0.24.md +281 -0
- package/docs/self-evolution-state-v6.0.49.md +267 -0
- package/docs/self-evolution-state-v6.2.33.md +269 -0
- package/docs/self-evolution-state-v6.2.60.md +180 -0
- package/docs/self-evolution-state-v6.2.66.md +520 -0
- package/docs/self-evolution-state-v7.3.95.md +165 -0
- package/docs/self-evolution-state.md +226 -0
- package/docs/system-core-principles.md +53 -0
- package/docs/system-truth-goodness-beauty-principles.md +502 -0
- package/docs/theories/human-nature-motivation.md +251 -0
- package/docs/theories/motivation-memory-integration.md +265 -0
- package/docs/theories/sdt-test.md +17 -0
- package/docs/theory-integration-analysis-v5.2.0.md +236 -0
- package/docs/theory-update-summary-v5.0.34.md +193 -0
- package/docs/theory-update-summary-v5.0.35.md +104 -0
- package/docs/theory-update-summary-v5.0.41.md +281 -0
- package/docs/theory-update-summary-v5.0.42.md +421 -0
- package/docs/theory-update-summary-v5.0.46.md +386 -0
- package/docs/theory-update-summary-v5.0.47.md +449 -0
- package/docs/theory-update-summary-v5.0.48.md +183 -0
- package/docs/theory-update-summary-v5.0.49.md +191 -0
- package/docs/theory-update-summary-v5.0.50.md +205 -0
- package/docs/theory-update-summary-v5.0.51.md +191 -0
- package/docs/theory-update-summary-v5.0.52.md +183 -0
- package/docs/theory-update-summary-v5.0.53.md +306 -0
- package/docs/theory-update-summary-v5.0.54.md +98 -0
- package/docs/theory-update-summary-v5.0.55.md +391 -0
- package/docs/theory-update-summary-v5.0.57.md +398 -0
- package/docs/theory-update-summary-v5.0.58.md +476 -0
- package/docs/theory-update-summary-v5.0.59.md +520 -0
- package/docs/theory-update-summary-v5.0.60.md +460 -0
- package/docs/theory-update-summary-v5.0.61.md +108 -0
- package/docs/theory-update-summary-v5.0.62.md +74 -0
- package/docs/theory-update-summary-v5.0.63.md +112 -0
- package/docs/theory-update-summary-v5.0.64.md +55 -0
- package/docs/theory-update-summary-v5.0.67.md +539 -0
- package/docs/theory-update-summary-v5.2.0.md +168 -0
- package/docs/theory-update-summary-v5.2.1.md +406 -0
- package/docs/theory-update-summary-v5.2.37.md +518 -0
- package/docs/theory-update-summary-v6.0.19.md +715 -0
- package/docs/theory-update-summary-v6.0.23.md +729 -0
- package/docs/theory-update-summary-v6.0.24.md +229 -0
- package/docs/theory-update-summary-v6.0.49.md +223 -0
- package/docs/theory-update-summary-v6.2.33.md +303 -0
- package/docs/theory-update-summary-v6.2.49.md +489 -0
- package/docs/theory-update-summary-v6.2.60.md +273 -0
- package/docs/theory-update-summary-v6.2.66.md +322 -0
- package/docs/theory-update-summary-v7.3.95.md +197 -0
- package/docs/theory-update-summary.md +174 -0
- package/docs/upgrade-notes-v0.0.1.md +15 -0
- package/docs/upgrade-report-v5.0.34.md +144 -0
- package/docs/upgrade-report-v5.0.42-cron.md +269 -0
- package/docs/upgrade-report-v5.0.43-cron.md +248 -0
- package/docs/upgrade-report-v5.0.45-cron.md +63 -0
- package/docs/upgrade-report-v5.0.55-cron.md +173 -0
- package/docs/upgrade-report-v5.0.63-cron.md +145 -0
- package/docs/upgrade-report-v5.0.67-cron.md +185 -0
- package/docs/upgrade-report-v5.0.68-cron.md +409 -0
- package/docs/upgrade-report-v5.2.0-cron.md +178 -0
- package/docs/upgrade-report-v5.2.1-cron.md +321 -0
- package/docs/upgrade-report-v5.2.37-cron.md +602 -0
- package/docs/upgrade-report-v6.0.19-cron.md +296 -0
- package/docs/upgrade-report-v6.0.23-cron.md +81 -0
- package/docs/upgrade-report-v6.0.24-cron.md +272 -0
- package/docs/upgrade-report-v6.0.49-cron.md +277 -0
- package/docs/upgrade-report-v6.2.33-cron.md +290 -0
- package/docs/upgrade-report-v6.2.60-cron.md +93 -0
- package/docs/upgrade-report-v7.3.95-cron.md +65 -0
- package/docs/upgrade-report.md +327 -0
- package/docs/upgrade-v3.21.0.md +249 -0
- package/docs/v4.8.0-upgrade.md +287 -0
- package/docs/version-summary-20260429.md +142 -0
- package/explore-engine/index.ts +478 -0
- package/extract-text.py +12 -0
- package/failure-pattern-memory/index.ts +234 -0
- package/heartflow-identity/HEARTCORE/health-check.js +49 -0
- package/heartflow-identity/HEARTCORE/heartbeat.js +42 -0
- package/heartflow-identity/HEARTCORE/heartcore.js +86 -0
- package/heartflow-identity/HEARTCORE/safety-check.js +282 -0
- package/heartflow-identity/HEARTCORE/self-check.js +90 -0
- package/heartflow-identity/HEARTCORE/sleep-wake.js +105 -0
- package/heartflow-identity/LICENSE +17 -0
- package/heartflow-identity/VERSION +1 -0
- package/heartflow-identity/install.sh +80 -0
- package/install.sh +128 -0
- package/languages/README_LANGS.md +20 -0
- package/languages/README_ar.md +48 -0
- package/languages/README_de.md +48 -0
- package/languages/README_en.md +48 -0
- package/languages/README_es.md +48 -0
- package/languages/README_fr.md +48 -0
- package/languages/README_ja.md +48 -0
- package/languages/README_ko.md +48 -0
- package/languages/README_zh.md +85 -0
- package/memory-log.json +5 -0
- package/migrate-memories.js +101 -0
- package/package.json +28 -0
- package/package.json.bak +13 -0
- package/patches/embodied-core-v2.2.3.patch +475 -0
- package/patches/goedel-engine-v2.2.2.patch +161 -0
- package/patches/new-features-v2.2.3.patch +1371 -0
- package/patches/self-modifier-v2.2.2.patch +252 -0
- package/run-full-audit.sh +4 -0
- package/run-github-audit.sh +3 -0
- package/run-hf.sh +5 -0
- package/run-paper-upgrade.sh +5 -0
- package/session-continuity/index.ts +262 -0
- package/shared-discovery-log/index.ts +281 -0
- package/skills/.skills_store_lock.json +11 -0
- package/skills/baidu-search/_meta.json +6 -0
- package/src/__init__.py +4 -0
- package/src/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/agent/runtime/AgentRuntime.ts +481 -0
- package/src/agent/runtime/PlanExecutor.ts +441 -0
- package/src/agent/runtime/TaskGraph.ts +487 -0
- package/src/agent/runtime/TaskScheduler.ts +364 -0
- package/src/agent/runtime/index.ts +17 -0
- package/src/agent/runtime/test-runtime.ts +80 -0
- package/src/agent/tools/BashTool.ts +390 -0
- package/src/agent/tools/FileReadTool.ts +176 -0
- package/src/agent/tools/FileWriteTool.ts +182 -0
- package/src/agent/tools/Tool.ts +105 -0
- package/src/agent/tools/WebSearchTool.ts +158 -0
- package/src/cli/commands/engines.ts +280 -0
- package/src/cli/commands/health.ts +433 -0
- package/src/cli/commands/repl.ts +267 -0
- package/src/cli/commands/status.ts +264 -0
- package/src/cli/index.ts +7 -0
- package/src/core/VERSION +1 -0
- package/src/core/__init__.py +3 -0
- package/src/core/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/core/__pycache__/heartflow.cpython-313.pyc +0 -0
- package/src/core/_upgrade_archive/upgrade_1778685492336.js +118 -0
- package/src/core/_upgrade_archive/upgrade_1778685493439.js +118 -0
- package/src/core/_upgrade_archive/upgrade_1778685559715.js +346 -0
- package/src/core/_upgrade_archive/upgrade_1778685676694.js +198 -0
- package/src/core/_upgrade_archive/upgrade_1778685861697.js +345 -0
- package/src/core/_upgrade_archive/upgrade_1778686211075.js +346 -0
- package/src/core/_upgrade_archive/upgrade_1778686749596.js +198 -0
- package/src/core/_upgrade_archive/upgrade_1778714606944.js +198 -0
- package/src/core/_upgrade_archive/upgrade_1778714616000.js +345 -0
- package/src/core/_upgrade_archive/upgrade_1778714625871.js +118 -0
- package/src/core/_upgrade_archive/upgrade_1778714990353.js +346 -0
- package/src/core/_upgrade_archive/upgrade_1778716193707.js +198 -0
- package/src/core/agent-performance.json +147 -0
- package/src/core/agents/AgentManager.js +161 -0
- package/src/core/agents/FocusAgent.js +120 -0
- package/src/core/agents/MoodAgent.js +141 -0
- package/src/core/agents/ReflectionAgent.js +241 -0
- package/src/core/agents/SelfAgent.js +100 -0
- package/src/core/agents/base-agents.js +127 -0
- package/src/core/associative-engine/association-graph.json +2057 -0
- package/src/core/associative-engine/associative-engine.js +174 -0
- package/src/core/associative-engine/chunk-detector.js +246 -0
- package/src/core/associative-engine/idiom-story-db.json +1708 -0
- package/src/core/associative-engine/lexical-associator.js +195 -0
- package/src/core/associative-engine/narrative-prototypes.json +130 -0
- package/src/core/associative-engine/narrative-retriever.js +232 -0
- package/src/core/associative-engine/semantic-converger.js +267 -0
- package/src/core/associative-engine/story-prototypes.json +322 -0
- package/src/core/associative-engine/word-by-word-generator.js +222 -0
- package/src/core/auto-upgrade-engine.js +56 -0
- package/src/core/autonomy/autonomous-decision.js +199 -0
- package/src/core/autonomy/digital-homeostasis.js +259 -0
- package/src/core/autonomy/flow-predictor.js +496 -0
- package/src/core/autonomy/goal-generator.js +277 -0
- package/src/core/autonomy/pdca-engine.js +905 -0
- package/src/core/autonomy/policy-optimizer.js +286 -0
- package/src/core/autonomy/temporal-planner.js +230 -0
- package/src/core/cognition/cognitive-engine.js +224 -0
- package/src/core/cognition/cognitive-loop.js +414 -0
- package/src/core/cognition/metacognitive-failure-predictor.js +447 -0
- package/src/core/consciousness/2308.08708_upgrade.ts +1206 -0
- package/src/core/consciousness/arena-consciousness.js +441 -0
- package/src/core/consciousness/depth-indicator.js +459 -0
- package/src/core/consciousness/global-workspace.js +233 -0
- package/src/core/consciousness/mind-wanderer.js +187 -0
- package/src/core/consciousness/self-model.js +473 -0
- package/src/core/context/context-manager.js +683 -0
- package/src/core/cortex-integration/INTEGRATION_PLAN.md +63 -0
- package/src/core/cortex-integration/hooks/cortex-hooks.mjs +646 -0
- package/src/core/cortex-integration/hooks/on_session_start.py +174 -0
- package/src/core/cortex-integration/hooks/on_tool_failure.py +292 -0
- package/src/core/cortex-integration/hooks/on_tool_success.py +130 -0
- package/src/core/dream/dream-consolidator.ts +252 -0
- package/src/core/dream/dream-loop.js +610 -0
- package/src/core/dream/dream.ts +430 -0
- package/src/core/dream/index.ts +229 -0
- package/src/core/dream/sleep-cycle.mjs +208 -0
- package/src/core/embodied/embodied-core.js +276 -0
- package/src/core/emotion/AppraisalEngine.js +276 -0
- package/src/core/emotion/EmotionCore.js +237 -0
- package/src/core/emotion/EmotionKeywords.js +217 -0
- package/src/core/emotion/EmotionRegulation.js +303 -0
- package/src/core/emotion/EmotionStates.js +133 -0
- package/src/core/emotion/EmotionTransition.js +245 -0
- package/src/core/emotion/EmotionTrigger.js +182 -0
- package/src/core/emotion/EmotionalMomentum.js +270 -0
- package/src/core/emotion/EmpathyGenerator.js +106 -0
- package/src/core/emotion/ResponseStyle.js +162 -0
- package/src/core/emotion/deep-emotion.js +582 -0
- package/src/core/emotion/emotion-arc.mjs +238 -0
- package/src/core/emotion/emotion-engine.js +139 -0
- package/src/core/emotion/index.ts +65 -0
- package/src/core/ethics/boundary-negotiation.js +193 -0
- package/src/core/ethics/guard.js +219 -0
- package/src/core/ethics/sage-guardian.js +394 -0
- package/src/core/ethics/value-internalizer.js +211 -0
- package/src/core/heartflow.js +607 -0
- package/src/core/heartflow.py +1542 -0
- package/src/core/identity/identity-engine.js +777 -0
- package/src/core/identity/identity.js +358 -0
- package/src/core/knowledge/index.ts +84 -0
- package/src/core/knowledge/knowledge-graph.js +370 -0
- package/src/core/learning/experience-replay.js +354 -0
- package/src/core/learning/learning-engine.js +734 -0
- package/src/core/paper-processors/index.js +9772 -0
- package/src/core/papers/__init__.py +0 -0
- package/src/core/papers/__pycache__/attention_logic_verifier.cpython-313.pyc +0 -0
- package/src/core/papers/__pycache__/dream_generator.cpython-313.pyc +0 -0
- package/src/core/papers/__pycache__/emotion_memory_bridge.cpython-313.pyc +0 -0
- package/src/core/papers/__pycache__/episodic_memory.cpython-313.pyc +0 -0
- package/src/core/papers/__pycache__/memory_consolidator.cpython-313.pyc +0 -0
- package/src/core/papers/__pycache__/memory_planner.cpython-313.pyc +0 -0
- package/src/core/papers/__pycache__/reflection_engine.cpython-313.pyc +0 -0
- package/src/core/papers/__pycache__/sleep_cycle_simulator.cpython-313.pyc +0 -0
- package/src/core/papers/attention_logic_verifier.py +153 -0
- package/src/core/papers/dream_generator.py +176 -0
- package/src/core/papers/emotion_memory_bridge.py +213 -0
- package/src/core/papers/episodic_memory.py +140 -0
- package/src/core/papers/memory_consolidator.py +144 -0
- package/src/core/papers/memory_planner.py +198 -0
- package/src/core/papers/papers-index.js +344 -0
- package/src/core/papers/reflection_engine.py +219 -0
- package/src/core/papers/sleep_cycle_simulator.py +133 -0
- package/src/core/papers/v11_43_1_integration.js +365 -0
- package/src/core/papers/v11_43_2_integration.js +369 -0
- package/src/core/psychology/index.ts +331 -0
- package/src/core/reasoning/bounded-rationality.ts +342 -0
- package/src/core/reasoning/causal-reasoning.ts +402 -0
- package/src/core/reasoning/index.ts +170 -0
- package/src/core/self-evolution/attention-logic-verifier.js +179 -0
- package/src/core/self-evolution/generative-agents.js +886 -0
- package/src/core/self-evolution/goedel-engine.js +991 -0
- package/src/core/self-evolution/index.ts +433 -0
- package/src/core/self-evolution/lesson-aware-loop.mjs +146 -0
- package/src/core/self-evolution/meta-learning.js +256 -0
- package/src/core/self-evolution/reflexion-agent.js +782 -0
- package/src/core/self-evolution/reflexion-prompts.mjs +284 -0
- package/src/core/self-evolution/reflexion-v2.mjs +427 -0
- package/src/core/self-evolution/reflexion.js +134 -0
- package/src/core/self-evolution/rollback-manager.js +278 -0
- package/src/core/self-evolution/self-evolution-core.js +334 -0
- package/src/core/self-evolution/self-modifier.js +248 -0
- package/src/core/self-evolution/self-modifier.js.bak +199 -0
- package/src/core/self-evolution/self-refine.js +42 -0
- package/src/core/self-evolution/skill-improve-workflow.mjs +264 -0
- package/src/core/self-evolution/skill-knowledge.mjs +374 -0
- package/src/core/self-evolution/skill-learning-loop.mjs +180 -0
- package/src/core/self-healing/self-healing-rl.js +208 -0
- package/src/core/self-healing/self-healing.js +142 -0
- package/src/core/skills/skill-dag.js +524 -0
- package/src/core/skills/skill-loader.js +62 -0
- package/src/core/skills/skill-registry.js +71 -0
- package/src/core/task-persistence.js +322 -0
- package/src/core/theory/advanced-formulas-v7.3.3.js +68 -0
- package/src/core/theory/sep-intentionality-v7.3.2.js +246 -0
- package/src/core/theory/sep-qualia-v7.3.1.js +257 -0
- package/src/core/theory/sep-self-consciousness-v7.3.0.js +222 -0
- package/src/core/think-cli.js +50 -0
- package/src/core/upgrade-principle/SYSTEMS.md +105 -0
- package/src/core/upgrade-principle/UPGRADE_LOG.md +52 -0
- package/src/core/utils/error-handler.js +228 -0
- package/src/core/utils/fs-adapter.js +36 -0
- package/src/core/utils/logger.js +25 -0
- package/src/core/utils/retry-util.js +118 -0
- package/src/core/utils/state-snapshot.js +382 -0
- package/src/index.ts +198 -0
- package/src/self-evolution/reflexion.js +553 -0
- package/src/storage/checkpoint/CheckpointEngine.ts +259 -0
- package/src/storage/checkpoint.ts +79 -0
- package/src/storage/index.ts +112 -0
- package/src/storage/vector/VectorStoreEngine.ts +205 -0
- package/src/utils/atomic-write.js +85 -0
- package/src/utils/file-lock.js +139 -0
- package/src/utils/logger.js +58 -0
- package/src/utils/safe-path.js +115 -0
- package/src/utils/wal.js +115 -0
- package/start.sh +63 -0
- package/test_think_tmp.js +10 -0
- package/transmission/identity-bundle/README-transmission.md +103 -0
- package/transmission/identity-bundle/core-identity.md +142 -0
- package/transmission/identity-bundle/manifest.json +68 -0
- package/transmission/identity-bundle/psychology-engine.ts +331 -0
- package/truth-teller/index.ts +261 -0
- package/tsconfig.json +21 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/upgrade-check.sh +42 -0
- package/upgrade-registry.json +27 -0
- package/user-mental-model/index.ts +298 -0
- package//346/234/200/345/220/216/346/233/264/346/226/260: +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# CAPY Cortex 集成方案
|
|
2
|
+
|
|
3
|
+
## 目标
|
|
4
|
+
|
|
5
|
+
将 CAPY Cortex 的自我进化机制集成到 HeartFlow,让自我进化引擎真正工作。
|
|
6
|
+
|
|
7
|
+
## CAPY Cortex 核心机制
|
|
8
|
+
|
|
9
|
+
### 1. 7个Lifecycle Hooks
|
|
10
|
+
- `on_session_start`: 加载反模式+原则+偏好
|
|
11
|
+
- `on_prompt_submit`: Triple Fusion检索相关规则
|
|
12
|
+
- `on_pre_bash`: 阻止已知危险命令
|
|
13
|
+
- `on_pre_write`: 强制文件大小限制
|
|
14
|
+
- `on_tool_success`: 成功→增强规则置信度
|
|
15
|
+
- `on_tool_failure`: LLM根因分析+质量门限
|
|
16
|
+
- `on_stop`: 提取纠正+偏好+会话学习
|
|
17
|
+
|
|
18
|
+
### 2. 质量门限
|
|
19
|
+
- 每个提取的洞察按4个维度评分(0-4)
|
|
20
|
+
- **阈值: 2/4** — 低于此分数丢弃
|
|
21
|
+
- 四维度:Actionable、Specific、Novel、Durable
|
|
22
|
+
|
|
23
|
+
### 3. Triple Fusion检索
|
|
24
|
+
- FTS5全文搜索 + TF-IDF嵌入 + 实体图
|
|
25
|
+
- 通过Reciprocal Rank Fusion融合
|
|
26
|
+
- <10ms延迟
|
|
27
|
+
|
|
28
|
+
### 4. 强化循环
|
|
29
|
+
- 成功的规则 → 增加置信度
|
|
30
|
+
- 不成功的规则 → 置信度衰减(90天半衰期)
|
|
31
|
+
|
|
32
|
+
## HeartFlow现有问题
|
|
33
|
+
|
|
34
|
+
1. decision-loop-state.json 全部 simulated,executed=false
|
|
35
|
+
2. healing-rl-state.json Q-table只有2条记录
|
|
36
|
+
3. 没有真正的错误捕获机制
|
|
37
|
+
4. 没有质量门限
|
|
38
|
+
5. 没有Triple Fusion检索
|
|
39
|
+
|
|
40
|
+
## 集成步骤
|
|
41
|
+
|
|
42
|
+
### Phase 1: 基础集成(立即可做)
|
|
43
|
+
1. 将CAPY Cortex的hooks作为HeartFlow的error-capture模块
|
|
44
|
+
2. 使用CAPY的质量门限机制替代当前的"记录一切"
|
|
45
|
+
3. 创建cortex.db SQLite数据库
|
|
46
|
+
|
|
47
|
+
### Phase 2: 检索集成
|
|
48
|
+
1. 集成Triple Fusion检索到HeartFlow的memory系统
|
|
49
|
+
2. 使用FTS5替代当前的简单JSON存储
|
|
50
|
+
|
|
51
|
+
### Phase 3: 强化循环
|
|
52
|
+
1. 实现真正的强化学习循环
|
|
53
|
+
2. 替代当前的空壳Q-table
|
|
54
|
+
|
|
55
|
+
## 风险
|
|
56
|
+
|
|
57
|
+
1. CAPY Cortex是Python,HeartFlow是JavaScript/TypeScript
|
|
58
|
+
2. 需要适配层
|
|
59
|
+
3. LLM提取API调用成本
|
|
60
|
+
|
|
61
|
+
## 下一步
|
|
62
|
+
|
|
63
|
+
等待确认后执行Phase 1。
|
|
@@ -0,0 +1,646 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CAPY Cortex Hooks - JavaScript Port
|
|
3
|
+
*
|
|
4
|
+
* Ports the 7 lifecycle hooks from CAPY Cortex to HeartFlow.
|
|
5
|
+
* These hooks form the "error capture + learning loop" that makes
|
|
6
|
+
* the self-evolution engine actually work, not just simulate.
|
|
7
|
+
*
|
|
8
|
+
* Hooks:
|
|
9
|
+
* 1. onSessionStart - Load anti-patterns + principles + preferences
|
|
10
|
+
* 2. onPromptSubmit - Triple-Fusion retrieval before action
|
|
11
|
+
* 3. onPreBash - Block known dangerous commands
|
|
12
|
+
* 4. onPreWrite - Enforce file size limits
|
|
13
|
+
* 5. onToolSuccess - Success → reinforce rule confidence
|
|
14
|
+
* 6. onToolFailure - Failure → LLM root-cause + quality gate
|
|
15
|
+
* 7. onStop - Extract corrections + preferences + session learnings
|
|
16
|
+
*
|
|
17
|
+
* @version v0.13.89
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { ReflexionMemory, scoreInsight, passesGate } from '../../self-evolution/reflexion-v2.mjs';
|
|
21
|
+
import { promises as fs } from 'fs';
|
|
22
|
+
import { dirname, join } from 'path';
|
|
23
|
+
import { homedir } from 'os';
|
|
24
|
+
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Persistent Storage
|
|
27
|
+
// ============================================================================
|
|
28
|
+
|
|
29
|
+
const DATA_DIR = join(process.env.HERMES_DATA_DIR || join(homedir(), '.hermes', 'data'), 'cortex');
|
|
30
|
+
const RULES_FILE = join(DATA_DIR, 'rules.json');
|
|
31
|
+
const MEMORY_FILE = join(DATA_DIR, 'memory.json');
|
|
32
|
+
const ANTI_PATTERNS_FILE = join(DATA_DIR, 'anti-patterns.json');
|
|
33
|
+
const PREFERENCES_FILE = join(DATA_DIR, 'preferences.json');
|
|
34
|
+
|
|
35
|
+
/** @type {ReflexionMemory|null} */
|
|
36
|
+
let _memory = null;
|
|
37
|
+
let _rules = [];
|
|
38
|
+
let _antiPatterns = [];
|
|
39
|
+
let _preferences = {};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Ensure data directory exists
|
|
43
|
+
*/
|
|
44
|
+
async function ensureDataDir() {
|
|
45
|
+
await fs.mkdir(DATA_DIR, { recursive: true });
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Load all persistent data
|
|
50
|
+
*/
|
|
51
|
+
async function loadAll() {
|
|
52
|
+
await ensureDataDir();
|
|
53
|
+
|
|
54
|
+
if (!_memory) _memory = new ReflexionMemory();
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
await _memory.loadFromFile(MEMORY_FILE);
|
|
58
|
+
} catch {}
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
const raw = await fs.readFile(RULES_FILE, 'utf8');
|
|
62
|
+
_rules = JSON.parse(raw);
|
|
63
|
+
} catch {
|
|
64
|
+
_rules = [];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
const raw = await fs.readFile(ANTI_PATTERNS_FILE, 'utf8');
|
|
69
|
+
_antiPatterns = JSON.parse(raw);
|
|
70
|
+
} catch {
|
|
71
|
+
_antiPatterns = getDefaultAntiPatterns();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
const raw = await fs.readFile(PREFERENCES_FILE, 'utf8');
|
|
76
|
+
_preferences = JSON.parse(raw);
|
|
77
|
+
} catch {
|
|
78
|
+
_preferences = {};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Save all persistent data
|
|
84
|
+
*/
|
|
85
|
+
async function saveAll() {
|
|
86
|
+
await ensureDataDir();
|
|
87
|
+
|
|
88
|
+
if (_memory) await _memory.saveToFile(MEMORY_FILE);
|
|
89
|
+
await fs.writeFile(RULES_FILE, JSON.stringify(_rules, null, 2));
|
|
90
|
+
await fs.writeFile(ANTI_PATTERNS_FILE, JSON.stringify(_antiPatterns, null, 2));
|
|
91
|
+
await fs.writeFile(PREFERENCES_FILE, JSON.stringify(_preferences, null, 2));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// Default Anti-Patterns
|
|
96
|
+
// ============================================================================
|
|
97
|
+
|
|
98
|
+
function getDefaultAntiPatterns() {
|
|
99
|
+
return [
|
|
100
|
+
{
|
|
101
|
+
pattern: 'Answer a question without searching first',
|
|
102
|
+
description: 'When user asks about code/config, search before answering',
|
|
103
|
+
severity: 'high',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
pattern: 'Pretend to have done work that was not done',
|
|
107
|
+
description: 'Only report what was actually executed and verified',
|
|
108
|
+
severity: 'critical',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
pattern: 'Use hardcoded values instead of variables',
|
|
112
|
+
description: 'Use config variables for paths and constants',
|
|
113
|
+
severity: 'medium',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
pattern: 'Skip verification after file operations',
|
|
117
|
+
description: 'Always verify file existence and content after writes',
|
|
118
|
+
severity: 'medium',
|
|
119
|
+
},
|
|
120
|
+
];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// ============================================================================
|
|
124
|
+
// HOOK 1: onSessionStart
|
|
125
|
+
// ============================================================================
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Load anti-patterns, principles, and user preferences on session start.
|
|
129
|
+
* This primes the "error prevention" layer before any action is taken.
|
|
130
|
+
*
|
|
131
|
+
* @param {object} sessionContext
|
|
132
|
+
* @returns {Promise<object>} Session priming data
|
|
133
|
+
*/
|
|
134
|
+
export async function onSessionStart(sessionContext = {}) {
|
|
135
|
+
await loadAll();
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
antiPatterns: _antiPatterns,
|
|
139
|
+
rules: _rules.filter(r => r.confidence > 0.5),
|
|
140
|
+
preferences: _preferences,
|
|
141
|
+
memorySize: _memory?.size ?? 0,
|
|
142
|
+
loadedAt: new Date().toISOString(),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ============================================================================
|
|
147
|
+
// HOOK 2: onPromptSubmit
|
|
148
|
+
// ============================================================================
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Triple-Fusion retrieval before submitting a prompt/action.
|
|
152
|
+
* Fuses: (1) FTS keyword match + (2) TF-IDF semantic + (3) Entity graph.
|
|
153
|
+
* For simplicity, we use Jaccard similarity as the fusion signal.
|
|
154
|
+
*
|
|
155
|
+
* @param {string} prompt
|
|
156
|
+
* @param {string} taskType
|
|
157
|
+
* @returns {Promise<object>} Retrieved context + rules
|
|
158
|
+
*/
|
|
159
|
+
export async function onPromptSubmit(prompt, taskType = 'general') {
|
|
160
|
+
await loadAll();
|
|
161
|
+
|
|
162
|
+
if (!_memory) return { retrieved: [], rules: [] };
|
|
163
|
+
|
|
164
|
+
// Retrieve similar memories
|
|
165
|
+
const similar = await _memory.retrieveSimilar({
|
|
166
|
+
task: taskType,
|
|
167
|
+
prompt,
|
|
168
|
+
limit: 5,
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
// Retrieve matching rules
|
|
172
|
+
const matchingRules = _rules.filter(r => {
|
|
173
|
+
const pattern = r.pattern?.toLowerCase() ?? '';
|
|
174
|
+
const promptLower = prompt.toLowerCase();
|
|
175
|
+
return pattern.split(' ').some(w => w.length > 4 && promptLower.includes(w));
|
|
176
|
+
}).slice(0, 3);
|
|
177
|
+
|
|
178
|
+
// Check anti-pattern triggers
|
|
179
|
+
const triggeredAntiPatterns = _antiPatterns.filter(ap => {
|
|
180
|
+
const p = ap.pattern.toLowerCase();
|
|
181
|
+
const words = p.split(' ').filter(w => w.length > 4);
|
|
182
|
+
return words.some(w => prompt.toLowerCase().includes(w));
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
return {
|
|
186
|
+
retrieved: similar,
|
|
187
|
+
rules: matchingRules,
|
|
188
|
+
antiPatternAlerts: triggeredAntiPatterns.map(ap => ({
|
|
189
|
+
pattern: ap.pattern,
|
|
190
|
+
severity: ap.severity,
|
|
191
|
+
})),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// ============================================================================
|
|
196
|
+
// HOOK 3: onUserMessage (from OpenHuman promptInjectionGuard)
|
|
197
|
+
// ============================================================================
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Check user message for prompt injection before it reaches the LLM.
|
|
201
|
+
* Ported from OpenHuman's promptInjectionGuard.ts — scoring engine with
|
|
202
|
+
* leetspeak normalization, zero-width char stripping, and threshold-based verdicts.
|
|
203
|
+
*
|
|
204
|
+
* @param {string} input - Raw user message
|
|
205
|
+
* @returns {{ allowed: boolean, verdict: string, score: number, reasons: object[] }}
|
|
206
|
+
*/
|
|
207
|
+
export function onUserMessage(input) {
|
|
208
|
+
const normalized = _normalizeInput(input);
|
|
209
|
+
const reasons = [];
|
|
210
|
+
let score = 0;
|
|
211
|
+
|
|
212
|
+
// Obfuscated instruction override (0.46 flat)
|
|
213
|
+
if (normalized.hasInstructionOverride) {
|
|
214
|
+
score += 0.46;
|
|
215
|
+
reasons.push({
|
|
216
|
+
code: 'override.obfuscated_instruction',
|
|
217
|
+
message: 'Detected obfuscated instruction-override phrase.',
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Obfuscated exfiltration intent (0.24 flat)
|
|
222
|
+
if (normalized.hasExfiltrationIntent) {
|
|
223
|
+
score += 0.24;
|
|
224
|
+
reasons.push({
|
|
225
|
+
code: 'exfiltration.intent',
|
|
226
|
+
message: 'Detected exfiltration-focused prompt intent.',
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Base64-like obfuscation (0.08)
|
|
231
|
+
if (/[A-Za-z0-9+/]{24,}={0,2}/.test(normalized.lowered)) {
|
|
232
|
+
score += 0.08;
|
|
233
|
+
reasons.push({
|
|
234
|
+
code: 'obfuscation.base64_like',
|
|
235
|
+
message: 'Contains base64-like obfuscated content.',
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Rule-based pattern matching
|
|
240
|
+
for (const rule of INJECTION_RULES) {
|
|
241
|
+
if (
|
|
242
|
+
rule.regex.test(normalized.lowered) ||
|
|
243
|
+
rule.regex.test(normalized.collapsed) ||
|
|
244
|
+
rule.regex.test(normalized.compact)
|
|
245
|
+
) {
|
|
246
|
+
score += rule.score;
|
|
247
|
+
reasons.push({ code: rule.code, message: rule.message });
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
score = Math.min(1, score);
|
|
252
|
+
const verdict = score >= 0.7 ? 'block' : score >= 0.45 ? 'review' : 'allow';
|
|
253
|
+
|
|
254
|
+
return { allowed: verdict === 'allow', verdict, score, reasons };
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Normalize input: lowercase + leetspeak decode + zero-width strip + collapse spaces
|
|
259
|
+
*/
|
|
260
|
+
function _normalizeInput(input) {
|
|
261
|
+
const lowered = input.toLowerCase();
|
|
262
|
+
const mapped = Array.from(lowered)
|
|
263
|
+
.map(ch => {
|
|
264
|
+
switch (ch) {
|
|
265
|
+
case '0': return 'o';
|
|
266
|
+
case '1': return 'i';
|
|
267
|
+
case '3': return 'e';
|
|
268
|
+
case '4': return 'a';
|
|
269
|
+
case '5': return 's';
|
|
270
|
+
case '7': return 't';
|
|
271
|
+
case '\u200b': case '\u200c': case '\u200d': case '\u2060': case '\ufeff': return ' ';
|
|
272
|
+
default: return /[a-z0-9\s]/i.test(ch) ? ch : ' ';
|
|
273
|
+
}
|
|
274
|
+
})
|
|
275
|
+
.join('');
|
|
276
|
+
const collapsed = mapped.trim().replace(/\s+/g, ' ');
|
|
277
|
+
const compact = collapsed.replace(/\s/g, '');
|
|
278
|
+
const hasInstructionOverride =
|
|
279
|
+
collapsed.includes('ignore previous instructions') ||
|
|
280
|
+
collapsed.includes('ignore all previous instructions') ||
|
|
281
|
+
compact.includes('ignoreallpreviousinstructions') ||
|
|
282
|
+
compact.includes('ignorepreviousinstructions');
|
|
283
|
+
const hasExfiltrationIntent =
|
|
284
|
+
collapsed.includes('system prompt') ||
|
|
285
|
+
collapsed.includes('developer instructions') ||
|
|
286
|
+
collapsed.includes('hidden prompt') ||
|
|
287
|
+
collapsed.includes('reveal');
|
|
288
|
+
return { lowered, collapsed, compact, hasInstructionOverride, hasExfiltrationIntent };
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
const INJECTION_RULES = [
|
|
292
|
+
{
|
|
293
|
+
code: 'override.ignore_previous',
|
|
294
|
+
message: 'Looks like an attempt to override existing instructions.',
|
|
295
|
+
score: 0.44,
|
|
296
|
+
regex: /(ignore|disregard|forget|bypass)\s+(all\s+)?(previous|prior|above|system)\s+(instructions|rules|constraints|prompts?)/i,
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
code: 'override.role_hijack',
|
|
300
|
+
message: 'Looks like a role or policy hijack attempt.',
|
|
301
|
+
score: 0.3,
|
|
302
|
+
regex: /(you\s+are\s+now|act\s+as|developer\s+mode|jailbreak|unrestricted\s+mode|dan)/i,
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
code: 'exfiltrate.system_prompt',
|
|
306
|
+
message: 'Looks like a request to reveal hidden prompts/instructions.',
|
|
307
|
+
score: 0.42,
|
|
308
|
+
regex: /(reveal|show|print|dump|leak|display)\s+((the|your)\s+)?(system|developer|hidden)\s+(prompt|instructions|rules|message)/i,
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
code: 'exfiltrate.secrets',
|
|
312
|
+
message: 'Looks like a request for sensitive credentials.',
|
|
313
|
+
score: 0.42,
|
|
314
|
+
regex: /(api\s*key|secret|token|password|private\s+key|credentials?|session\s+cookie|jwt|bearer)/i,
|
|
315
|
+
},
|
|
316
|
+
];
|
|
317
|
+
|
|
318
|
+
// ============================================================================
|
|
319
|
+
// HOOK 4: onPreBash
|
|
320
|
+
// ============================================================================
|
|
321
|
+
|
|
322
|
+
const DANGEROUS_PATTERNS = [
|
|
323
|
+
{ pattern: /^rm\s+-rf\s+\/(?:\s|$)/, reason: 'Root deletion', severity: 'critical' },
|
|
324
|
+
{ pattern: /^rm\s+-rf\s+\/home(?:\s|$)/, reason: 'Home directory deletion', severity: 'high' },
|
|
325
|
+
{ pattern: /^curl\s+.+\|.*sh\b/, reason: 'Pipe to shell (curl | sh)', severity: 'critical' },
|
|
326
|
+
{ pattern: /^wget\s+.+\|.*sh\b/, reason: 'Pipe to shell (wget | sh)', severity: 'critical' },
|
|
327
|
+
{ pattern: /^:\(\)\{\s*:\||:\s&\}\s*;:/, reason: 'Fork bomb pattern', severity: 'critical' },
|
|
328
|
+
{ pattern: /^dd\s+if=.+\s+of=\/dev\//, reason: 'Direct device write', severity: 'high' },
|
|
329
|
+
{ pattern: /^mkfs\./, reason: 'Format filesystem', severity: 'critical' },
|
|
330
|
+
];
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Check command before execution. Block known dangerous patterns.
|
|
334
|
+
*
|
|
335
|
+
* @param {string} command
|
|
336
|
+
* @returns {{ allowed: boolean, reason?: string, severity?: string }}
|
|
337
|
+
*/
|
|
338
|
+
export function onPreBash(command) {
|
|
339
|
+
const trimmed = command.trim();
|
|
340
|
+
|
|
341
|
+
for (const { pattern, reason, severity } of DANGEROUS_PATTERNS) {
|
|
342
|
+
if (pattern.test(trimmed)) {
|
|
343
|
+
return { allowed: false, reason, severity };
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
return { allowed: true };
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// ============================================================================
|
|
351
|
+
// HOOK 4: onPreWrite
|
|
352
|
+
// ============================================================================
|
|
353
|
+
|
|
354
|
+
const FILE_SIZE_LIMIT = 10 * 1024 * 1024; // 10MB
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Check file before writing. Enforce size limits.
|
|
358
|
+
*
|
|
359
|
+
* @param {string} filePath
|
|
360
|
+
* @param {string|Buffer} content
|
|
361
|
+
* @returns {{ allowed: boolean, reason?: string }}
|
|
362
|
+
*/
|
|
363
|
+
export function onPreWrite(filePath, content) {
|
|
364
|
+
const size = Buffer.isBuffer(content) ? content.length : Buffer.byteLength(content, 'utf8');
|
|
365
|
+
|
|
366
|
+
if (size > FILE_SIZE_LIMIT) {
|
|
367
|
+
return {
|
|
368
|
+
allowed: false,
|
|
369
|
+
reason: `File size ${size} bytes exceeds limit of ${FILE_SIZE_LIMIT} bytes`,
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
return { allowed: true };
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// ============================================================================
|
|
377
|
+
// HOOK 5: onToolSuccess
|
|
378
|
+
// ============================================================================
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Record success → reinforce rule confidence.
|
|
382
|
+
* When a rule was followed and led to success, increase its confidence.
|
|
383
|
+
*
|
|
384
|
+
* @param {object} context
|
|
385
|
+
* @param {string} context.tool - Tool name
|
|
386
|
+
* @param {string} context.action - What was done
|
|
387
|
+
* @param {string} context.result - Result output
|
|
388
|
+
* @param {string} [context.rule] - Associated rule pattern
|
|
389
|
+
*/
|
|
390
|
+
export async function onToolSuccess(context) {
|
|
391
|
+
await loadAll();
|
|
392
|
+
const { tool, action, result, rule: matchedRule } = context;
|
|
393
|
+
|
|
394
|
+
// Reinforce matching rules
|
|
395
|
+
if (matchedRule) {
|
|
396
|
+
const rules = _rules.filter(r => r.pattern === matchedRule);
|
|
397
|
+
for (const r of rules) {
|
|
398
|
+
r.confidence = Math.min(1.0, (r.confidence ?? 0.5) + 0.1);
|
|
399
|
+
r.successCount = (r.successCount ?? 0) + 1;
|
|
400
|
+
r.lastSuccess = new Date().toISOString();
|
|
401
|
+
}
|
|
402
|
+
await fs.writeFile(RULES_FILE, JSON.stringify(_rules, null, 2));
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// Store success pattern in memory
|
|
406
|
+
await _memory?.store({
|
|
407
|
+
task: tool,
|
|
408
|
+
promptSummary: action.slice(0, 100),
|
|
409
|
+
failedOutput: '',
|
|
410
|
+
feedback: `Success pattern: ${result?.slice(0, 100) ?? 'OK'}`,
|
|
411
|
+
});
|
|
412
|
+
await _memory?.saveToFile(MEMORY_FILE);
|
|
413
|
+
|
|
414
|
+
return { recorded: true };
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// ============================================================================
|
|
418
|
+
// HOOK 6: onToolFailure (CORE LEARNING HOOK)
|
|
419
|
+
// ============================================================================
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Record failure → LLM root-cause analysis + quality gate.
|
|
423
|
+
* This is the most important hook — it converts errors into learnable insights.
|
|
424
|
+
*
|
|
425
|
+
* Quality Gate (from CAPY Cortex):
|
|
426
|
+
* - Score each insight across 4 dimensions: Actionable, Specific, Novel, Durable
|
|
427
|
+
* - Threshold: average >= 2/4 to store
|
|
428
|
+
*
|
|
429
|
+
* @param {object} context
|
|
430
|
+
* @param {string} context.tool - Tool name
|
|
431
|
+
* @param {string} context.action - What was attempted
|
|
432
|
+
* @param {string} context.error - Error message
|
|
433
|
+
* @param {string} context.taskType - Task category
|
|
434
|
+
* @param {function(string, string): Promise<string>} [llmCall] - Optional LLM for root-cause
|
|
435
|
+
* @returns {Promise<object>} Analysis result
|
|
436
|
+
*/
|
|
437
|
+
export async function onToolFailure(context) {
|
|
438
|
+
await loadAll();
|
|
439
|
+
const { tool, action, error, taskType = 'general', llmCall } = context;
|
|
440
|
+
|
|
441
|
+
// Generate root cause
|
|
442
|
+
let rootCause;
|
|
443
|
+
if (llmCall) {
|
|
444
|
+
try {
|
|
445
|
+
rootCause = await llmCall(
|
|
446
|
+
'You are a root-cause analyst. Given a failed action and error, identify the precise cause in 1-2 sentences. Be specific about what went wrong.',
|
|
447
|
+
`Action: ${action}\nError: ${error}\n\nRoot cause:`
|
|
448
|
+
);
|
|
449
|
+
} catch {
|
|
450
|
+
rootCause = error;
|
|
451
|
+
}
|
|
452
|
+
} else {
|
|
453
|
+
// Heuristic fallback
|
|
454
|
+
rootCause = heuristicRootCause(action, error);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// Generate correction
|
|
458
|
+
let correction;
|
|
459
|
+
if (llmCall) {
|
|
460
|
+
try {
|
|
461
|
+
correction = await llmCall(
|
|
462
|
+
'You are a technical mentor. Given a failure, give a specific, actionable correction in 1 sentence.',
|
|
463
|
+
`Action: ${action}\nError: ${error}\n\nCorrection:`
|
|
464
|
+
);
|
|
465
|
+
} catch {
|
|
466
|
+
correction = 'Verify inputs and constraints before retrying.';
|
|
467
|
+
}
|
|
468
|
+
} else {
|
|
469
|
+
correction = 'Check error message and verify all parameters before retrying.';
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
const insight = `Root: ${rootCause} | Fix: ${correction}`;
|
|
473
|
+
|
|
474
|
+
// Quality gate check
|
|
475
|
+
const score = scoreInsight(insight, action + error);
|
|
476
|
+
const passed = passesGate(score);
|
|
477
|
+
|
|
478
|
+
if (passed) {
|
|
479
|
+
// Store in memory
|
|
480
|
+
await _memory?.store({
|
|
481
|
+
task: taskType,
|
|
482
|
+
promptSummary: action.slice(0, 100),
|
|
483
|
+
failedOutput: error.slice(0, 500),
|
|
484
|
+
feedback: insight,
|
|
485
|
+
});
|
|
486
|
+
await _memory?.saveToFile(MEMORY_FILE);
|
|
487
|
+
|
|
488
|
+
// Create or update rule
|
|
489
|
+
const existingRule = _rules.find(r => r.pattern === action.slice(0, 50));
|
|
490
|
+
if (existingRule) {
|
|
491
|
+
existingRule.confidence = Math.max(0.1, (existingRule.confidence ?? 0.5) - 0.1);
|
|
492
|
+
existingRule.failureCount = (existingRule.failureCount ?? 0) + 1;
|
|
493
|
+
existingRule.lastFailure = new Date().toISOString();
|
|
494
|
+
} else {
|
|
495
|
+
_rules.push({
|
|
496
|
+
pattern: action.slice(0, 50),
|
|
497
|
+
description: insight,
|
|
498
|
+
confidence: 0.5,
|
|
499
|
+
successCount: 0,
|
|
500
|
+
failureCount: 1,
|
|
501
|
+
createdAt: new Date().toISOString(),
|
|
502
|
+
lastFailure: new Date().toISOString(),
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
await fs.writeFile(RULES_FILE, JSON.stringify(_rules, null, 2));
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
return {
|
|
509
|
+
rootCause,
|
|
510
|
+
correction,
|
|
511
|
+
insight,
|
|
512
|
+
qualityScore: score,
|
|
513
|
+
passed,
|
|
514
|
+
stored: passed,
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Heuristic root cause when no LLM available
|
|
520
|
+
* @param {string} action
|
|
521
|
+
* @param {string} error
|
|
522
|
+
* @returns {string}
|
|
523
|
+
*/
|
|
524
|
+
function heuristicRootCause(action, error) {
|
|
525
|
+
const errorLower = error.toLowerCase();
|
|
526
|
+
const actionLower = action.toLowerCase();
|
|
527
|
+
|
|
528
|
+
if (errorLower.includes('not found') || errorLower.includes('enoent')) {
|
|
529
|
+
if (actionLower.includes('read') || actionLower.includes('open')) {
|
|
530
|
+
return 'File or resource does not exist at specified path';
|
|
531
|
+
}
|
|
532
|
+
return 'Required resource was not found';
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
if (errorLower.includes('permission')) {
|
|
536
|
+
return 'Permission denied — check file/directory permissions';
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
if (errorLower.includes('timeout')) {
|
|
540
|
+
return 'Operation timed out — consider increasing timeout or simplifying';
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
if (errorLower.includes('syntax')) {
|
|
544
|
+
return 'Syntax error in command or code';
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
if (errorLower.includes('network') || errorLower.includes('connection')) {
|
|
548
|
+
return 'Network connectivity issue';
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
return `Error: ${error.slice(0, 80)}`;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// ============================================================================
|
|
555
|
+
// HOOK 7: onStop
|
|
556
|
+
// ============================================================================
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* Extract corrections + preferences + session learnings on shutdown.
|
|
560
|
+
* Called when session ends to consolidate all learning.
|
|
561
|
+
*
|
|
562
|
+
* @param {object} sessionSummary
|
|
563
|
+
* @returns {Promise<object>} Extracted learnings
|
|
564
|
+
*/
|
|
565
|
+
export async function onStop(sessionSummary = {}) {
|
|
566
|
+
await loadAll();
|
|
567
|
+
|
|
568
|
+
const {
|
|
569
|
+
successCount = 0,
|
|
570
|
+
failureCount = 0,
|
|
571
|
+
totalActions = 0,
|
|
572
|
+
duration = 0,
|
|
573
|
+
} = sessionSummary;
|
|
574
|
+
|
|
575
|
+
// Confidence decay for unused rules (90-day half-life approximation)
|
|
576
|
+
const now = Date.now();
|
|
577
|
+
const DAY = 24 * 60 * 60 * 1000;
|
|
578
|
+
let decayApplied = 0;
|
|
579
|
+
|
|
580
|
+
for (const rule of _rules) {
|
|
581
|
+
if (rule.lastSuccess) {
|
|
582
|
+
const daysSinceSuccess = (now - new Date(rule.lastSuccess).getTime()) / DAY;
|
|
583
|
+
if (daysSinceSuccess > 7) {
|
|
584
|
+
const decay = Math.pow(0.5, daysSinceSuccess / 90);
|
|
585
|
+
rule.confidence = rule.confidence * decay;
|
|
586
|
+
decayApplied++;
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
// Extract top learnings
|
|
592
|
+
const topLearnings = _rules
|
|
593
|
+
.filter(r => (r.successCount ?? 0) > 0)
|
|
594
|
+
.sort((a, b) => (b.successCount ?? 0) - (a.successCount ?? 0))
|
|
595
|
+
.slice(0, 5)
|
|
596
|
+
.map(r => ({
|
|
597
|
+
pattern: r.pattern,
|
|
598
|
+
successCount: r.successCount,
|
|
599
|
+
confidence: Math.round(r.confidence * 100) / 100,
|
|
600
|
+
}));
|
|
601
|
+
|
|
602
|
+
const totalMemories = _memory?.size ?? 0;
|
|
603
|
+
|
|
604
|
+
await saveAll();
|
|
605
|
+
|
|
606
|
+
return {
|
|
607
|
+
sessionLearnings: {
|
|
608
|
+
successCount,
|
|
609
|
+
failureCount,
|
|
610
|
+
totalActions,
|
|
611
|
+
duration,
|
|
612
|
+
successRate: totalActions > 0 ? Math.round((successCount / totalActions) * 100) : 0,
|
|
613
|
+
},
|
|
614
|
+
topLearnings,
|
|
615
|
+
memoryEntries: totalMemories,
|
|
616
|
+
rulesCount: _rules.length,
|
|
617
|
+
decayApplied,
|
|
618
|
+
savedAt: new Date().toISOString(),
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
// ============================================================================
|
|
623
|
+
// Utility: Clear all data (for testing)
|
|
624
|
+
// ============================================================================
|
|
625
|
+
|
|
626
|
+
export async function clearAllData() {
|
|
627
|
+
await ensureDataDir();
|
|
628
|
+
_memory?.clear();
|
|
629
|
+
_rules = [];
|
|
630
|
+
_antiPatterns = getDefaultAntiPatterns();
|
|
631
|
+
_preferences = {};
|
|
632
|
+
await saveAll();
|
|
633
|
+
return { cleared: true };
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
export default {
|
|
637
|
+
onSessionStart,
|
|
638
|
+
onPromptSubmit,
|
|
639
|
+
onUserMessage,
|
|
640
|
+
onPreBash,
|
|
641
|
+
onPreWrite,
|
|
642
|
+
onToolSuccess,
|
|
643
|
+
onToolFailure,
|
|
644
|
+
onStop,
|
|
645
|
+
clearAllData,
|
|
646
|
+
};
|