abmind 0.0.1 → 0.1.1
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/CHANGELOG.md +34 -0
- package/LICENSE +190 -0
- package/README.md +191 -0
- package/dist/cli/abmind-backfill.d.ts +3 -0
- package/dist/cli/abmind-backfill.d.ts.map +1 -0
- package/dist/cli/abmind-backfill.js +64 -0
- package/dist/cli/abmind-backfill.js.map +1 -0
- package/dist/cli/abmind-backup.d.ts +5 -0
- package/dist/cli/abmind-backup.d.ts.map +1 -0
- package/dist/cli/abmind-backup.js +44 -0
- package/dist/cli/abmind-backup.js.map +1 -0
- package/dist/cli/abmind-bundle.d.ts +7 -0
- package/dist/cli/abmind-bundle.d.ts.map +1 -0
- package/dist/cli/abmind-bundle.js +17 -0
- package/dist/cli/abmind-bundle.js.map +1 -0
- package/dist/cli/abmind-edit.d.ts +10 -0
- package/dist/cli/abmind-edit.d.ts.map +1 -0
- package/dist/cli/abmind-edit.js +160 -0
- package/dist/cli/abmind-edit.js.map +1 -0
- package/dist/cli/abmind-embed.d.ts +3 -0
- package/dist/cli/abmind-embed.d.ts.map +1 -0
- package/dist/cli/abmind-embed.js +83 -0
- package/dist/cli/abmind-embed.js.map +1 -0
- package/dist/cli/abmind-expand.d.ts +6 -0
- package/dist/cli/abmind-expand.d.ts.map +1 -0
- package/dist/cli/abmind-expand.js +100 -0
- package/dist/cli/abmind-expand.js.map +1 -0
- package/dist/cli/abmind-hook-doctor.d.ts +8 -0
- package/dist/cli/abmind-hook-doctor.d.ts.map +1 -0
- package/dist/cli/abmind-hook-doctor.js +73 -0
- package/dist/cli/abmind-hook-doctor.js.map +1 -0
- package/dist/cli/abmind-hook-recall.d.ts +16 -0
- package/dist/cli/abmind-hook-recall.d.ts.map +1 -0
- package/dist/cli/abmind-hook-recall.js +123 -0
- package/dist/cli/abmind-hook-recall.js.map +1 -0
- package/dist/cli/abmind-hook-store.d.ts +17 -0
- package/dist/cli/abmind-hook-store.d.ts.map +1 -0
- package/dist/cli/abmind-hook-store.js +115 -0
- package/dist/cli/abmind-hook-store.js.map +1 -0
- package/dist/cli/abmind-hook-wakeup.d.ts +12 -0
- package/dist/cli/abmind-hook-wakeup.d.ts.map +1 -0
- package/dist/cli/abmind-hook-wakeup.js +143 -0
- package/dist/cli/abmind-hook-wakeup.js.map +1 -0
- package/dist/cli/abmind-ingest.d.ts +7 -0
- package/dist/cli/abmind-ingest.d.ts.map +1 -0
- package/dist/cli/abmind-ingest.js +96 -0
- package/dist/cli/abmind-ingest.js.map +1 -0
- package/dist/cli/abmind-install.d.ts +10 -0
- package/dist/cli/abmind-install.d.ts.map +1 -0
- package/dist/cli/abmind-install.js +240 -0
- package/dist/cli/abmind-install.js.map +1 -0
- package/dist/cli/abmind-mcp.d.ts +3 -0
- package/dist/cli/abmind-mcp.d.ts.map +1 -0
- package/dist/cli/abmind-mcp.js +26 -0
- package/dist/cli/abmind-mcp.js.map +1 -0
- package/dist/cli/abmind-memory-stats.d.ts +3 -0
- package/dist/cli/abmind-memory-stats.d.ts.map +1 -0
- package/dist/cli/abmind-memory-stats.js +45 -0
- package/dist/cli/abmind-memory-stats.js.map +1 -0
- package/dist/cli/abmind-migrate-openclaw.d.ts +12 -0
- package/dist/cli/abmind-migrate-openclaw.d.ts.map +1 -0
- package/dist/cli/abmind-migrate-openclaw.js +247 -0
- package/dist/cli/abmind-migrate-openclaw.js.map +1 -0
- package/dist/cli/abmind-recall.d.ts +8 -0
- package/dist/cli/abmind-recall.d.ts.map +1 -0
- package/dist/cli/abmind-recall.js +94 -0
- package/dist/cli/abmind-recall.js.map +1 -0
- package/dist/cli/abmind-reset.d.ts +11 -0
- package/dist/cli/abmind-reset.d.ts.map +1 -0
- package/dist/cli/abmind-reset.js +143 -0
- package/dist/cli/abmind-reset.js.map +1 -0
- package/dist/cli/abmind-restore.d.ts +5 -0
- package/dist/cli/abmind-restore.d.ts.map +1 -0
- package/dist/cli/abmind-restore.js +64 -0
- package/dist/cli/abmind-restore.js.map +1 -0
- package/dist/cli/abmind-retro-extract.d.ts +15 -0
- package/dist/cli/abmind-retro-extract.d.ts.map +1 -0
- package/dist/cli/abmind-retro-extract.js +113 -0
- package/dist/cli/abmind-retro-extract.js.map +1 -0
- package/dist/cli/abmind-rollback.d.ts +8 -0
- package/dist/cli/abmind-rollback.d.ts.map +1 -0
- package/dist/cli/abmind-rollback.js +76 -0
- package/dist/cli/abmind-rollback.js.map +1 -0
- package/dist/cli/abmind-secrets.d.ts +12 -0
- package/dist/cli/abmind-secrets.d.ts.map +1 -0
- package/dist/cli/abmind-secrets.js +83 -0
- package/dist/cli/abmind-secrets.js.map +1 -0
- package/dist/cli/abmind-sleep-apply.d.ts +3 -0
- package/dist/cli/abmind-sleep-apply.d.ts.map +1 -0
- package/dist/cli/abmind-sleep-apply.js +50 -0
- package/dist/cli/abmind-sleep-apply.js.map +1 -0
- package/dist/cli/abmind-sleep-report.d.ts +3 -0
- package/dist/cli/abmind-sleep-report.d.ts.map +1 -0
- package/dist/cli/abmind-sleep-report.js +40 -0
- package/dist/cli/abmind-sleep-report.js.map +1 -0
- package/dist/cli/abmind-sleep-state.d.ts +3 -0
- package/dist/cli/abmind-sleep-state.d.ts.map +1 -0
- package/dist/cli/abmind-sleep-state.js +33 -0
- package/dist/cli/abmind-sleep-state.js.map +1 -0
- package/dist/cli/abmind-sleep.d.ts +14 -0
- package/dist/cli/abmind-sleep.d.ts.map +1 -0
- package/dist/cli/abmind-sleep.js +186 -0
- package/dist/cli/abmind-sleep.js.map +1 -0
- package/dist/cli/abmind-status-runtime.d.ts +9 -0
- package/dist/cli/abmind-status-runtime.d.ts.map +1 -0
- package/dist/cli/abmind-status-runtime.js +132 -0
- package/dist/cli/abmind-status-runtime.js.map +1 -0
- package/dist/cli/abmind-status.d.ts +3 -0
- package/dist/cli/abmind-status.d.ts.map +1 -0
- package/dist/cli/abmind-status.js +45 -0
- package/dist/cli/abmind-status.js.map +1 -0
- package/dist/cli/abmind-store.d.ts +54 -0
- package/dist/cli/abmind-store.d.ts.map +1 -0
- package/dist/cli/abmind-store.js +251 -0
- package/dist/cli/abmind-store.js.map +1 -0
- package/dist/cli/abmind-update.d.ts +11 -0
- package/dist/cli/abmind-update.d.ts.map +1 -0
- package/dist/cli/abmind-update.js +160 -0
- package/dist/cli/abmind-update.js.map +1 -0
- package/dist/cli/abmind-wakeup.d.ts +3 -0
- package/dist/cli/abmind-wakeup.d.ts.map +1 -0
- package/dist/cli/abmind-wakeup.js +36 -0
- package/dist/cli/abmind-wakeup.js.map +1 -0
- package/dist/cli/abmind.d.ts +10 -0
- package/dist/cli/abmind.d.ts.map +1 -0
- package/dist/cli/abmind.js +100 -0
- package/dist/cli/abmind.js.map +1 -0
- package/dist/src/abm-v2-vocab.d.ts +10 -0
- package/dist/src/abm-v2-vocab.d.ts.map +1 -0
- package/dist/src/abm-v2-vocab.js +66 -0
- package/dist/src/abm-v2-vocab.js.map +1 -0
- package/dist/src/adapters/openclaw.d.ts +66 -0
- package/dist/src/adapters/openclaw.d.ts.map +1 -0
- package/dist/src/adapters/openclaw.js +97 -0
- package/dist/src/adapters/openclaw.js.map +1 -0
- package/dist/src/backend-factory.d.ts +9 -0
- package/dist/src/backend-factory.d.ts.map +1 -0
- package/dist/src/backend-factory.js +23 -0
- package/dist/src/backend-factory.js.map +1 -0
- package/dist/src/backup.d.ts +19 -0
- package/dist/src/backup.d.ts.map +1 -0
- package/dist/src/backup.js +191 -0
- package/dist/src/backup.js.map +1 -0
- package/dist/src/brain-patterns.d.ts +20 -0
- package/dist/src/brain-patterns.d.ts.map +1 -0
- package/dist/src/brain-patterns.js +72 -0
- package/dist/src/brain-patterns.js.map +1 -0
- package/dist/src/cli-entry.d.ts +10 -0
- package/dist/src/cli-entry.d.ts.map +1 -0
- package/dist/src/cli-entry.js +29 -0
- package/dist/src/cli-entry.js.map +1 -0
- package/dist/src/cli-flags.d.ts +29 -0
- package/dist/src/cli-flags.d.ts.map +1 -0
- package/dist/src/cli-flags.js +72 -0
- package/dist/src/cli-flags.js.map +1 -0
- package/dist/src/cli-runner-raw.d.ts +21 -0
- package/dist/src/cli-runner-raw.d.ts.map +1 -0
- package/dist/src/cli-runner-raw.js +41 -0
- package/dist/src/cli-runner-raw.js.map +1 -0
- package/dist/src/cli-runner.d.ts +26 -0
- package/dist/src/cli-runner.d.ts.map +1 -0
- package/dist/src/cli-runner.js +51 -0
- package/dist/src/cli-runner.js.map +1 -0
- package/dist/src/consolidation-search.d.ts +17 -0
- package/dist/src/consolidation-search.d.ts.map +1 -0
- package/dist/src/consolidation-search.js +83 -0
- package/dist/src/consolidation-search.js.map +1 -0
- package/dist/src/context-engine.d.ts +89 -0
- package/dist/src/context-engine.d.ts.map +1 -0
- package/dist/src/context-engine.js +216 -0
- package/dist/src/context-engine.js.map +1 -0
- package/dist/src/context-tier-renderer.d.ts +79 -0
- package/dist/src/context-tier-renderer.d.ts.map +1 -0
- package/dist/src/context-tier-renderer.js +223 -0
- package/dist/src/context-tier-renderer.js.map +1 -0
- package/dist/src/contradiction-checker.d.ts +16 -0
- package/dist/src/contradiction-checker.d.ts.map +1 -0
- package/dist/src/contradiction-checker.js +40 -0
- package/dist/src/contradiction-checker.js.map +1 -0
- package/dist/src/crypto.d.ts +15 -0
- package/dist/src/crypto.d.ts.map +1 -0
- package/dist/src/crypto.js +86 -0
- package/dist/src/crypto.js.map +1 -0
- package/dist/src/deploy-lib/cleanup.d.ts +38 -0
- package/dist/src/deploy-lib/cleanup.d.ts.map +1 -0
- package/dist/src/deploy-lib/cleanup.js +71 -0
- package/dist/src/deploy-lib/cleanup.js.map +1 -0
- package/dist/src/deploy-lib/index.d.ts +20 -0
- package/dist/src/deploy-lib/index.d.ts.map +1 -0
- package/dist/src/deploy-lib/index.js +20 -0
- package/dist/src/deploy-lib/index.js.map +1 -0
- package/dist/src/deploy-lib/lock.d.ts +37 -0
- package/dist/src/deploy-lib/lock.d.ts.map +1 -0
- package/dist/src/deploy-lib/lock.js +107 -0
- package/dist/src/deploy-lib/lock.js.map +1 -0
- package/dist/src/deploy-lib/manifest.d.ts +42 -0
- package/dist/src/deploy-lib/manifest.d.ts.map +1 -0
- package/dist/src/deploy-lib/manifest.js +38 -0
- package/dist/src/deploy-lib/manifest.js.map +1 -0
- package/dist/src/deploy-lib/paths.d.ts +29 -0
- package/dist/src/deploy-lib/paths.d.ts.map +1 -0
- package/dist/src/deploy-lib/paths.js +40 -0
- package/dist/src/deploy-lib/paths.js.map +1 -0
- package/dist/src/deploy-lib/releases.d.ts +52 -0
- package/dist/src/deploy-lib/releases.d.ts.map +1 -0
- package/dist/src/deploy-lib/releases.js +119 -0
- package/dist/src/deploy-lib/releases.js.map +1 -0
- package/dist/src/deploy-lib/safe-copy.d.ts +16 -0
- package/dist/src/deploy-lib/safe-copy.d.ts.map +1 -0
- package/dist/src/deploy-lib/safe-copy.js +32 -0
- package/dist/src/deploy-lib/safe-copy.js.map +1 -0
- package/dist/src/embedding-health.d.ts +12 -0
- package/dist/src/embedding-health.d.ts.map +1 -0
- package/dist/src/embedding-health.js +18 -0
- package/dist/src/embedding-health.js.map +1 -0
- package/dist/src/embedding-provider.d.ts +48 -0
- package/dist/src/embedding-provider.d.ts.map +1 -0
- package/dist/src/embedding-provider.js +145 -0
- package/dist/src/embedding-provider.js.map +1 -0
- package/dist/src/embedding-quantize.d.ts +11 -0
- package/dist/src/embedding-quantize.d.ts.map +1 -0
- package/dist/src/embedding-quantize.js +38 -0
- package/dist/src/embedding-quantize.js.map +1 -0
- package/dist/src/emotion-arc.d.ts +17 -0
- package/dist/src/emotion-arc.d.ts.map +1 -0
- package/dist/src/emotion-arc.js +62 -0
- package/dist/src/emotion-arc.js.map +1 -0
- package/dist/src/emotion-tagger.d.ts +8 -0
- package/dist/src/emotion-tagger.d.ts.map +1 -0
- package/dist/src/emotion-tagger.js +45 -0
- package/dist/src/emotion-tagger.js.map +1 -0
- package/dist/src/emotion-utils.d.ts +13 -0
- package/dist/src/emotion-utils.d.ts.map +1 -0
- package/dist/src/emotion-utils.js +76 -0
- package/dist/src/emotion-utils.js.map +1 -0
- package/dist/src/entity-graph.d.ts +33 -0
- package/dist/src/entity-graph.d.ts.map +1 -0
- package/dist/src/entity-graph.js +42 -0
- package/dist/src/entity-graph.js.map +1 -0
- package/dist/src/env-schema.d.ts +46 -0
- package/dist/src/env-schema.d.ts.map +1 -0
- package/dist/src/env-schema.js +93 -0
- package/dist/src/env-schema.js.map +1 -0
- package/dist/src/hook-helpers.d.ts +16 -0
- package/dist/src/hook-helpers.d.ts.map +1 -0
- package/dist/src/hook-helpers.js +64 -0
- package/dist/src/hook-helpers.js.map +1 -0
- package/dist/src/imemory-system.d.ts +138 -0
- package/dist/src/imemory-system.d.ts.map +1 -0
- package/dist/src/imemory-system.js +40 -0
- package/dist/src/imemory-system.js.map +1 -0
- package/dist/src/importance-flagger.d.ts +8 -0
- package/dist/src/importance-flagger.d.ts.map +1 -0
- package/dist/src/importance-flagger.js +24 -0
- package/dist/src/importance-flagger.js.map +1 -0
- package/dist/src/index.d.ts +79 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +79 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/ingest-pipeline.d.ts +32 -0
- package/dist/src/ingest-pipeline.d.ts.map +1 -0
- package/dist/src/ingest-pipeline.js +58 -0
- package/dist/src/ingest-pipeline.js.map +1 -0
- package/dist/src/injection-scanner.d.ts +16 -0
- package/dist/src/injection-scanner.d.ts.map +1 -0
- package/dist/src/injection-scanner.js +182 -0
- package/dist/src/injection-scanner.js.map +1 -0
- package/dist/src/local-time.d.ts +12 -0
- package/dist/src/local-time.d.ts.map +1 -0
- package/dist/src/local-time.js +23 -0
- package/dist/src/local-time.js.map +1 -0
- package/dist/src/maintenance-service.d.ts +46 -0
- package/dist/src/maintenance-service.d.ts.map +1 -0
- package/dist/src/maintenance-service.js +280 -0
- package/dist/src/maintenance-service.js.map +1 -0
- package/dist/src/mcp-server.d.ts +6 -0
- package/dist/src/mcp-server.d.ts.map +1 -0
- package/dist/src/mcp-server.js +50 -0
- package/dist/src/mcp-server.js.map +1 -0
- package/dist/src/media-sanitizer.d.ts +11 -0
- package/dist/src/media-sanitizer.d.ts.map +1 -0
- package/dist/src/media-sanitizer.js +56 -0
- package/dist/src/media-sanitizer.js.map +1 -0
- package/dist/src/mem-config-env.d.ts +18 -0
- package/dist/src/mem-config-env.d.ts.map +1 -0
- package/dist/src/mem-config-env.js +43 -0
- package/dist/src/mem-config-env.js.map +1 -0
- package/dist/src/mem-env.d.ts +5 -0
- package/dist/src/mem-env.d.ts.map +1 -0
- package/dist/src/mem-env.js +19 -0
- package/dist/src/mem-env.js.map +1 -0
- package/dist/src/mem-logger.d.ts +20 -0
- package/dist/src/mem-logger.d.ts.map +1 -0
- package/dist/src/mem-logger.js +24 -0
- package/dist/src/mem-logger.js.map +1 -0
- package/dist/src/mem-paths.d.ts +20 -0
- package/dist/src/mem-paths.d.ts.map +1 -0
- package/dist/src/mem-paths.js +43 -0
- package/dist/src/mem-paths.js.map +1 -0
- package/dist/src/mem-types.d.ts +157 -0
- package/dist/src/mem-types.d.ts.map +1 -0
- package/dist/src/mem-types.js +2 -0
- package/dist/src/mem-types.js.map +1 -0
- package/dist/src/memory-backend.d.ts +65 -0
- package/dist/src/memory-backend.d.ts.map +1 -0
- package/dist/src/memory-backend.js +43 -0
- package/dist/src/memory-backend.js.map +1 -0
- package/dist/src/memory-compressor.d.ts +17 -0
- package/dist/src/memory-compressor.d.ts.map +1 -0
- package/dist/src/memory-compressor.js +147 -0
- package/dist/src/memory-compressor.js.map +1 -0
- package/dist/src/memory-config.d.ts +30 -0
- package/dist/src/memory-config.d.ts.map +1 -0
- package/dist/src/memory-config.js +62 -0
- package/dist/src/memory-config.js.map +1 -0
- package/dist/src/memory-db.d.ts +7 -0
- package/dist/src/memory-db.d.ts.map +1 -0
- package/dist/src/memory-db.js +173 -0
- package/dist/src/memory-db.js.map +1 -0
- package/dist/src/memory-editor.d.ts +32 -0
- package/dist/src/memory-editor.d.ts.map +1 -0
- package/dist/src/memory-editor.js +339 -0
- package/dist/src/memory-editor.js.map +1 -0
- package/dist/src/memory-index.d.ts +91 -0
- package/dist/src/memory-index.d.ts.map +1 -0
- package/dist/src/memory-index.js +310 -0
- package/dist/src/memory-index.js.map +1 -0
- package/dist/src/memory-ipc-client.d.ts +22 -0
- package/dist/src/memory-ipc-client.d.ts.map +1 -0
- package/dist/src/memory-ipc-client.js +75 -0
- package/dist/src/memory-ipc-client.js.map +1 -0
- package/dist/src/memory-ipc-server.d.ts +17 -0
- package/dist/src/memory-ipc-server.d.ts.map +1 -0
- package/dist/src/memory-ipc-server.js +86 -0
- package/dist/src/memory-ipc-server.js.map +1 -0
- package/dist/src/memory-manager.d.ts +155 -0
- package/dist/src/memory-manager.d.ts.map +1 -0
- package/dist/src/memory-manager.js +463 -0
- package/dist/src/memory-manager.js.map +1 -0
- package/dist/src/memory-renderer.d.ts +15 -0
- package/dist/src/memory-renderer.d.ts.map +1 -0
- package/dist/src/memory-renderer.js +126 -0
- package/dist/src/memory-renderer.js.map +1 -0
- package/dist/src/message-store.d.ts +42 -0
- package/dist/src/message-store.d.ts.map +1 -0
- package/dist/src/message-store.js +145 -0
- package/dist/src/message-store.js.map +1 -0
- package/dist/src/mmr.d.ts +17 -0
- package/dist/src/mmr.d.ts.map +1 -0
- package/dist/src/mmr.js +48 -0
- package/dist/src/mmr.js.map +1 -0
- package/dist/src/ollama-embed.d.ts +46 -0
- package/dist/src/ollama-embed.d.ts.map +1 -0
- package/dist/src/ollama-embed.js +139 -0
- package/dist/src/ollama-embed.js.map +1 -0
- package/dist/src/openclaw-plugin/engine.d.ts +87 -0
- package/dist/src/openclaw-plugin/engine.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/engine.js +121 -0
- package/dist/src/openclaw-plugin/engine.js.map +1 -0
- package/dist/src/openclaw-plugin/hooks.d.ts +41 -0
- package/dist/src/openclaw-plugin/hooks.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/hooks.js +155 -0
- package/dist/src/openclaw-plugin/hooks.js.map +1 -0
- package/dist/src/openclaw-plugin/index.d.ts +20 -0
- package/dist/src/openclaw-plugin/index.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/index.js +151 -0
- package/dist/src/openclaw-plugin/index.js.map +1 -0
- package/dist/src/openclaw-plugin/message-adapter.d.ts +13 -0
- package/dist/src/openclaw-plugin/message-adapter.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/message-adapter.js +49 -0
- package/dist/src/openclaw-plugin/message-adapter.js.map +1 -0
- package/dist/src/openclaw-plugin/prompt-builder.d.ts +17 -0
- package/dist/src/openclaw-plugin/prompt-builder.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/prompt-builder.js +22 -0
- package/dist/src/openclaw-plugin/prompt-builder.js.map +1 -0
- package/dist/src/openclaw-plugin/public-artifacts.d.ts +20 -0
- package/dist/src/openclaw-plugin/public-artifacts.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/public-artifacts.js +59 -0
- package/dist/src/openclaw-plugin/public-artifacts.js.map +1 -0
- package/dist/src/openclaw-plugin/runtime-adapter.d.ts +26 -0
- package/dist/src/openclaw-plugin/runtime-adapter.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/runtime-adapter.js +161 -0
- package/dist/src/openclaw-plugin/runtime-adapter.js.map +1 -0
- package/dist/src/openclaw-plugin/session-mapper.d.ts +11 -0
- package/dist/src/openclaw-plugin/session-mapper.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/session-mapper.js +17 -0
- package/dist/src/openclaw-plugin/session-mapper.js.map +1 -0
- package/dist/src/openclaw-plugin/tools.d.ts +32 -0
- package/dist/src/openclaw-plugin/tools.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/tools.js +131 -0
- package/dist/src/openclaw-plugin/tools.js.map +1 -0
- package/dist/src/openclaw-plugin/types.d.ts +35 -0
- package/dist/src/openclaw-plugin/types.d.ts.map +1 -0
- package/dist/src/openclaw-plugin/types.js +2 -0
- package/dist/src/openclaw-plugin/types.js.map +1 -0
- package/dist/src/query-tokenizer.d.ts +33 -0
- package/dist/src/query-tokenizer.d.ts.map +1 -0
- package/dist/src/query-tokenizer.js +84 -0
- package/dist/src/query-tokenizer.js.map +1 -0
- package/dist/src/recall-benchmark.d.ts +13 -0
- package/dist/src/recall-benchmark.d.ts.map +1 -0
- package/dist/src/recall-benchmark.js +256 -0
- package/dist/src/recall-benchmark.js.map +1 -0
- package/dist/src/recall-engine.d.ts +81 -0
- package/dist/src/recall-engine.d.ts.map +1 -0
- package/dist/src/recall-engine.js +387 -0
- package/dist/src/recall-engine.js.map +1 -0
- package/dist/src/redact-secrets.d.ts +20 -0
- package/dist/src/redact-secrets.d.ts.map +1 -0
- package/dist/src/redact-secrets.js +42 -0
- package/dist/src/redact-secrets.js.map +1 -0
- package/dist/src/runtime-store.d.ts +47 -0
- package/dist/src/runtime-store.d.ts.map +1 -0
- package/dist/src/runtime-store.js +78 -0
- package/dist/src/runtime-store.js.map +1 -0
- package/dist/src/session-context.d.ts +10 -0
- package/dist/src/session-context.d.ts.map +1 -0
- package/dist/src/session-context.js +83 -0
- package/dist/src/session-context.js.map +1 -0
- package/dist/src/session-memory.d.ts +8 -0
- package/dist/src/session-memory.d.ts.map +1 -0
- package/dist/src/session-memory.js +45 -0
- package/dist/src/session-memory.js.map +1 -0
- package/dist/src/signature-generator.d.ts +15 -0
- package/dist/src/signature-generator.d.ts.map +1 -0
- package/dist/src/signature-generator.js +78 -0
- package/dist/src/signature-generator.js.map +1 -0
- package/dist/src/sleep/basic.d.ts +48 -0
- package/dist/src/sleep/basic.d.ts.map +1 -0
- package/dist/src/sleep/basic.js +147 -0
- package/dist/src/sleep/basic.js.map +1 -0
- package/dist/src/sleep/levels.d.ts +20 -0
- package/dist/src/sleep/levels.d.ts.map +1 -0
- package/dist/src/sleep/levels.js +11 -0
- package/dist/src/sleep/levels.js.map +1 -0
- package/dist/src/sleep/native.d.ts +41 -0
- package/dist/src/sleep/native.d.ts.map +1 -0
- package/dist/src/sleep/native.js +112 -0
- package/dist/src/sleep/native.js.map +1 -0
- package/dist/src/sleep/orchestrator.d.ts +64 -0
- package/dist/src/sleep/orchestrator.d.ts.map +1 -0
- package/dist/src/sleep/orchestrator.js +960 -0
- package/dist/src/sleep/orchestrator.js.map +1 -0
- package/dist/src/sleep/runtime.d.ts +15 -0
- package/dist/src/sleep/runtime.d.ts.map +1 -0
- package/dist/src/sleep/runtime.js +2 -0
- package/dist/src/sleep/runtime.js.map +1 -0
- package/dist/src/sleep/sleep-daily-summary.d.ts +64 -0
- package/dist/src/sleep/sleep-daily-summary.d.ts.map +1 -0
- package/dist/src/sleep/sleep-daily-summary.js +273 -0
- package/dist/src/sleep/sleep-daily-summary.js.map +1 -0
- package/dist/src/sleep/sleep-extract-daily.d.ts +12 -0
- package/dist/src/sleep/sleep-extract-daily.d.ts.map +1 -0
- package/dist/src/sleep/sleep-extract-daily.js +55 -0
- package/dist/src/sleep/sleep-extract-daily.js.map +1 -0
- package/dist/src/sleep/sleep-prompt-loader.d.ts +27 -0
- package/dist/src/sleep/sleep-prompt-loader.d.ts.map +1 -0
- package/dist/src/sleep/sleep-prompt-loader.js +116 -0
- package/dist/src/sleep/sleep-prompt-loader.js.map +1 -0
- package/dist/src/sleep/test-harness.d.ts +67 -0
- package/dist/src/sleep/test-harness.d.ts.map +1 -0
- package/dist/src/sleep/test-harness.js +121 -0
- package/dist/src/sleep/test-harness.js.map +1 -0
- package/dist/src/sleep/trigger.d.ts +3 -0
- package/dist/src/sleep/trigger.d.ts.map +1 -0
- package/dist/src/sleep/trigger.js +66 -0
- package/dist/src/sleep/trigger.js.map +1 -0
- package/dist/src/sleep-data-access.d.ts +54 -0
- package/dist/src/sleep-data-access.d.ts.map +1 -0
- package/dist/src/sleep-data-access.js +176 -0
- package/dist/src/sleep-data-access.js.map +1 -0
- package/dist/src/sleep-pipeline.d.ts +9 -0
- package/dist/src/sleep-pipeline.d.ts.map +1 -0
- package/dist/src/sleep-pipeline.js +8 -0
- package/dist/src/sleep-pipeline.js.map +1 -0
- package/dist/src/sleep-state-gatherer.d.ts +74 -0
- package/dist/src/sleep-state-gatherer.d.ts.map +1 -0
- package/dist/src/sleep-state-gatherer.js +275 -0
- package/dist/src/sleep-state-gatherer.js.map +1 -0
- package/dist/src/sqlite-backend.d.ts +23 -0
- package/dist/src/sqlite-backend.d.ts.map +1 -0
- package/dist/src/sqlite-backend.js +48 -0
- package/dist/src/sqlite-backend.js.map +1 -0
- package/dist/src/test-helpers.d.ts +3 -0
- package/dist/src/test-helpers.d.ts.map +1 -0
- package/dist/src/test-helpers.js +5 -0
- package/dist/src/test-helpers.js.map +1 -0
- package/dist/src/tier-llm-refinement.d.ts +35 -0
- package/dist/src/tier-llm-refinement.d.ts.map +1 -0
- package/dist/src/tier-llm-refinement.js +131 -0
- package/dist/src/tier-llm-refinement.js.map +1 -0
- package/dist/src/timeline-builder.d.ts +45 -0
- package/dist/src/timeline-builder.d.ts.map +1 -0
- package/dist/src/timeline-builder.js +147 -0
- package/dist/src/timeline-builder.js.map +1 -0
- package/dist/src/trigram-search.d.ts +28 -0
- package/dist/src/trigram-search.d.ts.map +1 -0
- package/dist/src/trigram-search.js +192 -0
- package/dist/src/trigram-search.js.map +1 -0
- package/dist/src/turn-classifier.d.ts +29 -0
- package/dist/src/turn-classifier.d.ts.map +1 -0
- package/dist/src/turn-classifier.js +186 -0
- package/dist/src/turn-classifier.js.map +1 -0
- package/dist/src/user-utils.d.ts +6 -0
- package/dist/src/user-utils.d.ts.map +1 -0
- package/dist/src/user-utils.js +27 -0
- package/dist/src/user-utils.js.map +1 -0
- package/dist/src/wake-up-builder.d.ts +12 -0
- package/dist/src/wake-up-builder.d.ts.map +1 -0
- package/dist/src/wake-up-builder.js +45 -0
- package/dist/src/wake-up-builder.js.map +1 -0
- package/dist/src/wake-up-renderer.d.ts +29 -0
- package/dist/src/wake-up-renderer.d.ts.map +1 -0
- package/dist/src/wake-up-renderer.js +182 -0
- package/dist/src/wake-up-renderer.js.map +1 -0
- package/openclaw.plugin.json +72 -0
- package/package.json +92 -5
- package/prompts/sleep/01-gc-noise.md +28 -0
- package/prompts/sleep/02-daily-summary.md +3 -0
- package/prompts/sleep/03-extract-from-daily.md +3 -0
- package/prompts/sleep/04-retrospective.md +30 -0
- package/prompts/sleep/06-feedback.md +17 -0
- package/prompts/sleep/07-topic-assignment.md +23 -0
- package/prompts/sleep/08-core-promotion.md +26 -0
- package/prompts/sleep/09-merge.md +19 -0
- package/prompts/sleep/10-translation.md +17 -0
- package/prompts/sleep/11-skill-review.md +12 -0
- package/prompts/sleep/12-core-knowledge.md +14 -0
- package/prompts/sleep/13-consolidation.md +11 -0
- package/prompts/sleep/14-emotion-context.md +17 -0
- package/prompts/sleep/15-contradiction-and-graph.md +48 -0
- package/prompts/sleep/16-rem-synthesis.md +31 -0
- package/prompts/sleep/basic.md +12 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
import type { MemoryConfig } from "./memory-config.js";
|
|
3
|
+
import { MemoryIndex } from "./memory-index.js";
|
|
4
|
+
import { MessageStore } from "./message-store.js";
|
|
5
|
+
import { MemoryEditor } from "./memory-editor.js";
|
|
6
|
+
import { MaintenanceService } from "./maintenance-service.js";
|
|
7
|
+
import { type IEmbeddingProvider } from "./embedding-provider.js";
|
|
8
|
+
import type { IHeartbeat } from "./imemory-system.js";
|
|
9
|
+
import type { SearchResult, SearchOptions } from "./mem-types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Top-level coordinator for the local memory layer.
|
|
12
|
+
*
|
|
13
|
+
* Owns the SQLite database and delegates to focused sub-services:
|
|
14
|
+
* - store: message recording and loading
|
|
15
|
+
* - editor: extracted memory mutations (edit, instant-store, merge, delete)
|
|
16
|
+
* - maintenance: disk budget, backup pruning, auto-compact, forget operations
|
|
17
|
+
*
|
|
18
|
+
* When `memoryEnabled` is false, all methods are no-ops.
|
|
19
|
+
*/
|
|
20
|
+
export declare class MemoryManager {
|
|
21
|
+
private readonly config;
|
|
22
|
+
private db;
|
|
23
|
+
private memoryIndex;
|
|
24
|
+
private llmCall;
|
|
25
|
+
private heartbeat;
|
|
26
|
+
private embeddingProvider;
|
|
27
|
+
/** Message recording and loading. Available after initialize(). */
|
|
28
|
+
store: MessageStore;
|
|
29
|
+
/** Extracted memory mutations. Available after initialize(). */
|
|
30
|
+
editor: MemoryEditor;
|
|
31
|
+
/** Disk budget, pruning, forget operations. Available after initialize(). */
|
|
32
|
+
maintenance: MaintenanceService;
|
|
33
|
+
constructor(config: MemoryConfig);
|
|
34
|
+
setLlmCall(llmCall: (prompt: string, content: string) => Promise<string>): void;
|
|
35
|
+
getLlmCall(): ((prompt: string, content: string) => Promise<string>) | null;
|
|
36
|
+
/** @internal Package-internal only. External consumers use IMemorySystem methods. */
|
|
37
|
+
getMemoryIndex(): MemoryIndex | null;
|
|
38
|
+
/** @internal Package-internal only. External consumers use IMemorySystem/SleepDataAccess. */
|
|
39
|
+
getDatabase(): Database.Database | null;
|
|
40
|
+
/** @internal Package-internal only. External consumers use IMemorySystem/SleepDataAccess. */
|
|
41
|
+
getDb(): Database.Database | null;
|
|
42
|
+
getConfig(): MemoryConfig;
|
|
43
|
+
/** The active embedding provider (null if memory disabled or not yet initialized). */
|
|
44
|
+
getEmbeddingProvider(): IEmbeddingProvider | null;
|
|
45
|
+
initialize(opts?: {
|
|
46
|
+
skipEmbeddingCheck?: boolean;
|
|
47
|
+
}): Promise<void>;
|
|
48
|
+
/** Record a conversation message. Delegates to store. */
|
|
49
|
+
recordMessage(...args: Parameters<MessageStore["recordMessage"]>): void;
|
|
50
|
+
/** Load recent messages. Delegates to store. */
|
|
51
|
+
loadRecentMessages(userId: string, sessionId: string, count: number): import("./mem-types.js").MessageRecord[];
|
|
52
|
+
/** Update emotion by platform message ID. Delegates to store + editor. */
|
|
53
|
+
updateEmotionByPlatformId(userId: string | string, platformMessageId: number, score: number): boolean;
|
|
54
|
+
/** Search via FTS5. */
|
|
55
|
+
search(query: string, opts?: SearchOptions): Promise<SearchResult[]>;
|
|
56
|
+
/** Substring search via LIKE. */
|
|
57
|
+
substringSearch(query: string, opts?: SearchOptions): SearchResult[];
|
|
58
|
+
/** Timestamp of the most recent message. */
|
|
59
|
+
getLastMessageTimestamp(excludeSystem?: boolean): number;
|
|
60
|
+
/** Read user profile + agent notes from core/. */
|
|
61
|
+
readCoreKnowledge(): string;
|
|
62
|
+
/** Read all 4 session bundle files from core/. */
|
|
63
|
+
getSessionBundle(): {
|
|
64
|
+
soul: string;
|
|
65
|
+
profile: string;
|
|
66
|
+
notes: string;
|
|
67
|
+
memoryTools: string;
|
|
68
|
+
};
|
|
69
|
+
/** Get the latest daily compaction for session-start injection. */
|
|
70
|
+
getLatestCompaction(_userId: string): {
|
|
71
|
+
timestamp: number;
|
|
72
|
+
summary: string;
|
|
73
|
+
} | null;
|
|
74
|
+
setHeartbeat(hb: IHeartbeat): void;
|
|
75
|
+
stopHeartbeat(): void;
|
|
76
|
+
getCronInfo(): {
|
|
77
|
+
heartbeatRunning: boolean;
|
|
78
|
+
intervalMs: number;
|
|
79
|
+
tasks: string[];
|
|
80
|
+
taskStatuses: ReadonlyMap<string, string>;
|
|
81
|
+
lastSleepAudit: string | null;
|
|
82
|
+
};
|
|
83
|
+
getStats(userId?: string): {
|
|
84
|
+
totalMessages: number;
|
|
85
|
+
extractedMemories: number;
|
|
86
|
+
extractedByType: Record<string, number>;
|
|
87
|
+
consolidationFiles: {
|
|
88
|
+
daily: number;
|
|
89
|
+
weekly: number;
|
|
90
|
+
quarterly: number;
|
|
91
|
+
};
|
|
92
|
+
ingestedDocuments: number;
|
|
93
|
+
preservedKeywords: number;
|
|
94
|
+
heartbeatRunning: boolean;
|
|
95
|
+
dbSizeBytes: number;
|
|
96
|
+
rejectedByScanner: number;
|
|
97
|
+
} | null;
|
|
98
|
+
close(): void;
|
|
99
|
+
getSleepData(): import("./sleep-data-access.js").SleepDataAccess;
|
|
100
|
+
getDistinctUserIds(): string[];
|
|
101
|
+
getAllExtractedMemories(): unknown[];
|
|
102
|
+
recallSearch(params: import("./recall-engine.js").RecallParams): Promise<import("./recall-engine.js").RecallResult>;
|
|
103
|
+
bumpRecallCount(ids: number[]): void;
|
|
104
|
+
buildWakeUp(maxChars?: number): string;
|
|
105
|
+
runWalCheckpoint(): boolean;
|
|
106
|
+
rebuildFtsIndexes(): {
|
|
107
|
+
rebuilt: string[];
|
|
108
|
+
};
|
|
109
|
+
cleanupOldMessages(opts: {
|
|
110
|
+
maxCount: number;
|
|
111
|
+
maxAgeDays: number;
|
|
112
|
+
garbageHours: number;
|
|
113
|
+
}): {
|
|
114
|
+
deleted: number;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* #173 — backfill embeddings for memories that lack them.
|
|
118
|
+
* Uses provider.batchEmbed() for efficiency (OpenAI batches 100/call).
|
|
119
|
+
* Also populates the vec_memories index via vecInsert.
|
|
120
|
+
*/
|
|
121
|
+
backfillEmbeddings(provider: IEmbeddingProvider): Promise<{
|
|
122
|
+
embedded: number;
|
|
123
|
+
}>;
|
|
124
|
+
/**
|
|
125
|
+
* #173 — boot-time dimension assertion. Refuses to start the memory manager
|
|
126
|
+
* if the DB contains embeddings of a different dimension than the configured
|
|
127
|
+
* provider. Prevents silent recall degradation on provider switches.
|
|
128
|
+
*/
|
|
129
|
+
private assertEmbeddingDimensionsMatch;
|
|
130
|
+
deduplicateMessages(): {
|
|
131
|
+
removed: number;
|
|
132
|
+
};
|
|
133
|
+
/** Age memory tiers: NULL English after englishTtlDays, NULL original after originalTtlDays. */
|
|
134
|
+
ageMemoryTiers(opts: {
|
|
135
|
+
englishTtlDays: number;
|
|
136
|
+
originalTtlDays: number;
|
|
137
|
+
embeddingQuantizeDays?: number;
|
|
138
|
+
}): {
|
|
139
|
+
englishNulled: number;
|
|
140
|
+
originalNulled: number;
|
|
141
|
+
embeddingsQuantized: number;
|
|
142
|
+
};
|
|
143
|
+
/** Compute decayed confidence for all memories. Returns candidates for pruning (effective confidence < 1). */
|
|
144
|
+
computeDecayedConfidence(): Promise<Array<{
|
|
145
|
+
id: number;
|
|
146
|
+
confidence: number;
|
|
147
|
+
effectiveConfidence: number;
|
|
148
|
+
recallCount: number;
|
|
149
|
+
daysSinceRecall: number;
|
|
150
|
+
}>>;
|
|
151
|
+
fixMemoryDefaults(): {
|
|
152
|
+
fixed: number;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=memory-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../../src/memory-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import { mkdirSync, readFileSync, existsSync, readdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { initializeDatabase } from "./memory-db.js";
|
|
4
|
+
import { MemoryIndex } from "./memory-index.js";
|
|
5
|
+
import { MessageStore } from "./message-store.js";
|
|
6
|
+
import { MemoryEditor } from "./memory-editor.js";
|
|
7
|
+
import { MaintenanceService } from "./maintenance-service.js";
|
|
8
|
+
import { loadEmbedConfig, initVec, backfillVecIndex, vecInsert } from "./ollama-embed.js";
|
|
9
|
+
import { createEmbeddingProvider } from "./embedding-provider.js";
|
|
10
|
+
import { getAbmindEnv } from "./env-schema.js";
|
|
11
|
+
import { getLatestConsolidationFile } from "./consolidation-search.js";
|
|
12
|
+
import { logError, logInfo, logWarn } from "./mem-logger.js";
|
|
13
|
+
import { SleepDataAccess } from "./sleep-data-access.js";
|
|
14
|
+
import { buildWakeUp } from "./wake-up-builder.js";
|
|
15
|
+
import { isFlashbulb } from "./brain-patterns.js";
|
|
16
|
+
const TAG = "memory-manager";
|
|
17
|
+
/**
|
|
18
|
+
* Top-level coordinator for the local memory layer.
|
|
19
|
+
*
|
|
20
|
+
* Owns the SQLite database and delegates to focused sub-services:
|
|
21
|
+
* - store: message recording and loading
|
|
22
|
+
* - editor: extracted memory mutations (edit, instant-store, merge, delete)
|
|
23
|
+
* - maintenance: disk budget, backup pruning, auto-compact, forget operations
|
|
24
|
+
*
|
|
25
|
+
* When `memoryEnabled` is false, all methods are no-ops.
|
|
26
|
+
*/
|
|
27
|
+
export class MemoryManager {
|
|
28
|
+
config;
|
|
29
|
+
db = null;
|
|
30
|
+
memoryIndex = null;
|
|
31
|
+
llmCall = null;
|
|
32
|
+
heartbeat = null;
|
|
33
|
+
embeddingProvider = null;
|
|
34
|
+
/** Message recording and loading. Available after initialize(). */
|
|
35
|
+
store;
|
|
36
|
+
/** Extracted memory mutations. Available after initialize(). */
|
|
37
|
+
editor;
|
|
38
|
+
/** Disk budget, pruning, forget operations. Available after initialize(). */
|
|
39
|
+
maintenance;
|
|
40
|
+
constructor(config) {
|
|
41
|
+
this.config = config;
|
|
42
|
+
}
|
|
43
|
+
setLlmCall(llmCall) {
|
|
44
|
+
this.llmCall = llmCall;
|
|
45
|
+
}
|
|
46
|
+
getLlmCall() {
|
|
47
|
+
return this.llmCall;
|
|
48
|
+
}
|
|
49
|
+
/** @internal Package-internal only. External consumers use IMemorySystem methods. */
|
|
50
|
+
getMemoryIndex() { return this.memoryIndex; }
|
|
51
|
+
/** @internal Package-internal only. External consumers use IMemorySystem/SleepDataAccess. */
|
|
52
|
+
getDatabase() { return this.db; }
|
|
53
|
+
/** @internal Package-internal only. External consumers use IMemorySystem/SleepDataAccess. */
|
|
54
|
+
getDb() { return this.db; }
|
|
55
|
+
getConfig() { return this.config; }
|
|
56
|
+
/** The active embedding provider (null if memory disabled or not yet initialized). */
|
|
57
|
+
getEmbeddingProvider() { return this.embeddingProvider; }
|
|
58
|
+
async initialize(opts) {
|
|
59
|
+
if (!this.config.memoryEnabled)
|
|
60
|
+
return;
|
|
61
|
+
try {
|
|
62
|
+
mkdirSync(this.config.memoryDir, { recursive: true });
|
|
63
|
+
const dbPath = join(this.config.memoryDir, "memory.db");
|
|
64
|
+
this.db = initializeDatabase(dbPath);
|
|
65
|
+
this.runWalCheckpoint(); // flush pending WAL from previous crash
|
|
66
|
+
this.memoryIndex = new MemoryIndex(this.db);
|
|
67
|
+
// #173 — create the configured embedding provider. Boot-time dimension
|
|
68
|
+
// assertion catches "user switched providers without running embed --reset".
|
|
69
|
+
this.embeddingProvider = createEmbeddingProvider();
|
|
70
|
+
this.assertEmbeddingDimensionsMatch(this.db, this.embeddingProvider);
|
|
71
|
+
// #360 — sqlite-vec virtual table sized to the configured dimensions.
|
|
72
|
+
initVec(this.db, this.embeddingProvider.dimensions);
|
|
73
|
+
const backfilled = backfillVecIndex(this.db);
|
|
74
|
+
if (backfilled > 0)
|
|
75
|
+
logInfo(TAG, `Vec index backfilled: ${backfilled} embeddings`);
|
|
76
|
+
// Wire sub-services
|
|
77
|
+
this.editor = new MemoryEditor(this.db);
|
|
78
|
+
this.store = new MessageStore(this.db, this.config, this.memoryIndex);
|
|
79
|
+
this.maintenance = new MaintenanceService(this.db, this.config, this.memoryIndex, this.editor);
|
|
80
|
+
this.store.setDiskBudgetCallback(() => this.maintenance.enforceDiskBudget());
|
|
81
|
+
// Ollama embedding health check (skip for CLI tools that just need DB access)
|
|
82
|
+
// Only runs for ollama provider — openai has no equivalent free health endpoint.
|
|
83
|
+
if (!opts?.skipEmbeddingCheck) {
|
|
84
|
+
const embedConfig = loadEmbedConfig();
|
|
85
|
+
if (embedConfig.enabled && getAbmindEnv().embeddingProvider === "ollama") {
|
|
86
|
+
const { checkEmbeddingHealth } = await import("./embedding-health.js");
|
|
87
|
+
const health = await checkEmbeddingHealth(embedConfig.url, embedConfig.model);
|
|
88
|
+
if (health.reachable && health.modelPulled) {
|
|
89
|
+
logInfo(TAG, `Embedding enabled: ${embedConfig.model} via ollama (${this.embeddingProvider?.dimensions} dims)`);
|
|
90
|
+
}
|
|
91
|
+
else if (health.reachable) {
|
|
92
|
+
logWarn(TAG, `Embedding model '${embedConfig.model}' not found in ollama (available: ${health.modelsAvailable.join(", ")})`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
logWarn(TAG, `Ollama unreachable at ${embedConfig.url} — embeddings disabled`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (embedConfig.enabled) {
|
|
99
|
+
// openai / compatible — just log without health-probing (no standard endpoint)
|
|
100
|
+
logInfo(TAG, `Embedding enabled: ${embedConfig.model} via ${getAbmindEnv().embeddingProvider} (${this.embeddingProvider?.dimensions} dims)`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
logInfo(TAG, "Memory manager initialized");
|
|
104
|
+
this.maintenance.enforceDiskBudget();
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
logError(TAG, "Failed to initialize memory manager", err);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// --- Delegated methods (kept for backward compat during migration) ---
|
|
111
|
+
/** Record a conversation message. Delegates to store. */
|
|
112
|
+
recordMessage(...args) {
|
|
113
|
+
if (!this.config.memoryEnabled || !this.store)
|
|
114
|
+
return;
|
|
115
|
+
this.store.recordMessage(...args);
|
|
116
|
+
}
|
|
117
|
+
/** Load recent messages. Delegates to store. */
|
|
118
|
+
loadRecentMessages(userId, sessionId, count) {
|
|
119
|
+
if (!this.config.memoryEnabled || !this.store)
|
|
120
|
+
return [];
|
|
121
|
+
return this.store.loadRecentMessages(userId, sessionId, count);
|
|
122
|
+
}
|
|
123
|
+
/** Update emotion by platform message ID. Delegates to store + editor. */
|
|
124
|
+
updateEmotionByPlatformId(userId, platformMessageId, score) {
|
|
125
|
+
if (!this.store)
|
|
126
|
+
return false;
|
|
127
|
+
return this.store.updateEmotionByPlatformId(userId, platformMessageId, score, (p) => this.editor.editMemory(p));
|
|
128
|
+
}
|
|
129
|
+
/** Search via FTS5. */
|
|
130
|
+
async search(query, opts) {
|
|
131
|
+
if (!this.config.memoryEnabled || !this.memoryIndex)
|
|
132
|
+
return [];
|
|
133
|
+
try {
|
|
134
|
+
return this.memoryIndex.search(query, opts);
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
logError(TAG, "Search failed", err);
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Substring search via LIKE. */
|
|
142
|
+
substringSearch(query, opts) {
|
|
143
|
+
if (!this.config.memoryEnabled || !this.memoryIndex)
|
|
144
|
+
return [];
|
|
145
|
+
try {
|
|
146
|
+
return this.memoryIndex.substringSearch(query, opts);
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
logError(TAG, "Substring search failed", err);
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/** Timestamp of the most recent message. */
|
|
154
|
+
getLastMessageTimestamp(excludeSystem = false) {
|
|
155
|
+
return this.store?.getLastMessageTimestamp(excludeSystem) ?? 0;
|
|
156
|
+
}
|
|
157
|
+
/** Read user profile + agent notes from core/. */
|
|
158
|
+
readCoreKnowledge() {
|
|
159
|
+
if (!this.config.memoryEnabled)
|
|
160
|
+
return "";
|
|
161
|
+
const parts = [];
|
|
162
|
+
for (const file of ["user_profile.md", "agent_notes.md"]) {
|
|
163
|
+
try {
|
|
164
|
+
const filePath = join(this.config.memoryDir, "core", file);
|
|
165
|
+
if (existsSync(filePath)) {
|
|
166
|
+
const content = readFileSync(filePath, "utf-8").trim();
|
|
167
|
+
if (content)
|
|
168
|
+
parts.push(content);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
logError(TAG, `Failed to read core/${file}`, err);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return parts.join("\n\n");
|
|
176
|
+
}
|
|
177
|
+
/** Read all 4 session bundle files from core/. */
|
|
178
|
+
getSessionBundle() {
|
|
179
|
+
const coreDir = join(this.config.memoryDir, "core");
|
|
180
|
+
const read = (name) => {
|
|
181
|
+
try {
|
|
182
|
+
const p = join(coreDir, name);
|
|
183
|
+
return existsSync(p) ? readFileSync(p, "utf-8").trim() : "";
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return "";
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
return { soul: read("SOUL.md"), profile: read("user_profile.md"), notes: read("agent_notes.md"), memoryTools: read("memory-tools.md") };
|
|
190
|
+
}
|
|
191
|
+
/** Get the latest daily compaction for session-start injection. */
|
|
192
|
+
getLatestCompaction(_userId) {
|
|
193
|
+
try {
|
|
194
|
+
const result = getLatestConsolidationFile(this.config.memoryDir, "daily");
|
|
195
|
+
if (!result)
|
|
196
|
+
return null;
|
|
197
|
+
return { timestamp: result.timestamp, summary: result.content };
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
setHeartbeat(hb) { this.heartbeat = hb; }
|
|
204
|
+
stopHeartbeat() { this.heartbeat?.stop(); this.heartbeat = null; }
|
|
205
|
+
getCronInfo() {
|
|
206
|
+
const auditDir = join(this.config.memoryDir, "sleep");
|
|
207
|
+
let lastAudit = null;
|
|
208
|
+
try {
|
|
209
|
+
const files = readdirSync(auditDir).filter(f => f.startsWith("sleep_")).sort();
|
|
210
|
+
if (files.length > 0)
|
|
211
|
+
lastAudit = files[files.length - 1];
|
|
212
|
+
}
|
|
213
|
+
catch { /* */ }
|
|
214
|
+
return {
|
|
215
|
+
heartbeatRunning: this.heartbeat !== null,
|
|
216
|
+
intervalMs: this.heartbeat?.intervalMs ?? 0,
|
|
217
|
+
tasks: this.heartbeat?.getTaskNames() ?? [],
|
|
218
|
+
taskStatuses: this.heartbeat?.getTaskStatuses() ?? new Map(),
|
|
219
|
+
lastSleepAudit: lastAudit,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
getStats(userId) {
|
|
223
|
+
if (!this.db)
|
|
224
|
+
return null;
|
|
225
|
+
try {
|
|
226
|
+
const cw = userId !== undefined ? " WHERE user_id = ?" : "";
|
|
227
|
+
const cp = userId !== undefined ? [userId] : [];
|
|
228
|
+
const totalMessages = this.db.prepare(`SELECT COUNT(*) as cnt FROM messages${cw}`).get(...cp).cnt;
|
|
229
|
+
const extractedMemories = this.db.prepare(`SELECT COUNT(*) as cnt FROM extracted_memories${cw}`).get(...cp).cnt;
|
|
230
|
+
const typeRows = this.db.prepare(`SELECT memory_type, COUNT(*) as cnt FROM extracted_memories${cw} GROUP BY memory_type`).all(...cp);
|
|
231
|
+
const extractedByType = {};
|
|
232
|
+
for (const row of typeRows)
|
|
233
|
+
extractedByType[row.memory_type] = row.cnt;
|
|
234
|
+
const consolidationFiles = { daily: 0, weekly: 0, quarterly: 0 };
|
|
235
|
+
for (const tier of ["daily", "weekly", "quarterly"]) {
|
|
236
|
+
try {
|
|
237
|
+
consolidationFiles[tier] = readdirSync(join(this.config.memoryDir, tier)).filter(f => f.endsWith(".md")).length;
|
|
238
|
+
}
|
|
239
|
+
catch { /* */ }
|
|
240
|
+
}
|
|
241
|
+
const ingestedDocuments = this.db.prepare(`SELECT COUNT(*) as cnt FROM ingested_documents${cw}`).get(...cp).cnt;
|
|
242
|
+
const preservedKeywords = this.db.prepare(`SELECT COUNT(*) as cnt FROM extracted_memories${userId !== undefined ? " WHERE user_id = ? AND preserve_original = 1" : " WHERE preserve_original = 1"}`).get(...cp).cnt;
|
|
243
|
+
let dbSizeBytes = 0;
|
|
244
|
+
try {
|
|
245
|
+
const pageCount = this.db.pragma("page_count")[0]?.page_count ?? 0;
|
|
246
|
+
const pageSize = this.db.pragma("page_size")[0]?.page_size ?? 4096;
|
|
247
|
+
dbSizeBytes = pageCount * pageSize;
|
|
248
|
+
}
|
|
249
|
+
catch { /* */ }
|
|
250
|
+
return { totalMessages, extractedMemories, extractedByType, consolidationFiles, ingestedDocuments, preservedKeywords, heartbeatRunning: this.heartbeat !== null, dbSizeBytes, rejectedByScanner: this.store?.rejectedByScanner ?? 0 };
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
logError(TAG, "Failed to get stats", err);
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
close() {
|
|
258
|
+
if (!this.db)
|
|
259
|
+
return;
|
|
260
|
+
try {
|
|
261
|
+
this.stopHeartbeat();
|
|
262
|
+
this.db.close();
|
|
263
|
+
this.db = null;
|
|
264
|
+
logInfo(TAG, "Memory manager closed");
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
logError(TAG, "Failed to close database", err);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// ── Sleep data access ───────────────────────────────────────────────────
|
|
271
|
+
getSleepData() {
|
|
272
|
+
if (!this.db)
|
|
273
|
+
throw new Error("Database not initialized");
|
|
274
|
+
return new SleepDataAccess(this.db);
|
|
275
|
+
}
|
|
276
|
+
// ── Dashboard / recall ──────────────────────────────────────────────────
|
|
277
|
+
getDistinctUserIds() {
|
|
278
|
+
return this.store?.getDistinctUserIds() ?? [];
|
|
279
|
+
}
|
|
280
|
+
getAllExtractedMemories() {
|
|
281
|
+
return this.store?.getAllExtractedMemories() ?? [];
|
|
282
|
+
}
|
|
283
|
+
async recallSearch(params) {
|
|
284
|
+
if (!this.db || !this.memoryIndex)
|
|
285
|
+
throw new Error("Memory not initialized");
|
|
286
|
+
const { recallSearch } = await import("./recall-engine.js");
|
|
287
|
+
const deps = {
|
|
288
|
+
db: this.db,
|
|
289
|
+
index: this.memoryIndex,
|
|
290
|
+
memoryDir: this.config.memoryDir,
|
|
291
|
+
};
|
|
292
|
+
if (this.embeddingProvider)
|
|
293
|
+
deps.embeddingProvider = this.embeddingProvider;
|
|
294
|
+
return recallSearch(deps, params);
|
|
295
|
+
}
|
|
296
|
+
bumpRecallCount(ids) {
|
|
297
|
+
this.memoryIndex?.bumpRecallCount(ids);
|
|
298
|
+
}
|
|
299
|
+
// ── Maintenance methods (for sleep addon / external tools) ──────────────
|
|
300
|
+
buildWakeUp(maxChars) {
|
|
301
|
+
return buildWakeUp(this.db);
|
|
302
|
+
}
|
|
303
|
+
runWalCheckpoint() {
|
|
304
|
+
if (!this.db)
|
|
305
|
+
return false;
|
|
306
|
+
try {
|
|
307
|
+
this.db.pragma("wal_checkpoint(TRUNCATE)");
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
rebuildFtsIndexes() {
|
|
315
|
+
if (!this.db)
|
|
316
|
+
return { rebuilt: [] };
|
|
317
|
+
const rebuilt = [];
|
|
318
|
+
for (const table of ["extracted_memories_fts", "content_en_trigram", "content_original_trigram"]) {
|
|
319
|
+
try {
|
|
320
|
+
this.db.exec(`INSERT INTO ${table}(${table}) VALUES('integrity-check')`);
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
try {
|
|
324
|
+
this.db.exec(`INSERT INTO ${table}(${table}) VALUES('rebuild')`);
|
|
325
|
+
rebuilt.push(table);
|
|
326
|
+
}
|
|
327
|
+
catch { /* table may not exist */ }
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return { rebuilt };
|
|
331
|
+
}
|
|
332
|
+
cleanupOldMessages(opts) {
|
|
333
|
+
if (!this.db)
|
|
334
|
+
return { deleted: 0 };
|
|
335
|
+
let deleted = 0;
|
|
336
|
+
try {
|
|
337
|
+
// Age-based cleanup
|
|
338
|
+
const ageCutoff = Date.now() - opts.maxAgeDays * 86400000;
|
|
339
|
+
deleted += this.db.prepare("DELETE FROM messages WHERE timestamp < ?").run(ageCutoff).changes;
|
|
340
|
+
// Count-based cleanup (keep newest maxCount)
|
|
341
|
+
const excess = this.db.prepare("SELECT id FROM messages ORDER BY timestamp DESC LIMIT -1 OFFSET ?").all(opts.maxCount);
|
|
342
|
+
if (excess.length > 0) {
|
|
343
|
+
deleted += this.db.prepare(`DELETE FROM messages WHERE id IN (${excess.map(r => r.id).join(",")})`).run().changes;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
catch { /* */ }
|
|
347
|
+
return { deleted };
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* #173 — backfill embeddings for memories that lack them.
|
|
351
|
+
* Uses provider.batchEmbed() for efficiency (OpenAI batches 100/call).
|
|
352
|
+
* Also populates the vec_memories index via vecInsert.
|
|
353
|
+
*/
|
|
354
|
+
async backfillEmbeddings(provider) {
|
|
355
|
+
if (!this.db)
|
|
356
|
+
return { embedded: 0 };
|
|
357
|
+
const rows = this.db.prepare("SELECT id, content_en FROM extracted_memories WHERE embedding IS NULL").all();
|
|
358
|
+
if (rows.length === 0)
|
|
359
|
+
return { embedded: 0 };
|
|
360
|
+
const vectors = await provider.batchEmbed(rows.map(r => r.content_en));
|
|
361
|
+
const update = this.db.prepare("UPDATE extracted_memories SET embedding = ? WHERE id = ?");
|
|
362
|
+
let embedded = 0;
|
|
363
|
+
for (let i = 0; i < rows.length; i++) {
|
|
364
|
+
const vec = vectors[i];
|
|
365
|
+
if (vec) {
|
|
366
|
+
const buf = Buffer.from(vec.buffer);
|
|
367
|
+
update.run(buf, rows[i].id);
|
|
368
|
+
vecInsert(this.db, rows[i].id, buf);
|
|
369
|
+
embedded++;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
return { embedded };
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* #173 — boot-time dimension assertion. Refuses to start the memory manager
|
|
376
|
+
* if the DB contains embeddings of a different dimension than the configured
|
|
377
|
+
* provider. Prevents silent recall degradation on provider switches.
|
|
378
|
+
*/
|
|
379
|
+
assertEmbeddingDimensionsMatch(db, provider) {
|
|
380
|
+
const row = db.prepare("SELECT embedding FROM extracted_memories WHERE embedding IS NOT NULL LIMIT 1").get();
|
|
381
|
+
if (!row)
|
|
382
|
+
return; // no embeddings yet — fresh install or nothing embedded, no mismatch possible
|
|
383
|
+
const dbDims = row.embedding.byteLength / 4; // Float32 = 4 bytes per component
|
|
384
|
+
if (dbDims !== provider.dimensions) {
|
|
385
|
+
throw new Error(`Embedding dimension mismatch: DB has ${dbDims}-dim vectors, ` +
|
|
386
|
+
`provider '${provider.name}' configured for ${provider.dimensions}-dim ` +
|
|
387
|
+
`(EMBEDDING_DIMENSIONS=${provider.dimensions}). ` +
|
|
388
|
+
`Run 'abmind embed --reset' to drop all embeddings and re-embed with the new provider.`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
deduplicateMessages() {
|
|
392
|
+
if (!this.db)
|
|
393
|
+
return { removed: 0 };
|
|
394
|
+
try {
|
|
395
|
+
const dupes = this.db.prepare(`
|
|
396
|
+
SELECT b.id FROM messages a JOIN messages b
|
|
397
|
+
ON a.user_id = b.user_id AND a.role = b.role
|
|
398
|
+
AND TRIM(a.content) = TRIM(b.content)
|
|
399
|
+
AND b.id > a.id
|
|
400
|
+
AND NOT EXISTS (
|
|
401
|
+
SELECT 1 FROM messages m WHERE m.user_id = a.user_id AND m.id > a.id AND m.id < b.id AND m.role = a.role
|
|
402
|
+
)
|
|
403
|
+
`).all();
|
|
404
|
+
if (dupes.length > 0) {
|
|
405
|
+
this.db.prepare(`DELETE FROM messages WHERE id IN (${dupes.map(d => d.id).join(",")})`).run();
|
|
406
|
+
return { removed: dupes.length };
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
catch { /* */ }
|
|
410
|
+
return { removed: 0 };
|
|
411
|
+
}
|
|
412
|
+
/** Age memory tiers: NULL English after englishTtlDays, NULL original after originalTtlDays. */
|
|
413
|
+
ageMemoryTiers(opts) {
|
|
414
|
+
if (!this.db)
|
|
415
|
+
return { englishNulled: 0, originalNulled: 0, embeddingsQuantized: 0 };
|
|
416
|
+
// content_en preserved forever — trigram search depends on it
|
|
417
|
+
const englishNulled = 0;
|
|
418
|
+
let originalNulled = 0;
|
|
419
|
+
let embeddingsQuantized = 0;
|
|
420
|
+
const originalCutoff = Date.now() - opts.originalTtlDays * 86400000;
|
|
421
|
+
// Age Original (content_original) — only flashbulb protected
|
|
422
|
+
const origRows = this.db.prepare("SELECT id, emotion_score, importance_flags FROM extracted_memories WHERE content_original IS NOT NULL AND content_en IS NOT NULL AND created_at < ?").all(originalCutoff);
|
|
423
|
+
for (const r of origRows) {
|
|
424
|
+
if (isFlashbulb(r.emotion_score, r.importance_flags ?? ""))
|
|
425
|
+
continue;
|
|
426
|
+
this.db.prepare("UPDATE extracted_memories SET content_original = NULL WHERE id = ?").run(r.id);
|
|
427
|
+
originalNulled++;
|
|
428
|
+
}
|
|
429
|
+
return { englishNulled, originalNulled, embeddingsQuantized: 0 };
|
|
430
|
+
}
|
|
431
|
+
/** Compute decayed confidence for all memories. Returns candidates for pruning (effective confidence < 1). */
|
|
432
|
+
async computeDecayedConfidence() {
|
|
433
|
+
if (!this.db)
|
|
434
|
+
return [];
|
|
435
|
+
const { effectiveConfidence } = await import("./brain-patterns.js");
|
|
436
|
+
const now = Date.now();
|
|
437
|
+
const rows = this.db.prepare(`SELECT id, confidence, recall_count, last_recalled_at, created_at, memory_type FROM extracted_memories WHERE valid_to IS NULL`).all();
|
|
438
|
+
const candidates = [];
|
|
439
|
+
for (const r of rows) {
|
|
440
|
+
const lastRecall = r.last_recalled_at ?? r.created_at;
|
|
441
|
+
const daysSinceRecall = Math.round((now - lastRecall) / 86400000);
|
|
442
|
+
const eff = effectiveConfidence(r.confidence, daysSinceRecall, r.recall_count, r.memory_type ?? undefined);
|
|
443
|
+
if (eff < 1) {
|
|
444
|
+
candidates.push({ id: r.id, confidence: r.confidence, effectiveConfidence: eff, recallCount: r.recall_count, daysSinceRecall });
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return candidates.sort((a, b) => a.effectiveConfidence - b.effectiveConfidence);
|
|
448
|
+
}
|
|
449
|
+
fixMemoryDefaults() {
|
|
450
|
+
if (!this.db)
|
|
451
|
+
return { fixed: 0 };
|
|
452
|
+
let fixed = 0;
|
|
453
|
+
try {
|
|
454
|
+
fixed += this.db.prepare("UPDATE extracted_memories SET trust = 2 WHERE memory_type = 'decision' AND trust < 2").run().changes;
|
|
455
|
+
fixed += this.db.prepare("UPDATE extracted_memories SET classification = 1 WHERE memory_type = 'decision' AND classification = 0").run().changes;
|
|
456
|
+
fixed += this.db.prepare("UPDATE extracted_memories SET trust = 2 WHERE trust = 0 AND credibility = 6 AND integrity = 2").run().changes;
|
|
457
|
+
fixed += this.db.prepare("UPDATE extracted_memories SET credibility = 3 WHERE credibility = 6 AND created_at < ?").run(Date.now() - 7 * 86400000).changes;
|
|
458
|
+
}
|
|
459
|
+
catch { /* */ }
|
|
460
|
+
return { fixed };
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=memory-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../../src/memory-manager.ts"],"names":[],"mappings":"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"}
|