openclaw-hybrid-memory 2026.5.310 → 2026.6.10
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/api/plugin-runtime.ts +2 -0
- package/backends/facts-db/contradictions.ts +1 -1
- package/cli/cmd-extract-directives.ts +225 -11
- package/cli/cmd-extract-proposals.ts +5 -6
- package/cli/cmd-extract-reinforcement.ts +71 -0
- package/cli/cmd-feedback.ts +15 -9
- package/cli/commands/manage/register-reflection-pipeline.ts +247 -13
- package/cli/commands/manage/register-storage-maintenance.ts +224 -15
- package/cli/commands/manage/storage-stats-helpers.ts +13 -2
- package/cli/context.ts +9 -19
- package/cli/distill.ts +31 -1
- package/cli/register.ts +28 -38
- package/dist/api/plugin-runtime.js.map +1 -1
- package/dist/backends/agent-health-store.js.map +1 -1
- package/dist/backends/apitap-store.js.map +1 -1
- package/dist/backends/audit-store.js.map +1 -1
- package/dist/backends/base-sqlite-store.js.map +1 -1
- package/dist/backends/cost-tracker.js.map +1 -1
- package/dist/backends/credentials-db.js +2 -3
- package/dist/backends/credentials-db.js.map +1 -1
- package/dist/backends/crystallization-store.js.map +1 -1
- package/dist/backends/edict-store.js.map +1 -1
- package/dist/backends/event-bus.js.map +1 -1
- package/dist/backends/event-log.js.map +1 -1
- package/dist/backends/facts-db/cache-manager.js.map +1 -1
- package/dist/backends/facts-db/clusters.js.map +1 -1
- package/dist/backends/facts-db/contradictions.js +1 -1
- package/dist/backends/facts-db/contradictions.js.map +1 -1
- package/dist/backends/facts-db/crud.js.map +1 -1
- package/dist/backends/facts-db/db-connection.js.map +1 -1
- package/dist/backends/facts-db/entity-autolink.js.map +1 -1
- package/dist/backends/facts-db/entity-layer.js.map +1 -1
- package/dist/backends/facts-db/episodes.js.map +1 -1
- package/dist/backends/facts-db/fact-queries.js.map +1 -1
- package/dist/backends/facts-db/fact-read-queries.js.map +1 -1
- package/dist/backends/facts-db/facts-db-layer1.js.map +1 -1
- package/dist/backends/facts-db/facts-db-layer2.js.map +1 -1
- package/dist/backends/facts-db/facts-db-layer3.js.map +1 -1
- package/dist/backends/facts-db/fts-text.js.map +1 -1
- package/dist/backends/facts-db/generated-skills/policy.js.map +1 -1
- package/dist/backends/facts-db/generated-skills.js.map +1 -1
- package/dist/backends/facts-db/housekeeping.js.map +1 -1
- package/dist/backends/facts-db/links.js.map +1 -1
- package/dist/backends/facts-db/maintenance.js.map +1 -1
- package/dist/backends/facts-db/procedures/crud.js.map +1 -1
- package/dist/backends/facts-db/procedures/internal.js.map +1 -1
- package/dist/backends/facts-db/procedures/promotion.js.map +1 -1
- package/dist/backends/facts-db/procedures/search.js.map +1 -1
- package/dist/backends/facts-db/procedures/stats.js.map +1 -1
- package/dist/backends/facts-db/reinforcement.js.map +1 -1
- package/dist/backends/facts-db/row-mapper.js.map +1 -1
- package/dist/backends/facts-db/scan-cursors.js.map +1 -1
- package/dist/backends/facts-db/schema-bootstrap.js.map +1 -1
- package/dist/backends/facts-db/scope-sql.js.map +1 -1
- package/dist/backends/facts-db/search.js.map +1 -1
- package/dist/backends/facts-db/stats.js.map +1 -1
- package/dist/backends/facts-db/types.js.map +1 -1
- package/dist/backends/facts-db/variants.js.map +1 -1
- package/dist/backends/identity-reflection-store.js.map +1 -1
- package/dist/backends/issue-store.js.map +1 -1
- package/dist/backends/learnings-db.js.map +1 -1
- package/dist/backends/migrations/facts-migrations.js.map +1 -1
- package/dist/backends/migrations/procedures.js.map +1 -1
- package/dist/backends/narratives-db.js.map +1 -1
- package/dist/backends/persona-state-store.js.map +1 -1
- package/dist/backends/proposals-db.js.map +1 -1
- package/dist/backends/scope-filter-sql.js.map +1 -1
- package/dist/backends/sqlite-schema-meta.js.map +1 -1
- package/dist/backends/tool-proposal-store.js.map +1 -1
- package/dist/backends/vector-db/constants.js.map +1 -1
- package/dist/backends/vector-db/path-utils.js.map +1 -1
- package/dist/backends/vector-db/runtime-locks.js.map +1 -1
- package/dist/backends/vector-db/vector-db-class.js.map +1 -1
- package/dist/backends/wal.js.map +1 -1
- package/dist/backends/workflow-store.js.map +1 -1
- package/dist/benchmark/shadow-eval.js.map +1 -1
- package/dist/cli/active-tasks.js.map +1 -1
- package/dist/cli/backup.js.map +1 -1
- package/dist/cli/benchmark.js.map +1 -1
- package/dist/cli/cmd-backfill.js.map +1 -1
- package/dist/cli/cmd-config.js.map +1 -1
- package/dist/cli/cmd-credentials.js.map +1 -1
- package/dist/cli/cmd-demo.js.map +1 -1
- package/dist/cli/cmd-distill.js.map +1 -1
- package/dist/cli/cmd-doctor.js.map +1 -1
- package/dist/cli/cmd-examples.js.map +1 -1
- package/dist/cli/cmd-extract-daily.js.map +1 -1
- package/dist/cli/cmd-extract-directives.js +141 -10
- package/dist/cli/cmd-extract-directives.js.map +1 -1
- package/dist/cli/cmd-extract-procedures.js.map +1 -1
- package/dist/cli/cmd-extract-proposals.js +3 -2
- package/dist/cli/cmd-extract-proposals.js.map +1 -1
- package/dist/cli/cmd-extract-reinforcement.js +39 -0
- package/dist/cli/cmd-extract-reinforcement.js.map +1 -1
- package/dist/cli/cmd-extract-sessions.js.map +1 -1
- package/dist/cli/cmd-feedback.js +9 -4
- package/dist/cli/cmd-feedback.js.map +1 -1
- package/dist/cli/cmd-health.js.map +1 -1
- package/dist/cli/cmd-providers.js.map +1 -1
- package/dist/cli/cmd-selfcorrection.js.map +1 -1
- package/dist/cli/cmd-setup.js.map +1 -1
- package/dist/cli/cmd-status.js.map +1 -1
- package/dist/cli/cmd-store.js.map +1 -1
- package/dist/cli/cmd-user-friendly.js.map +1 -1
- package/dist/cli/cmd-verify.js.map +1 -1
- package/dist/cli/commands/manage/bindings.js.map +1 -1
- package/dist/cli/commands/manage/dream-cycle-followup.js.map +1 -1
- package/dist/cli/commands/manage/maintenance-heartbeat.js.map +1 -1
- package/dist/cli/commands/manage/register-agents-audit-runall.js.map +1 -1
- package/dist/cli/commands/manage/register-analyze-maintenance-logs.js.map +1 -1
- package/dist/cli/commands/manage/register-budget-proposals.js.map +1 -1
- package/dist/cli/commands/manage/register-config-cli.js.map +1 -1
- package/dist/cli/commands/manage/register-corrections-and-pipeline.js.map +1 -1
- package/dist/cli/commands/manage/register-corrections.js.map +1 -1
- package/dist/cli/commands/manage/register-council.js.map +1 -1
- package/dist/cli/commands/manage/register-credentials-scope.js.map +1 -1
- package/dist/cli/commands/manage/register-digest.js.map +1 -1
- package/dist/cli/commands/manage/register-lifecycle.js.map +1 -1
- package/dist/cli/commands/manage/register-procedure-lifecycle.js.map +1 -1
- package/dist/cli/commands/manage/register-reconcile-cron-ledgers.js.map +1 -1
- package/dist/cli/commands/manage/register-reflection-pipeline.js +144 -7
- package/dist/cli/commands/manage/register-reflection-pipeline.js.map +1 -1
- package/dist/cli/commands/manage/register-self-correction-feedback.js.map +1 -1
- package/dist/cli/commands/manage/register-storage-and-stats.js.map +1 -1
- package/dist/cli/commands/manage/register-storage-entities-decay.js.map +1 -1
- package/dist/cli/commands/manage/register-storage-graph-audit.js.map +1 -1
- package/dist/cli/commands/manage/register-storage-maintenance.js +152 -9
- package/dist/cli/commands/manage/register-storage-maintenance.js.map +1 -1
- package/dist/cli/commands/manage/register-validate-cron-exit.js.map +1 -1
- package/dist/cli/commands/manage/storage-stats-helpers.js +10 -3
- package/dist/cli/commands/manage/storage-stats-helpers.js.map +1 -1
- package/dist/cli/commands/register-manage-commands.js.map +1 -1
- package/dist/cli/config-feature-summaries.js.map +1 -1
- package/dist/cli/config-output-sink.js.map +1 -1
- package/dist/cli/distill-session-jsonl.js.map +1 -1
- package/dist/cli/distill.js +10 -1
- package/dist/cli/distill.js.map +1 -1
- package/dist/cli/global-verbose.js.map +1 -1
- package/dist/cli/goals.js.map +1 -1
- package/dist/cli/hybrid-mem-commander-utils.js.map +1 -1
- package/dist/cli/install/config-merge.js.map +1 -1
- package/dist/cli/install/cron-jobs.js.map +1 -1
- package/dist/cli/install/embedding-detect.js.map +1 -1
- package/dist/cli/install/run-install.js.map +1 -1
- package/dist/cli/install/workspace.js.map +1 -1
- package/dist/cli/proposals.js.map +1 -1
- package/dist/cli/register.js.map +1 -1
- package/dist/cli/shared.js.map +1 -1
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/task-queue-status.js.map +1 -1
- package/dist/cli/verified.js.map +1 -1
- package/dist/cli/verify/fact-count.js.map +1 -1
- package/dist/cli/verify/openclaw-config.js.map +1 -1
- package/dist/cli/verify/plugin-config-credentials.js.map +1 -1
- package/dist/cli/verify/sections/config-cron.js.map +1 -1
- package/dist/cli/verify/sections/embeddings.js.map +1 -1
- package/dist/cli/verify/sections/infrastructure.js.map +1 -1
- package/dist/cli/verify/sections/llm-models.js.map +1 -1
- package/dist/cli/verify/sections/reconcile.js.map +1 -1
- package/dist/cli/verify/verify-run-state.js.map +1 -1
- package/dist/cli/verify-llm-azure-auth.js.map +1 -1
- package/dist/cli/verify.js.map +1 -1
- package/dist/config/hybrid-schema.js.map +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/maintenance-fallback-policy.js.map +1 -1
- package/dist/config/parsers/capture.js.map +1 -1
- package/dist/config/parsers/core.js.map +1 -1
- package/dist/config/parsers/features.js.map +1 -1
- package/dist/config/parsers/index.js.map +1 -1
- package/dist/config/parsers/maintenance.js.map +1 -1
- package/dist/config/parsers/retrieval.js.map +1 -1
- package/dist/config/parsers/sensors.js.map +1 -1
- package/dist/config/skill-sections.js.map +1 -1
- package/dist/config/skill-size-limits.js.map +1 -1
- package/dist/config/types/agents.js.map +1 -1
- package/dist/config/types/bootstrap.js.map +1 -1
- package/dist/config/types/core.js.map +1 -1
- package/dist/config/types/index.js.map +1 -1
- package/dist/config/utils.js.map +1 -1
- package/dist/index-help.js.map +1 -1
- package/dist/index-testing-exports.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/hook-resolution-api.js.map +1 -1
- package/dist/lifecycle/hooks.js +0 -1
- package/dist/lifecycle/hooks.js.map +1 -1
- package/dist/lifecycle/resolve-agent-id.js.map +1 -1
- package/dist/lifecycle/session-state.js.map +1 -1
- package/dist/lifecycle/stage-active-task.js.map +1 -1
- package/dist/lifecycle/stage-auth-failure.js.map +1 -1
- package/dist/lifecycle/stage-capture/run-capture.js.map +1 -1
- package/dist/lifecycle/stage-capture.js.map +1 -1
- package/dist/lifecycle/stage-cleanup.js.map +1 -1
- package/dist/lifecycle/stage-credential-hint.js.map +1 -1
- package/dist/lifecycle/stage-frustration.js.map +1 -1
- package/dist/lifecycle/stage-goal-stewardship.js.map +1 -1
- package/dist/lifecycle/stage-goal-subagent.js.map +1 -1
- package/dist/lifecycle/stage-injection.js +1 -1
- package/dist/lifecycle/stage-injection.js.map +1 -1
- package/dist/lifecycle/stage-recall/run-recall.js.map +1 -1
- package/dist/lifecycle/stage-recall.js.map +1 -1
- package/dist/lifecycle/stage-setup.js.map +1 -1
- package/dist/routes/dashboard/collectors.js.map +1 -1
- package/dist/routes/dashboard/html.js.map +1 -1
- package/dist/routes/dashboard/server.js.map +1 -1
- package/dist/routes/dashboard-graph.js.map +1 -1
- package/dist/routes/graphql-resolvers.js.map +1 -1
- package/dist/routes/graphql-server.js.map +1 -1
- package/dist/services/active-task-checkpoint.js.map +1 -1
- package/dist/services/active-task-injection.js.map +1 -1
- package/dist/services/active-task.js.map +1 -1
- package/dist/services/adaptive-catch-up-pacing.js +25 -0
- package/dist/services/adaptive-catch-up-pacing.js.map +1 -0
- package/dist/services/adaptive-maintenance-llm.js.map +1 -1
- package/dist/services/adaptive-model-limits.js.map +1 -1
- package/dist/services/ambient-retrieval.js.map +1 -1
- package/dist/services/apitap-service.js.map +1 -1
- package/dist/services/audit-health-exit-info.js.map +1 -1
- package/dist/services/audit-health-json.js.map +1 -1
- package/dist/services/auth-failure-detect.js.map +1 -1
- package/dist/services/auto-capture.js.map +1 -1
- package/dist/services/auto-classifier.js.map +1 -1
- package/dist/services/auto-skills-audit.js.map +1 -1
- package/dist/services/bootstrap-optional.js.map +1 -1
- package/dist/services/bootstrap-priority.js.map +1 -1
- package/dist/services/bootstrap.js.map +1 -1
- package/dist/services/capture-provenance.js.map +1 -1
- package/dist/services/capture-utils.js.map +1 -1
- package/dist/services/chat.js +22 -3
- package/dist/services/chat.js.map +1 -1
- package/dist/services/classification-scope.js.map +1 -1
- package/dist/services/classification.js.map +1 -1
- package/dist/services/cli-sql-dump.js.map +1 -1
- package/dist/services/consolidation.js.map +1 -1
- package/dist/services/context-audit.js +1 -1
- package/dist/services/context-audit.js.map +1 -1
- package/dist/services/context-budget.js.map +1 -1
- package/dist/services/context-engine.js.map +1 -1
- package/dist/services/contextual-variants.js.map +1 -1
- package/dist/services/continuous-verifier.js.map +1 -1
- package/dist/services/contradiction-adjudicator.js.map +1 -1
- package/dist/services/cost-context.js.map +1 -1
- package/dist/services/cost-feature-labels.js.map +1 -1
- package/dist/services/credential-migration.js.map +1 -1
- package/dist/services/credential-scanner.js.map +1 -1
- package/dist/services/credential-validation.js.map +1 -1
- package/dist/services/cron-exit-validator.js.map +1 -1
- package/dist/services/cron-guard.js.map +1 -1
- package/dist/services/cron-job-bash-harness.js +52 -5
- package/dist/services/cron-job-bash-harness.js.map +1 -1
- package/dist/services/cron-maintenance-reconciler.js +1 -3
- package/dist/services/cron-maintenance-reconciler.js.map +1 -1
- package/dist/services/cross-agent-learning.js.map +1 -1
- package/dist/services/crystallization-proposer.js.map +1 -1
- package/dist/services/dedupe-policy.js.map +1 -1
- package/dist/services/deprecated-cron-commands.js.map +1 -1
- package/dist/services/directive-extract.js.map +1 -1
- package/dist/services/document-chunker.js.map +1 -1
- package/dist/services/document-grader.js.map +1 -1
- package/dist/services/dream-cycle.js.map +1 -1
- package/dist/services/embedding-migration.js.map +1 -1
- package/dist/services/embedding-registry.js.map +1 -1
- package/dist/services/embeddings/chain-provider.js.map +1 -1
- package/dist/services/embeddings/factory.js.map +1 -1
- package/dist/services/embeddings/fallback-provider.js.map +1 -1
- package/dist/services/embeddings/ollama-provider.js.map +1 -1
- package/dist/services/embeddings/onnx-provider.js.map +1 -1
- package/dist/services/embeddings/openai-provider.js.map +1 -1
- package/dist/services/embeddings/shared.js +3 -3
- package/dist/services/embeddings/shared.js.map +1 -1
- package/dist/services/embeddings/types.js.map +1 -1
- package/dist/services/entity-enrichment-adaptive.js +128 -0
- package/dist/services/entity-enrichment-adaptive.js.map +1 -0
- package/dist/services/entity-enrichment-cli.js +389 -42
- package/dist/services/entity-enrichment-cli.js.map +1 -1
- package/dist/services/entity-enrichment.js +31 -5
- package/dist/services/entity-enrichment.js.map +1 -1
- package/dist/services/error-reporter/noisy-errors.js.map +1 -1
- package/dist/services/error-reporter/sanitize.js.map +1 -1
- package/dist/services/error-reporter.js.map +1 -1
- package/dist/services/event-hub-repair.js.map +1 -1
- package/dist/services/export-memory.js.map +1 -1
- package/dist/services/fact-extraction.js.map +1 -1
- package/dist/services/feedback-effectiveness.js.map +1 -1
- package/dist/services/find-duplicates.js.map +1 -1
- package/dist/services/frustration-detector.js.map +1 -1
- package/dist/services/fts-search.js.map +1 -1
- package/dist/services/gap-detector.js.map +1 -1
- package/dist/services/generated-skill-lifecycle.js.map +1 -1
- package/dist/services/generated-skill-validation.js.map +1 -1
- package/dist/services/goal-active-task-mirror.js.map +1 -1
- package/dist/services/goal-circuit-breaker.js.map +1 -1
- package/dist/services/goal-health.js.map +1 -1
- package/dist/services/goal-registry.js.map +1 -1
- package/dist/services/goal-stewardship-heartbeat.js.map +1 -1
- package/dist/services/goal-stewardship-llm-triage.js.map +1 -1
- package/dist/services/goal-stewardship-verify-cron.js.map +1 -1
- package/dist/services/goal-stewardship.js.map +1 -1
- package/dist/services/goal-subagent.js.map +1 -1
- package/dist/services/graph-retrieval.js.map +1 -1
- package/dist/services/humanizer-score.js.map +1 -1
- package/dist/services/hybrid-mem-cron-default-job-steps.js.map +1 -1
- package/dist/services/hyde-helper.js.map +1 -1
- package/dist/services/identity-reflection.js.map +1 -1
- package/dist/services/implicit-feedback-extract.js.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/ingest-utils.js.map +1 -1
- package/dist/services/intent-template.js.map +1 -1
- package/dist/services/json-array-parser.js.map +1 -1
- package/dist/services/knowledge-gaps.js.map +1 -1
- package/dist/services/language-keywords-build.js.map +1 -1
- package/dist/services/lifecycle/github-adapter.js.map +1 -1
- package/dist/services/llm-rate-limit-headers.js +1 -2
- package/dist/services/llm-rate-limit-headers.js.map +1 -1
- package/dist/services/maintenance-auto-fix.js.map +1 -1
- package/dist/services/maintenance-log-analyzer.js +7 -1
- package/dist/services/maintenance-log-analyzer.js.map +1 -1
- package/dist/services/maintenance-timestamp.js.map +1 -1
- package/dist/services/memory-diagnostics.js.map +1 -1
- package/dist/services/memory-index.js.map +1 -1
- package/dist/services/merge-results.js.map +1 -1
- package/dist/services/model-capabilities.js.map +1 -1
- package/dist/services/model-pricing.js.map +1 -1
- package/dist/services/narrative-recall.js.map +1 -1
- package/dist/services/openclaw-session-artifact.js.map +1 -1
- package/dist/services/passive-observer.js.map +1 -1
- package/dist/services/pattern-detector-hash.js.map +1 -1
- package/dist/services/pattern-detector.js.map +1 -1
- package/dist/services/pending-autopilot/foundation.js.map +1 -1
- package/dist/services/pending-autopilot/redaction.js.map +1 -1
- package/dist/services/pending-autopilot/store.js.map +1 -1
- package/dist/services/pending-autopilot/types.js.map +1 -1
- package/dist/services/pending-digest-autopilot-cron.js.map +1 -1
- package/dist/services/pending-digest-autopilot.js.map +1 -1
- package/dist/services/pending-review-digest.js.map +1 -1
- package/dist/services/persona-proposal-triage.js.map +1 -1
- package/dist/services/persona-state-promotion.js.map +1 -1
- package/dist/services/post-compaction-recall.js.map +1 -1
- package/dist/services/pre-consolidation-flush.js.map +1 -1
- package/dist/services/pre-finalization-guard.js.map +1 -1
- package/dist/services/procedure-cluster.js.map +1 -1
- package/dist/services/procedure-extractor.js.map +1 -1
- package/dist/services/procedure-promotion/duplicate-skill-cache.js.map +1 -1
- package/dist/services/procedure-promotion-policy.js.map +1 -1
- package/dist/services/procedure-selection-metrics.js.map +1 -1
- package/dist/services/procedure-skill-eval.js.map +1 -1
- package/dist/services/procedure-skill-generator.js.map +1 -1
- package/dist/services/procedure-skill-recipe.js.map +1 -1
- package/dist/services/procedure-skill-shrink.js.map +1 -1
- package/dist/services/procedure-skill-workflow.js.map +1 -1
- package/dist/services/provenance.js.map +1 -1
- package/dist/services/public-export-bundle.js.map +1 -1
- package/dist/services/python-bridge.js.map +1 -1
- package/dist/services/query-expander.js.map +1 -1
- package/dist/services/query-validator.js.map +1 -1
- package/dist/services/recall-pipeline.js.map +1 -1
- package/dist/services/recall-timing.js.map +1 -1
- package/dist/services/recent-http-attempts.js.map +1 -1
- package/dist/services/reflection/shared.js.map +1 -1
- package/dist/services/reflection.js.map +1 -1
- package/dist/services/reinforcement-extract.js.map +1 -1
- package/dist/services/reranker.js.map +1 -1
- package/dist/services/responses-adapter.js.map +1 -1
- package/dist/services/retrieval-aliases.js.map +1 -1
- package/dist/services/retrieval-mode-policy.js.map +1 -1
- package/dist/services/retrieval-orchestrator/packing.js.map +1 -1
- package/dist/services/retrieval-orchestrator.d.ts +2 -3
- package/dist/services/retrieval-orchestrator.js.map +1 -1
- package/dist/services/rrf-fusion.js.map +1 -1
- package/dist/services/self-correction-extract.js.map +1 -1
- package/dist/services/session-observability.js.map +1 -1
- package/dist/services/session-pre-filter.js.map +1 -1
- package/dist/services/shortest-path.js.map +1 -1
- package/dist/services/skill-allowed-tools.js.map +1 -1
- package/dist/services/skill-creator-validator.js.map +1 -1
- package/dist/services/skill-crystallizer-helpers.js.map +1 -1
- package/dist/services/skill-crystallizer.js.map +1 -1
- package/dist/services/skill-description-builder.js.map +1 -1
- package/dist/services/skill-eval-synthesizer.js.map +1 -1
- package/dist/services/skill-examples-builder.js.map +1 -1
- package/dist/services/skill-frontmatter.js.map +1 -1
- package/dist/services/skill-name-validator.js.map +1 -1
- package/dist/services/skill-prompt-injection.js.map +1 -1
- package/dist/services/skill-reference-sidecar.js.map +1 -1
- package/dist/services/skill-script-bundler.js.map +1 -1
- package/dist/services/skill-validator.js.map +1 -1
- package/dist/services/startup-memory-attribution.js.map +1 -1
- package/dist/services/task-hygiene.js.map +1 -1
- package/dist/services/task-ledger/canonical.js.map +1 -1
- package/dist/services/task-ledger-facts.js.map +1 -1
- package/dist/services/task-queue-leases.js.map +1 -1
- package/dist/services/task-queue-watchdog.js.map +1 -1
- package/dist/services/tool-effectiveness.js.map +1 -1
- package/dist/services/tool-proposer.js.map +1 -1
- package/dist/services/tools-md-section.js.map +1 -1
- package/dist/services/topic-clusters.js.map +1 -1
- package/dist/services/trajectory-tracker.js.map +1 -1
- package/dist/services/vector-backend-observability.js.map +1 -1
- package/dist/services/vector-lifecycle-audit.js.map +1 -1
- package/dist/services/vector-maintenance.js.map +1 -1
- package/dist/services/vector-search.js.map +1 -1
- package/dist/services/verification-store.js.map +1 -1
- package/dist/services/verified-fact-triage.js.map +1 -1
- package/dist/services/wal-helpers.js.map +1 -1
- package/dist/services/workflow-tracker.js.map +1 -1
- package/dist/setup/bootstrap-databases.js.map +1 -1
- package/dist/setup/cli-context/cli-services.js.map +1 -1
- package/dist/setup/cli-context/help-text.js.map +1 -1
- package/dist/setup/cli-context/metadata.js.map +1 -1
- package/dist/setup/cli-context/register-cli-with-help.js.map +1 -1
- package/dist/setup/cli-context/register-full.js.map +1 -1
- package/dist/setup/cli-context/register-help.js.map +1 -1
- package/dist/setup/cost-instrumentation.js.map +1 -1
- package/dist/setup/hybrid-memory-generation-state.js.map +1 -1
- package/dist/setup/hybrid-memory-reload-coordinator.js +13 -13
- package/dist/setup/hybrid-memory-reload-coordinator.js.map +1 -1
- package/dist/setup/plugin-service.js.map +1 -1
- package/dist/setup/provider-router.js.map +1 -1
- package/dist/setup/register-context-engine.js.map +1 -1
- package/dist/setup/register-hooks.js.map +1 -1
- package/dist/setup/register-plugin.js +25 -21
- package/dist/setup/register-plugin.js.map +1 -1
- package/dist/setup/register-tools.js.map +1 -1
- package/dist/setup/reregister-policy.js +2 -2
- package/dist/setup/reregister-policy.js.map +1 -1
- package/dist/setup/tool-installers.js.map +1 -1
- package/dist/setup/workspace-bootstrap.js.map +1 -1
- package/dist/src/worker/narratives.js.map +1 -1
- package/dist/tools/apitap-tools.js.map +1 -1
- package/dist/tools/credential-tools.js.map +1 -1
- package/dist/tools/crystallization-tools.js.map +1 -1
- package/dist/tools/dashboard-routes.js.map +1 -1
- package/dist/tools/document-tools.js.map +1 -1
- package/dist/tools/goal-tools.js.map +1 -1
- package/dist/tools/graph-tools.js.map +1 -1
- package/dist/tools/issue-tools.js.map +1 -1
- package/dist/tools/memory/build-runtime.js.map +1 -1
- package/dist/tools/memory/helpers.js.map +1 -1
- package/dist/tools/memory/register-checkpoint-tools.js.map +1 -1
- package/dist/tools/memory/register-directory-tools.js.map +1 -1
- package/dist/tools/memory/register-edict-tools.js.map +1 -1
- package/dist/tools/memory/register-episode-tools.js.map +1 -1
- package/dist/tools/memory/register-recall-tools.js.map +1 -1
- package/dist/tools/memory/register-store-tools.js.map +1 -1
- package/dist/tools/memory-tools.js.map +1 -1
- package/dist/tools/persona-tools.js.map +1 -1
- package/dist/tools/provenance-tools.js.map +1 -1
- package/dist/tools/public-api-routes.js.map +1 -1
- package/dist/tools/safe-register-http-route.js.map +1 -1
- package/dist/tools/self-extension-tools.js.map +1 -1
- package/dist/tools/task-hygiene-tools.js.map +1 -1
- package/dist/tools/utility-tools.js.map +1 -1
- package/dist/tools/verification-tools.js.map +1 -1
- package/dist/tools/workflow-tools.js.map +1 -1
- package/dist/types/issue-types.js.map +1 -1
- package/dist/types/learnings-types.js.map +1 -1
- package/dist/types/memory.js.map +1 -1
- package/dist/utils/apim-gateway-fetch.js.map +1 -1
- package/dist/utils/atomic-write.js.map +1 -1
- package/dist/utils/auth-failover.js.map +1 -1
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/compaction-model-watchdog.js.map +1 -1
- package/dist/utils/consolidation-controls.js.map +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/date-detector.js.map +1 -1
- package/dist/utils/dates.js.map +1 -1
- package/dist/utils/decay.js.map +1 -1
- package/dist/utils/duration.js.map +1 -1
- package/dist/utils/embed-call.js.map +1 -1
- package/dist/utils/entity-lookup-resolve.js.map +1 -1
- package/dist/utils/entity-mention-quality.js.map +1 -1
- package/dist/utils/entity-stopwords.js.map +1 -1
- package/dist/utils/env-manager.js.map +1 -1
- package/dist/utils/error-tracking.js.map +1 -1
- package/dist/utils/event-loop-yield.js.map +1 -1
- package/dist/utils/extract-last-user-message.js.map +1 -1
- package/dist/utils/extraction-from-template.js.map +1 -1
- package/dist/utils/fact-embeddings.js.map +1 -1
- package/dist/utils/file-snapshot.js.map +1 -1
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/gh-repo-arg.js.map +1 -1
- package/dist/utils/hybrid-mem-json-cli.js.map +1 -1
- package/dist/utils/language-keywords.js.map +1 -1
- package/dist/utils/lifecycle-generation.js.map +1 -1
- package/dist/utils/llm-json-array.js.map +1 -1
- package/dist/utils/llm-selection.js.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/model-provider-family.js.map +1 -1
- package/dist/utils/model-tier.js.map +1 -1
- package/dist/utils/openclaw-agent-defaults.js.map +1 -1
- package/dist/utils/path.js.map +1 -1
- package/dist/utils/plugin-root.js.map +1 -1
- package/dist/utils/plugin-update-check.js.map +1 -1
- package/dist/utils/procedure-risk.js.map +1 -1
- package/dist/utils/progress-indicators.js.map +1 -1
- package/dist/utils/prompt-loader.js.map +1 -1
- package/dist/utils/provenance.js.map +1 -1
- package/dist/utils/provider-detection.js.map +1 -1
- package/dist/utils/registration-superseded.js.map +1 -1
- package/dist/utils/salience.js.map +1 -1
- package/dist/utils/sanitize-messages.js.map +1 -1
- package/dist/utils/scope-filter.js.map +1 -1
- package/dist/utils/skill-discovery.js.map +1 -1
- package/dist/utils/sqlite-file-perms.js.map +1 -1
- package/dist/utils/sqlite-outcome-compat.js.map +1 -1
- package/dist/utils/sqlite-transaction.js.map +1 -1
- package/dist/utils/stable-stringify.js.map +1 -1
- package/dist/utils/subagent-ended-utils.js.map +1 -1
- package/dist/utils/tags.js.map +1 -1
- package/dist/utils/text.js.map +1 -1
- package/dist/utils/timeout.js.map +1 -1
- package/dist/utils/typebox.js.map +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/wal-replay.js.map +1 -1
- package/dist/versionInfo.js.map +1 -1
- package/index.ts +2 -2
- package/lifecycle/hooks.ts +0 -1
- package/npm-shrinkwrap.json +487 -186
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/services/adaptive-catch-up-pacing.ts +28 -0
- package/services/chat.ts +34 -1
- package/services/cron-job-bash-harness.ts +52 -5
- package/services/embeddings/shared.ts +5 -2
- package/services/entity-enrichment-adaptive.ts +245 -0
- package/services/entity-enrichment-cli.ts +553 -47
- package/services/entity-enrichment.ts +43 -2
- package/services/llm-rate-limit-headers.ts +1 -4
- package/services/maintenance-log-analyzer.ts +13 -9
- package/services/reinforcement-extract.ts +19 -0
- package/setup/hybrid-memory-reload-coordinator.ts +26 -0
- package/setup/register-plugin.ts +62 -32
- package/setup/reregister-policy.ts +10 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wal-replay.js","names":[],"sources":["../../utils/wal-replay.ts"],"sourcesContent":["/**\n * WAL Replay Utilities\n *\n * Shared logic for replaying Write-Ahead Log entries to SQLite and LanceDB.\n * Used by both the ContextEngine compact() method and the before_compaction hook.\n */\n\nimport type { FactsDB } from \"../backends/facts-db.js\";\nimport type { VectorDB } from \"../backends/vector-db.js\";\nimport type { WriteAheadLog } from \"../backends/wal.js\";\nimport type { EmbeddingProvider } from \"../services/embeddings.js\";\nimport { capturePluginError } from \"../services/error-reporter.js\";\n\nexport interface WalReplayResult {\n committed: number;\n skipped: number;\n}\n\nfunction safeString(v: unknown): string | null {\n if (typeof v !== \"string\") return null;\n const t = v.trim();\n return t.length > 0 ? t : null;\n}\n\nfunction safeNumber(v: unknown): number | null {\n if (typeof v !== \"number\" || !Number.isFinite(v)) return null;\n return v;\n}\n\nfunction safeStringArray(v: unknown): string[] | null {\n if (!Array.isArray(v)) return null;\n const out = v.map((x) => (typeof x === \"string\" ? x.trim() : \"\")).filter((x) => x.length > 0);\n return out.length > 0 ? out : null;\n}\n\nconst VALID_WAL_SCOPES = new Set([\"global\", \"user\", \"agent\", \"session\"]);\n\nfunction safeScope(v: unknown): \"global\" | \"user\" | \"agent\" | \"session\" | null {\n const scope = safeString(v);\n if (!scope || !VALID_WAL_SCOPES.has(scope)) return null;\n return scope as \"global\" | \"user\" | \"agent\" | \"session\";\n}\n\nfunction isSafeWalText(v: unknown): v is string {\n return safeString(v) !== null;\n}\n\n/**\n * Returns a diagnostic message if a WAL entry has a non-global scope but no scopeTarget,\n * or null if the entry is valid and safe to replay.\n *\n * A non-global scope without a scopeTarget cannot be replayed safely because FactsDB.store()\n * requires scopeTarget for scoped facts. Storing without one would silently fall back to\n * global scope, which is the bug described in issue #1574.\n */\nfunction invalidScopeMessage(\n entryId: string,\n operation: string,\n scope: \"global\" | \"user\" | \"agent\" | \"session\" | null,\n scopeTarget: string | null,\n): string | null {\n if (scope && scope !== \"global\" && !scopeTarget) {\n return `WAL replay skipped \"${operation}\" entry ${entryId}: scope=\"${scope}\" but scopeTarget is missing; refusing to globalize a scoped fact.`;\n }\n return null;\n}\n\nfunction findExistingFactIdForWal(factsDb: FactsDB, text: string, source: string | null): string | null {\n try {\n const src = source?.trim() || \"conversation\";\n const row = factsDb\n .getRawDb()\n .prepare(\n \"SELECT id FROM facts WHERE text = ? AND source = ? AND superseded_at IS NULL ORDER BY created_at DESC LIMIT 1\",\n )\n .get(text, src) as { id: string } | undefined;\n return row?.id ?? null;\n } catch {\n return null;\n }\n}\n\nfunction hasReplayDuplicateForWal(factsDb: FactsDB, text: string, source: string | null): boolean {\n try {\n return factsDb.hasDuplicate(text, source?.trim() || \"conversation\");\n } catch {\n return false;\n }\n}\n\nasync function ensureVectorAndEmbeddingMeta(opts: {\n factId: string;\n text: string;\n category: string;\n importance: number;\n vector: number[] | null;\n embeddingModelName?: string | null;\n vectorDb?: VectorDB;\n embeddings?: EmbeddingProvider | null;\n factsDb: FactsDB;\n}): Promise<void> {\n const { factId, text, category, importance, vector, embeddingModelName, vectorDb, embeddings, factsDb } = opts;\n if (!vectorDb) return;\n\n const embedAndStore = async (): Promise<number[] | null> => {\n if (!embeddings) return null;\n try {\n const v = await embeddings.embed(text);\n await vectorDb.store({\n id: factId,\n text,\n vector: Array.from(v),\n importance,\n category,\n });\n if (embeddings.modelName) {\n factsDb.setEmbeddingModel(factId, embeddings.modelName);\n factsDb.storeEmbedding(factId, embeddings.modelName, \"canonical\", new Float32Array(v), v.length);\n }\n return Array.from(v);\n } catch {\n return null;\n }\n };\n\n try {\n if (vector && vector.length > 0) {\n await vectorDb.store({\n id: factId,\n text,\n vector,\n importance,\n category,\n });\n const effectiveModel = embeddingModelName ?? embeddings?.modelName;\n if (effectiveModel) {\n try {\n factsDb.setEmbeddingModel(factId, effectiveModel);\n factsDb.storeEmbedding(factId, effectiveModel, \"canonical\", new Float32Array(vector), vector.length);\n } catch (err) {\n capturePluginError(err instanceof Error ? err : new Error(String(err)), {\n subsystem: \"wal-replay\",\n operation: \"store-embedding-metadata\",\n factId,\n });\n }\n }\n return;\n }\n } catch {\n // Non-fatal: fall back to re-embed if possible.\n }\n\n await embedAndStore();\n}\n\n/**\n * Replay all pending WAL entries to the facts database and optionally to the vector database.\n *\n * @param wal - Write-Ahead Log instance\n * @param factsDb - Facts database for storing entries\n * @param vectorDb - Optional vector database for storing embeddings\n * @param embeddings - Optional embedding provider for generating vectors\n * @param logger - Optional logger for operator-visible diagnostics (e.g. skipped WAL entries)\n * @returns Object with committed and skipped counts\n */\nexport async function replayWalEntries(\n wal: WriteAheadLog,\n factsDb: FactsDB,\n vectorDb?: VectorDB,\n embeddings?: EmbeddingProvider | null,\n logger?: { warn?: (msg: string) => void },\n): Promise<WalReplayResult> {\n let committed = 0;\n let skipped = 0;\n\n // Only replay entries within the WAL's maxAge window.\n // Older entries are handled by WAL prune routines and should not be resurrected.\n const walEntries = await wal.getValidEntries();\n const nowSec = Math.floor(Date.now() / 1000);\n\n for (const entry of walEntries) {\n try {\n // Skip diagnostic probe entries (e.g., doctor command durability tests).\n if (entry.data?.probe) {\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n if (entry.operation === \"store\" && isSafeWalText(entry.data?.text)) {\n const text = safeString(entry.data.text);\n if (!text) continue;\n const source = safeString(entry.data.source) ?? \"conversation\";\n const category = (safeString(entry.data.category) ?? \"other\") as import(\"../config.js\").MemoryCategory;\n const importance = safeNumber(entry.data.importance) ?? 0.5;\n const why = safeString(entry.data.why);\n const scope = safeScope(entry.data.scope);\n const scopeTarget = safeString(entry.data.scopeTarget);\n const summary = safeString(entry.data.summary);\n const tags = safeStringArray(entry.data.tags) ?? undefined;\n const decayFreezeUntil = safeNumber(entry.data.decayFreezeUntil);\n const preserveUntil = safeNumber(entry.data.preserveUntil);\n const preserveTags = safeStringArray(entry.data.preserveTags);\n const provenanceSession = safeString(entry.data.provenanceSession);\n const sourceTurn = safeNumber(entry.data.sourceTurn);\n const extractionMethod = safeString(entry.data.extractionMethod);\n const extractionConfidence = safeNumber(entry.data.extractionConfidence);\n const provenanceJson = safeString(entry.data.provenanceJson);\n const sourceSessions = safeString(entry.data.sourceSessions);\n\n const precomputedVector = Array.isArray(entry.data.vector)\n ? (entry.data.vector as number[]).filter((n) => typeof n === \"number\" && Number.isFinite(n))\n : null;\n const embeddingModelName = safeString(entry.data.embeddingModelName);\n\n // Guard: a non-global scope without a scopeTarget cannot be safely replayed — storing it\n // would silently change the intended scope to global (issue #1574). Skip with a diagnostic\n // so that scoped facts are never accidentally promoted to global during crash recovery.\n const storeInvalidMsg = invalidScopeMessage(entry.id, \"store\", scope, scopeTarget);\n if (storeInvalidMsg) {\n capturePluginError(new Error(storeInvalidMsg), {\n subsystem: \"wal-replay\",\n operation: \"replay-store\",\n severity: \"warning\",\n entryId: entry.id,\n scope,\n });\n logger?.warn?.(`memory-hybrid: ${storeInvalidMsg}`);\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n // Idempotent replay: if the fact already exists, still ensure vector/embedding metadata.\n const existingId = findExistingFactIdForWal(factsDb, text, source);\n if (existingId) {\n await ensureVectorAndEmbeddingMeta({\n factId: existingId,\n text,\n category,\n importance,\n vector: precomputedVector,\n embeddingModelName,\n vectorDb,\n embeddings,\n factsDb,\n });\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n // Store-side dedupe can resolve this WAL write via hash/lexical/vector policy\n // without creating an exact text+source row. If that already happened before\n // a crash but before WAL removal, replay must not call store() again: boost\n // and merge dedupe actions are not idempotent.\n if (hasReplayDuplicateForWal(factsDb, text, source)) {\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n const stored = factsDb.store({\n text,\n why,\n category,\n importance,\n entity: safeString(entry.data.entity) ?? null,\n key: safeString(entry.data.key) ?? null,\n value: safeString(entry.data.value) ?? null,\n source,\n decayClass: safeString(entry.data.decayClass) as import(\"../config.js\").DecayClass | undefined,\n summary,\n tags,\n scope: (scope ?? undefined) as \"global\" | \"user\" | \"agent\" | \"session\" | undefined,\n scopeTarget: scope ? scopeTarget : null,\n sourceSessions: sourceSessions ?? undefined,\n provenanceSession: provenanceSession ?? undefined,\n sourceTurn: sourceTurn ?? undefined,\n extractionMethod: extractionMethod ?? undefined,\n extractionConfidence: extractionConfidence ?? undefined,\n decayFreezeUntil: decayFreezeUntil ?? undefined,\n preserveUntil: preserveUntil ?? undefined,\n preserveTags: preserveTags ?? undefined,\n provenanceJson: provenanceJson ?? undefined,\n });\n\n // Skip vector operations if the store was rejected (artifact text)\n if (stored.id !== \"\") {\n await ensureVectorAndEmbeddingMeta({\n factId: stored.id,\n text: stored.text,\n category: stored.category,\n importance: stored.importance,\n vector: precomputedVector,\n embeddingModelName,\n vectorDb,\n embeddings,\n factsDb,\n });\n committed++;\n } else {\n skipped++;\n }\n await wal.remove(entry.id);\n } else if (entry.operation === \"update\" && entry.targetId && isSafeWalText(entry.data?.text)) {\n const targetId = entry.targetId;\n const text = safeString(entry.data.text);\n if (!text) continue;\n const source = safeString(entry.data.source) ?? \"conversation\";\n const category = (safeString(entry.data.category) ?? \"other\") as import(\"../config.js\").MemoryCategory;\n const importance = safeNumber(entry.data.importance) ?? 0.5;\n const why = safeString(entry.data.why);\n const scope = safeScope(entry.data.scope);\n const scopeTarget = safeString(entry.data.scopeTarget);\n const summary = safeString(entry.data.summary);\n const tags = safeStringArray(entry.data.tags) ?? undefined;\n const decayFreezeUntil = safeNumber(entry.data.decayFreezeUntil);\n const preserveUntil = safeNumber(entry.data.preserveUntil);\n const preserveTags = safeStringArray(entry.data.preserveTags);\n const provenanceSession = safeString(entry.data.provenanceSession);\n const sourceTurn = safeNumber(entry.data.sourceTurn);\n const extractionMethod = safeString(entry.data.extractionMethod);\n const extractionConfidence = safeNumber(entry.data.extractionConfidence);\n const provenanceJson = safeString(entry.data.provenanceJson);\n const sourceSessions = safeString(entry.data.sourceSessions);\n\n const precomputedVector = Array.isArray(entry.data.vector)\n ? (entry.data.vector as number[]).filter((n) => typeof n === \"number\" && Number.isFinite(n))\n : null;\n const embeddingModelName = safeString(entry.data.embeddingModelName);\n\n // Guard: same as \"store\" path — do not replay a non-global scoped update without a scopeTarget.\n const updateInvalidMsg = invalidScopeMessage(entry.id, \"update\", scope, scopeTarget);\n if (updateInvalidMsg) {\n capturePluginError(new Error(updateInvalidMsg), {\n subsystem: \"wal-replay\",\n operation: \"replay-update\",\n severity: \"warning\",\n entryId: entry.id,\n scope,\n });\n logger?.warn?.(`memory-hybrid: ${updateInvalidMsg}`);\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n const target = factsDb.getById(targetId);\n if (!target) {\n // Target fact already gone — nothing safe to replay.\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n // Idempotent replay: if the exact intended replacement already exists, ensure vector metadata.\n const existingId = findExistingFactIdForWal(factsDb, text, source);\n if (existingId && existingId !== targetId) {\n const existing = factsDb.getById(existingId);\n if (existing?.supersedesId === targetId) {\n factsDb.supersede(targetId, existingId);\n await ensureVectorAndEmbeddingMeta({\n factId: existingId,\n text,\n category,\n importance,\n vector: precomputedVector,\n embeddingModelName,\n vectorDb,\n embeddings,\n factsDb,\n });\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n }\n\n if (factsDb.hasDuplicate(text)) {\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n const stored = factsDb.store({\n text,\n why,\n category,\n importance,\n entity: safeString(entry.data.entity) ?? null,\n key: safeString(entry.data.key) ?? null,\n value: safeString(entry.data.value) ?? null,\n source,\n decayClass: safeString(entry.data.decayClass) as import(\"../config.js\").DecayClass | undefined,\n summary,\n tags,\n validFrom: nowSec,\n supersedesId: targetId,\n scope: (scope ?? undefined) as \"global\" | \"user\" | \"agent\" | \"session\" | undefined,\n scopeTarget: scope ? scopeTarget : null,\n sourceSessions: sourceSessions ?? undefined,\n provenanceSession: provenanceSession ?? undefined,\n sourceTurn: sourceTurn ?? undefined,\n extractionMethod: extractionMethod ?? undefined,\n extractionConfidence: extractionConfidence ?? undefined,\n decayFreezeUntil: decayFreezeUntil ?? undefined,\n preserveUntil: preserveUntil ?? undefined,\n preserveTags: preserveTags ?? undefined,\n provenanceJson: provenanceJson ?? undefined,\n });\n\n // Skip supersede and vector operations if store was rejected (artifact text)\n if (stored.id !== \"\") {\n factsDb.supersede(targetId, stored.id);\n\n await ensureVectorAndEmbeddingMeta({\n factId: stored.id,\n text: stored.text,\n category: stored.category,\n importance: stored.importance,\n vector: precomputedVector,\n embeddingModelName,\n vectorDb,\n embeddings,\n factsDb,\n });\n\n committed++;\n } else {\n skipped++;\n }\n await wal.remove(entry.id);\n } else if ((entry.operation === \"store\" || entry.operation === \"update\") && !isSafeWalText(entry.data?.text)) {\n // Empty or whitespace-only text cannot ever be replayed into FactsDB.\n skipped++;\n await wal.remove(entry.id);\n } else if (entry.operation === \"update\") {\n // Legacy UPDATE lines without targetId cannot be replayed safely.\n skipped++;\n await wal.remove(entry.id);\n } else if (entry.operation === \"delete\") {\n // Delete WAL entries cannot be reliably replayed: the WAL data structure stores\n // text content in data.text, not the target fact UUID. Replaying would pass the\n // memory text as a UUID, causing an \"Invalid UUID format\" error (see issue #334).\n // Skip and remove to prevent unbounded WAL growth.\n skipped++;\n await wal.remove(entry.id);\n }\n } catch (err) {\n // Non-fatal: log the failure (with entry id + operation for diagnostics) and continue\n capturePluginError(err instanceof Error ? err : new Error(String(err)), {\n subsystem: \"wal-replay\",\n operation: `replay-${entry.operation ?? \"unknown\"}`,\n entryId: entry.id,\n });\n // Leave the entry in the WAL so it can be retried (or pruned as stale).\n }\n }\n\n return { committed, skipped };\n}\n"],"mappings":";;AAkBA,SAAS,WAAW,GAA2B;CAC7C,IAAI,OAAO,MAAM,UAAU,OAAO;CAClC,MAAM,IAAI,EAAE,MAAM;CAClB,OAAO,EAAE,SAAS,IAAI,IAAI;;AAG5B,SAAS,WAAW,GAA2B;CAC7C,IAAI,OAAO,MAAM,YAAY,CAAC,OAAO,SAAS,EAAE,EAAE,OAAO;CACzD,OAAO;;AAGT,SAAS,gBAAgB,GAA6B;CACpD,IAAI,CAAC,MAAM,QAAQ,EAAE,EAAE,OAAO;CAC9B,MAAM,MAAM,EAAE,KAAK,MAAO,OAAO,MAAM,WAAW,EAAE,MAAM,GAAG,GAAI,CAAC,QAAQ,MAAM,EAAE,SAAS,EAAE;CAC7F,OAAO,IAAI,SAAS,IAAI,MAAM;;AAGhC,MAAM,mBAAmB,IAAI,IAAI;CAAC;CAAU;CAAQ;CAAS;CAAU,CAAC;AAExE,SAAS,UAAU,GAA4D;CAC7E,MAAM,QAAQ,WAAW,EAAE;CAC3B,IAAI,CAAC,SAAS,CAAC,iBAAiB,IAAI,MAAM,EAAE,OAAO;CACnD,OAAO;;AAGT,SAAS,cAAc,GAAyB;CAC9C,OAAO,WAAW,EAAE,KAAK;;;;;;;;;;AAW3B,SAAS,oBACP,SACA,WACA,OACA,aACe;CACf,IAAI,SAAS,UAAU,YAAY,CAAC,aAClC,OAAO,uBAAuB,UAAU,UAAU,QAAQ,WAAW,MAAM;CAE7E,OAAO;;AAGT,SAAS,yBAAyB,SAAkB,MAAc,QAAsC;CACtG,IAAI;EACF,MAAM,MAAM,QAAQ,MAAM,IAAI;EAO9B,OANY,QACT,UAAU,CACV,QACC,gHACD,CACA,IAAI,MAAM,IACH,EAAE,MAAM;SACZ;EACN,OAAO;;;AAIX,SAAS,yBAAyB,SAAkB,MAAc,QAAgC;CAChG,IAAI;EACF,OAAO,QAAQ,aAAa,MAAM,QAAQ,MAAM,IAAI,eAAe;SAC7D;EACN,OAAO;;;AAIX,eAAe,6BAA6B,MAU1B;CAChB,MAAM,EAAE,QAAQ,MAAM,UAAU,YAAY,QAAQ,oBAAoB,UAAU,YAAY,YAAY;CAC1G,IAAI,CAAC,UAAU;CAEf,MAAM,gBAAgB,YAAsC;EAC1D,IAAI,CAAC,YAAY,OAAO;EACxB,IAAI;GACF,MAAM,IAAI,MAAM,WAAW,MAAM,KAAK;GACtC,MAAM,SAAS,MAAM;IACnB,IAAI;IACJ;IACA,QAAQ,MAAM,KAAK,EAAE;IACrB;IACA;IACD,CAAC;GACF,IAAI,WAAW,WAAW;IACxB,QAAQ,kBAAkB,QAAQ,WAAW,UAAU;IACvD,QAAQ,eAAe,QAAQ,WAAW,WAAW,aAAa,IAAI,aAAa,EAAE,EAAE,EAAE,OAAO;;GAElG,OAAO,MAAM,KAAK,EAAE;UACd;GACN,OAAO;;;CAIX,IAAI;EACF,IAAI,UAAU,OAAO,SAAS,GAAG;GAC/B,MAAM,SAAS,MAAM;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACD,CAAC;GACF,MAAM,iBAAiB,sBAAsB,YAAY;GACzD,IAAI,gBACF,IAAI;IACF,QAAQ,kBAAkB,QAAQ,eAAe;IACjD,QAAQ,eAAe,QAAQ,gBAAgB,aAAa,IAAI,aAAa,OAAO,EAAE,OAAO,OAAO;YAC7F,KAAK;IACZ,mBAAmB,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,EAAE;KACtE,WAAW;KACX,WAAW;KACX;KACD,CAAC;;GAGN;;SAEI;CAIR,MAAM,eAAe;;;;;;;;;;;;AAavB,eAAsB,iBACpB,KACA,SACA,UACA,YACA,QAC0B;CAC1B,IAAI,YAAY;CAChB,IAAI,UAAU;CAId,MAAM,aAAa,MAAM,IAAI,iBAAiB;CAC9C,MAAM,SAAS,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;CAE5C,KAAK,MAAM,SAAS,YAClB,IAAI;EAEF,IAAI,MAAM,MAAM,OAAO;GACrB;GACA,MAAM,IAAI,OAAO,MAAM,GAAG;GAC1B;;EAEF,IAAI,MAAM,cAAc,WAAW,cAAc,MAAM,MAAM,KAAK,EAAE;GAClE,MAAM,OAAO,WAAW,MAAM,KAAK,KAAK;GACxC,IAAI,CAAC,MAAM;GACX,MAAM,SAAS,WAAW,MAAM,KAAK,OAAO,IAAI;GAChD,MAAM,WAAY,WAAW,MAAM,KAAK,SAAS,IAAI;GACrD,MAAM,aAAa,WAAW,MAAM,KAAK,WAAW,IAAI;GACxD,MAAM,MAAM,WAAW,MAAM,KAAK,IAAI;GACtC,MAAM,QAAQ,UAAU,MAAM,KAAK,MAAM;GACzC,MAAM,cAAc,WAAW,MAAM,KAAK,YAAY;GACtD,MAAM,UAAU,WAAW,MAAM,KAAK,QAAQ;GAC9C,MAAM,OAAO,gBAAgB,MAAM,KAAK,KAAK,IAAI,KAAA;GACjD,MAAM,mBAAmB,WAAW,MAAM,KAAK,iBAAiB;GAChE,MAAM,gBAAgB,WAAW,MAAM,KAAK,cAAc;GAC1D,MAAM,eAAe,gBAAgB,MAAM,KAAK,aAAa;GAC7D,MAAM,oBAAoB,WAAW,MAAM,KAAK,kBAAkB;GAClE,MAAM,aAAa,WAAW,MAAM,KAAK,WAAW;GACpD,MAAM,mBAAmB,WAAW,MAAM,KAAK,iBAAiB;GAChE,MAAM,uBAAuB,WAAW,MAAM,KAAK,qBAAqB;GACxE,MAAM,iBAAiB,WAAW,MAAM,KAAK,eAAe;GAC5D,MAAM,iBAAiB,WAAW,MAAM,KAAK,eAAe;GAE5D,MAAM,oBAAoB,MAAM,QAAQ,MAAM,KAAK,OAAO,GACrD,MAAM,KAAK,OAAoB,QAAQ,MAAM,OAAO,MAAM,YAAY,OAAO,SAAS,EAAE,CAAC,GAC1F;GACJ,MAAM,qBAAqB,WAAW,MAAM,KAAK,mBAAmB;GAKpE,MAAM,kBAAkB,oBAAoB,MAAM,IAAI,SAAS,OAAO,YAAY;GAClF,IAAI,iBAAiB;IACnB,mBAAmB,IAAI,MAAM,gBAAgB,EAAE;KAC7C,WAAW;KACX,WAAW;KACX,UAAU;KACV,SAAS,MAAM;KACf;KACD,CAAC;IACF,QAAQ,OAAO,kBAAkB,kBAAkB;IACnD;IACA,MAAM,IAAI,OAAO,MAAM,GAAG;IAC1B;;GAIF,MAAM,aAAa,yBAAyB,SAAS,MAAM,OAAO;GAClE,IAAI,YAAY;IACd,MAAM,6BAA6B;KACjC,QAAQ;KACR;KACA;KACA;KACA,QAAQ;KACR;KACA;KACA;KACA;KACD,CAAC;IACF;IACA,MAAM,IAAI,OAAO,MAAM,GAAG;IAC1B;;GAOF,IAAI,yBAAyB,SAAS,MAAM,OAAO,EAAE;IACnD;IACA,MAAM,IAAI,OAAO,MAAM,GAAG;IAC1B;;GAGF,MAAM,SAAS,QAAQ,MAAM;IAC3B;IACA;IACA;IACA;IACA,QAAQ,WAAW,MAAM,KAAK,OAAO,IAAI;IACzC,KAAK,WAAW,MAAM,KAAK,IAAI,IAAI;IACnC,OAAO,WAAW,MAAM,KAAK,MAAM,IAAI;IACvC;IACA,YAAY,WAAW,MAAM,KAAK,WAAW;IAC7C;IACA;IACA,OAAQ,SAAS,KAAA;IACjB,aAAa,QAAQ,cAAc;IACnC,gBAAgB,kBAAkB,KAAA;IAClC,mBAAmB,qBAAqB,KAAA;IACxC,YAAY,cAAc,KAAA;IAC1B,kBAAkB,oBAAoB,KAAA;IACtC,sBAAsB,wBAAwB,KAAA;IAC9C,kBAAkB,oBAAoB,KAAA;IACtC,eAAe,iBAAiB,KAAA;IAChC,cAAc,gBAAgB,KAAA;IAC9B,gBAAgB,kBAAkB,KAAA;IACnC,CAAC;GAGF,IAAI,OAAO,OAAO,IAAI;IACpB,MAAM,6BAA6B;KACjC,QAAQ,OAAO;KACf,MAAM,OAAO;KACb,UAAU,OAAO;KACjB,YAAY,OAAO;KACnB,QAAQ;KACR;KACA;KACA;KACA;KACD,CAAC;IACF;UAEA;GAEF,MAAM,IAAI,OAAO,MAAM,GAAG;SACrB,IAAI,MAAM,cAAc,YAAY,MAAM,YAAY,cAAc,MAAM,MAAM,KAAK,EAAE;GAC5F,MAAM,WAAW,MAAM;GACvB,MAAM,OAAO,WAAW,MAAM,KAAK,KAAK;GACxC,IAAI,CAAC,MAAM;GACX,MAAM,SAAS,WAAW,MAAM,KAAK,OAAO,IAAI;GAChD,MAAM,WAAY,WAAW,MAAM,KAAK,SAAS,IAAI;GACrD,MAAM,aAAa,WAAW,MAAM,KAAK,WAAW,IAAI;GACxD,MAAM,MAAM,WAAW,MAAM,KAAK,IAAI;GACtC,MAAM,QAAQ,UAAU,MAAM,KAAK,MAAM;GACzC,MAAM,cAAc,WAAW,MAAM,KAAK,YAAY;GACtD,MAAM,UAAU,WAAW,MAAM,KAAK,QAAQ;GAC9C,MAAM,OAAO,gBAAgB,MAAM,KAAK,KAAK,IAAI,KAAA;GACjD,MAAM,mBAAmB,WAAW,MAAM,KAAK,iBAAiB;GAChE,MAAM,gBAAgB,WAAW,MAAM,KAAK,cAAc;GAC1D,MAAM,eAAe,gBAAgB,MAAM,KAAK,aAAa;GAC7D,MAAM,oBAAoB,WAAW,MAAM,KAAK,kBAAkB;GAClE,MAAM,aAAa,WAAW,MAAM,KAAK,WAAW;GACpD,MAAM,mBAAmB,WAAW,MAAM,KAAK,iBAAiB;GAChE,MAAM,uBAAuB,WAAW,MAAM,KAAK,qBAAqB;GACxE,MAAM,iBAAiB,WAAW,MAAM,KAAK,eAAe;GAC5D,MAAM,iBAAiB,WAAW,MAAM,KAAK,eAAe;GAE5D,MAAM,oBAAoB,MAAM,QAAQ,MAAM,KAAK,OAAO,GACrD,MAAM,KAAK,OAAoB,QAAQ,MAAM,OAAO,MAAM,YAAY,OAAO,SAAS,EAAE,CAAC,GAC1F;GACJ,MAAM,qBAAqB,WAAW,MAAM,KAAK,mBAAmB;GAGpE,MAAM,mBAAmB,oBAAoB,MAAM,IAAI,UAAU,OAAO,YAAY;GACpF,IAAI,kBAAkB;IACpB,mBAAmB,IAAI,MAAM,iBAAiB,EAAE;KAC9C,WAAW;KACX,WAAW;KACX,UAAU;KACV,SAAS,MAAM;KACf;KACD,CAAC;IACF,QAAQ,OAAO,kBAAkB,mBAAmB;IACpD;IACA,MAAM,IAAI,OAAO,MAAM,GAAG;IAC1B;;GAIF,IAAI,CADW,QAAQ,QAAQ,SACpB,EAAE;IAEX;IACA,MAAM,IAAI,OAAO,MAAM,GAAG;IAC1B;;GAIF,MAAM,aAAa,yBAAyB,SAAS,MAAM,OAAO;GAClE,IAAI,cAAc,eAAe;QACd,QAAQ,QAAQ,WACrB,EAAE,iBAAiB,UAAU;KACvC,QAAQ,UAAU,UAAU,WAAW;KACvC,MAAM,6BAA6B;MACjC,QAAQ;MACR;MACA;MACA;MACA,QAAQ;MACR;MACA;MACA;MACA;MACD,CAAC;KACF;KACA,MAAM,IAAI,OAAO,MAAM,GAAG;KAC1B;;;GAIJ,IAAI,QAAQ,aAAa,KAAK,EAAE;IAC9B;IACA,MAAM,IAAI,OAAO,MAAM,GAAG;IAC1B;;GAGF,MAAM,SAAS,QAAQ,MAAM;IAC3B;IACA;IACA;IACA;IACA,QAAQ,WAAW,MAAM,KAAK,OAAO,IAAI;IACzC,KAAK,WAAW,MAAM,KAAK,IAAI,IAAI;IACnC,OAAO,WAAW,MAAM,KAAK,MAAM,IAAI;IACvC;IACA,YAAY,WAAW,MAAM,KAAK,WAAW;IAC7C;IACA;IACA,WAAW;IACX,cAAc;IACd,OAAQ,SAAS,KAAA;IACjB,aAAa,QAAQ,cAAc;IACnC,gBAAgB,kBAAkB,KAAA;IAClC,mBAAmB,qBAAqB,KAAA;IACxC,YAAY,cAAc,KAAA;IAC1B,kBAAkB,oBAAoB,KAAA;IACtC,sBAAsB,wBAAwB,KAAA;IAC9C,kBAAkB,oBAAoB,KAAA;IACtC,eAAe,iBAAiB,KAAA;IAChC,cAAc,gBAAgB,KAAA;IAC9B,gBAAgB,kBAAkB,KAAA;IACnC,CAAC;GAGF,IAAI,OAAO,OAAO,IAAI;IACpB,QAAQ,UAAU,UAAU,OAAO,GAAG;IAEtC,MAAM,6BAA6B;KACjC,QAAQ,OAAO;KACf,MAAM,OAAO;KACb,UAAU,OAAO;KACjB,YAAY,OAAO;KACnB,QAAQ;KACR;KACA;KACA;KACA;KACD,CAAC;IAEF;UAEA;GAEF,MAAM,IAAI,OAAO,MAAM,GAAG;SACrB,KAAK,MAAM,cAAc,WAAW,MAAM,cAAc,aAAa,CAAC,cAAc,MAAM,MAAM,KAAK,EAAE;GAE5G;GACA,MAAM,IAAI,OAAO,MAAM,GAAG;SACrB,IAAI,MAAM,cAAc,UAAU;GAEvC;GACA,MAAM,IAAI,OAAO,MAAM,GAAG;SACrB,IAAI,MAAM,cAAc,UAAU;GAKvC;GACA,MAAM,IAAI,OAAO,MAAM,GAAG;;UAErB,KAAK;EAEZ,mBAAmB,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,EAAE;GACtE,WAAW;GACX,WAAW,UAAU,MAAM,aAAa;GACxC,SAAS,MAAM;GAChB,CAAC;;CAKN,OAAO;EAAE;EAAW;EAAS"}
|
|
1
|
+
{"version":3,"file":"wal-replay.js","names":[],"sources":["../../utils/wal-replay.ts"],"sourcesContent":["/**\n * WAL Replay Utilities\n *\n * Shared logic for replaying Write-Ahead Log entries to SQLite and LanceDB.\n * Used by both the ContextEngine compact() method and the before_compaction hook.\n */\n\nimport type { FactsDB } from \"../backends/facts-db.js\";\nimport type { VectorDB } from \"../backends/vector-db.js\";\nimport type { WriteAheadLog } from \"../backends/wal.js\";\nimport type { EmbeddingProvider } from \"../services/embeddings.js\";\nimport { capturePluginError } from \"../services/error-reporter.js\";\n\nexport interface WalReplayResult {\n committed: number;\n skipped: number;\n}\n\nfunction safeString(v: unknown): string | null {\n if (typeof v !== \"string\") return null;\n const t = v.trim();\n return t.length > 0 ? t : null;\n}\n\nfunction safeNumber(v: unknown): number | null {\n if (typeof v !== \"number\" || !Number.isFinite(v)) return null;\n return v;\n}\n\nfunction safeStringArray(v: unknown): string[] | null {\n if (!Array.isArray(v)) return null;\n const out = v.map((x) => (typeof x === \"string\" ? x.trim() : \"\")).filter((x) => x.length > 0);\n return out.length > 0 ? out : null;\n}\n\nconst VALID_WAL_SCOPES = new Set([\"global\", \"user\", \"agent\", \"session\"]);\n\nfunction safeScope(v: unknown): \"global\" | \"user\" | \"agent\" | \"session\" | null {\n const scope = safeString(v);\n if (!scope || !VALID_WAL_SCOPES.has(scope)) return null;\n return scope as \"global\" | \"user\" | \"agent\" | \"session\";\n}\n\nfunction isSafeWalText(v: unknown): v is string {\n return safeString(v) !== null;\n}\n\n/**\n * Returns a diagnostic message if a WAL entry has a non-global scope but no scopeTarget,\n * or null if the entry is valid and safe to replay.\n *\n * A non-global scope without a scopeTarget cannot be replayed safely because FactsDB.store()\n * requires scopeTarget for scoped facts. Storing without one would silently fall back to\n * global scope, which is the bug described in issue #1574.\n */\nfunction invalidScopeMessage(\n entryId: string,\n operation: string,\n scope: \"global\" | \"user\" | \"agent\" | \"session\" | null,\n scopeTarget: string | null,\n): string | null {\n if (scope && scope !== \"global\" && !scopeTarget) {\n return `WAL replay skipped \"${operation}\" entry ${entryId}: scope=\"${scope}\" but scopeTarget is missing; refusing to globalize a scoped fact.`;\n }\n return null;\n}\n\nfunction findExistingFactIdForWal(factsDb: FactsDB, text: string, source: string | null): string | null {\n try {\n const src = source?.trim() || \"conversation\";\n const row = factsDb\n .getRawDb()\n .prepare(\n \"SELECT id FROM facts WHERE text = ? AND source = ? AND superseded_at IS NULL ORDER BY created_at DESC LIMIT 1\",\n )\n .get(text, src) as { id: string } | undefined;\n return row?.id ?? null;\n } catch {\n return null;\n }\n}\n\nfunction hasReplayDuplicateForWal(factsDb: FactsDB, text: string, source: string | null): boolean {\n try {\n return factsDb.hasDuplicate(text, source?.trim() || \"conversation\");\n } catch {\n return false;\n }\n}\n\nasync function ensureVectorAndEmbeddingMeta(opts: {\n factId: string;\n text: string;\n category: string;\n importance: number;\n vector: number[] | null;\n embeddingModelName?: string | null;\n vectorDb?: VectorDB;\n embeddings?: EmbeddingProvider | null;\n factsDb: FactsDB;\n}): Promise<void> {\n const { factId, text, category, importance, vector, embeddingModelName, vectorDb, embeddings, factsDb } = opts;\n if (!vectorDb) return;\n\n const embedAndStore = async (): Promise<number[] | null> => {\n if (!embeddings) return null;\n try {\n const v = await embeddings.embed(text);\n await vectorDb.store({\n id: factId,\n text,\n vector: Array.from(v),\n importance,\n category,\n });\n if (embeddings.modelName) {\n factsDb.setEmbeddingModel(factId, embeddings.modelName);\n factsDb.storeEmbedding(factId, embeddings.modelName, \"canonical\", new Float32Array(v), v.length);\n }\n return Array.from(v);\n } catch {\n return null;\n }\n };\n\n try {\n if (vector && vector.length > 0) {\n await vectorDb.store({\n id: factId,\n text,\n vector,\n importance,\n category,\n });\n const effectiveModel = embeddingModelName ?? embeddings?.modelName;\n if (effectiveModel) {\n try {\n factsDb.setEmbeddingModel(factId, effectiveModel);\n factsDb.storeEmbedding(factId, effectiveModel, \"canonical\", new Float32Array(vector), vector.length);\n } catch (err) {\n capturePluginError(err instanceof Error ? err : new Error(String(err)), {\n subsystem: \"wal-replay\",\n operation: \"store-embedding-metadata\",\n factId,\n });\n }\n }\n return;\n }\n } catch {\n // Non-fatal: fall back to re-embed if possible.\n }\n\n await embedAndStore();\n}\n\n/**\n * Replay all pending WAL entries to the facts database and optionally to the vector database.\n *\n * @param wal - Write-Ahead Log instance\n * @param factsDb - Facts database for storing entries\n * @param vectorDb - Optional vector database for storing embeddings\n * @param embeddings - Optional embedding provider for generating vectors\n * @param logger - Optional logger for operator-visible diagnostics (e.g. skipped WAL entries)\n * @returns Object with committed and skipped counts\n */\nexport async function replayWalEntries(\n wal: WriteAheadLog,\n factsDb: FactsDB,\n vectorDb?: VectorDB,\n embeddings?: EmbeddingProvider | null,\n logger?: { warn?: (msg: string) => void },\n): Promise<WalReplayResult> {\n let committed = 0;\n let skipped = 0;\n\n // Only replay entries within the WAL's maxAge window.\n // Older entries are handled by WAL prune routines and should not be resurrected.\n const walEntries = await wal.getValidEntries();\n const nowSec = Math.floor(Date.now() / 1000);\n\n for (const entry of walEntries) {\n try {\n // Skip diagnostic probe entries (e.g., doctor command durability tests).\n if (entry.data?.probe) {\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n if (entry.operation === \"store\" && isSafeWalText(entry.data?.text)) {\n const text = safeString(entry.data.text);\n if (!text) continue;\n const source = safeString(entry.data.source) ?? \"conversation\";\n const category = (safeString(entry.data.category) ?? \"other\") as import(\"../config.js\").MemoryCategory;\n const importance = safeNumber(entry.data.importance) ?? 0.5;\n const why = safeString(entry.data.why);\n const scope = safeScope(entry.data.scope);\n const scopeTarget = safeString(entry.data.scopeTarget);\n const summary = safeString(entry.data.summary);\n const tags = safeStringArray(entry.data.tags) ?? undefined;\n const decayFreezeUntil = safeNumber(entry.data.decayFreezeUntil);\n const preserveUntil = safeNumber(entry.data.preserveUntil);\n const preserveTags = safeStringArray(entry.data.preserveTags);\n const provenanceSession = safeString(entry.data.provenanceSession);\n const sourceTurn = safeNumber(entry.data.sourceTurn);\n const extractionMethod = safeString(entry.data.extractionMethod);\n const extractionConfidence = safeNumber(entry.data.extractionConfidence);\n const provenanceJson = safeString(entry.data.provenanceJson);\n const sourceSessions = safeString(entry.data.sourceSessions);\n\n const precomputedVector = Array.isArray(entry.data.vector)\n ? (entry.data.vector as number[]).filter((n) => typeof n === \"number\" && Number.isFinite(n))\n : null;\n const embeddingModelName = safeString(entry.data.embeddingModelName);\n\n // Guard: a non-global scope without a scopeTarget cannot be safely replayed — storing it\n // would silently change the intended scope to global (issue #1574). Skip with a diagnostic\n // so that scoped facts are never accidentally promoted to global during crash recovery.\n const storeInvalidMsg = invalidScopeMessage(entry.id, \"store\", scope, scopeTarget);\n if (storeInvalidMsg) {\n capturePluginError(new Error(storeInvalidMsg), {\n subsystem: \"wal-replay\",\n operation: \"replay-store\",\n severity: \"warning\",\n entryId: entry.id,\n scope,\n });\n logger?.warn?.(`memory-hybrid: ${storeInvalidMsg}`);\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n // Idempotent replay: if the fact already exists, still ensure vector/embedding metadata.\n const existingId = findExistingFactIdForWal(factsDb, text, source);\n if (existingId) {\n await ensureVectorAndEmbeddingMeta({\n factId: existingId,\n text,\n category,\n importance,\n vector: precomputedVector,\n embeddingModelName,\n vectorDb,\n embeddings,\n factsDb,\n });\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n // Store-side dedupe can resolve this WAL write via hash/lexical/vector policy\n // without creating an exact text+source row. If that already happened before\n // a crash but before WAL removal, replay must not call store() again: boost\n // and merge dedupe actions are not idempotent.\n if (hasReplayDuplicateForWal(factsDb, text, source)) {\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n const stored = factsDb.store({\n text,\n why,\n category,\n importance,\n entity: safeString(entry.data.entity) ?? null,\n key: safeString(entry.data.key) ?? null,\n value: safeString(entry.data.value) ?? null,\n source,\n decayClass: safeString(entry.data.decayClass) as import(\"../config.js\").DecayClass | undefined,\n summary,\n tags,\n scope: (scope ?? undefined) as \"global\" | \"user\" | \"agent\" | \"session\" | undefined,\n scopeTarget: scope ? scopeTarget : null,\n sourceSessions: sourceSessions ?? undefined,\n provenanceSession: provenanceSession ?? undefined,\n sourceTurn: sourceTurn ?? undefined,\n extractionMethod: extractionMethod ?? undefined,\n extractionConfidence: extractionConfidence ?? undefined,\n decayFreezeUntil: decayFreezeUntil ?? undefined,\n preserveUntil: preserveUntil ?? undefined,\n preserveTags: preserveTags ?? undefined,\n provenanceJson: provenanceJson ?? undefined,\n });\n\n // Skip vector operations if the store was rejected (artifact text)\n if (stored.id !== \"\") {\n await ensureVectorAndEmbeddingMeta({\n factId: stored.id,\n text: stored.text,\n category: stored.category,\n importance: stored.importance,\n vector: precomputedVector,\n embeddingModelName,\n vectorDb,\n embeddings,\n factsDb,\n });\n committed++;\n } else {\n skipped++;\n }\n await wal.remove(entry.id);\n } else if (entry.operation === \"update\" && entry.targetId && isSafeWalText(entry.data?.text)) {\n const targetId = entry.targetId;\n const text = safeString(entry.data.text);\n if (!text) continue;\n const source = safeString(entry.data.source) ?? \"conversation\";\n const category = (safeString(entry.data.category) ?? \"other\") as import(\"../config.js\").MemoryCategory;\n const importance = safeNumber(entry.data.importance) ?? 0.5;\n const why = safeString(entry.data.why);\n const scope = safeScope(entry.data.scope);\n const scopeTarget = safeString(entry.data.scopeTarget);\n const summary = safeString(entry.data.summary);\n const tags = safeStringArray(entry.data.tags) ?? undefined;\n const decayFreezeUntil = safeNumber(entry.data.decayFreezeUntil);\n const preserveUntil = safeNumber(entry.data.preserveUntil);\n const preserveTags = safeStringArray(entry.data.preserveTags);\n const provenanceSession = safeString(entry.data.provenanceSession);\n const sourceTurn = safeNumber(entry.data.sourceTurn);\n const extractionMethod = safeString(entry.data.extractionMethod);\n const extractionConfidence = safeNumber(entry.data.extractionConfidence);\n const provenanceJson = safeString(entry.data.provenanceJson);\n const sourceSessions = safeString(entry.data.sourceSessions);\n\n const precomputedVector = Array.isArray(entry.data.vector)\n ? (entry.data.vector as number[]).filter((n) => typeof n === \"number\" && Number.isFinite(n))\n : null;\n const embeddingModelName = safeString(entry.data.embeddingModelName);\n\n // Guard: same as \"store\" path — do not replay a non-global scoped update without a scopeTarget.\n const updateInvalidMsg = invalidScopeMessage(entry.id, \"update\", scope, scopeTarget);\n if (updateInvalidMsg) {\n capturePluginError(new Error(updateInvalidMsg), {\n subsystem: \"wal-replay\",\n operation: \"replay-update\",\n severity: \"warning\",\n entryId: entry.id,\n scope,\n });\n logger?.warn?.(`memory-hybrid: ${updateInvalidMsg}`);\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n const target = factsDb.getById(targetId);\n if (!target) {\n // Target fact already gone — nothing safe to replay.\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n // Idempotent replay: if the exact intended replacement already exists, ensure vector metadata.\n const existingId = findExistingFactIdForWal(factsDb, text, source);\n if (existingId && existingId !== targetId) {\n const existing = factsDb.getById(existingId);\n if (existing?.supersedesId === targetId) {\n factsDb.supersede(targetId, existingId);\n await ensureVectorAndEmbeddingMeta({\n factId: existingId,\n text,\n category,\n importance,\n vector: precomputedVector,\n embeddingModelName,\n vectorDb,\n embeddings,\n factsDb,\n });\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n }\n\n if (factsDb.hasDuplicate(text)) {\n skipped++;\n await wal.remove(entry.id);\n continue;\n }\n\n const stored = factsDb.store({\n text,\n why,\n category,\n importance,\n entity: safeString(entry.data.entity) ?? null,\n key: safeString(entry.data.key) ?? null,\n value: safeString(entry.data.value) ?? null,\n source,\n decayClass: safeString(entry.data.decayClass) as import(\"../config.js\").DecayClass | undefined,\n summary,\n tags,\n validFrom: nowSec,\n supersedesId: targetId,\n scope: (scope ?? undefined) as \"global\" | \"user\" | \"agent\" | \"session\" | undefined,\n scopeTarget: scope ? scopeTarget : null,\n sourceSessions: sourceSessions ?? undefined,\n provenanceSession: provenanceSession ?? undefined,\n sourceTurn: sourceTurn ?? undefined,\n extractionMethod: extractionMethod ?? undefined,\n extractionConfidence: extractionConfidence ?? undefined,\n decayFreezeUntil: decayFreezeUntil ?? undefined,\n preserveUntil: preserveUntil ?? undefined,\n preserveTags: preserveTags ?? undefined,\n provenanceJson: provenanceJson ?? undefined,\n });\n\n // Skip supersede and vector operations if store was rejected (artifact text)\n if (stored.id !== \"\") {\n factsDb.supersede(targetId, stored.id);\n\n await ensureVectorAndEmbeddingMeta({\n factId: stored.id,\n text: stored.text,\n category: stored.category,\n importance: stored.importance,\n vector: precomputedVector,\n embeddingModelName,\n vectorDb,\n embeddings,\n factsDb,\n });\n\n committed++;\n } else {\n skipped++;\n }\n await wal.remove(entry.id);\n } else if ((entry.operation === \"store\" || entry.operation === \"update\") && !isSafeWalText(entry.data?.text)) {\n // Empty or whitespace-only text cannot ever be replayed into FactsDB.\n skipped++;\n await wal.remove(entry.id);\n } else if (entry.operation === \"update\") {\n // Legacy UPDATE lines without targetId cannot be replayed safely.\n skipped++;\n await wal.remove(entry.id);\n } else if (entry.operation === \"delete\") {\n // Delete WAL entries cannot be reliably replayed: the WAL data structure stores\n // text content in data.text, not the target fact UUID. Replaying would pass the\n // memory text as a UUID, causing an \"Invalid UUID format\" error (see issue #334).\n // Skip and remove to prevent unbounded WAL growth.\n skipped++;\n await wal.remove(entry.id);\n }\n } catch (err) {\n // Non-fatal: log the failure (with entry id + operation for diagnostics) and continue\n capturePluginError(err instanceof Error ? err : new Error(String(err)), {\n subsystem: \"wal-replay\",\n operation: `replay-${entry.operation ?? \"unknown\"}`,\n entryId: entry.id,\n });\n // Leave the entry in the WAL so it can be retried (or pruned as stale).\n }\n }\n\n return { committed, skipped };\n}\n"],"mappings":"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"}
|
package/dist/versionInfo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionInfo.js","names":[],"sources":["../versionInfo.ts"],"sourcesContent":["/**\n * Memory Manager version metadata — single source for upgrades and releases.\n * Plugin version is read from package.json; memory-manager and schema versions\n * are defined here and aligned with docs (hybrid-memory-manager-v3.md) and DB.\n *\n * The version is resolved via the plugin-root walk-up helper so it works\n * regardless of whether the runtime entry is the TS source or the compiled\n * `dist/index.js` (issue #1174).\n */\n\nimport { readPluginPackageJson } from \"./utils/plugin-root.js\";\n\nconst pkg = readPluginPackageJson(import.meta.url);\n\n/** Plugin release version (from package.json). Bump on each release. */\nconst pluginVersion: string = pkg.version;\n\n/** Memory Manager spec version — matches docs/hybrid-memory-manager-v3.md \"Version: X.Y\". */\nconst memoryManagerVersion = \"3.0\";\n\n/** Schema version for SQLite/LanceDB. Bump when adding migrations or breaking schema changes. */\nconst schemaVersion = 3;\n\nexport const versionInfo = {\n pluginVersion,\n memoryManagerVersion,\n schemaVersion,\n} as const;\n"],"mappings":";AAuBA,MAAa,cAAc;CACzB,eAZU,sBAAsB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"versionInfo.js","names":[],"sources":["../versionInfo.ts"],"sourcesContent":["/**\n * Memory Manager version metadata — single source for upgrades and releases.\n * Plugin version is read from package.json; memory-manager and schema versions\n * are defined here and aligned with docs (hybrid-memory-manager-v3.md) and DB.\n *\n * The version is resolved via the plugin-root walk-up helper so it works\n * regardless of whether the runtime entry is the TS source or the compiled\n * `dist/index.js` (issue #1174).\n */\n\nimport { readPluginPackageJson } from \"./utils/plugin-root.js\";\n\nconst pkg = readPluginPackageJson(import.meta.url);\n\n/** Plugin release version (from package.json). Bump on each release. */\nconst pluginVersion: string = pkg.version;\n\n/** Memory Manager spec version — matches docs/hybrid-memory-manager-v3.md \"Version: X.Y\". */\nconst memoryManagerVersion = \"3.0\";\n\n/** Schema version for SQLite/LanceDB. Bump when adding migrations or breaking schema changes. */\nconst schemaVersion = 3;\n\nexport const versionInfo = {\n pluginVersion,\n memoryManagerVersion,\n schemaVersion,\n} as const;\n"],"mappings":";AAuBA,MAAa,cAAc;CACzB,eAZU,sBAAsB,OAAO,KAAK,GAGd,EAAE;CAUhC;CACA;AACF"}
|
package/index.ts
CHANGED
package/lifecycle/hooks.ts
CHANGED
|
@@ -10,7 +10,6 @@ import { homedir } from "node:os";
|
|
|
10
10
|
import { isAbsolute, join } from "node:path";
|
|
11
11
|
import type { ClawdbotPluginApi } from "openclaw/plugin-sdk/core";
|
|
12
12
|
import { getCronModelConfig, getDefaultCronModel } from "../config/index.js";
|
|
13
|
-
import "../config.js";
|
|
14
13
|
import { isAbortOrTransientLlmError } from "../services/chat.js";
|
|
15
14
|
import { capturePluginError } from "../services/error-reporter.js";
|
|
16
15
|
import { buildDailyNarrative } from "../src/worker/narratives.js";
|