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,100 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* abmind — Unified CLI for AgentBridge Memory.
|
|
4
|
+
*
|
|
5
|
+
* Dispatcher shape: a single table of { name, file, aliases?, help } entries.
|
|
6
|
+
* Adding a subcommand is one line. No env-var smuggling — secrets subcommands
|
|
7
|
+
* call runSecretsCommand(action) directly.
|
|
8
|
+
*/
|
|
9
|
+
import { createRequire } from "node:module";
|
|
10
|
+
import { dirname } from "node:path";
|
|
11
|
+
import { pathToFileURL } from "node:url";
|
|
12
|
+
// Resolve subcommand siblings via the package root, not relative to this script.
|
|
13
|
+
// npm may copy this bin to node_modules/.bin/abmind (not a symlink).
|
|
14
|
+
const req = createRequire(import.meta.url);
|
|
15
|
+
const pkgDir = dirname(req.resolve("abmind/package.json"));
|
|
16
|
+
const load = (name) => import(pathToFileURL(`${pkgDir}/dist/cli/${name}`).href);
|
|
17
|
+
const DISPATCH = [
|
|
18
|
+
// Lifecycle (#158 Phase 4)
|
|
19
|
+
{ name: "install", file: "abmind-install.js", help: "First-time setup of ~/.abmind" },
|
|
20
|
+
{ name: "update", file: "abmind-update.js", help: "Build current checkout, stage new release, flip symlink" },
|
|
21
|
+
{ name: "rollback", file: "abmind-rollback.js", help: "Flip current to a prior release" },
|
|
22
|
+
{ name: "status", file: "abmind-status-runtime.js", help: "Show lifecycle status (version, lock, symlink)" },
|
|
23
|
+
// Memory-facing
|
|
24
|
+
{ name: "recall", file: "abmind-recall.js", help: "Search memories" },
|
|
25
|
+
{ name: "store", file: "abmind-store.js", help: "Store a new memory" },
|
|
26
|
+
{ name: "ingest", file: "abmind-ingest.js", help: "Ingest a document into memory" },
|
|
27
|
+
{ name: "backup", file: "abmind-backup.js", help: "Create encrypted backup" },
|
|
28
|
+
{ name: "restore", file: "abmind-restore.js", help: "Restore from encrypted backup" },
|
|
29
|
+
{ name: "edit", file: "abmind-edit.js", help: "Edit an existing memory" },
|
|
30
|
+
{ name: "expand", file: "abmind-expand.js", help: "Look up source messages by ID" },
|
|
31
|
+
{ name: "embed", file: "abmind-embed.js", help: "Batch embed all memories" },
|
|
32
|
+
{ name: "retro-extract", file: "abmind-retro-extract.js", help: "Extract facts from retrospective files" },
|
|
33
|
+
{ name: "wake-up", file: "abmind-wakeup.js", help: "Print current wake-up context" },
|
|
34
|
+
{ name: "bundle", file: "abmind-bundle.js", help: "Print session bundle (SOUL + profile + notes + memory-tools)" },
|
|
35
|
+
{ name: "sleep", file: "abmind-sleep.js", help: "Run a sleep cycle (--level basic|budget|normal|ultimate)" },
|
|
36
|
+
{ name: "sleep-state", file: "abmind-sleep-state.js", help: "Show sleep candidates (JSON)" },
|
|
37
|
+
{ name: "sleep-apply", file: "abmind-sleep-apply.js", help: "Promote/demote memories (--promote --demote --dry-run)" },
|
|
38
|
+
{ name: "sleep-report", file: "abmind-sleep-report.js", help: "Generate dream report" },
|
|
39
|
+
{ name: "mcp", file: "abmind-mcp.js", help: "Start MCP server (stdio)" },
|
|
40
|
+
{ name: "migrate-openclaw", file: "abmind-migrate-openclaw.js", help: "Import OpenClaw session transcripts (.jsonl)" },
|
|
41
|
+
// Kiro CLI hooks (#344)
|
|
42
|
+
{ name: "hook-wakeup", file: "abmind-hook-wakeup.js", help: "Kiro agentSpawn hook — wake-up context injection" },
|
|
43
|
+
{ name: "hook-recall", file: "abmind-hook-recall.js", help: "Kiro userPromptSubmit hook — memory recall injection" },
|
|
44
|
+
{ name: "hook-store", file: "abmind-hook-store.js", help: "Kiro stop hook — turn recording" },
|
|
45
|
+
{ name: "hook-doctor", file: "abmind-hook-doctor.js", help: "Diagnose hook config, errors, active sidecars" },
|
|
46
|
+
{ name: "list-secrets", help: "Show SECRET memory metadata",
|
|
47
|
+
run: async () => {
|
|
48
|
+
if (process.argv.slice(2).includes("--help")) {
|
|
49
|
+
console.log("Usage: abmind list-secrets\n\nShow SECRET memory metadata (no content, no decryption).");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const m = await load("abmind-secrets.js");
|
|
53
|
+
m.runSecretsCommand("list");
|
|
54
|
+
} },
|
|
55
|
+
{ name: "encrypt-secrets", help: "Encrypt existing SECRET memories",
|
|
56
|
+
run: async () => {
|
|
57
|
+
if (process.argv.slice(2).includes("--help")) {
|
|
58
|
+
console.log("Usage: abmind encrypt-secrets\n\nEncrypt existing classification=3 rows.");
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const m = await load("abmind-secrets.js");
|
|
62
|
+
m.runSecretsCommand("encrypt");
|
|
63
|
+
} },
|
|
64
|
+
{ name: "rekey", help: "Re-encrypt with new key (--old-key <path>)",
|
|
65
|
+
run: async () => {
|
|
66
|
+
if (process.argv.slice(2).includes("--help")) {
|
|
67
|
+
console.log("Usage: abmind rekey --old-key <path-to-old-keyfile>\n\nRe-encrypt encrypted memories with a new key.");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const m = await load("abmind-secrets.js");
|
|
71
|
+
m.runSecretsCommand("rekey");
|
|
72
|
+
} },
|
|
73
|
+
];
|
|
74
|
+
function printHelp() {
|
|
75
|
+
console.log("abmind — AgentBridge Memory CLI\n\nSubcommands:");
|
|
76
|
+
const width = Math.max(...DISPATCH.map(e => e.name.length));
|
|
77
|
+
for (const e of DISPATCH) {
|
|
78
|
+
console.log(` ${e.name.padEnd(width)} ${e.help}`);
|
|
79
|
+
}
|
|
80
|
+
console.log("\nRun 'abmind <subcommand> --help' for details.");
|
|
81
|
+
}
|
|
82
|
+
const subcommand = process.argv[2];
|
|
83
|
+
if (!subcommand || subcommand === "--help" || subcommand === "-h") {
|
|
84
|
+
printHelp();
|
|
85
|
+
process.exit(0);
|
|
86
|
+
}
|
|
87
|
+
const entry = DISPATCH.find(e => e.name === subcommand);
|
|
88
|
+
if (!entry) {
|
|
89
|
+
console.error(`Unknown subcommand: ${subcommand}\nRun 'abmind --help' for usage.`);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
// Shift argv so subcommand handlers see their args at argv[2+].
|
|
93
|
+
process.argv.splice(2, 1);
|
|
94
|
+
if (entry.run) {
|
|
95
|
+
await entry.run();
|
|
96
|
+
}
|
|
97
|
+
else if (entry.file) {
|
|
98
|
+
await load(entry.file);
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=abmind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abmind.js","sourceRoot":"","sources":["../../cli/abmind.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* abm-v2-vocab.ts — Canonical emoji vocabulary for ABM-L v2.
|
|
3
|
+
* Seeded from convergent encodings in the emoji-compression study (2026-04-29).
|
|
4
|
+
* Only emoji with ≥8/10 model agreement are canonical. Others fall back to text.
|
|
5
|
+
*/
|
|
6
|
+
export declare const TYPE_EMOJI: Record<string, string>;
|
|
7
|
+
export declare const TOPIC_EMOJI: Record<string, string>;
|
|
8
|
+
export declare const EMOTION_EMOJI: Record<string, string>;
|
|
9
|
+
export declare function confidenceMarker(confidence: number): string;
|
|
10
|
+
//# sourceMappingURL=abm-v2-vocab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abm-v2-vocab.d.ts","sourceRoot":"","sources":["../../src/abm-v2-vocab.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAY7C,CAAC;AAIF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAY9C,CAAC;AAIF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0BhD,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* abm-v2-vocab.ts — Canonical emoji vocabulary for ABM-L v2.
|
|
3
|
+
* Seeded from convergent encodings in the emoji-compression study (2026-04-29).
|
|
4
|
+
* Only emoji with ≥8/10 model agreement are canonical. Others fall back to text.
|
|
5
|
+
*/
|
|
6
|
+
// ── Memory type → emoji ─────────────────────────────────────────────────────
|
|
7
|
+
export const TYPE_EMOJI = {
|
|
8
|
+
fact: "📌",
|
|
9
|
+
decision: "🎯",
|
|
10
|
+
preference: "❤️",
|
|
11
|
+
event: "📅",
|
|
12
|
+
lesson: "📚",
|
|
13
|
+
feedback: "💬",
|
|
14
|
+
story: "📖",
|
|
15
|
+
observation: "💭",
|
|
16
|
+
pivot: "🔀",
|
|
17
|
+
milestone: "🏆",
|
|
18
|
+
correction: "✏️",
|
|
19
|
+
};
|
|
20
|
+
// ── Topic → emoji ───────────────────────────────────────────────────────────
|
|
21
|
+
export const TOPIC_EMOJI = {
|
|
22
|
+
coding: "💻",
|
|
23
|
+
personal: "🏠",
|
|
24
|
+
memory: "🧠",
|
|
25
|
+
security: "🔒",
|
|
26
|
+
relationships: "👥",
|
|
27
|
+
finance: "💰",
|
|
28
|
+
health: "🏥",
|
|
29
|
+
work: "💼",
|
|
30
|
+
tools: "🔧",
|
|
31
|
+
projects: "📦",
|
|
32
|
+
people: "👤",
|
|
33
|
+
};
|
|
34
|
+
// ── Emotion short codes → emoji ─────────────────────────────────────────────
|
|
35
|
+
export const EMOTION_EMOJI = {
|
|
36
|
+
joy: "😊",
|
|
37
|
+
pride: "🦁",
|
|
38
|
+
frust: "😤",
|
|
39
|
+
sad: "😢",
|
|
40
|
+
anxious: "😰",
|
|
41
|
+
convict: "🔥",
|
|
42
|
+
love: "❤️",
|
|
43
|
+
boredom: "🥱",
|
|
44
|
+
curiosity: "🔍",
|
|
45
|
+
surprise: "😲",
|
|
46
|
+
anger: "😡",
|
|
47
|
+
fear: "😨",
|
|
48
|
+
disgust: "🤢",
|
|
49
|
+
trust: "🤝",
|
|
50
|
+
anticipation: "⏳",
|
|
51
|
+
gratitude: "🙏",
|
|
52
|
+
nostalgia: "🕰️",
|
|
53
|
+
relief: "😮💨",
|
|
54
|
+
excitement: "🎉",
|
|
55
|
+
confusion: "😕",
|
|
56
|
+
determination: "💪",
|
|
57
|
+
amusement: "😄",
|
|
58
|
+
empathy: "🫂",
|
|
59
|
+
loneliness: "🌑",
|
|
60
|
+
hope: "🌅",
|
|
61
|
+
};
|
|
62
|
+
// ── Confidence → visual marker ──────────────────────────────────────────────
|
|
63
|
+
export function confidenceMarker(confidence) {
|
|
64
|
+
return String(confidence);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=abm-v2-vocab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abm-v2-vocab.js","sourceRoot":"","sources":["../../src/abm-v2-vocab.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+EAA+E;AAE/E,MAAM,CAAC,MAAM,UAAU,GAA2B;IAChD,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,IAAI;IACjB,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,+EAA+E;AAE/E,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,OAAO;IACf,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,IAAI,EAAE,IAAI;CACX,CAAC;AAEF,+EAA+E;AAE/E,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* abmind OpenClaw plugin — registers memory capability via registerMemoryCapability (Path A).
|
|
3
|
+
*
|
|
4
|
+
* Usage: In OpenClaw plugin config, point to this module.
|
|
5
|
+
* Requires abmind to be installed and ABMIND_HOME set (or defaults to ~/.abmind).
|
|
6
|
+
*/
|
|
7
|
+
interface OcPluginApi {
|
|
8
|
+
logger: {
|
|
9
|
+
info(msg: string): void;
|
|
10
|
+
error(msg: string): void;
|
|
11
|
+
};
|
|
12
|
+
registerMemoryCapability(cap: {
|
|
13
|
+
promptBuilder: () => string[];
|
|
14
|
+
flushPlanResolver: () => {
|
|
15
|
+
softThresholdTokens: number;
|
|
16
|
+
forceFlushTranscriptBytes: number;
|
|
17
|
+
reserveTokensFloor: number;
|
|
18
|
+
prompt: string;
|
|
19
|
+
systemPrompt: string;
|
|
20
|
+
relativePath: string;
|
|
21
|
+
} | null;
|
|
22
|
+
runtime: {
|
|
23
|
+
getMemorySearchManager(params: {
|
|
24
|
+
cfg: unknown;
|
|
25
|
+
agentId: string;
|
|
26
|
+
}): Promise<{
|
|
27
|
+
manager: OcSearchManager | null;
|
|
28
|
+
error?: string;
|
|
29
|
+
}>;
|
|
30
|
+
resolveMemoryBackendConfig(params: {
|
|
31
|
+
cfg: unknown;
|
|
32
|
+
agentId: string;
|
|
33
|
+
}): {
|
|
34
|
+
backend: "external";
|
|
35
|
+
};
|
|
36
|
+
closeAllMemorySearchManagers?(): Promise<void>;
|
|
37
|
+
};
|
|
38
|
+
}): void;
|
|
39
|
+
}
|
|
40
|
+
interface OcSearchManager {
|
|
41
|
+
search(query: string, opts?: {
|
|
42
|
+
maxResults?: number;
|
|
43
|
+
}): Promise<Array<{
|
|
44
|
+
content: string;
|
|
45
|
+
path: string;
|
|
46
|
+
score: number;
|
|
47
|
+
snippet: string;
|
|
48
|
+
}>>;
|
|
49
|
+
readFile(params: {
|
|
50
|
+
relPath: string;
|
|
51
|
+
from?: number;
|
|
52
|
+
lines?: number;
|
|
53
|
+
}): Promise<{
|
|
54
|
+
text: string;
|
|
55
|
+
path: string;
|
|
56
|
+
}>;
|
|
57
|
+
status(): {
|
|
58
|
+
enabled: boolean;
|
|
59
|
+
ready: boolean;
|
|
60
|
+
error?: string;
|
|
61
|
+
};
|
|
62
|
+
close?(): Promise<void>;
|
|
63
|
+
}
|
|
64
|
+
export declare function register(api: OcPluginApi): Promise<void>;
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=openclaw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,UAAU,WAAW;IACnB,MAAM,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9D,wBAAwB,CAAC,GAAG,EAAE;QAC5B,aAAa,EAAE,MAAM,MAAM,EAAE,CAAC;QAC9B,iBAAiB,EAAE,MAAM;YACvB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,yBAAyB,EAAE,MAAM,CAAC;YAClC,kBAAkB,EAAE,MAAM,CAAC;YAC3B,MAAM,EAAE,MAAM,CAAC;YACf,YAAY,EAAE,MAAM,CAAC;YACrB,YAAY,EAAE,MAAM,CAAC;SACtB,GAAG,IAAI,CAAC;QACT,OAAO,EAAE;YACP,sBAAsB,CAAC,MAAM,EAAE;gBAAE,GAAG,EAAE,OAAO,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBACzE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;gBAChC,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC,CAAC;YACH,0BAA0B,CAAC,MAAM,EAAE;gBAAE,GAAG,EAAE,OAAO,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,OAAO,EAAE,UAAU,CAAA;aAAE,CAAC;YAC/F,4BAA4B,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;SAChD,CAAC;KACH,GAAG,IAAI,CAAC;CACV;AAED,UAAU,eAAe;IACvB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACzI,QAAQ,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9G,MAAM,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8E9D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* abmind OpenClaw plugin — registers memory capability via registerMemoryCapability (Path A).
|
|
3
|
+
*
|
|
4
|
+
* Usage: In OpenClaw plugin config, point to this module.
|
|
5
|
+
* Requires abmind to be installed and ABMIND_HOME set (or defaults to ~/.abmind).
|
|
6
|
+
*/
|
|
7
|
+
import { loadMemoryConfig } from "../memory-config.js";
|
|
8
|
+
import { MemoryManager } from "../memory-manager.js";
|
|
9
|
+
import { createMemoryBackend } from "../backend-factory.js";
|
|
10
|
+
import { loadMasterUserId } from "../user-utils.js";
|
|
11
|
+
import { abmindHome } from "../mem-paths.js";
|
|
12
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
export async function register(api) {
|
|
15
|
+
const config = loadMemoryConfig();
|
|
16
|
+
const memory = new MemoryManager(config);
|
|
17
|
+
await memory.initialize();
|
|
18
|
+
let backend = null;
|
|
19
|
+
try {
|
|
20
|
+
backend = await createMemoryBackend(config);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
api.logger.error(`[abmind] Failed to create backend: ${err}`);
|
|
24
|
+
}
|
|
25
|
+
const masterUserId = loadMasterUserId();
|
|
26
|
+
const dataDir = abmindHome();
|
|
27
|
+
const promptBuilder = () => {
|
|
28
|
+
try {
|
|
29
|
+
const wakeup = memory.buildWakeUp();
|
|
30
|
+
return wakeup ? [wakeup] : [];
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
api.logger.error(`[abmind] promptBuilder failed: ${err}`);
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const flushPlanResolver = () => ({
|
|
38
|
+
softThresholdTokens: 80000,
|
|
39
|
+
forceFlushTranscriptBytes: 200000,
|
|
40
|
+
reserveTokensFloor: 20000,
|
|
41
|
+
prompt: "Summarize the conversation so far.",
|
|
42
|
+
systemPrompt: "You are a conversation summarizer.",
|
|
43
|
+
relativePath: "memory/compaction",
|
|
44
|
+
});
|
|
45
|
+
const buildSearchManager = () => ({
|
|
46
|
+
async search(query, opts) {
|
|
47
|
+
if (!backend)
|
|
48
|
+
return [];
|
|
49
|
+
try {
|
|
50
|
+
const result = await backend.recall({ translated: [query], userId: masterUserId, limit: opts?.maxResults ?? 10 });
|
|
51
|
+
return result.results.map(r => ({
|
|
52
|
+
content: r.content,
|
|
53
|
+
path: `memory://${r.source}`,
|
|
54
|
+
score: r.score ?? 0.5,
|
|
55
|
+
snippet: r.content.slice(0, 200),
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
api.logger.error(`[abmind] search failed: ${err}`);
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
async readFile({ relPath }) {
|
|
64
|
+
const fullPath = join(dataDir, relPath);
|
|
65
|
+
if (!existsSync(fullPath))
|
|
66
|
+
return { text: "", path: fullPath };
|
|
67
|
+
try {
|
|
68
|
+
return { text: readFileSync(fullPath, "utf-8"), path: fullPath };
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return { text: "", path: fullPath };
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
status() {
|
|
75
|
+
const stats = memory.getStats();
|
|
76
|
+
return { enabled: true, ready: !!stats, error: stats ? undefined : "Memory not initialized" };
|
|
77
|
+
},
|
|
78
|
+
async close() { memory.close(); },
|
|
79
|
+
});
|
|
80
|
+
api.registerMemoryCapability({
|
|
81
|
+
promptBuilder,
|
|
82
|
+
flushPlanResolver,
|
|
83
|
+
runtime: {
|
|
84
|
+
async getMemorySearchManager() {
|
|
85
|
+
return { manager: buildSearchManager() };
|
|
86
|
+
},
|
|
87
|
+
resolveMemoryBackendConfig() {
|
|
88
|
+
return { backend: "external" };
|
|
89
|
+
},
|
|
90
|
+
async closeAllMemorySearchManagers() {
|
|
91
|
+
memory.close();
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
api.logger.info(`[abmind] Memory plugin registered (user: ${masterUserId}, data: ${dataDir})`);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=openclaw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../../src/adapters/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend factory — creates the configured MemoryBackend.
|
|
3
|
+
* Tries IPC socket first (fast), falls back to SQLite (standalone).
|
|
4
|
+
*/
|
|
5
|
+
import type { MemoryBackend } from "./memory-backend.js";
|
|
6
|
+
import type { MemoryConfig } from "./memory-config.js";
|
|
7
|
+
/** Create and initialize a MemoryBackend. Tries IPC socket first, falls back to SQLite. */
|
|
8
|
+
export declare function createMemoryBackend(config: MemoryConfig): Promise<MemoryBackend>;
|
|
9
|
+
//# sourceMappingURL=backend-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-factory.d.ts","sourceRoot":"","sources":["../../src/backend-factory.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,2FAA2F;AAC3F,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAmBtF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getAbmindEnv } from "./env-schema.js";
|
|
2
|
+
import { SqliteBackend } from "./sqlite-backend.js";
|
|
3
|
+
/** Create and initialize a MemoryBackend. Tries IPC socket first, falls back to SQLite. */
|
|
4
|
+
export async function createMemoryBackend(config) {
|
|
5
|
+
const backendType = getAbmindEnv().memoryBackend;
|
|
6
|
+
if (backendType !== "sqlite") {
|
|
7
|
+
throw new Error(`Unknown MEMORY_BACKEND: ${backendType}. Supported: sqlite`);
|
|
8
|
+
}
|
|
9
|
+
// Try IPC first (bridge is running, DB already open)
|
|
10
|
+
if (getAbmindEnv().memoryIpc) {
|
|
11
|
+
try {
|
|
12
|
+
const { IpcBackend } = await import("./memory-ipc-client.js");
|
|
13
|
+
const ipc = new IpcBackend();
|
|
14
|
+
await ipc.initialize();
|
|
15
|
+
return ipc;
|
|
16
|
+
}
|
|
17
|
+
catch { /* socket not available — fall through to SQLite */ }
|
|
18
|
+
}
|
|
19
|
+
const backend = new SqliteBackend(config);
|
|
20
|
+
await backend.initialize();
|
|
21
|
+
return backend;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=backend-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-factory.js","sourceRoot":"","sources":["../../src/backend-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAQ/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAoB;IAC5D,MAAM,WAAW,GAAG,YAAY,EAAE,CAAC,aAAa,CAAC;IACjD,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,qBAAqB,CAAC,CAAC;IAC/E,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,MAAM,CAAC,CAAC,mDAAmD,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* backup.ts — Encrypted backup/restore for abmind memory.
|
|
3
|
+
* Format: plaintext header (salt, iv, version) + AES-256-GCM encrypted ZIP.
|
|
4
|
+
*/
|
|
5
|
+
import type Database from "better-sqlite3";
|
|
6
|
+
export interface BackupResult {
|
|
7
|
+
path: string;
|
|
8
|
+
memories: number;
|
|
9
|
+
files: number;
|
|
10
|
+
sizeBytes: number;
|
|
11
|
+
}
|
|
12
|
+
export interface RestoreResult {
|
|
13
|
+
restored: number;
|
|
14
|
+
skipped: number;
|
|
15
|
+
files: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function createBackup(db: Database.Database, memoryDir: string, passphrase: string, outputPath: string): BackupResult;
|
|
18
|
+
export declare function restoreBackup(db: Database.Database, memoryDir: string, passphrase: string, inputPath: string, mode: "merge" | "replace"): RestoreResult;
|
|
19
|
+
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/backup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAQ3C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAoCD,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAmD3H;AAID,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,aAAa,CAoHvJ"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* backup.ts — Encrypted backup/restore for abmind memory.
|
|
3
|
+
* Format: plaintext header (salt, iv, version) + AES-256-GCM encrypted ZIP.
|
|
4
|
+
*/
|
|
5
|
+
import { createCipheriv, createDecipheriv, pbkdf2Sync, randomBytes } from "node:crypto";
|
|
6
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from "node:fs";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { deflateSync, inflateSync } from "node:zlib";
|
|
9
|
+
import { logInfo } from "./mem-logger.js";
|
|
10
|
+
const TAG = "backup";
|
|
11
|
+
const MAGIC = Buffer.from("ABMIND\x00\x01");
|
|
12
|
+
const PBKDF2_ITERATIONS = 100_000;
|
|
13
|
+
const HEADER_SIZE = 54; // 8 magic + 2 version + 32 salt + 12 iv
|
|
14
|
+
function deriveKey(passphrase, salt) {
|
|
15
|
+
return pbkdf2Sync(passphrase, salt, PBKDF2_ITERATIONS, 32, "sha256");
|
|
16
|
+
}
|
|
17
|
+
function encrypt(key, iv, data) {
|
|
18
|
+
const cipher = createCipheriv("aes-256-gcm", key, iv);
|
|
19
|
+
const encrypted = Buffer.concat([cipher.update(data), cipher.final()]);
|
|
20
|
+
const authTag = cipher.getAuthTag();
|
|
21
|
+
return Buffer.concat([encrypted, authTag]); // tag appended (16 bytes)
|
|
22
|
+
}
|
|
23
|
+
function decrypt(key, iv, data) {
|
|
24
|
+
const authTag = data.subarray(data.length - 16);
|
|
25
|
+
const encrypted = data.subarray(0, data.length - 16);
|
|
26
|
+
const decipher = createDecipheriv("aes-256-gcm", key, iv);
|
|
27
|
+
decipher.setAuthTag(authTag);
|
|
28
|
+
return Buffer.concat([decipher.update(encrypted), decipher.final()]);
|
|
29
|
+
}
|
|
30
|
+
function collectMdFiles(baseDir, subDirs) {
|
|
31
|
+
const files = [];
|
|
32
|
+
for (const sub of subDirs) {
|
|
33
|
+
const dir = join(baseDir, sub);
|
|
34
|
+
if (!existsSync(dir))
|
|
35
|
+
continue;
|
|
36
|
+
for (const f of readdirSync(dir)) {
|
|
37
|
+
if (!f.endsWith(".md"))
|
|
38
|
+
continue;
|
|
39
|
+
files.push({ path: `${sub}/${f}`, content: readFileSync(join(dir, f), "utf-8") });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return files;
|
|
43
|
+
}
|
|
44
|
+
// ── Backup ───────────────────────────────────────────────────────────────────
|
|
45
|
+
export function createBackup(db, memoryDir, passphrase, outputPath) {
|
|
46
|
+
const salt = randomBytes(32);
|
|
47
|
+
const iv = randomBytes(12);
|
|
48
|
+
const key = deriveKey(passphrase, salt);
|
|
49
|
+
// Export tables
|
|
50
|
+
const memories = db.prepare("SELECT * FROM extracted_memories").all();
|
|
51
|
+
const watermarks = db.prepare("SELECT * FROM extraction_watermarks").all();
|
|
52
|
+
const entityGraph = db.prepare("SELECT * FROM entity_graph").all();
|
|
53
|
+
const ingested = db.prepare("SELECT * FROM ingested_documents").all();
|
|
54
|
+
const schemaVersion = 17; // current schema version
|
|
55
|
+
// Export .md files
|
|
56
|
+
const mdFiles = collectMdFiles(memoryDir, ["daily", "weekly", "quarterly", "retrospectives", "core"]);
|
|
57
|
+
// Build ZIP-like JSON payload (using JSON for simplicity — ZIP adds dep)
|
|
58
|
+
const manifest = {
|
|
59
|
+
version: schemaVersion,
|
|
60
|
+
createdAt: Date.now(),
|
|
61
|
+
memoriesCount: memories.length,
|
|
62
|
+
filesCount: mdFiles.length,
|
|
63
|
+
};
|
|
64
|
+
const payload = JSON.stringify({
|
|
65
|
+
manifest,
|
|
66
|
+
tables: {
|
|
67
|
+
extracted_memories: memories,
|
|
68
|
+
extraction_watermarks: watermarks,
|
|
69
|
+
entity_graph: entityGraph,
|
|
70
|
+
ingested_documents: ingested,
|
|
71
|
+
},
|
|
72
|
+
files: mdFiles,
|
|
73
|
+
});
|
|
74
|
+
// Compress then encrypt
|
|
75
|
+
const compressed = deflateSync(Buffer.from(payload, "utf-8"));
|
|
76
|
+
const encrypted = encrypt(key, iv, compressed);
|
|
77
|
+
// Write header + body
|
|
78
|
+
const header = Buffer.alloc(HEADER_SIZE);
|
|
79
|
+
MAGIC.copy(header, 0);
|
|
80
|
+
header.writeUInt16LE(schemaVersion, 8);
|
|
81
|
+
salt.copy(header, 10);
|
|
82
|
+
iv.copy(header, 42);
|
|
83
|
+
const output = Buffer.concat([header, encrypted]);
|
|
84
|
+
mkdirSync(join(outputPath, ".."), { recursive: true });
|
|
85
|
+
writeFileSync(outputPath, output);
|
|
86
|
+
logInfo(TAG, `Backup complete: ${memories.length} memories, ${mdFiles.length} files → ${outputPath} (${output.length} bytes)`);
|
|
87
|
+
return { path: outputPath, memories: memories.length, files: mdFiles.length, sizeBytes: output.length };
|
|
88
|
+
}
|
|
89
|
+
// ── Restore ──────────────────────────────────────────────────────────────────
|
|
90
|
+
export function restoreBackup(db, memoryDir, passphrase, inputPath, mode) {
|
|
91
|
+
const raw = readFileSync(inputPath);
|
|
92
|
+
// Parse header
|
|
93
|
+
const magic = raw.subarray(0, 8);
|
|
94
|
+
if (!magic.equals(MAGIC))
|
|
95
|
+
throw new Error("Invalid backup file (bad magic)");
|
|
96
|
+
const _version = raw.readUInt16LE(8);
|
|
97
|
+
const salt = raw.subarray(10, 42);
|
|
98
|
+
const iv = raw.subarray(42, 54);
|
|
99
|
+
const body = raw.subarray(HEADER_SIZE);
|
|
100
|
+
// Decrypt + decompress
|
|
101
|
+
const key = deriveKey(passphrase, salt);
|
|
102
|
+
let decrypted;
|
|
103
|
+
try {
|
|
104
|
+
decrypted = decrypt(key, iv, body);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
throw new Error("Decryption failed — wrong passphrase or corrupted file");
|
|
108
|
+
}
|
|
109
|
+
const decompressed = inflateSync(decrypted).toString("utf-8");
|
|
110
|
+
const data = JSON.parse(decompressed);
|
|
111
|
+
let restored = 0;
|
|
112
|
+
let skipped = 0;
|
|
113
|
+
if (mode === "replace") {
|
|
114
|
+
// Wipe existing data
|
|
115
|
+
db.exec("DELETE FROM extracted_memories");
|
|
116
|
+
db.exec("DELETE FROM extraction_watermarks");
|
|
117
|
+
db.exec("DELETE FROM entity_graph");
|
|
118
|
+
db.exec("DELETE FROM ingested_documents");
|
|
119
|
+
}
|
|
120
|
+
// Restore extracted_memories
|
|
121
|
+
const memCols = Object.keys(data.tables.extracted_memories[0] ?? {});
|
|
122
|
+
if (memCols.length > 0 && data.tables.extracted_memories.length > 0) {
|
|
123
|
+
// Get current table columns for forward-compat
|
|
124
|
+
const tableInfo = db.prepare("PRAGMA table_info(extracted_memories)").all();
|
|
125
|
+
const validCols = new Set(tableInfo.map(c => c.name));
|
|
126
|
+
const useCols = memCols.filter(c => validCols.has(c));
|
|
127
|
+
const placeholders = useCols.map(() => "?").join(",");
|
|
128
|
+
const insertSql = mode === "merge"
|
|
129
|
+
? `INSERT OR IGNORE INTO extracted_memories (${useCols.join(",")}) VALUES (${placeholders})`
|
|
130
|
+
: `INSERT INTO extracted_memories (${useCols.join(",")}) VALUES (${placeholders})`;
|
|
131
|
+
const stmt = db.prepare(insertSql);
|
|
132
|
+
const tx = db.transaction(() => {
|
|
133
|
+
for (const row of data.tables.extracted_memories) {
|
|
134
|
+
const values = useCols.map(c => row[c] ?? null);
|
|
135
|
+
const result = stmt.run(...values);
|
|
136
|
+
if (result.changes > 0)
|
|
137
|
+
restored++;
|
|
138
|
+
else
|
|
139
|
+
skipped++;
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
tx();
|
|
143
|
+
}
|
|
144
|
+
// Restore entity_graph
|
|
145
|
+
if (data.tables.entity_graph.length > 0) {
|
|
146
|
+
const stmt = db.prepare(mode === "merge"
|
|
147
|
+
? "INSERT OR IGNORE INTO entity_graph (entity_a, entity_b, relation, source_memory_id, created_at, last_seen_at) VALUES (?, ?, ?, ?, ?, ?)"
|
|
148
|
+
: "INSERT INTO entity_graph (entity_a, entity_b, relation, source_memory_id, created_at, last_seen_at) VALUES (?, ?, ?, ?, ?, ?)");
|
|
149
|
+
for (const row of data.tables.entity_graph) {
|
|
150
|
+
stmt.run(row.entity_a, row.entity_b, row.relation, row.source_memory_id, row.created_at, row.last_seen_at);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Restore extraction_watermarks
|
|
154
|
+
if (data.tables.extraction_watermarks.length > 0) {
|
|
155
|
+
const stmt = db.prepare("INSERT OR REPLACE INTO extraction_watermarks (user_id, last_processed_timestamp) VALUES (?, ?)");
|
|
156
|
+
for (const row of data.tables.extraction_watermarks) {
|
|
157
|
+
stmt.run(row.user_id, row.last_processed_timestamp);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Restore ingested_documents
|
|
161
|
+
if (data.tables.ingested_documents.length > 0) {
|
|
162
|
+
const stmt = db.prepare(mode === "merge"
|
|
163
|
+
? "INSERT OR IGNORE INTO ingested_documents (user_id, source_type, identifier, chunk_count, ingested_at) VALUES (?, ?, ?, ?, ?)"
|
|
164
|
+
: "INSERT INTO ingested_documents (user_id, source_type, identifier, chunk_count, ingested_at) VALUES (?, ?, ?, ?, ?)");
|
|
165
|
+
for (const row of data.tables.ingested_documents) {
|
|
166
|
+
stmt.run(row.user_id, row.source_type, row.identifier, row.chunk_count, row.ingested_at);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Restore .md files
|
|
170
|
+
let filesRestored = 0;
|
|
171
|
+
for (const file of data.files) {
|
|
172
|
+
const target = join(memoryDir, file.path);
|
|
173
|
+
if (mode === "merge" && existsSync(target))
|
|
174
|
+
continue;
|
|
175
|
+
mkdirSync(join(target, ".."), { recursive: true });
|
|
176
|
+
writeFileSync(target, file.content, "utf-8");
|
|
177
|
+
filesRestored++;
|
|
178
|
+
}
|
|
179
|
+
// FTS rebuild (replace only — merge uses INSERT triggers)
|
|
180
|
+
if (mode === "replace") {
|
|
181
|
+
try {
|
|
182
|
+
db.exec("INSERT INTO extracted_memories_fts(extracted_memories_fts) VALUES('rebuild')");
|
|
183
|
+
db.exec("INSERT INTO content_en_trigram(content_en_trigram) VALUES('rebuild')");
|
|
184
|
+
db.exec("INSERT INTO content_original_trigram(content_original_trigram) VALUES('rebuild')");
|
|
185
|
+
}
|
|
186
|
+
catch { /* FTS rebuild best-effort */ }
|
|
187
|
+
}
|
|
188
|
+
logInfo(TAG, `Restore complete (${mode}): ${restored} memories restored, ${skipped} skipped, ${filesRestored} files`);
|
|
189
|
+
return { restored, skipped, files: filesRestored };
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=backup.js.map
|